From 07b4a53211ad7882bd334206c7b5e597d4a262b3 Mon Sep 17 00:00:00 2001 From: lanhu Date: Sat, 28 Mar 2015 17:49:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[CHG]=20=E4=BF=AE=E6=94=B9=E6=96=B0?= =?UTF-8?q?=E7=89=88=E5=8F=91=E5=B8=83=E5=9C=B0=E5=9D=80=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE.txt | 21 - README | 6 - README.md | 35 +- TeamTalk/DDAppDelegate.h | 19 - TeamTalk/DDAppDelegate.m | 158 - .../IOSDuoduo Tests-Info.plist | 22 - .../IOSDuoduo Tests-Prefix.pch | 10 - TeamTalk/IOSDuoduo Tests/IOSDuoduo_Tests.m | 34 - .../en.lproj/InfoPlist.strings | 2 - .../IOSDuoduo/Category/NSDate+DDAddition.h | 14 - .../IOSDuoduo/Category/NSDate+DDAddition.m | 151 - .../IOSDuoduo/Category/NSDictionary+JSON.h | 16 - .../IOSDuoduo/Category/NSDictionary+JSON.m | 25 - .../IOSDuoduo/Category/NSDictionary+Safe.h | 34 - .../IOSDuoduo/Category/NSDictionary+Safe.m | 98 - .../Category/NSIndexSet+AQIndexesOutsideSet.h | 13 - .../Category/NSIndexSet+AQIndexesOutsideSet.m | 22 - .../Category/NSIndexSet+AQIsSetContiguous.h | 14 - .../Category/NSIndexSet+AQIsSetContiguous.m | 18 - .../IOSDuoduo/Category/NSString+Additions.h | 22 - .../IOSDuoduo/Category/NSString+Additions.m | 124 - TeamTalk/IOSDuoduo/Category/NSString+DDPath.h | 13 - TeamTalk/IOSDuoduo/Category/NSString+DDPath.m | 29 - .../Category/NSString+JSMessagesView.h | 36 - .../Category/NSString+JSMessagesView.m | 43 - .../Category/UIButton+JSMessagesView.h | 15 - .../Category/UIButton+JSMessagesView.m | 57 - .../IOSDuoduo/Category/UIColor+AQGridView.h | 44 - .../IOSDuoduo/Category/UIColor+AQGridView.m | 46 - .../Category/UIColor+JSMessagesView.h | 36 - .../Category/UIColor+JSMessagesView.m | 48 - .../Category/UIImage+JSMessagesView.h | 81 - .../Category/UIImage+JSMessagesView.m | 242 - .../UIView+AnimationOptionsForCurve.h | 35 - .../UIView+AnimationOptionsForCurve.m | 53 - .../IOSDuoduo/Category/UIView+DDAddition.h | 99 - .../IOSDuoduo/Category/UIView+DDAddition.m | 226 - TeamTalk/IOSDuoduo/DDCONSTANT.h | 43 - TeamTalk/IOSDuoduo/DDSearch.h | 18 - TeamTalk/IOSDuoduo/DDSearch.m | 258 - TeamTalk/IOSDuoduo/Entity/DDBaseEntity.h | 14 - TeamTalk/IOSDuoduo/Entity/DDBaseEntity.m | 13 - TeamTalk/IOSDuoduo/Entity/DDGroupEntity.h | 36 - TeamTalk/IOSDuoduo/Entity/DDGroupEntity.m | 105 - TeamTalk/IOSDuoduo/Entity/DDMessageEntity.h | 74 - TeamTalk/IOSDuoduo/Entity/DDMessageEntity.m | 224 - TeamTalk/IOSDuoduo/Entity/DDSessionEntity.h | 41 - TeamTalk/IOSDuoduo/Entity/DDSessionEntity.m | 148 - TeamTalk/IOSDuoduo/Entity/DDUserEntity.h | 37 - TeamTalk/IOSDuoduo/Entity/DDUserEntity.m | 152 - TeamTalk/IOSDuoduo/IMBaseDefine.pb.h | 1426 --- TeamTalk/IOSDuoduo/IMBaseDefine.pb.m | 6317 ---------- TeamTalk/IOSDuoduo/IMClient2ServBase.pb.h | 2349 ---- TeamTalk/IOSDuoduo/IMClient2ServBase.pb.m | 10252 ---------------- TeamTalk/IOSDuoduo/IMClient2ServFile.pb.h | 1352 -- TeamTalk/IOSDuoduo/IMClient2ServFile.pb.m | 5868 --------- TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.h | 1055 -- TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.m | 4551 ------- .../AppIcon.appiconset/29px@1x.png | Bin 2461 -> 0 bytes .../AppIcon.appiconset/29px@2x.png | Bin 4280 -> 0 bytes .../AppIcon.appiconset/40px@2x.png | Bin 5214 -> 0 bytes .../AppIcon.appiconset/57px@1x.png | Bin 4083 -> 0 bytes .../AppIcon.appiconset/57px@2x.png | Bin 7940 -> 0 bytes .../AppIcon.appiconset/60px@2x.png | Bin 7450 -> 0 bytes .../AppIcon.appiconset/Contents.json | 49 - .../Find/openSource.imageset/Contents.json | 22 - .../Find/openSource.imageset/logo.png | Bin 2144 -> 0 bytes .../Find/openSource.imageset/logo@2x.png | Bin 3412 -> 0 bytes .../Find/wifi.imageset/Contents.json | 22 - .../Find/wifi.imageset/wifi.png | Bin 2201 -> 0 bytes .../Find/wifi.imageset/wifi@2x.png | Bin 4353 -> 0 bytes .../LaunchImage-2.launchimage/Contents.json | 37 - .../LaunchImage.launchimage/Contents.json | 47 - .../LaunchImage.launchimage/Default-1.png | Bin 304403 -> 0 bytes .../Default-568h@2x-1.png | Bin 1092383 -> 0 bytes .../Default-568h@2x.png | Bin 1092383 -> 0 bytes .../LaunchImage.launchimage/Default.png | Bin 304403 -> 0 bytes .../LaunchImage.launchimage/Default@2x-1.png | Bin 942363 -> 0 bytes .../contacts.imageset/Contents.json | 22 - .../navigation/contacts.imageset/user.png | Bin 1149 -> 0 bytes .../navigation/contacts.imageset/user@2x.png | Bin 1379 -> 0 bytes .../Contents.json | 22 - .../navigation_bar_background-1.png | Bin 1802 -> 0 bytes .../navigation_bar_background.jpg | Bin 1802 -> 0 bytes .../navigation_bar_background.png | Bin 1802 -> 0 bytes .../navigation_bar_background@2x.jpg | Bin 2213 -> 0 bytes .../navigation_bar_background@2x.png | Bin 2213 -> 0 bytes .../Contents.json | 22 - .../navigation_background_64.png | Bin 14496 -> 0 bytes .../navigation_background_64@2x.png | Bin 47172 -> 0 bytes .../navigationbar_back.imageset/Contents.json | 22 - .../btn_navigationbar_back.png | Bin 1288 -> 0 bytes .../btn_navigationbar_back@2x.png | Bin 1092 -> 0 bytes .../Contents.json | 22 - .../contact_tabbar_selected.png | Bin 1869 -> 0 bytes .../contact_tabbar_selected@2x.png | Bin 3069 -> 0 bytes .../tabBar_finder.imageset/Contents.json | 22 - .../tabbar/tabBar_finder.imageset/nav1.png | Bin 1558 -> 0 bytes .../tabbar/tabBar_finder.imageset/nav1@2x.png | Bin 2361 -> 0 bytes .../Contents.json | 22 - .../nav_active1.png | Bin 1548 -> 0 bytes .../nav_active1@2x.png | Bin 2331 -> 0 bytes .../user_placeholder.imageset/Contents.json | 22 - .../user_placeholder.imageset/avatar.png | Bin 3647 -> 0 bytes .../user_placeholder.imageset/avatar_50.png | Bin 2391 -> 0 bytes TeamTalk/IOSDuoduo/MD5.h | 20 - TeamTalk/IOSDuoduo/MD5.m | 59 - TeamTalk/IOSDuoduo/Module/DDGroupModule.h | 24 - TeamTalk/IOSDuoduo/Module/DDGroupModule.m | 211 - .../Module/DataBase/DDDatabaseUtil.h | 160 - .../Module/DataBase/DDDatabaseUtil.m | 763 -- TeamTalk/IOSDuoduo/Module/Http/DDAFClient.h | 16 - TeamTalk/IOSDuoduo/Module/Http/DDAFClient.m | 111 - .../IOSDuoduo/Module/Login/DDHttpServer.h | 26 - .../IOSDuoduo/Module/Login/DDHttpServer.m | 32 - .../IOSDuoduo/Module/Login/DDLoginServer.h | 15 - .../IOSDuoduo/Module/Login/DDLoginServer.m | 64 - TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.h | 22 - TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.m | 94 - TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.h | 16 - TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.m | 106 - .../IOSDuoduo/Module/Login/DDTokenManager.h | 28 - .../IOSDuoduo/Module/Login/DDTokenManager.m | 78 - .../Module/Messages/DDMessageModule.h | 33 - .../Module/Messages/DDMessageModule.m | 453 - .../Module/Messages/DDMessageSendManager.h | 44 - .../Module/Messages/DDMessageSendManager.m | 243 - .../Module/Messages/UnAckMessageManager.h | 22 - .../Module/Messages/UnAckMessageManager.m | 81 - .../IOSDuoduo/Module/Users/DDUserModule.h | 30 - .../IOSDuoduo/Module/Users/DDUserModule.m | 164 - TeamTalk/IOSDuoduo/SpellLibrary.h | 59 - TeamTalk/IOSDuoduo/SpellLibrary.m | 231 - .../IOSDuoduo/StateMaintance/DDClientState.h | 118 - .../IOSDuoduo/StateMaintance/DDClientState.m | 75 - .../DDClientStateMaintenanceManager.h | 19 - .../DDClientStateMaintenanceManager.m | 302 - .../SundriesCenter/DDNotificationHelp.h | 47 - .../SundriesCenter/DDNotificationHelp.m | 47 - .../SundriesCenter/DDSundriesCenter.h | 22 - .../SundriesCenter/DDSundriesCenter.m | 54 - TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.h | 70 - TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.m | 230 - .../IOSDuoduo/TCPAPI/DDAPIScheduleProtocol.h | 64 - .../TCPAPI/DDAPIUnrequestScheduleProtocol.h | 34 - .../IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.h | 16 - .../IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m | 133 - TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.m | 137 - TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.h | 16 - TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.m | 142 - TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.h | 46 - TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.m | 119 - .../IOSDuoduo/TCPAPI/DDDataOutputStream.h | 38 - .../IOSDuoduo/TCPAPI/DDDataOutputStream.m | 84 - .../TCPAPI/DDDeleteMemberFromGroupAPI.h | 15 - .../TCPAPI/DDDeleteMemberFromGroupAPI.m | 133 - TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.m | 120 - TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.m | 128 - TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.m | 125 - .../IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.h | 13 - .../IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.m | 94 - .../TCPAPI/DDGroupMsgReceivedACKAPI.h | 13 - .../TCPAPI/DDGroupMsgReceivedACKAPI.m | 13 - .../TCPAPI/DDGroupsUnreadMessageAPI.h | 16 - .../TCPAPI/DDGroupsUnreadMessageAPI.m | 176 - TeamTalk/IOSDuoduo/TCPAPI/DDReachability.h | 109 - TeamTalk/IOSDuoduo/TCPAPI/DDReachability.m | 527 - .../TCPAPI/DDReceiveFixedGroupMemberChanged.h | 13 - .../TCPAPI/DDReceiveFixedGroupMemberChanged.m | 67 - .../TCPAPI/DDReceiveGroupAddMemberAPI.h | 13 - .../TCPAPI/DDReceiveGroupAddMemberAPI.m | 74 - TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.m | 127 - TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.h | 30 - TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.m | 56 - TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.h | 37 - TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.m | 60 - .../IOSDuoduo/TCPAPI/DDTcpClientManager.h | 33 - .../IOSDuoduo/TCPAPI/DDTcpClientManager.m | 321 - .../IOSDuoduo/TCPAPI/DDTcpProtocolHeader.h | 112 - .../IOSDuoduo/TCPAPI/DDTcpProtocolHeader.m | 13 - .../TCPAPI/DDUnreadMessageGroupAPI.h | 16 - .../TCPAPI/DDUnreadMessageGroupAPI.m | 109 - .../IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.h | 21 - .../IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.m | 25 - .../IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.h | 13 - .../IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.m | 142 - TeamTalk/IOSDuoduo/TCPAPI/DDepartment.h | 20 - TeamTalk/IOSDuoduo/TCPAPI/DDepartment.m | 39 - .../TCPAPI/DataOutputStream+Addition.h | 13 - .../TCPAPI/DataOutputStream+Addition.m | 19 - TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.h | 13 - TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.m | 59 - .../TCPAPI/NSStream+NSStreamAddition.h | 27 - .../TCPAPI/NSStream+NSStreamAddition.m | 84 - .../TCPAPI/RequestAPI/Login/DDHeartbeatAPI.h | 13 - .../TCPAPI/RequestAPI/Login/DDHeartbeatAPI.m | 88 - .../TCPAPI/RequestAPI/Login/DDLoginAPI.h | 12 - .../TCPAPI/RequestAPI/Login/DDLoginAPI.m | 146 - .../RequestAPI/Login/DDMsgServerIPAPI.h | 13 - .../RequestAPI/Login/DDMsgServerIPAPI.m | 105 - .../Msg/DDGetUnreadMessageUsersAPI.h | 13 - .../Msg/DDGetUnreadMessageUsersAPI.m | 106 - .../Msg/DDGetUserUnreadMessagesAPI.h | 13 - .../Msg/DDGetUserUnreadMessagesAPI.m | 193 - .../TCPAPI/RequestAPI/Msg/DDSendMessageAPI.h | 16 - .../TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m | 113 - .../RequestAPI/Msg/DDSendMessageReadACKAPI.h | 13 - .../RequestAPI/Msg/DDSendMessageReadACKAPI.m | 95 - .../RequestAPI/Msg/DDSendPhotoMessageAPI.h | 14 - .../RequestAPI/Msg/DDSendPhotoMessageAPI.m | 140 - .../RequestAPI/Msg/DDSendVoiceMessageAPI.h | 13 - .../RequestAPI/Msg/DDSendVoiceMessageAPI.m | 119 - .../RequestAPI/Users/DDAllotServiceAPI.h | 13 - .../RequestAPI/Users/DDAllotServiceAPI.m | 85 - .../RequestAPI/Users/DDGetUserInfoAPI.h | 13 - .../RequestAPI/Users/DDGetUserInfoAPI.m | 107 - .../TCPAPI/RequestAPI/Users/GetGroupInfoAPi.h | 13 - .../TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m | 104 - .../RequestAPI/Users/RecentConactsAPI.h | 12 - .../RequestAPI/Users/RecentConactsAPI.m | 89 - .../IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.h | 13 - .../IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.m | 106 - .../UnrequestAPI/Kickoff/ReceiveKickoffAPI.h | 13 - .../UnrequestAPI/Kickoff/ReceiveKickoffAPI.m | 41 - .../UnrequestAPI/Msg/DDReceiveMessageACKAPI.h | 13 - .../UnrequestAPI/Msg/DDReceiveMessageACKAPI.m | 63 - .../UnrequestAPI/Msg/DDReceiveMessageAPI.h | 13 - .../UnrequestAPI/Msg/DDReceiveMessageAPI.m | 35 - TeamTalk/IOSDuoduo/TeamTalk-Prefix.pch | 21 - .../ThridFramework/AQ/AQGridView+CellLayout.h | 50 - .../AQ/AQGridView+CellLocationDelegation.h | 42 - .../IOSDuoduo/ThridFramework/AQ/AQGridView.h | 272 - .../IOSDuoduo/ThridFramework/AQ/AQGridView.m | 2197 ---- .../AQ/AQGridViewAnimatorItem.h | 22 - .../AQ/AQGridViewAnimatorItem.m | 57 - .../AQ/AQGridViewCell+AQGridViewCellPrivate.h | 56 - .../ThridFramework/AQ/AQGridViewCell.h | 127 - .../ThridFramework/AQ/AQGridViewCell.m | 706 -- .../ThridFramework/AQ/AQGridViewController.h | 53 - .../ThridFramework/AQ/AQGridViewController.m | 177 - .../ThridFramework/AQ/AQGridViewData.h | 88 - .../ThridFramework/AQ/AQGridViewData.m | 252 - .../ThridFramework/AQ/AQGridViewUpdateInfo.h | 113 - .../ThridFramework/AQ/AQGridViewUpdateInfo.m | 915 -- .../ThridFramework/AQ/AQGridViewUpdateItem.h | 70 - .../ThridFramework/AQ/AQGridViewUpdateItem.m | 137 - .../ThridFramework/MW/MWCaptionView.h | 33 - .../ThridFramework/MW/MWCaptionView.m | 106 - .../IOSDuoduo/ThridFramework/MW/MWCommon.h | 12 - .../IOSDuoduo/ThridFramework/MW/MWGridCell.h | 24 - .../IOSDuoduo/ThridFramework/MW/MWGridCell.m | 223 - .../ThridFramework/MW/MWGridViewController.h | 19 - .../ThridFramework/MW/MWGridViewController.m | 205 - .../IOSDuoduo/ThridFramework/MW/MWPhoto.h | 32 - .../IOSDuoduo/ThridFramework/MW/MWPhoto.m | 219 - .../ThridFramework/MW/MWPhotoBrowser.h | 73 - .../ThridFramework/MW/MWPhotoBrowser.m | 1684 --- .../ThridFramework/MW/MWPhotoBrowserPrivate.h | 136 - .../ThridFramework/MW/MWPhotoProtocol.h | 64 - .../MW/MWTapDetectingImageView.h | 27 - .../MW/MWTapDetectingImageView.m | 68 - .../ThridFramework/MW/MWTapDetectingView.h | 27 - .../ThridFramework/MW/MWTapDetectingView.m | 61 - .../ThridFramework/MW/MWZoomingScrollView.h | 31 - .../ThridFramework/MW/MWZoomingScrollView.m | 411 - .../IOSDuoduo/ToRemove/JSDismissiveTextView.h | 68 - .../IOSDuoduo/ToRemove/JSDismissiveTextView.m | 187 - .../IOSDuoduo/ToRemove/JSMessageInputView.h | 76 - .../IOSDuoduo/ToRemove/JSMessageInputView.m | 248 - .../IOSDuoduo/ToRemove/JSMessageTextView.h | 46 - .../IOSDuoduo/ToRemove/JSMessageTextView.m | 188 - TeamTalk/IOSDuoduo/ToRemove/little_minus.png | Bin 15153 -> 0 bytes TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.h | 16 - TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.m | 74 - .../IOSDuoduo/VC/Chatting/AnalysisImage.h | 13 - .../IOSDuoduo/VC/Chatting/AnalysisImage.m | 43 - .../VC/Chatting/Cells/DDChatBaseCell.h | 39 - .../VC/Chatting/Cells/DDChatBaseCell.m | 260 - .../VC/Chatting/Cells/DDChatCellProtocol.h | 26 - .../VC/Chatting/Cells/DDChatImageCell.h | 20 - .../VC/Chatting/Cells/DDChatImageCell.m | 250 - .../Cells/DDChatImagePreviewViewController.h | 13 - .../Cells/DDChatImagePreviewViewController.m | 73 - .../VC/Chatting/Cells/DDChatTextCell.h | 15 - .../VC/Chatting/Cells/DDChatTextCell.m | 186 - .../VC/Chatting/Cells/DDChatTextCell.xib | 50 - .../VC/Chatting/Cells/DDChatVoiceCell.h | 25 - .../VC/Chatting/Cells/DDChatVoiceCell.m | 298 - .../VC/Chatting/Cells/DDPromptCell.h | 17 - .../VC/Chatting/Cells/DDPromptCell.m | 50 - .../VC/Chatting/ChatEditTableViewCell.h | 13 - .../VC/Chatting/ChatEditTableViewCell.m | 37 - .../ChatUtility/AlbumViewController.h | 14 - .../ChatUtility/AlbumViewController.m | 111 - .../VC/Chatting/ChatUtility/ChatUtilityItem.h | 14 - .../VC/Chatting/ChatUtility/ChatUtilityItem.m | 31 - .../ChatUtility/ChatUtilityViewController.h | 15 - .../ChatUtility/ChatUtilityViewController.m | 168 - .../ChatUtility/DDAlbumDetailsViewControll.h | 19 - .../ChatUtility/DDAlbumDetailsViewControll.m | 193 - .../VC/Chatting/ChatUtility/EmojiFaceView.h | 18 - .../VC/Chatting/ChatUtility/EmojiFaceView.m | 76 - .../VC/Chatting/ChatUtility/EmotionsModule.h | 17 - .../VC/Chatting/ChatUtility/EmotionsModule.m | 135 - .../ChatUtility/EmotionsViewController.h | 21 - .../ChatUtility/EmotionsViewController.m | 105 - .../VC/Chatting/ChatUtility/UtililyItemCell.h | 16 - .../VC/Chatting/ChatUtility/UtililyItemCell.m | 48 - .../VC/Chatting/ChattingEditModule.h | 16 - .../VC/Chatting/ChattingEditModule.m | 46 - .../VC/Chatting/ChattingMainViewController.h | 50 - .../VC/Chatting/ChattingMainViewController.m | 1268 -- .../Chatting/ChattingMainViewController.xib | 34 - .../IOSDuoduo/VC/Chatting/ChattingModule.h | 53 - .../IOSDuoduo/VC/Chatting/ChattingModule.m | 247 - .../IOSDuoduo/VC/Chatting/CommodityCell.h | 20 - .../IOSDuoduo/VC/Chatting/CommodityCell.m | 48 - .../IOSDuoduo/VC/Chatting/CommodityCell.xib | 78 - .../Chatting/DDChattingEditViewController.h | 18 - .../Chatting/DDChattingEditViewController.m | 213 - .../Chatting/DDChattingEditViewController.xib | 40 - .../VC/Chatting/DDPersonEditCollectionCell.h | 16 - .../VC/Chatting/DDPersonEditCollectionCell.m | 59 - .../IOSDuoduo/VC/Chatting/EditContactsCell.h | 13 - .../IOSDuoduo/VC/Chatting/EditContactsCell.m | 49 - .../IOSDuoduo/VC/Chatting/EditGroupViewCell.h | 18 - .../IOSDuoduo/VC/Chatting/EditGroupViewCell.m | 59 - .../VC/Chatting/EditGroupViewController.h | 20 - .../VC/Chatting/EditGroupViewController.m | 504 - .../VC/Chatting/EditGroupViewController.xib | 59 - .../IOSDuoduo/VC/Chatting/MenuImageView.h | 35 - .../IOSDuoduo/VC/Chatting/MenuImageView.m | 159 - .../IOSDuoduo/VC/Chatting/RecordingView.h | 24 - .../IOSDuoduo/VC/Chatting/RecordingView.m | 216 - .../VC/Chatting/TouchDownGestureRecognizer.h | 21 - .../VC/Chatting/TouchDownGestureRecognizer.m | 63 - .../VC/ClearImageCacheViewController.h | 14 - .../VC/ClearImageCacheViewController.m | 169 - .../VC/ClearImageCacheViewController.xib | 56 - TeamTalk/IOSDuoduo/VC/ClearImageCell.h | 19 - TeamTalk/IOSDuoduo/VC/ClearImageCell.m | 61 - TeamTalk/IOSDuoduo/VC/ContactAvatarTools.h | 20 - TeamTalk/IOSDuoduo/VC/ContactAvatarTools.m | 123 - TeamTalk/IOSDuoduo/VC/ContactsModule.h | 22 - TeamTalk/IOSDuoduo/VC/ContactsModule.m | 198 - .../IOSDuoduo/VC/ContactsViewController.h | 14 - .../IOSDuoduo/VC/ContactsViewController.m | 443 - TeamTalk/IOSDuoduo/VC/DDContactsCell.h | 17 - TeamTalk/IOSDuoduo/VC/DDContactsCell.m | 130 - TeamTalk/IOSDuoduo/VC/GroupAvatarImage.h | 13 - TeamTalk/IOSDuoduo/VC/GroupAvatarImage.m | 101 - TeamTalk/IOSDuoduo/VC/ImageGridViewCell.h | 53 - TeamTalk/IOSDuoduo/VC/ImageGridViewCell.m | 115 - .../VC/ImagesPreviewViewController.h | 13 - .../VC/ImagesPreviewViewController.m | 225 - TeamTalk/IOSDuoduo/VC/LoginModule.h | 35 - TeamTalk/IOSDuoduo/VC/LoginModule.m | 224 - TeamTalk/IOSDuoduo/VC/MainViewControll.h | 15 - TeamTalk/IOSDuoduo/VC/MainViewControll.m | 85 - TeamTalk/IOSDuoduo/VC/MainViewControll.xib | 24 - TeamTalk/IOSDuoduo/VC/MyProfileViewControll.h | 20 - TeamTalk/IOSDuoduo/VC/MyProfileViewControll.m | 87 - .../IOSDuoduo/VC/MyProfileViewControll.xib | 99 - TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.h | 16 - TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.m | 126 - TeamTalk/IOSDuoduo/VC/Photo.h | 16 - TeamTalk/IOSDuoduo/VC/Photo.m | 30 - TeamTalk/IOSDuoduo/VC/PhotosCache.h | 25 - TeamTalk/IOSDuoduo/VC/PhotosCache.m | 257 - .../IOSDuoduo/VC/PublicProfileViewControll.h | 13 - .../IOSDuoduo/VC/PublicProfileViewControll.m | 217 - .../VC/PublicProfileViewControll.xib | 78 - .../VC/RecentContacts/RecentUserCell.h | 27 - .../VC/RecentContacts/RecentUserCell.m | 300 - .../VC/RecentContacts/RecentUserCell.xib | 74 - .../VC/RecentContacts/RecentUserVCModule.h | 16 - .../VC/RecentContacts/RecentUserVCModule.m | 352 - .../RecentUsersViewController.h | 19 - .../RecentUsersViewController.m | 340 - .../RecentUsersViewController.xib | 36 - .../VC/SearchContentViewController.h | 13 - .../VC/SearchContentViewController.m | 186 - .../VC/SearchContentViewController.xib | 46 - TeamTalk/IOSDuoduo/VC/SettingViewController.h | 15 - TeamTalk/IOSDuoduo/VC/SettingViewController.m | 144 - .../IOSDuoduo/VC/SettingViewController.xib | 36 - TeamTalk/IOSDuoduo/VC/minus-sign.png | Bin 71041 -> 0 bytes TeamTalk/IOSDuoduo/Voice/Code/Libs/config.h | 168 - .../Voice/Code/Libs/libogg/bitwise.c | 857 -- .../Voice/Code/Libs/libogg/framing.c | 2093 ---- .../Voice/Code/Libs/libogg/ogg/ogg.h | 210 - .../Voice/Code/Libs/libogg/ogg/os_types.h | 147 - .../Voice/Code/Libs/libspeex/_kiss_fft_guts.h | 160 - .../IOSDuoduo/Voice/Code/Libs/libspeex/arch.h | 241 - .../IOSDuoduo/Voice/Code/Libs/libspeex/bits.c | 372 - .../Voice/Code/Libs/libspeex/buffer.c | 176 - .../Voice/Code/Libs/libspeex/cb_search.c | 612 - .../Voice/Code/Libs/libspeex/cb_search.h | 103 - .../Voice/Code/Libs/libspeex/cb_search_arm4.h | 137 - .../Voice/Code/Libs/libspeex/cb_search_bfin.h | 112 - .../Voice/Code/Libs/libspeex/cb_search_sse.h | 84 - .../Code/Libs/libspeex/exc_10_16_table.c | 50 - .../Code/Libs/libspeex/exc_10_32_table.c | 66 - .../Code/Libs/libspeex/exc_20_32_table.c | 66 - .../Code/Libs/libspeex/exc_5_256_table.c | 290 - .../Voice/Code/Libs/libspeex/exc_5_64_table.c | 98 - .../Code/Libs/libspeex/exc_8_128_table.c | 162 - .../Voice/Code/Libs/libspeex/fftwrap.c | 397 - .../Voice/Code/Libs/libspeex/fftwrap.h | 58 - .../Voice/Code/Libs/libspeex/filterbank.c | 227 - .../Voice/Code/Libs/libspeex/filterbank.h | 66 - .../Voice/Code/Libs/libspeex/filters.c | 821 -- .../Voice/Code/Libs/libspeex/filters.h | 90 - .../Voice/Code/Libs/libspeex/filters_arm4.h | 96 - .../Voice/Code/Libs/libspeex/filters_bfin.h | 515 - .../Voice/Code/Libs/libspeex/filters_sse.h | 336 - .../Voice/Code/Libs/libspeex/fixed_arm4.h | 148 - .../Voice/Code/Libs/libspeex/fixed_arm5e.h | 178 - .../Voice/Code/Libs/libspeex/fixed_bfin.h | 173 - .../Voice/Code/Libs/libspeex/fixed_debug.h | 487 - .../Voice/Code/Libs/libspeex/fixed_generic.h | 106 - .../Voice/Code/Libs/libspeex/gain_table.c | 160 - .../Voice/Code/Libs/libspeex/gain_table_lbr.c | 64 - .../Code/Libs/libspeex/hexc_10_32_table.c | 66 - .../Voice/Code/Libs/libspeex/hexc_table.c | 162 - .../Code/Libs/libspeex/high_lsp_tables.c | 163 - .../Voice/Code/Libs/libspeex/jitter.c | 843 -- .../Voice/Code/Libs/libspeex/kiss_fft.c | 523 - .../Voice/Code/Libs/libspeex/kiss_fft.h | 108 - .../Voice/Code/Libs/libspeex/kiss_fftr.c | 297 - .../Voice/Code/Libs/libspeex/kiss_fftr.h | 51 - .../IOSDuoduo/Voice/Code/Libs/libspeex/lpc.c | 201 - .../IOSDuoduo/Voice/Code/Libs/libspeex/lpc.h | 53 - .../Voice/Code/Libs/libspeex/lpc_bfin.h | 131 - .../IOSDuoduo/Voice/Code/Libs/libspeex/lsp.c | 656 - .../IOSDuoduo/Voice/Code/Libs/libspeex/lsp.h | 64 - .../Voice/Code/Libs/libspeex/lsp_bfin.h | 89 - .../Voice/Code/Libs/libspeex/lsp_tables_nb.c | 360 - .../IOSDuoduo/Voice/Code/Libs/libspeex/ltp.c | 839 -- .../IOSDuoduo/Voice/Code/Libs/libspeex/ltp.h | 141 - .../Voice/Code/Libs/libspeex/ltp_arm4.h | 187 - .../Voice/Code/Libs/libspeex/ltp_bfin.h | 419 - .../Voice/Code/Libs/libspeex/ltp_sse.h | 92 - .../Voice/Code/Libs/libspeex/math_approx.h | 332 - .../IOSDuoduo/Voice/Code/Libs/libspeex/mdf.c | 1285 -- .../Voice/Code/Libs/libspeex/misc_bfin.h | 54 - .../Voice/Code/Libs/libspeex/modes.c | 366 - .../Voice/Code/Libs/libspeex/modes.h | 161 - .../Voice/Code/Libs/libspeex/modes_wb.c | 300 - .../Voice/Code/Libs/libspeex/nb_celp.c | 1903 --- .../Voice/Code/Libs/libspeex/nb_celp.h | 203 - .../Voice/Code/Libs/libspeex/os_support.h | 169 - .../Voice/Code/Libs/libspeex/preprocess.c | 1219 -- .../Voice/Code/Libs/libspeex/pseudofloat.h | 379 - .../Voice/Code/Libs/libspeex/quant_lsp.c | 385 - .../Voice/Code/Libs/libspeex/quant_lsp.h | 74 - .../Voice/Code/Libs/libspeex/quant_lsp_bfin.h | 165 - .../Voice/Code/Libs/libspeex/resample.c | 1131 -- .../Voice/Code/Libs/libspeex/resample_sse.h | 128 - .../Voice/Code/Libs/libspeex/sb_celp.c | 1488 --- .../Voice/Code/Libs/libspeex/sb_celp.h | 155 - .../IOSDuoduo/Voice/Code/Libs/libspeex/scal.c | 289 - .../Voice/Code/Libs/libspeex/smallft.c | 1261 -- .../Voice/Code/Libs/libspeex/smallft.h | 46 - .../Voice/Code/Libs/libspeex/speex.c | 250 - .../Voice/Code/Libs/libspeex/speex/speex.h | 424 - .../Code/Libs/libspeex/speex/speex_bits.h | 174 - .../Code/Libs/libspeex/speex/speex_buffer.h | 68 - .../Libs/libspeex/speex/speex_callbacks.h | 134 - .../Libs/libspeex/speex/speex_config_types.h | 11 - .../libspeex/speex/speex_config_types.h.in | 11 - .../Code/Libs/libspeex/speex/speex_echo.h | 170 - .../Code/Libs/libspeex/speex/speex_header.h | 94 - .../Code/Libs/libspeex/speex/speex_jitter.h | 197 - .../Libs/libspeex/speex/speex_preprocess.h | 219 - .../Libs/libspeex/speex/speex_resampler.h | 340 - .../Code/Libs/libspeex/speex/speex_stereo.h | 91 - .../Code/Libs/libspeex/speex/speex_types.h | 126 - .../Code/Libs/libspeex/speex_callbacks.c | 144 - .../Voice/Code/Libs/libspeex/speex_header.c | 200 - .../Voice/Code/Libs/libspeex/stack_alloc.h | 115 - .../Voice/Code/Libs/libspeex/stereo.c | 296 - .../IOSDuoduo/Voice/Code/Libs/libspeex/vbr.c | 275 - .../IOSDuoduo/Voice/Code/Libs/libspeex/vbr.h | 70 - .../Voice/Code/Libs/libspeex/vorbis_psy.h | 97 - .../IOSDuoduo/Voice/Code/Libs/libspeex/vq.c | 147 - .../IOSDuoduo/Voice/Code/Libs/libspeex/vq.h | 54 - .../Voice/Code/Libs/libspeex/vq_arm4.h | 115 - .../Voice/Code/Libs/libspeex/vq_bfin.h | 107 - .../Voice/Code/Libs/libspeex/vq_sse.h | 120 - .../Voice/Code/Libs/libspeex/window.c | 102 - TeamTalk/IOSDuoduo/Voice/SpeexAllHeaders.h | 26 - TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.h | 96 - .../IOSDuoduo/Voice/manager/AQRecorder.mm | 224 - .../Voice/manager/Codec/SpeexAllHeaders.h | 26 - .../Voice/manager/Codec/SpeexCodec.h | 33 - .../Voice/manager/Codec/SpeexCodec.m | 101 - .../IOSDuoduo/Voice/manager/Decapsulator.h | 43 - .../IOSDuoduo/Voice/manager/Decapsulator.m | 211 - .../IOSDuoduo/Voice/manager/Encapsulator.h | 132 - .../IOSDuoduo/Voice/manager/Encapsulator.m | 338 - .../IOSDuoduo/Voice/manager/PlayerManager.h | 41 - .../IOSDuoduo/Voice/manager/PlayerManager.m | 280 - .../manager/PublicUtility/CADebugMacros.cpp | 88 - .../manager/PublicUtility/CADebugMacros.h | 604 - .../Voice/manager/PublicUtility/CAMath.h | 68 - .../CAStreamBasicDescription.cpp | 795 -- .../PublicUtility/CAStreamBasicDescription.h | 409 - .../manager/PublicUtility/CAXException.cpp | 49 - .../manager/PublicUtility/CAXException.h | 338 - .../Voice/manager/RawAudioDataPlayer.h | 40 - .../Voice/manager/RawAudioDataPlayer.m | 209 - .../IOSDuoduo/Voice/manager/RecorderManager.h | 51 - .../Voice/manager/RecorderManager.mm | 236 - TeamTalk/IOSDuoduo/XLog.h | 27 - TeamTalk/IOSDuoduo/std.h | 82 - TeamTalk/IOSDuoduo/std.m | 257 - TeamTalk/IOSDuoduoTests/IOSDuoduoTests.m | 34 - .../IOSDuoduoTests/TeamTalkTests-Info.plist | 22 - .../IOSDuoduoTests/en.lproj/InfoPlist.strings | 2 - .../AppIcon.appiconset/Contents.json | 23 - .../LaunchImage.launchimage/Contents.json | 23 - TeamTalk/LoginViewController.h | 19 - TeamTalk/LoginViewController.m | 141 - TeamTalk/LoginViewController.xib | 83 - TeamTalk/Podfile | 8 - TeamTalk/Podfile.lock | 54 - .../AFNetworking/AFHTTPRequestOperation.h | 67 - .../AFNetworking/AFHTTPRequestOperation.m | 206 - .../AFHTTPRequestOperationManager.h | 308 - .../AFHTTPRequestOperationManager.m | 253 - .../AFNetworking/AFHTTPSessionManager.h | 238 - .../AFNetworking/AFHTTPSessionManager.m | 339 - .../AFNetworkReachabilityManager.h | 199 - .../AFNetworkReachabilityManager.m | 253 - .../AFNetworking/AFNetworking/AFNetworking.h | 44 - .../AFNetworking/AFSecurityPolicy.h | 143 - .../AFNetworking/AFSecurityPolicy.m | 320 - .../AFNetworking/AFURLConnectionOperation.h | 328 - .../AFNetworking/AFURLConnectionOperation.m | 789 -- .../AFNetworking/AFURLRequestSerialization.h | 444 - .../AFNetworking/AFURLRequestSerialization.m | 1281 -- .../AFNetworking/AFURLResponseSerialization.h | 294 - .../AFNetworking/AFURLResponseSerialization.m | 779 -- .../AFNetworking/AFURLSessionManager.h | 529 - .../AFNetworking/AFURLSessionManager.m | 1005 -- TeamTalk/Pods/AFNetworking/LICENSE | 19 - TeamTalk/Pods/AFNetworking/README.md | 381 - .../AFNetworkActivityIndicatorManager.h | 76 - .../AFNetworkActivityIndicatorManager.m | 171 - .../UIActivityIndicatorView+AFNetworking.h | 64 - .../UIActivityIndicatorView+AFNetworking.m | 97 - .../UIAlertView+AFNetworking.h | 96 - .../UIAlertView+AFNetworking.m | 111 - .../UIButton+AFNetworking.h | 146 - .../UIButton+AFNetworking.m | 185 - .../UIImageView+AFNetworking.h | 143 - .../UIImageView+AFNetworking.m | 214 - .../UIKit+AFNetworking/UIKit+AFNetworking.h | 38 - .../UIProgressView+AFNetworking.h | 88 - .../UIProgressView+AFNetworking.m | 183 - .../UIRefreshControl+AFNetworking.h | 64 - .../UIRefreshControl+AFNetworking.m | 95 - .../UIWebView+AFNetworking.h | 83 - .../UIWebView+AFNetworking.m | 151 - .../AFNetworking/AFHTTPRequestOperation.h | 1 - .../AFHTTPRequestOperationManager.h | 1 - .../AFNetworking/AFHTTPSessionManager.h | 1 - .../AFNetworkActivityIndicatorManager.h | 1 - .../AFNetworkReachabilityManager.h | 1 - .../BuildHeaders/AFNetworking/AFNetworking.h | 1 - .../AFNetworking/AFSecurityPolicy.h | 1 - .../AFNetworking/AFURLConnectionOperation.h | 1 - .../AFNetworking/AFURLRequestSerialization.h | 1 - .../AFNetworking/AFURLResponseSerialization.h | 1 - .../AFNetworking/AFURLSessionManager.h | 1 - .../UIActivityIndicatorView+AFNetworking.h | 1 - .../AFNetworking/UIAlertView+AFNetworking.h | 1 - .../AFNetworking/UIButton+AFNetworking.h | 1 - .../AFNetworking/UIImageView+AFNetworking.h | 1 - .../AFNetworking/UIKit+AFNetworking.h | 1 - .../UIProgressView+AFNetworking.h | 1 - .../UIRefreshControl+AFNetworking.h | 1 - .../AFNetworking/UIWebView+AFNetworking.h | 1 - .../DACircularProgressView.h | 1 - TeamTalk/Pods/BuildHeaders/FMDB/FMDB.h | 1 - TeamTalk/Pods/BuildHeaders/FMDB/FMDatabase.h | 1 - .../BuildHeaders/FMDB/FMDatabaseAdditions.h | 1 - .../Pods/BuildHeaders/FMDB/FMDatabasePool.h | 1 - .../Pods/BuildHeaders/FMDB/FMDatabaseQueue.h | 1 - TeamTalk/Pods/BuildHeaders/FMDB/FMResultSet.h | 1 - .../HPGrowingTextView/HPGrowingTextView.h | 1 - .../HPGrowingTextView/HPTextViewInternal.h | 1 - .../MBProgressHUD/MBProgressHUD.h | 1 - .../NSIndexPath+PSTCollectionViewAdditions.h | 1 - .../PSTCollectionView/PSTCollectionView.h | 1 - .../PSTCollectionView/PSTCollectionViewCell.h | 1 - .../PSTCollectionViewCommon.h | 1 - .../PSTCollectionViewController.h | 1 - .../PSTCollectionView/PSTCollectionViewData.h | 1 - .../PSTCollectionViewFlowLayout.h | 1 - .../PSTCollectionViewItemKey.h | 1 - .../PSTCollectionViewLayout+Internals.h | 1 - .../PSTCollectionViewLayout.h | 1 - .../PSTCollectionViewUpdateItem.h | 1 - .../PSTCollectionView/PSTGridLayoutInfo.h | 1 - .../PSTCollectionView/PSTGridLayoutItem.h | 1 - .../PSTCollectionView/PSTGridLayoutRow.h | 1 - .../PSTCollectionView/PSTGridLayoutSection.h | 1 - .../SDWebImage/NSData+ImageContentType.h | 1 - .../BuildHeaders/SDWebImage/SDImageCache.h | 1 - .../SDWebImage/SDWebImageCompat.h | 1 - .../SDWebImage/SDWebImageDecoder.h | 1 - .../SDWebImage/SDWebImageDownloader.h | 1 - .../SDWebImageDownloaderOperation.h | 1 - .../SDWebImage/SDWebImageManager.h | 1 - .../SDWebImage/SDWebImageOperation.h | 1 - .../SDWebImage/SDWebImagePrefetcher.h | 1 - .../SDWebImage/UIButton+WebCache.h | 1 - .../BuildHeaders/SDWebImage/UIImage+GIF.h | 1 - .../SDWebImage/UIImage+MultiFormat.h | 1 - .../UIImageView+HighlightedWebCache.h | 1 - .../SDWebImage/UIImageView+WebCache.h | 1 - .../SDWebImage/UIView+WebCacheOperation.h | 1 - .../DACircularProgressView.h | 25 - .../DACircularProgressView.m | 271 - TeamTalk/Pods/DACircularProgress/LICENSE.md | 23 - TeamTalk/Pods/DACircularProgress/README.md | 77 - TeamTalk/Pods/FMDB/LICENSE.txt | 24 - TeamTalk/Pods/FMDB/README.markdown | 253 - TeamTalk/Pods/FMDB/src/fmdb/FMDB.h | 5 - TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.h | 1057 -- TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.m | 1413 --- .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.h | 267 - .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.m | 224 - TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.h | 204 - TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.m | 273 - TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.h | 174 - TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.m | 232 - TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.h | 456 - TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.m | 390 - TeamTalk/Pods/HPGrowingTextView/LICENSE.txt | 21 - TeamTalk/Pods/HPGrowingTextView/README.md | 59 - .../class/HPGrowingTextView.h | 126 - .../class/HPGrowingTextView.m | 666 - .../class/HPTextViewInternal.h | 37 - .../class/HPTextViewInternal.m | 126 - .../AFNetworking/AFHTTPRequestOperation.h | 1 - .../AFHTTPRequestOperationManager.h | 1 - .../AFNetworking/AFHTTPSessionManager.h | 1 - .../AFNetworkActivityIndicatorManager.h | 1 - .../AFNetworkReachabilityManager.h | 1 - .../Pods/Headers/AFNetworking/AFNetworking.h | 1 - .../Headers/AFNetworking/AFSecurityPolicy.h | 1 - .../AFNetworking/AFURLConnectionOperation.h | 1 - .../AFNetworking/AFURLRequestSerialization.h | 1 - .../AFNetworking/AFURLResponseSerialization.h | 1 - .../AFNetworking/AFURLSessionManager.h | 1 - .../UIActivityIndicatorView+AFNetworking.h | 1 - .../AFNetworking/UIAlertView+AFNetworking.h | 1 - .../AFNetworking/UIButton+AFNetworking.h | 1 - .../AFNetworking/UIImageView+AFNetworking.h | 1 - .../Headers/AFNetworking/UIKit+AFNetworking.h | 1 - .../UIProgressView+AFNetworking.h | 1 - .../UIRefreshControl+AFNetworking.h | 1 - .../AFNetworking/UIWebView+AFNetworking.h | 1 - .../DACircularProgressView.h | 1 - TeamTalk/Pods/Headers/FMDB/FMDB.h | 1 - TeamTalk/Pods/Headers/FMDB/FMDatabase.h | 1 - .../Pods/Headers/FMDB/FMDatabaseAdditions.h | 1 - TeamTalk/Pods/Headers/FMDB/FMDatabasePool.h | 1 - TeamTalk/Pods/Headers/FMDB/FMDatabaseQueue.h | 1 - TeamTalk/Pods/Headers/FMDB/FMResultSet.h | 1 - .../HPGrowingTextView/HPGrowingTextView.h | 1 - .../HPGrowingTextView/HPTextViewInternal.h | 1 - .../Headers/MBProgressHUD/MBProgressHUD.h | 1 - .../NSIndexPath+PSTCollectionViewAdditions.h | 1 - .../PSTCollectionView/PSTCollectionView.h | 1 - .../PSTCollectionView/PSTCollectionViewCell.h | 1 - .../PSTCollectionViewCommon.h | 1 - .../PSTCollectionViewController.h | 1 - .../PSTCollectionView/PSTCollectionViewData.h | 1 - .../PSTCollectionViewFlowLayout.h | 1 - .../PSTCollectionViewItemKey.h | 1 - .../PSTCollectionViewLayout+Internals.h | 1 - .../PSTCollectionViewLayout.h | 1 - .../PSTCollectionViewUpdateItem.h | 1 - .../PSTCollectionView/PSTGridLayoutInfo.h | 1 - .../PSTCollectionView/PSTGridLayoutItem.h | 1 - .../PSTCollectionView/PSTGridLayoutRow.h | 1 - .../PSTCollectionView/PSTGridLayoutSection.h | 1 - .../SDWebImage/NSData+ImageContentType.h | 1 - .../Pods/Headers/SDWebImage/SDImageCache.h | 1 - .../Headers/SDWebImage/SDWebImageCompat.h | 1 - .../Headers/SDWebImage/SDWebImageDecoder.h | 1 - .../Headers/SDWebImage/SDWebImageDownloader.h | 1 - .../SDWebImageDownloaderOperation.h | 1 - .../Headers/SDWebImage/SDWebImageManager.h | 1 - .../Headers/SDWebImage/SDWebImageOperation.h | 1 - .../Headers/SDWebImage/SDWebImagePrefetcher.h | 1 - .../Headers/SDWebImage/UIButton+WebCache.h | 1 - .../Pods/Headers/SDWebImage/UIImage+GIF.h | 1 - .../Headers/SDWebImage/UIImage+MultiFormat.h | 1 - .../UIImageView+HighlightedWebCache.h | 1 - .../Headers/SDWebImage/UIImageView+WebCache.h | 1 - .../SDWebImage/UIView+WebCacheOperation.h | 1 - TeamTalk/Pods/MBProgressHUD/LICENSE | 19 - TeamTalk/Pods/MBProgressHUD/MBProgressHUD.h | 484 - TeamTalk/Pods/MBProgressHUD/MBProgressHUD.m | 1008 -- TeamTalk/Pods/MBProgressHUD/README.mdown | 101 - TeamTalk/Pods/Manifest.lock | 54 - TeamTalk/Pods/PSTCollectionView/LICENSE | 19 - .../NSIndexPath+PSTCollectionViewAdditions.h | 20 - .../NSIndexPath+PSTCollectionViewAdditions.m | 25 - .../PSTCollectionView/PSTCollectionView.h | 136 - .../PSTCollectionView/PSTCollectionView.m | 2311 ---- .../PSTCollectionView/PSTCollectionViewCell.h | 49 - .../PSTCollectionView/PSTCollectionViewCell.m | 264 - .../PSTCollectionViewCommon.h | 73 - .../PSTCollectionViewController.h | 24 - .../PSTCollectionViewController.m | 145 - .../PSTCollectionView/PSTCollectionViewData.h | 75 - .../PSTCollectionView/PSTCollectionViewData.m | 235 - .../PSTCollectionViewFlowLayout.h | 116 - .../PSTCollectionViewFlowLayout.m | 420 - .../PSTCollectionViewItemKey.h | 28 - .../PSTCollectionViewItemKey.m | 77 - .../PSTCollectionViewLayout+Internals.h | 18 - .../PSTCollectionViewLayout.h | 128 - .../PSTCollectionViewLayout.m | 481 - .../PSTCollectionViewUpdateItem.h | 41 - .../PSTCollectionViewUpdateItem.m | 117 - .../PSTCollectionView/PSTGridLayoutInfo.h | 43 - .../PSTCollectionView/PSTGridLayoutInfo.m | 76 - .../PSTCollectionView/PSTGridLayoutItem.h | 19 - .../PSTCollectionView/PSTGridLayoutItem.m | 19 - .../PSTCollectionView/PSTGridLayoutRow.h | 43 - .../PSTCollectionView/PSTGridLayoutRow.m | 193 - .../PSTCollectionView/PSTGridLayoutSection.h | 64 - .../PSTCollectionView/PSTGridLayoutSection.m | 210 - TeamTalk/Pods/PSTCollectionView/README.md | 57 - .../Pods/Pods-AFNetworking-Private.xcconfig | 5 - TeamTalk/Pods/Pods-AFNetworking-dummy.m | 5 - TeamTalk/Pods/Pods-AFNetworking-prefix.pch | 5 - TeamTalk/Pods/Pods-AFNetworking.xcconfig | 1 - .../Pods-DACircularProgress-Private.xcconfig | 5 - TeamTalk/Pods/Pods-DACircularProgress-dummy.m | 5 - .../Pods/Pods-DACircularProgress-prefix.pch | 5 - .../Pods/Pods-DACircularProgress.xcconfig | 1 - TeamTalk/Pods/Pods-FMDB-Private.xcconfig | 5 - TeamTalk/Pods/Pods-FMDB-dummy.m | 5 - TeamTalk/Pods/Pods-FMDB-prefix.pch | 5 - TeamTalk/Pods/Pods-FMDB.xcconfig | 1 - .../Pods-HPGrowingTextView-Private.xcconfig | 5 - TeamTalk/Pods/Pods-HPGrowingTextView-dummy.m | 5 - .../Pods/Pods-HPGrowingTextView-prefix.pch | 5 - TeamTalk/Pods/Pods-HPGrowingTextView.xcconfig | 0 .../Pods/Pods-MBProgressHUD-Private.xcconfig | 5 - TeamTalk/Pods/Pods-MBProgressHUD-dummy.m | 5 - TeamTalk/Pods/Pods-MBProgressHUD-prefix.pch | 5 - TeamTalk/Pods/Pods-MBProgressHUD.xcconfig | 1 - .../Pods-PSTCollectionView-Private.xcconfig | 5 - TeamTalk/Pods/Pods-PSTCollectionView-dummy.m | 5 - .../Pods/Pods-PSTCollectionView-prefix.pch | 5 - TeamTalk/Pods/Pods-PSTCollectionView.xcconfig | 1 - .../Pods/Pods-SDWebImage-Private.xcconfig | 5 - TeamTalk/Pods/Pods-SDWebImage-dummy.m | 5 - TeamTalk/Pods/Pods-SDWebImage-prefix.pch | 5 - TeamTalk/Pods/Pods-SDWebImage.xcconfig | 1 - TeamTalk/Pods/Pods-acknowledgements.markdown | 172 - TeamTalk/Pods/Pods-acknowledgements.plist | 226 - TeamTalk/Pods/Pods-dummy.m | 5 - TeamTalk/Pods/Pods-environment.h | 104 - TeamTalk/Pods/Pods-resources.sh | 68 - TeamTalk/Pods/Pods.xcconfig | 5 - TeamTalk/Pods/Pods.xcodeproj/project.pbxproj | 1922 --- .../xcschemes/Pods-AFNetworking.xcscheme | 77 - .../Pods-DACircularProgress.xcscheme | 77 - .../xcschemes/Pods-FMDB.xcscheme | 77 - .../xcschemes/Pods-HPGrowingTextView.xcscheme | 77 - .../xcschemes/Pods-MBProgressHUD.xcscheme | 77 - .../xcschemes/Pods-PSTCollectionView.xcscheme | 77 - .../xcschemes/Pods-SDWebImage.xcscheme | 77 - .../Jerry.xcuserdatad/xcschemes/Pods.xcscheme | 77 - .../xcschemes/xcschememanagement.plist | 92 - .../xcschemes/Pods-AFNetworking.xcscheme | 59 - .../Pods-DACircularProgress.xcscheme | 59 - .../xcschemes/Pods-FMDB.xcscheme | 59 - .../xcschemes/Pods-HPGrowingTextView.xcscheme | 59 - .../xcschemes/Pods-MBProgressHUD.xcscheme | 59 - .../xcschemes/Pods-PSTCollectionView.xcscheme | 59 - .../xcschemes/Pods-SDWebImage.xcscheme | 59 - .../xcschemes/Pods.xcscheme | 59 - .../xcschemes/xcschememanagement.plist | 148 - TeamTalk/Pods/SDWebImage/LICENSE | 20 - TeamTalk/Pods/SDWebImage/README.md | 280 - .../SDWebImage/NSData+ImageContentType.h | 26 - .../SDWebImage/NSData+ImageContentType.m | 49 - .../Pods/SDWebImage/SDWebImage/SDImageCache.h | 241 - .../Pods/SDWebImage/SDWebImage/SDImageCache.m | 534 - .../SDWebImage/SDWebImage/SDWebImageCompat.h | 70 - .../SDWebImage/SDWebImage/SDWebImageCompat.m | 45 - .../SDWebImage/SDWebImage/SDWebImageDecoder.h | 18 - .../SDWebImage/SDWebImage/SDWebImageDecoder.m | 72 - .../SDWebImage/SDWebImageDownloader.h | 173 - .../SDWebImage/SDWebImageDownloader.m | 225 - .../SDWebImageDownloaderOperation.h | 60 - .../SDWebImageDownloaderOperation.m | 414 - .../SDWebImage/SDWebImage/SDWebImageManager.h | 285 - .../SDWebImage/SDWebImage/SDWebImageManager.m | 346 - .../SDWebImage/SDWebImageOperation.h | 15 - .../SDWebImage/SDWebImagePrefetcher.h | 98 - .../SDWebImage/SDWebImagePrefetcher.m | 138 - .../SDWebImage/SDWebImage/UIButton+WebCache.h | 229 - .../SDWebImage/SDWebImage/UIButton+WebCache.m | 260 - .../Pods/SDWebImage/SDWebImage/UIImage+GIF.h | 19 - .../Pods/SDWebImage/SDWebImage/UIImage+GIF.m | 158 - .../SDWebImage/UIImage+MultiFormat.h | 15 - .../SDWebImage/UIImage+MultiFormat.m | 114 - .../UIImageView+HighlightedWebCache.h | 100 - .../UIImageView+HighlightedWebCache.m | 107 - .../SDWebImage/UIImageView+WebCache.h | 201 - .../SDWebImage/UIImageView+WebCache.m | 195 - .../SDWebImage/UIView+WebCacheOperation.h | 36 - .../SDWebImage/UIView+WebCacheOperation.m | 55 - TeamTalk/README.md | 0 TeamTalk/RuntimeStatus.h | 33 - TeamTalk/RuntimeStatus.m | 152 - TeamTalk/TeamTalk-Info.plist | 46 - TeamTalk/TeamTalk.xcodeproj/project.pbxproj | 2664 ---- .../contents.xcworkspacedata | 7 - .../xcshareddata/IOSDuoduo.xccheckout | 41 - .../xcshareddata/TeamTalk.xccheckout | 41 - .../UserInterfaceState.xcuserstate | Bin 10368 -> 0 bytes .../xcschemes/TeamTalk.xcscheme | 110 - .../xcschemes/xcschememanagement.plist | 27 - .../xcschemes/IOSDuoduo.xcscheme | 96 - .../xcschemes/IOSDuoduoTests.xcscheme | 88 - .../xcschemes/xcschememanagement.plist | 37 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IOSDuoduo.xccheckout | 41 - .../xcshareddata/TeamTalk.xccheckout | 65 - .../UserInterfaceState.xcuserstate | Bin 109775 -> 0 bytes .../WorkspaceSettings.xcsettings | 10 - .../xcdebugger/Breakpoints_v2.xcbkptlist | 121 - .../UserInterfaceState.xcuserstate | Bin 696693 -> 0 bytes .../WorkspaceSettings.xcsettings | 10 - .../xcdebugger/Breakpoints_v2.xcbkptlist | 1597 --- TeamTalk/edit.png | Bin 1916 -> 0 bytes TeamTalk/edit@2x.png | Bin 1916 -> 0 bytes TeamTalk/en.lproj/InfoPlist.strings | 2 - TeamTalk/group_default.png | Bin 4312 -> 0 bytes TeamTalk/group_default@2x.png | Bin 4312 -> 0 bytes TeamTalk/launchimage.png | Bin 1092383 -> 0 bytes TeamTalk/loginlogo.png | Bin 20838 -> 0 bytes TeamTalk/main.m | 19 - TeamTalk/npm-debug.log | 283 - TeamTalk/resources/add.png | Bin 4623 -> 0 bytes TeamTalk/resources/add@2x.png | Bin 4623 -> 0 bytes TeamTalk/resources/chat.png | Bin 4049 -> 0 bytes TeamTalk/resources/chat@2x.png | Bin 4049 -> 0 bytes TeamTalk/resources/contact.png | Bin 2670 -> 0 bytes TeamTalk/resources/contact@2x.png | Bin 2670 -> 0 bytes TeamTalk/resources/contact_selected.png | Bin 2407 -> 0 bytes TeamTalk/resources/contact_selected@2x.png | Bin 2407 -> 0 bytes TeamTalk/resources/conversation.png | Bin 2315 -> 0 bytes TeamTalk/resources/conversation@2x.png | Bin 2315 -> 0 bytes TeamTalk/resources/conversation_selected.png | Bin 2079 -> 0 bytes .../resources/conversation_selected@2x.png | Bin 2079 -> 0 bytes TeamTalk/resources/dd_album.png | Bin 2000 -> 0 bytes TeamTalk/resources/dd_album@2x.png | Bin 2257 -> 0 bytes TeamTalk/resources/dd_cancel_send_record.png | Bin 1564 -> 0 bytes .../resources/dd_cancel_send_record@2x.png | Bin 2309 -> 0 bytes TeamTalk/resources/dd_emoji_delete.png | Bin 1616 -> 0 bytes TeamTalk/resources/dd_emoji_delete@2x.png | Bin 1745 -> 0 bytes TeamTalk/resources/dd_emotion.png | Bin 2049 -> 0 bytes TeamTalk/resources/dd_emotion@2x.png | Bin 2886 -> 0 bytes TeamTalk/resources/dd_has_unread_message.png | Bin 1386 -> 0 bytes .../resources/dd_has_unread_message@2x.png | Bin 1880 -> 0 bytes TeamTalk/resources/dd_image_send.png | Bin 1100 -> 0 bytes TeamTalk/resources/dd_image_send@2x.png | Bin 7968 -> 0 bytes TeamTalk/resources/dd_input_normal.png | Bin 2060 -> 0 bytes TeamTalk/resources/dd_input_normal@2x.png | Bin 2687 -> 0 bytes TeamTalk/resources/dd_left_voice_one.png | Bin 997 -> 0 bytes TeamTalk/resources/dd_left_voice_one@2x.png | Bin 1065 -> 0 bytes TeamTalk/resources/dd_left_voice_three.png | Bin 1159 -> 0 bytes TeamTalk/resources/dd_left_voice_three@2x.png | Bin 1496 -> 0 bytes TeamTalk/resources/dd_left_voice_two.png | Bin 1082 -> 0 bytes TeamTalk/resources/dd_left_voice_two@2x.png | Bin 1263 -> 0 bytes TeamTalk/resources/dd_photo_back.png | Bin 1492 -> 0 bytes TeamTalk/resources/dd_photo_back@2x.png | Bin 1709 -> 0 bytes TeamTalk/resources/dd_press_to_say_normal.png | Bin 3434 -> 0 bytes .../resources/dd_press_to_say_normal@2x.png | Bin 3749 -> 0 bytes TeamTalk/resources/dd_preview_select.png | Bin 1590 -> 0 bytes TeamTalk/resources/dd_preview_select@2x.png | Bin 2039 -> 0 bytes TeamTalk/resources/dd_preview_unselected.png | Bin 1805 -> 0 bytes TeamTalk/resources/dd_recent_contacts.png | Bin 1140 -> 0 bytes TeamTalk/resources/dd_recent_contacts@2x.png | Bin 1386 -> 0 bytes TeamTalk/resources/dd_record_normal.png | Bin 2020 -> 0 bytes TeamTalk/resources/dd_record_normal@2x.png | Bin 3058 -> 0 bytes TeamTalk/resources/dd_record_release_end.png | Bin 3514 -> 0 bytes .../resources/dd_record_release_end@2x.png | Bin 4010 -> 0 bytes TeamTalk/resources/dd_record_too_short.png | Bin 1532 -> 0 bytes TeamTalk/resources/dd_record_too_short@2x.png | Bin 2295 -> 0 bytes TeamTalk/resources/dd_recording.png | Bin 2132 -> 0 bytes TeamTalk/resources/dd_recording@2x.png | Bin 3344 -> 0 bytes TeamTalk/resources/dd_right_voice_one.png | Bin 989 -> 0 bytes TeamTalk/resources/dd_right_voice_one@2x.png | Bin 1079 -> 0 bytes TeamTalk/resources/dd_right_voice_three.png | Bin 1196 -> 0 bytes .../resources/dd_right_voice_three@2x.png | Bin 1592 -> 0 bytes TeamTalk/resources/dd_right_voice_two.png | Bin 1089 -> 0 bytes TeamTalk/resources/dd_right_voice_two@2x.png | Bin 1317 -> 0 bytes TeamTalk/resources/dd_selected_photo.png | Bin 1590 -> 0 bytes TeamTalk/resources/dd_selected_photo@2x.png | Bin 2009 -> 0 bytes TeamTalk/resources/dd_send_failed.png | Bin 1557 -> 0 bytes TeamTalk/resources/dd_send_failed@2x.png | Bin 1891 -> 0 bytes TeamTalk/resources/dd_take-photo.png | Bin 2079 -> 0 bytes TeamTalk/resources/dd_take-photo@2x.png | Bin 2683 -> 0 bytes TeamTalk/resources/dd_utility.png | Bin 1826 -> 0 bytes TeamTalk/resources/dd_utility@2x.png | Bin 2421 -> 0 bytes TeamTalk/resources/dd_volumn.png | Bin 1257 -> 0 bytes TeamTalk/resources/dd_volumn@2x.png | Bin 1285 -> 0 bytes TeamTalk/resources/delete.png | Bin 4559 -> 0 bytes TeamTalk/resources/delete@2x.png | Bin 4559 -> 0 bytes TeamTalk/resources/email.png | Bin 3665 -> 0 bytes TeamTalk/resources/email@2x.png | Bin 3665 -> 0 bytes TeamTalk/resources/jiantou.png | Bin 1128 -> 0 bytes TeamTalk/resources/jiantou@2x.png | Bin 1128 -> 0 bytes TeamTalk/resources/left.png | Bin 1298 -> 0 bytes TeamTalk/resources/left@2x.png | Bin 1298 -> 0 bytes TeamTalk/resources/loginlogo.jpg | Bin 19676 -> 0 bytes TeamTalk/resources/msg.caf | Bin 43416 -> 0 bytes TeamTalk/resources/myprofile.png | Bin 1947 -> 0 bytes TeamTalk/resources/myprofile@2x.png | Bin 1947 -> 0 bytes TeamTalk/resources/myprofile_selected.png | Bin 1617 -> 0 bytes TeamTalk/resources/myprofile_selected@2x.png | Bin 1617 -> 0 bytes TeamTalk/resources/password.png | Bin 1809 -> 0 bytes TeamTalk/resources/password@2x.png | Bin 1809 -> 0 bytes TeamTalk/resources/right.png | Bin 1501 -> 0 bytes TeamTalk/resources/right@2x.png | Bin 1501 -> 0 bytes TeamTalk/resources/setting.png | Bin 2452 -> 0 bytes TeamTalk/resources/setting@2x.png | Bin 2452 -> 0 bytes TeamTalk/resources/tel.png | Bin 4183 -> 0 bytes TeamTalk/resources/tel@2x.png | Bin 4183 -> 0 bytes TeamTalk/resources/username.png | Bin 1789 -> 0 bytes TeamTalk/resources/username@2x.png | Bin 1789 -> 0 bytes TeamTalk/select.png | Bin 1625 -> 0 bytes TeamTalk/select@2x.png | Bin 1625 -> 0 bytes TeamTalk/star.png | Bin 2096 -> 0 bytes TeamTalk/star@2x.png | Bin 2096 -> 0 bytes TeamTalk/unselected.png | Bin 1910 -> 0 bytes TeamTalk/unselected@2x.png | Bin 1910 -> 0 bytes TeamTalk/x.png | Bin 1595 -> 0 bytes TeamTalk/x@2x.png | Bin 1595 -> 0 bytes 959 files changed, 5 insertions(+), 141490 deletions(-) delete mode 100644 LICENSE.txt delete mode 100644 README delete mode 100644 TeamTalk/DDAppDelegate.h delete mode 100644 TeamTalk/DDAppDelegate.m delete mode 100644 TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Info.plist delete mode 100644 TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Prefix.pch delete mode 100644 TeamTalk/IOSDuoduo Tests/IOSDuoduo_Tests.m delete mode 100644 TeamTalk/IOSDuoduo Tests/en.lproj/InfoPlist.strings delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.h delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.m delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.h delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.m delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.h delete mode 100644 TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.m delete mode 100755 TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.h delete mode 100755 TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.m delete mode 100755 TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.h delete mode 100755 TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.m delete mode 100644 TeamTalk/IOSDuoduo/Category/NSString+Additions.h delete mode 100644 TeamTalk/IOSDuoduo/Category/NSString+Additions.m delete mode 100644 TeamTalk/IOSDuoduo/Category/NSString+DDPath.h delete mode 100644 TeamTalk/IOSDuoduo/Category/NSString+DDPath.m delete mode 100755 TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.h delete mode 100755 TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.m delete mode 100755 TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.h delete mode 100755 TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.m delete mode 100755 TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.h delete mode 100755 TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.m delete mode 100755 TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.h delete mode 100755 TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.m delete mode 100755 TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.h delete mode 100755 TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.m delete mode 100755 TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.h delete mode 100755 TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.m delete mode 100644 TeamTalk/IOSDuoduo/Category/UIView+DDAddition.h delete mode 100644 TeamTalk/IOSDuoduo/Category/UIView+DDAddition.m delete mode 100644 TeamTalk/IOSDuoduo/DDCONSTANT.h delete mode 100755 TeamTalk/IOSDuoduo/DDSearch.h delete mode 100755 TeamTalk/IOSDuoduo/DDSearch.m delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDBaseEntity.h delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDBaseEntity.m delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDGroupEntity.h delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDGroupEntity.m delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDMessageEntity.h delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDMessageEntity.m delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDSessionEntity.h delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDSessionEntity.m delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDUserEntity.h delete mode 100644 TeamTalk/IOSDuoduo/Entity/DDUserEntity.m delete mode 100644 TeamTalk/IOSDuoduo/IMBaseDefine.pb.h delete mode 100644 TeamTalk/IOSDuoduo/IMBaseDefine.pb.m delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServBase.pb.h delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServBase.pb.m delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServFile.pb.h delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServFile.pb.m delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.h delete mode 100644 TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.m delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@1x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/40px@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/57px@1x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/57px@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/60px@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/wifi.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/wifi@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage-2.launchimage/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default@2x-1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background-1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.jpg delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.jpg delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1@2x.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/Contents.json delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar.png delete mode 100644 TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar_50.png delete mode 100755 TeamTalk/IOSDuoduo/MD5.h delete mode 100755 TeamTalk/IOSDuoduo/MD5.m delete mode 100644 TeamTalk/IOSDuoduo/Module/DDGroupModule.h delete mode 100644 TeamTalk/IOSDuoduo/Module/DDGroupModule.m delete mode 100644 TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.h delete mode 100644 TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Http/DDAFClient.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Http/DDAFClient.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.m delete mode 100644 TeamTalk/IOSDuoduo/Module/Users/DDUserModule.h delete mode 100644 TeamTalk/IOSDuoduo/Module/Users/DDUserModule.m delete mode 100755 TeamTalk/IOSDuoduo/SpellLibrary.h delete mode 100755 TeamTalk/IOSDuoduo/SpellLibrary.m delete mode 100644 TeamTalk/IOSDuoduo/StateMaintance/DDClientState.h delete mode 100644 TeamTalk/IOSDuoduo/StateMaintance/DDClientState.m delete mode 100644 TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.h delete mode 100644 TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.m delete mode 100644 TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.h delete mode 100644 TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.m delete mode 100644 TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.h delete mode 100644 TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAPIScheduleProtocol.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAPIUnrequestScheduleProtocol.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReachability.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReachability.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDepartment.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DDepartment.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.h delete mode 100644 TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.m delete mode 100644 TeamTalk/IOSDuoduo/TeamTalk-Prefix.pch delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLayout.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLocationDelegation.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell+AQGridViewCellPrivate.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWCommon.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowserPrivate.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoProtocol.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.m delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.h delete mode 100755 TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.m delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.h delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.m delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.h delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.m delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.h delete mode 100755 TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.m delete mode 100644 TeamTalk/IOSDuoduo/ToRemove/little_minus.png delete mode 100644 TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.h delete mode 100644 TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatCellProtocol.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/ClearImageCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ClearImageCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactAvatarTools.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactAvatarTools.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactsModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactsModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactsViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ContactsViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/DDContactsCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/DDContactsCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/GroupAvatarImage.h delete mode 100644 TeamTalk/IOSDuoduo/VC/GroupAvatarImage.m delete mode 100755 TeamTalk/IOSDuoduo/VC/ImageGridViewCell.h delete mode 100755 TeamTalk/IOSDuoduo/VC/ImageGridViewCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/LoginModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/LoginModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/MainViewControll.h delete mode 100644 TeamTalk/IOSDuoduo/VC/MainViewControll.m delete mode 100644 TeamTalk/IOSDuoduo/VC/MainViewControll.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/MyProfileViewControll.h delete mode 100644 TeamTalk/IOSDuoduo/VC/MyProfileViewControll.m delete mode 100644 TeamTalk/IOSDuoduo/VC/MyProfileViewControll.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.h delete mode 100644 TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.m delete mode 100644 TeamTalk/IOSDuoduo/VC/Photo.h delete mode 100644 TeamTalk/IOSDuoduo/VC/Photo.m delete mode 100644 TeamTalk/IOSDuoduo/VC/PhotosCache.h delete mode 100644 TeamTalk/IOSDuoduo/VC/PhotosCache.m delete mode 100644 TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.h delete mode 100644 TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.m delete mode 100644 TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.h delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.m delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.h delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/SearchContentViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/SearchContentViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/SearchContentViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/SettingViewController.h delete mode 100644 TeamTalk/IOSDuoduo/VC/SettingViewController.m delete mode 100644 TeamTalk/IOSDuoduo/VC/SettingViewController.xib delete mode 100644 TeamTalk/IOSDuoduo/VC/minus-sign.png delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/config.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/bitwise.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/framing.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/ogg.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/os_types.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/_kiss_fft_guts.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/arch.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/bits.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/buffer.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_arm4.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_sse.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_16_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_32_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_20_32_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_256_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_64_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_8_128_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_arm4.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_sse.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm4.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm5e.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_debug.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_generic.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table_lbr.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_10_32_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_table.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/high_lsp_tables.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/jitter.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_tables_nb.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_arm4.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_sse.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/math_approx.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/mdf.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/misc_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes_wb.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/os_support.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/preprocess.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/pseudofloat.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample_sse.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/scal.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_bits.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_buffer.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_callbacks.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h.in delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_echo.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_header.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_jitter.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_preprocess.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_resampler.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_stereo.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_types.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_callbacks.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_header.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stack_alloc.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stereo.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vorbis_psy.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_arm4.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_bfin.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_sse.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/window.c delete mode 100755 TeamTalk/IOSDuoduo/Voice/SpeexAllHeaders.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.mm delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexAllHeaders.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.m delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.m delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.m delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.m delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.cpp delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAMath.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.cpp delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.cpp delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.m delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.h delete mode 100755 TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.mm delete mode 100644 TeamTalk/IOSDuoduo/XLog.h delete mode 100755 TeamTalk/IOSDuoduo/std.h delete mode 100755 TeamTalk/IOSDuoduo/std.m delete mode 100644 TeamTalk/IOSDuoduoTests/IOSDuoduoTests.m delete mode 100644 TeamTalk/IOSDuoduoTests/TeamTalkTests-Info.plist delete mode 100644 TeamTalk/IOSDuoduoTests/en.lproj/InfoPlist.strings delete mode 100644 TeamTalk/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 TeamTalk/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 TeamTalk/LoginViewController.h delete mode 100644 TeamTalk/LoginViewController.m delete mode 100644 TeamTalk/LoginViewController.xib delete mode 100644 TeamTalk/Podfile delete mode 100644 TeamTalk/Podfile.lock delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h delete mode 100644 TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m delete mode 100644 TeamTalk/Pods/AFNetworking/LICENSE delete mode 100644 TeamTalk/Pods/AFNetworking/README.md delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h delete mode 100644 TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperationManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPSessionManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkReachabilityManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFSecurityPolicy.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLRequestSerialization.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLResponseSerialization.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLSessionManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIActivityIndicatorView+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIAlertView+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIButton+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIKit+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIProgressView+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIRefreshControl+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/AFNetworking/UIWebView+AFNetworking.h delete mode 120000 TeamTalk/Pods/BuildHeaders/DACircularProgress/DACircularProgressView.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMDB.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMDatabase.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseAdditions.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMDatabasePool.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseQueue.h delete mode 120000 TeamTalk/Pods/BuildHeaders/FMDB/FMResultSet.h delete mode 120000 TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPGrowingTextView.h delete mode 120000 TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPTextViewInternal.h delete mode 120000 TeamTalk/Pods/BuildHeaders/MBProgressHUD/MBProgressHUD.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionView.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCell.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCommon.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewController.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewData.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewFlowLayout.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewItemKey.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout+Internals.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewUpdateItem.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutInfo.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutItem.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutRow.h delete mode 120000 TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutSection.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDImageCache.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageCompat.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDecoder.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloader.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloaderOperation.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageManager.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageOperation.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImagePrefetcher.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIButton+WebCache.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+GIF.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+MultiFormat.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+HighlightedWebCache.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+WebCache.h delete mode 120000 TeamTalk/Pods/BuildHeaders/SDWebImage/UIView+WebCacheOperation.h delete mode 100644 TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.h delete mode 100644 TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.m delete mode 100755 TeamTalk/Pods/DACircularProgress/LICENSE.md delete mode 100755 TeamTalk/Pods/DACircularProgress/README.md delete mode 100644 TeamTalk/Pods/FMDB/LICENSE.txt delete mode 100644 TeamTalk/Pods/FMDB/README.markdown delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDB.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.m delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.m delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.m delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.h delete mode 100644 TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.m delete mode 100644 TeamTalk/Pods/HPGrowingTextView/LICENSE.txt delete mode 100644 TeamTalk/Pods/HPGrowingTextView/README.md delete mode 100644 TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.h delete mode 100644 TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.m delete mode 100644 TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.h delete mode 100644 TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.m delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperationManager.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFHTTPSessionManager.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFNetworkReachabilityManager.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFSecurityPolicy.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFURLConnectionOperation.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFURLRequestSerialization.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFURLResponseSerialization.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/AFURLSessionManager.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIActivityIndicatorView+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIAlertView+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIButton+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIKit+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIProgressView+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIRefreshControl+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/AFNetworking/UIWebView+AFNetworking.h delete mode 120000 TeamTalk/Pods/Headers/DACircularProgress/DACircularProgressView.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMDB.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMDatabase.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMDatabaseAdditions.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMDatabasePool.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMDatabaseQueue.h delete mode 120000 TeamTalk/Pods/Headers/FMDB/FMResultSet.h delete mode 120000 TeamTalk/Pods/Headers/HPGrowingTextView/HPGrowingTextView.h delete mode 120000 TeamTalk/Pods/Headers/HPGrowingTextView/HPTextViewInternal.h delete mode 120000 TeamTalk/Pods/Headers/MBProgressHUD/MBProgressHUD.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionView.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCell.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCommon.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewController.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewData.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewFlowLayout.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewItemKey.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout+Internals.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewUpdateItem.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutInfo.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutItem.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutRow.h delete mode 120000 TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutSection.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/NSData+ImageContentType.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDImageCache.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageCompat.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageDecoder.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloader.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloaderOperation.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageManager.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImageOperation.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/SDWebImagePrefetcher.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIButton+WebCache.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIImage+GIF.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIImage+MultiFormat.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIImageView+HighlightedWebCache.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIImageView+WebCache.h delete mode 120000 TeamTalk/Pods/Headers/SDWebImage/UIView+WebCacheOperation.h delete mode 100644 TeamTalk/Pods/MBProgressHUD/LICENSE delete mode 100755 TeamTalk/Pods/MBProgressHUD/MBProgressHUD.h delete mode 100755 TeamTalk/Pods/MBProgressHUD/MBProgressHUD.m delete mode 100644 TeamTalk/Pods/MBProgressHUD/README.mdown delete mode 100644 TeamTalk/Pods/Manifest.lock delete mode 100644 TeamTalk/Pods/PSTCollectionView/LICENSE delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h delete mode 100644 TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.m delete mode 100644 TeamTalk/Pods/PSTCollectionView/README.md delete mode 100644 TeamTalk/Pods/Pods-AFNetworking-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-AFNetworking-dummy.m delete mode 100644 TeamTalk/Pods/Pods-AFNetworking-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-AFNetworking.xcconfig delete mode 100644 TeamTalk/Pods/Pods-DACircularProgress-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-DACircularProgress-dummy.m delete mode 100644 TeamTalk/Pods/Pods-DACircularProgress-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-DACircularProgress.xcconfig delete mode 100644 TeamTalk/Pods/Pods-FMDB-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-FMDB-dummy.m delete mode 100644 TeamTalk/Pods/Pods-FMDB-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-FMDB.xcconfig delete mode 100644 TeamTalk/Pods/Pods-HPGrowingTextView-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-HPGrowingTextView-dummy.m delete mode 100644 TeamTalk/Pods/Pods-HPGrowingTextView-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-HPGrowingTextView.xcconfig delete mode 100644 TeamTalk/Pods/Pods-MBProgressHUD-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-MBProgressHUD-dummy.m delete mode 100644 TeamTalk/Pods/Pods-MBProgressHUD-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-MBProgressHUD.xcconfig delete mode 100644 TeamTalk/Pods/Pods-PSTCollectionView-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-PSTCollectionView-dummy.m delete mode 100644 TeamTalk/Pods/Pods-PSTCollectionView-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-PSTCollectionView.xcconfig delete mode 100644 TeamTalk/Pods/Pods-SDWebImage-Private.xcconfig delete mode 100644 TeamTalk/Pods/Pods-SDWebImage-dummy.m delete mode 100644 TeamTalk/Pods/Pods-SDWebImage-prefix.pch delete mode 100644 TeamTalk/Pods/Pods-SDWebImage.xcconfig delete mode 100644 TeamTalk/Pods/Pods-acknowledgements.markdown delete mode 100644 TeamTalk/Pods/Pods-acknowledgements.plist delete mode 100644 TeamTalk/Pods/Pods-dummy.m delete mode 100644 TeamTalk/Pods/Pods-environment.h delete mode 100755 TeamTalk/Pods/Pods-resources.sh delete mode 100644 TeamTalk/Pods/Pods.xcconfig delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-FMDB.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-FMDB.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods.xcscheme delete mode 100644 TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 TeamTalk/Pods/SDWebImage/LICENSE delete mode 100644 TeamTalk/Pods/SDWebImage/README.md delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m delete mode 100755 TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.h delete mode 100755 TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h delete mode 100644 TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m delete mode 100644 TeamTalk/README.md delete mode 100644 TeamTalk/RuntimeStatus.h delete mode 100644 TeamTalk/RuntimeStatus.m delete mode 100644 TeamTalk/TeamTalk-Info.plist delete mode 100644 TeamTalk/TeamTalk.xcodeproj/project.pbxproj delete mode 100644 TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/IOSDuoduo.xccheckout delete mode 100644 TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/TeamTalk.xccheckout delete mode 100644 TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/TeamTalk.xcscheme delete mode 100644 TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduo.xcscheme delete mode 100644 TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduoTests.xcscheme delete mode 100644 TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 TeamTalk/TeamTalk.xcworkspace/contents.xcworkspacedata delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcshareddata/IOSDuoduo.xccheckout delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcshareddata/TeamTalk.xccheckout delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 TeamTalk/edit.png delete mode 100644 TeamTalk/edit@2x.png delete mode 100644 TeamTalk/en.lproj/InfoPlist.strings delete mode 100644 TeamTalk/group_default.png delete mode 100644 TeamTalk/group_default@2x.png delete mode 100644 TeamTalk/launchimage.png delete mode 100644 TeamTalk/loginlogo.png delete mode 100644 TeamTalk/main.m delete mode 100644 TeamTalk/npm-debug.log delete mode 100644 TeamTalk/resources/add.png delete mode 100644 TeamTalk/resources/add@2x.png delete mode 100644 TeamTalk/resources/chat.png delete mode 100644 TeamTalk/resources/chat@2x.png delete mode 100644 TeamTalk/resources/contact.png delete mode 100644 TeamTalk/resources/contact@2x.png delete mode 100644 TeamTalk/resources/contact_selected.png delete mode 100644 TeamTalk/resources/contact_selected@2x.png delete mode 100644 TeamTalk/resources/conversation.png delete mode 100644 TeamTalk/resources/conversation@2x.png delete mode 100644 TeamTalk/resources/conversation_selected.png delete mode 100644 TeamTalk/resources/conversation_selected@2x.png delete mode 100644 TeamTalk/resources/dd_album.png delete mode 100644 TeamTalk/resources/dd_album@2x.png delete mode 100644 TeamTalk/resources/dd_cancel_send_record.png delete mode 100644 TeamTalk/resources/dd_cancel_send_record@2x.png delete mode 100644 TeamTalk/resources/dd_emoji_delete.png delete mode 100644 TeamTalk/resources/dd_emoji_delete@2x.png delete mode 100644 TeamTalk/resources/dd_emotion.png delete mode 100644 TeamTalk/resources/dd_emotion@2x.png delete mode 100644 TeamTalk/resources/dd_has_unread_message.png delete mode 100644 TeamTalk/resources/dd_has_unread_message@2x.png delete mode 100644 TeamTalk/resources/dd_image_send.png delete mode 100644 TeamTalk/resources/dd_image_send@2x.png delete mode 100644 TeamTalk/resources/dd_input_normal.png delete mode 100644 TeamTalk/resources/dd_input_normal@2x.png delete mode 100644 TeamTalk/resources/dd_left_voice_one.png delete mode 100644 TeamTalk/resources/dd_left_voice_one@2x.png delete mode 100644 TeamTalk/resources/dd_left_voice_three.png delete mode 100644 TeamTalk/resources/dd_left_voice_three@2x.png delete mode 100644 TeamTalk/resources/dd_left_voice_two.png delete mode 100644 TeamTalk/resources/dd_left_voice_two@2x.png delete mode 100644 TeamTalk/resources/dd_photo_back.png delete mode 100644 TeamTalk/resources/dd_photo_back@2x.png delete mode 100644 TeamTalk/resources/dd_press_to_say_normal.png delete mode 100644 TeamTalk/resources/dd_press_to_say_normal@2x.png delete mode 100644 TeamTalk/resources/dd_preview_select.png delete mode 100644 TeamTalk/resources/dd_preview_select@2x.png delete mode 100644 TeamTalk/resources/dd_preview_unselected.png delete mode 100644 TeamTalk/resources/dd_recent_contacts.png delete mode 100644 TeamTalk/resources/dd_recent_contacts@2x.png delete mode 100644 TeamTalk/resources/dd_record_normal.png delete mode 100644 TeamTalk/resources/dd_record_normal@2x.png delete mode 100644 TeamTalk/resources/dd_record_release_end.png delete mode 100644 TeamTalk/resources/dd_record_release_end@2x.png delete mode 100644 TeamTalk/resources/dd_record_too_short.png delete mode 100644 TeamTalk/resources/dd_record_too_short@2x.png delete mode 100644 TeamTalk/resources/dd_recording.png delete mode 100644 TeamTalk/resources/dd_recording@2x.png delete mode 100644 TeamTalk/resources/dd_right_voice_one.png delete mode 100644 TeamTalk/resources/dd_right_voice_one@2x.png delete mode 100644 TeamTalk/resources/dd_right_voice_three.png delete mode 100644 TeamTalk/resources/dd_right_voice_three@2x.png delete mode 100644 TeamTalk/resources/dd_right_voice_two.png delete mode 100644 TeamTalk/resources/dd_right_voice_two@2x.png delete mode 100644 TeamTalk/resources/dd_selected_photo.png delete mode 100644 TeamTalk/resources/dd_selected_photo@2x.png delete mode 100644 TeamTalk/resources/dd_send_failed.png delete mode 100644 TeamTalk/resources/dd_send_failed@2x.png delete mode 100644 TeamTalk/resources/dd_take-photo.png delete mode 100644 TeamTalk/resources/dd_take-photo@2x.png delete mode 100644 TeamTalk/resources/dd_utility.png delete mode 100644 TeamTalk/resources/dd_utility@2x.png delete mode 100644 TeamTalk/resources/dd_volumn.png delete mode 100644 TeamTalk/resources/dd_volumn@2x.png delete mode 100644 TeamTalk/resources/delete.png delete mode 100644 TeamTalk/resources/delete@2x.png delete mode 100644 TeamTalk/resources/email.png delete mode 100644 TeamTalk/resources/email@2x.png delete mode 100644 TeamTalk/resources/jiantou.png delete mode 100644 TeamTalk/resources/jiantou@2x.png delete mode 100644 TeamTalk/resources/left.png delete mode 100644 TeamTalk/resources/left@2x.png delete mode 100644 TeamTalk/resources/loginlogo.jpg delete mode 100644 TeamTalk/resources/msg.caf delete mode 100644 TeamTalk/resources/myprofile.png delete mode 100644 TeamTalk/resources/myprofile@2x.png delete mode 100644 TeamTalk/resources/myprofile_selected.png delete mode 100644 TeamTalk/resources/myprofile_selected@2x.png delete mode 100644 TeamTalk/resources/password.png delete mode 100644 TeamTalk/resources/password@2x.png delete mode 100644 TeamTalk/resources/right.png delete mode 100644 TeamTalk/resources/right@2x.png delete mode 100644 TeamTalk/resources/setting.png delete mode 100644 TeamTalk/resources/setting@2x.png delete mode 100644 TeamTalk/resources/tel.png delete mode 100644 TeamTalk/resources/tel@2x.png delete mode 100644 TeamTalk/resources/username.png delete mode 100644 TeamTalk/resources/username@2x.png delete mode 100644 TeamTalk/select.png delete mode 100644 TeamTalk/select@2x.png delete mode 100644 TeamTalk/star.png delete mode 100644 TeamTalk/star@2x.png delete mode 100644 TeamTalk/unselected.png delete mode 100644 TeamTalk/unselected@2x.png delete mode 100644 TeamTalk/x.png delete mode 100644 TeamTalk/x@2x.png diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 2a83574..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) [2014] [mogujie] - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README b/README deleted file mode 100644 index 57decb5..0000000 --- a/README +++ /dev/null @@ -1,6 +0,0 @@ -join ios-im-develop by dingping -TT-IOS - -Members: -* dingping -* chonglou diff --git a/README.md b/README.md index 5cb872e..deb1a7b 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,5 @@ -###项目背景 -随着蘑菇街由导购向电商转型,蘑菇街自己的IM也应运而生,IM起初只是用于商家和买家之间沟通的工具。后面我们问自己,既然已经有了用于客服的IM,为什么不自己做一个IM,用于公司内部的沟通工具,来替换RTX呢,然后就有了TT(TeamTalk)的雏形,现在蘑菇街内部的IM工具都是TT来完成的。随着TT的逐渐完善,我们再次决定把TT开源,来回馈开源社区,我们希望国内的中小企业都能用上免费开源的IM内部沟通工具。 - -###ios客户端描述文档 - -TeamTalk是一套开源的企业办公即时通讯软件,作为整套系统的组成部分之一,IOS客户端为TeamTalk 客户端提供用户登录,消息转发及存储等服务。 -目前IOS客户端支持的功能有 -- 消息发送, -- 图片发送 -- 拍照发送 -- 多点登录功能 -- 群聊功能 - - -###结构设计描述 - -客户端主要依赖三个module,DDMessageModule,DDGroupModule,ContactsModule。 - -DDMessageModule -主要负责消息的接收和存储功能,聊天界面的消息接收和最近联系人界面的消息接收都是从这个模块来的 - -DDGroupModule -负责对最近联系群进行管理 - -ContactsModule 负责对最近联系人进行管理 - -DDTcpClientManager类负责TCP收发的管理 - -###开源协议 -[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) +# 说明 + 为便于管理及后续整体开源的计划,将原有github地址: + https://github.com/mogutt + 变更为: + https://moguttgithub.com/mogujie/TeamTalk diff --git a/TeamTalk/DDAppDelegate.h b/TeamTalk/DDAppDelegate.h deleted file mode 100644 index 7711423..0000000 --- a/TeamTalk/DDAppDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDAppDelegate.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import -#import "std.h" -#import "MainViewControll.h" -@interface DDAppDelegate : UIResponder -@property (strong, nonatomic) UIWindow *window; -@property(nonatomic,strong)UINavigationController *nv; -@property(strong)MainViewControll* mainViewControll; - -@end -#define TheApp ([UIApplication sharedApplication]) -#define TheAppDel ((DDAppDelegate*)TheApp.delegate) \ No newline at end of file diff --git a/TeamTalk/DDAppDelegate.m b/TeamTalk/DDAppDelegate.m deleted file mode 100644 index 40f4f56..0000000 --- a/TeamTalk/DDAppDelegate.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// DDAppDelegate.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// -// hunshou modify - -#import "DDAppDelegate.h" -#import "LoginViewController.h" -#import "RuntimeStatus.h" -#import "DDClientState.h" -#import "ChattingMainViewController.h" -#import "RuntimeStatus.h" -#import "NSDictionary+Safe.h" -#import "DDClientStateMaintenanceManager.h" -#import "std.h" -#import "ChattingMainViewController.h" -#import "DDSessionEntity.h" -#import "MainViewControll.h" -#import "DDMessageModule.h" -#import "LoginModule.h" -#import "DDTcpClientManager.h" -@interface DDAppDelegate() -@property(assign)BOOL isOpenApp; -@end -@implementation DDAppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - [DDClientStateMaintenanceManager shareInstance]; - if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { - // for iOS 8 - UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; - [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; - } else { - // for iOS 7 or iOS 6 - [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; - } - [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]; - [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]]; - [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - // Override point for customization after application launch. - self.window.backgroundColor = [UIColor whiteColor]; - [RuntimeStatus instance]; - - self.mainViewControll = [MainViewControll new]; - self.nv=self.mainViewControll.nv1; - LoginViewController *login = [LoginViewController new]; - self.window.rootViewController = login; - NSDictionary *pushDict = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; - if(pushDict) - { - [self application:application didReceiveRemoteNotification:pushDict]; - } - - self.window.rootViewController = login; - [self.window makeKeyAndVisible]; - return YES; -} -- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { - [application registerForRemoteNotifications]; -} --(UINavigationController *)mainNavigation{ - return self.nv; -} -- (void)applicationWillResignActive:(UIApplication *)application -{ -// DDClientState* clientState = [DDClientState shareInstance]; -// [clientState setUseStateWithoutObserver:DDUserOffLine]; - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ -// DDClientState* clientState = [DDClientState shareInstance]; -// [clientState setUseStateWithoutObserver:DDUserOffLine]; -// self.isOpenApp=NO; -// [[DDTcpClientManager instance] disconnect]; - [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[[DDMessageModule shareInstance] getUnreadMessgeCount]]; - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - } - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - BOOL islive =[[DDClientStateMaintenanceManager shareInstance] heartBeatTimerIsValid]; - if (islive) { - - } -// self.isOpenApp=YES; -// if ([RuntimeStatus instance].user.objID !=nil) { -// DDClientState* clientState = [DDClientState shareInstance]; -// clientState.userState=DDUserOffLine; -// } - - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ - DDClientState* clientState = [DDClientState shareInstance]; - clientState.userState=DDUserOffLine; - DDLog(@"kill the app"); - //程序被杀死调用 - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} -- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - NSString *token = [NSString stringWithFormat:@"%@", deviceToken]; - NSString *dt = [token stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; - NSString *dn = [dt stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - TheRuntime.pushToken= [dn stringByReplacingOccurrencesOfString:@" " withString:@""]; - NSLog(@"token......%@",TheRuntime.pushToken); -} - -- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { - NSString *error_str = [NSString stringWithFormat: @"%@", error]; - NSLog(@"Failed to get token, error:%@", error_str); -} -- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ - - // 处理推送消息 - UIApplicationState state =application.applicationState; - NSLog(@"userinfo:%@",userInfo); - - NSString *jsonString = [userInfo safeObjectForKey:@"custom"]; - NSData* infoData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary* info = [NSJSONSerialization JSONObjectWithData:infoData options:0 error:nil]; - NSString *from_id =[info safeObjectForKey:@"from_id"]; - int type = [[info safeObjectForKey:@"msg_type"] integerValue]; - - if (from_id) { - NSString *sessionId = type==1?from_id:[info safeObjectForKey:@"group_id"]; - DDSessionEntity *session = [[DDSessionEntity alloc] initWithSessionID:sessionId type:type] ; - - [[ChattingMainViewController shareInstance] showChattingContentForSession:session]; - //要处理锁屏 - if (![self.mainViewControll.nv1.topViewController isEqual:[ChattingMainViewController shareInstance]]) - { - - [self.mainViewControll.nv1 pushViewController:[ChattingMainViewController shareInstance] animated:YES]; - - } - [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"alert"] integerValue]]; - } - NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]); - -} - -@end diff --git a/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Info.plist b/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Info.plist deleted file mode 100644 index a2b019d..0000000 --- a/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - Michael.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Prefix.pch b/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Prefix.pch deleted file mode 100644 index 3fdee9d..0000000 --- a/TeamTalk/IOSDuoduo Tests/IOSDuoduo Tests-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/TeamTalk/IOSDuoduo Tests/IOSDuoduo_Tests.m b/TeamTalk/IOSDuoduo Tests/IOSDuoduo_Tests.m deleted file mode 100644 index d421066..0000000 --- a/TeamTalk/IOSDuoduo Tests/IOSDuoduo_Tests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// IOSDuoduo_Tests.m -// IOSDuoduo Tests -// -// Created by Michael Scofield on 2014-08-22. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import - -@interface IOSDuoduo_Tests : XCTestCase - -@end - -@implementation IOSDuoduo_Tests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/TeamTalk/IOSDuoduo Tests/en.lproj/InfoPlist.strings b/TeamTalk/IOSDuoduo Tests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/TeamTalk/IOSDuoduo Tests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.h b/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.h deleted file mode 100644 index b6eef24..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// NSDate+DDAddition.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -@interface NSDate (DDAddition) -- (NSString*)transformToFuzzyDate; -- (NSString*)promptDateString; -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.m b/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.m deleted file mode 100644 index ecc1cfe..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDate+DDAddition.m +++ /dev/null @@ -1,151 +0,0 @@ -// -// NSDate+DDAddition.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "NSDate+DDAddition.h" - -static int localAndServerGap = 0; - -@implementation NSDate (DDAddition) -- (NSString*)transformToFuzzyDate -{ - NSDate* nowDate = [NSDate date]; - - NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; - // 通过已定义的日历对象,获取某个时间点的NSDateComponents表示,并设置需要表示哪些信息(NSYearCalendarUnit, NSMonthCalendarUnit, NSDayCalendarUnit等) - NSDateComponents *nowDateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:nowDate]; - - NSDateComponents *selfDateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:self]; - - - NSDateComponents *weeDateComponents = [[NSDateComponents alloc] init]; - [weeDateComponents setCalendar:[NSCalendar currentCalendar]]; - weeDateComponents.year = selfDateComponents.year; - weeDateComponents.month = selfDateComponents.month; - weeDateComponents.day = selfDateComponents.day; - weeDateComponents.hour = 0; - weeDateComponents.minute = 0; - weeDateComponents.second = 0; - - NSDate* weeDate = [weeDateComponents date]; - NSInteger timeInterval = [nowDate timeIntervalSinceDate:weeDate]; - - NSUInteger selfTnterval = [nowDate timeIntervalSinceDate:self]; - if (selfTnterval < 3 * 60) - { - return @"刚刚"; - } - else if (selfTnterval < 60 * 60) - { - NSString* dateString = [NSString stringWithFormat:@"%u分钟前",selfTnterval / 60]; - return dateString; - } - else if (selfTnterval < 24 * 60 * 60 && nowDateComponents.day == selfDateComponents.day) - { - NSString* dateString = [NSString stringWithFormat:@"%u小时前",selfTnterval / (60 * 60)]; - return dateString; - } - else if (timeInterval < 48 * 60 * 60) - { - return @"昨天"; - } - else if (nowDateComponents.week == selfDateComponents.week) - { - NSArray* weekdays = @[@"temp",@"星期日",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六"]; - NSString* dateString = weekdays[selfDateComponents.weekday]; - return dateString; - } - else if ([self timeIntervalSince1970] == 0) - { - return nil; - } - else - { - NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:@"yy/MM/dd"]; - NSString* dateString = [dateFormatter stringFromDate:self]; - return dateString; - } -} - -- (NSString*)promptDateString -{ - NSDate* nowDate = [NSDate date]; - - NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; - // 通过已定义的日历对象,获取某个时间点的NSDateComponents表示,并设置需要表示哪些信息(NSYearCalendarUnit, NSMonthCalendarUnit, NSDayCalendarUnit等) - NSDateComponents *nowDateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:nowDate]; - - NSDateComponents *selfDateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:self]; - - NSDateComponents *weeDateComponents = [[NSDateComponents alloc] init]; - [weeDateComponents setCalendar:[NSCalendar currentCalendar]]; - weeDateComponents.year = selfDateComponents.year; - weeDateComponents.month = selfDateComponents.month; - weeDateComponents.day = selfDateComponents.day; - weeDateComponents.hour = 0; - weeDateComponents.minute = 0; - weeDateComponents.second = 0; - - NSDate* weeDate = [[weeDateComponents date] dateByAddingTimeInterval:24 * 60 * 60]; - - NSString* lastComponents = nil; - // NSString* twoComponent = nil; - NSInteger hour = selfDateComponents.hour; - - if (selfDateComponents.minute < 10) - { - lastComponents = [NSString stringWithFormat:@"%i:0%i",hour,selfDateComponents.minute]; - } - else - { - lastComponents = [NSString stringWithFormat:@"%i:%i",hour,selfDateComponents.minute]; - } - - NSInteger timeInterval = [nowDate timeIntervalSinceDate:weeDate]; - - NSString* dateString = nil; - if (timeInterval < 24 * 60 * 60) - { - if (nowDateComponents.day == selfDateComponents.day) { - //同一天 - dateString = lastComponents; - } - else - { - //昨天 - dateString = [NSString stringWithFormat:@"昨天 %@",lastComponents]; - } - } - else if (nowDateComponents.week == selfDateComponents.week) - { - //在同一个周中 - NSArray* weekdays = @[@"temp",@"星期日",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六"]; - NSString* weekdayString = weekdays[selfDateComponents.weekday]; - dateString = [NSString stringWithFormat:@"%@%@",weekdayString,lastComponents]; - } - else - { - NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:@"yyyy年MM月dd日"]; - dateString = [NSString stringWithFormat:@"%@ %@",[dateFormatter stringFromDate:self],lastComponents]; - } - return dateString; -} - -+ (void)setServerTime:(int)serverTime -{ - int localTime = [[NSDate date] timeIntervalSince1970]; - localAndServerGap = serverTime - localTime; -} - -+ (NSUInteger)messageDate -{ - int localDate = [[NSDate date] timeIntervalSince1970]; - return localDate + localAndServerGap; -} -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.h b/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.h deleted file mode 100644 index b3ec1b5..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSDictionary+JSON.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-15. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -@interface NSDictionary (JSON) - -- (NSString*)jsonString; -+ (NSDictionary*)initWithJsonString:(NSString*)json; - -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.m b/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.m deleted file mode 100644 index c9b6d05..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDictionary+JSON.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// NSDictionary+JSON.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-15. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "NSDictionary+JSON.h" - -@implementation NSDictionary (JSON) -- (NSString*)jsonString -{ - NSData* infoJsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil]; - NSString* json = [[NSString alloc] initWithData:infoJsonData encoding:NSUTF8StringEncoding]; - return json; -} - -+ (NSDictionary*)initWithJsonString:(NSString*)json -{ - NSData* infoData = [json dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary* info = [NSJSONSerialization JSONObjectWithData:infoData options:0 error:nil]; - return info; -} -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.h b/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.h deleted file mode 100644 index 8c3a4ab..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// DDNSDictionary+Safe.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -@interface NSDictionary(Safe) - -- (id)safeObjectForKey:(id)key; -- (int)intValueForKey:(id)key; -- (double)doubleValueForKey:(id)key; -- (NSString*)stringValueForKey:(id)key; - -@end - - -@interface NSMutableDictionary(Safe) - -- (void)safeSetObject:(id)anObject forKey:(id)aKey; -- (void)setIntValue:(int)value forKey:(id)aKey; -- (void)setDoubleValue:(double)value forKey:(id)aKey; -- (void)setStringValueForKey:(NSString*)string forKey:(id)aKey; - -@end - -@interface NSArray (Exception) - -- (id)objectForKey:(id)key; - -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.m b/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.m deleted file mode 100644 index 18f7190..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSDictionary+Safe.m +++ /dev/null @@ -1,98 +0,0 @@ -// -// DDNSDictionary+Safe.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "NSDictionary+Safe.h" -#import "NSString+Additions.h" - -//#define isValidKey(x) (!x || [x isKindOfClass:[NSNull class]]) - -#define isValidKey(key) ((key) != nil && ![key isKindOfClass:[NSNull class]]) -#define isValidValue(value) (((value) != nil) && ![value isKindOfClass:[NSNull class]]) - -@implementation NSDictionary (Safe) - - -- (id)safeObjectForKey:(id)key{ - if (!isValidKey(key)) { - return nil; - } - id obj = [self objectForKey:key]; - if(!isValidValue(obj)) - return nil; - return obj; -} -- (int)intValueForKey:(id)key{ - id obj = [self safeObjectForKey:key]; - return [obj intValue]; -} -- (double)doubleValueForKey:(id)key{ - id obj = [self safeObjectForKey:key]; - return [obj doubleValue]; -} -- (NSString*)stringValueForKey:(id)key{ - id obj = [self safeObjectForKey:key]; - if ([obj respondsToSelector:@selector(stringValue)]) { - return [obj stringValue]; - } - - return nil; -} - - -@end - - - - - - -@implementation NSMutableDictionary(Safe) - -- (void)safeSetObject:(id)anObject forKey:(id)aKey{ - if (!isValidKey(aKey)) { - return; - } - if ([aKey isKindOfClass:[NSString class]]) { - [self setValue:anObject forKey:aKey]; - } - else{ - if (anObject != nil) { - [self setObject:anObject forKey:aKey]; - } - else{ - [self removeObjectForKey:aKey]; - } - } -} -- (void)setIntValue:(int)value forKey:(id)aKey{ - [self safeSetObject:[[NSNumber numberWithInt:value] stringValue] forKey:aKey]; -} -- (void)setDoubleValue:(double)value forKey:(id)aKey{ - [self safeSetObject:[[NSNumber numberWithDouble:value] stringValue] forKey:aKey]; - -} -- (void)setStringValueForKey:(NSString*)string forKey:(id)aKey{ - [self safeSetObject:string forKey:aKey]; -} - - -@end - - -@implementation NSArray(Exception) - -- (id)objectForKey:(id)key{ -#ifdef DEBUG - NSAssert(NO, @"NSArray should not call objectForKey, you should check your code!"); - return nil; -#else - return nil; -#endif -} - -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.h b/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.h deleted file mode 100755 index fce4cf8..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// NSIndexSet+AQIndexesOutsideSet.h -// Kobov3 -// -// Created by Jim Dovey on 10-06-22. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import - -@interface NSIndexSet (AQIndexesOutsideSet) -- (NSIndexSet *) aq_indexesOutsideIndexSet: (NSIndexSet *) otherSet; -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.m b/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.m deleted file mode 100755 index 78314f8..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIndexesOutsideSet.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSIndexSet+AQIndexesOutsideSet.m -// Kobov3 -// -// Created by Jim Dovey on 10-06-22. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import -#import "NSIndexSet+AQIndexesOutsideSet.h" - -@implementation NSIndexSet (AQIndexesOutsideSet) - -- (NSIndexSet *) aq_indexesOutsideIndexSet: (NSIndexSet *) otherSet -{ - NSMutableIndexSet * mutable = [self mutableCopy]; - [mutable removeIndexes: otherSet]; - NSIndexSet * result = [mutable copy]; - return ( result ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.h b/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.h deleted file mode 100755 index d62b45c..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// NSIndexSet+AQIsSetContiguous.h -// AQGridView -// -// Created by Jim Dovey on 10-04-17. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import - - -@interface NSIndexSet (AQIsSetContiguous) -- (BOOL) aq_isSetContiguous; -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.m b/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.m deleted file mode 100755 index 9b50d52..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSIndexSet+AQIsSetContiguous.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSIndexSet+AQIsSetContiguous.m -// AQGridView -// -// Created by Jim Dovey on 10-04-17. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import "NSIndexSet+AQIsSetContiguous.h" - -@implementation NSIndexSet (AQIsSetContiguous) - -- (BOOL) aq_isSetContiguous -{ - return ( (([self lastIndex] - [self firstIndex]) + 1) == [self count] ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSString+Additions.h b/TeamTalk/IOSDuoduo/Category/NSString+Additions.h deleted file mode 100644 index d08aa32..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+Additions.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSString+Additions.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -@interface NSString (TTString) - -+(NSString *)documentPath; -+(NSString *)cachePath; -+(NSString *)formatCurrentDate; -+(NSString *)formatCurrentDay; -- (NSString*)removeAllSpace; -- (NSURL *) toURL; -- (BOOL) isEmpty; -- (NSString *) MD5; --(NSString *)trim; -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSString+Additions.m b/TeamTalk/IOSDuoduo/Category/NSString+Additions.m deleted file mode 100644 index cbdea2e..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+Additions.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// NSString+Additions.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "NSString+Additions.h" - -#import - -#import - -@implementation NSString (TTString) - -+(NSString *)documentPath { - static NSString * path = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) - objectAtIndex:0] copy]; - [NSString addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path]]; - }); - return path; -} -+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL -{ - if (URL==nil) { - return NO; - } - NSString *systemVersion=[[UIDevice currentDevice] systemVersion]; - float version=[systemVersion floatValue]; - if (version<5.0) { - return YES; - } - if ( version>=5.1) { - assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); - - NSError *error = nil; - BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] - forKey: NSURLIsExcludedFromBackupKey error: &error]; - if(!success){ - } - return success; - } - - if ([systemVersion isEqual:@"5.0"]) { - return NO; - }else{ - assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); - - const char* filePath = [[URL path] fileSystemRepresentation]; - - const char* attrName = "com.apple.MobileBackup"; - u_int8_t attrValue = 1; - - int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); - return result == 0; - } - return YES; -} -+(NSString *)cachePath { - static NSString * path = nil; - if (!path) { - path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) - objectAtIndex:0] copy]; - } - return path; -} - -+(NSString *)formatCurrentDate { - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; - NSString *result = [dateFormatter stringFromDate:[NSDate date]]; - - return result; -} -+(NSString *)formatCurrentDay { - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:@"yyyy-MM-dd"]; - NSString *result = [dateFormatter stringFromDate:[NSDate date]]; - - return result; -} - -- (NSURL *) toURL { - return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; -} - -- (BOOL) isEmpty { - return nil == self - || 0 == [[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]; -} - - -- (NSString *) MD5 { - // Create pointer to the string as UTF8 - const char* ptr = [self UTF8String]; - unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; - - // Create 16 byte MD5 hash value, store in buffer - CC_MD5(ptr, strlen(ptr), md5Buffer); - - // Convert MD5 value in the buffer to NSString of hex values - NSMutableString* output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; - for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { - [output appendFormat:@"%02x",md5Buffer[i]]; - } - - return output; -} --(NSString *)trim{ - return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; -} - - -- (NSString*)removeAllSpace -{ - NSString* result = [self stringByReplacingOccurrencesOfString:@" " withString:@""]; - result = [result stringByReplacingOccurrencesOfString:@" " withString:@""]; - return result; -} -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/NSString+DDPath.h b/TeamTalk/IOSDuoduo/Category/NSString+DDPath.h deleted file mode 100644 index b4ffe7b..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+DDPath.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// NSString+DDPath.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-3. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -@interface NSString (DDPath) -+ (NSString*)userExclusiveDirection; -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSString+DDPath.m b/TeamTalk/IOSDuoduo/Category/NSString+DDPath.m deleted file mode 100644 index a827426..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+DDPath.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// NSString+DDPath.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-3. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "NSString+DDPath.h" -#import "DDUserModule.h" -#import "RuntimeStatus.h" -@implementation NSString (DDPath) -+ (NSString*)userExclusiveDirection -{ - NSString* myName = [[DDUserModule shareInstance] currentUserID]; - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); - DDLog(@"%@",TheRuntime.userID); - NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"duoduo_%@",TheRuntime.userID]]; - - NSString* directorPath = [documentsDirectory stringByAppendingPathComponent:myName]; - NSFileManager* fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:directorPath]) - { - [fileManager createDirectoryAtPath:directorPath withIntermediateDirectories:YES attributes:nil error:nil]; - } - return directorPath; -} -@end diff --git a/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.h b/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.h deleted file mode 100755 index b669981..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// NSString+JSMessagesView.h -// -// Created by Jesse Squires on 2/14/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import - -@interface NSString (JSMessagesView) - -- (NSString *)trimWhitespace; -- (NSUInteger)numberOfLines; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.m b/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.m deleted file mode 100755 index ff03bec..0000000 --- a/TeamTalk/IOSDuoduo/Category/NSString+JSMessagesView.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// NSString+JSMessagesView.m -// -// Created by Jesse Squires on 2/14/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import "NSString+JSMessagesView.h" - -@implementation NSString (JSMessagesView) - -- (NSString *)trimWhitespace -{ - return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; -} - -- (NSUInteger)numberOfLines -{ - return [self componentsSeparatedByString:@"\n"].count + 1; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.h b/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.h deleted file mode 100755 index 05522d2..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIButton+JSMessagesView.h -// MessagesDemo -// -// Created by Jesse Squires on 3/24/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// - -#import - -@interface UIButton (JSMessagesView) - -+ (UIButton *)defaultSendButton; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.m b/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.m deleted file mode 100755 index c187b36..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIButton+JSMessagesView.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// UIButton+JSMessagesView.m -// MessagesDemo -// -// Created by Jesse Squires on 3/24/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// - -#import "UIButton+JSMessagesView.h" -#import "JSMessageInputView.h" - -@implementation UIButton (JSMessagesView) - -+ (UIButton *)defaultSendButton -{ - UIButton *sendButton; - - if ([JSMessageInputView inputBarStyle] == JSInputBarStyleFlat) - { - sendButton = [UIButton buttonWithType:UIButtonTypeSystem]; - } - else - { - sendButton = [UIButton buttonWithType:UIButtonTypeCustom]; - -// UIEdgeInsets insets = UIEdgeInsetsMake(0.0f, 13.0f, 0.0f, 13.0f); -// UIImage *sendBack = [[UIImage imageNamed:@"send"] resizableImageWithCapInsets:insets]; -// UIImage *sendBackHighLighted = [[UIImage imageNamed:@"send"] resizableImageWithCapInsets:insets]; - - UIImage *sendBack = [UIImage imageNamed:@"send.png"]; - UIImage *sendBackHighLighted = [UIImage imageNamed:@"send.png"]; - [sendButton setBackgroundImage:sendBack forState:UIControlStateNormal]; - [sendButton setBackgroundImage:sendBack forState:UIControlStateDisabled]; - [sendButton setBackgroundImage:sendBackHighLighted forState:UIControlStateHighlighted]; - - sendButton.titleLabel.font = [UIFont boldSystemFontOfSize:16.0f]; - - UIColor *titleShadow = [UIColor blackColor]; - [sendButton setTitleShadowColor:titleShadow forState:UIControlStateNormal]; - [sendButton setTitleShadowColor:titleShadow forState:UIControlStateHighlighted]; - sendButton.titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); - - [sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; - [sendButton setTitleColor:[UIColor colorWithWhite:1.0f alpha:0.5f] forState:UIControlStateDisabled]; - } - - NSString *title = NSLocalizedString(@"Send", @"发送"); - [sendButton setTitle:title forState:UIControlStateNormal]; - [sendButton setTitle:title forState:UIControlStateHighlighted]; - [sendButton setTitle:title forState:UIControlStateDisabled]; - sendButton.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin); - - return sendButton; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.h b/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.h deleted file mode 100755 index 3df1f41..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * UIColor+AQGridView.h - * AQGridView - * - * Created by Jim Dovey on 17/4/2010. - * Copyright (c) 2010 Jim Dovey. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import -#import - -@interface UIColor (AQGridView) - -+ (UIColor *) AQDefaultGridCellSeparatorColor; - -@end diff --git a/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.m b/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.m deleted file mode 100755 index 17d4597..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIColor+AQGridView.m +++ /dev/null @@ -1,46 +0,0 @@ -/* - * UIColor+AQGridView.h - * AQGridView - * - * Created by Jim Dovey on 17/4/2010. - * Copyright (c) 2010 Jim Dovey. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "UIColor+AQGridView.h" - -@implementation UIColor (AQGridView) - -+ (UIColor *) AQDefaultGridCellSeparatorColor -{ - return ( [UIColor colorWithWhite: 221.0/255.0 alpha: 1.0] ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.h b/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.h deleted file mode 100755 index 2749cd5..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// UIColor+JSMessagesView.h -// -// Created by Jesse Squires on 3/19/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import - -@interface UIColor (JSMessagesView) - -+ (UIColor *)messagesBackgroundColor; -+ (UIColor *)messagesTimestampColor; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.m b/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.m deleted file mode 100755 index 9f168d6..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIColor+JSMessagesView.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// UIColor+JSMessagesView.m -// -// Created by Jesse Squires on 3/19/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import "UIColor+JSMessagesView.h" -#import "JSMessageInputView.h" - - -@implementation UIColor (JSMessagesView) - -+ (UIColor *)messagesBackgroundColor -{ - if ([JSMessageInputView inputBarStyle] == JSInputBarStyleFlat) - return [UIColor whiteColor]; - - return [UIColor colorWithRed:0.859f green:0.886f blue:0.929f alpha:1.0f]; -} - -+ (UIColor *)messagesTimestampColor -{ - return [UIColor colorWithRed:0.533f green:0.573f blue:0.647f alpha:1.0f]; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.h b/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.h deleted file mode 100755 index ce6fdc0..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// UIImage+JSMessagesView.h -// -// Created by Jesse Squires on 7/25/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import - -@interface UIImage (JSMessagesView) - -#pragma mark - Avatar styles -- (UIImage *)circleImageWithSize:(CGFloat)size; -- (UIImage *)squareImageWithSize:(CGFloat)size; - -- (UIImage *)imageAsCircle:(BOOL)clipToCircle - withDiamter:(CGFloat)diameter - borderColor:(UIColor *)borderColor - borderWidth:(CGFloat)borderWidth - shadowOffSet:(CGSize)shadowOffset; - -#pragma mark - Input bar -+ (UIImage *)inputBar; -+ (UIImage *)inputField; - -#pragma mark - Bubble cap insets -- (UIImage *)makeStretchableDefaultIncoming; -- (UIImage *)makeStretchableDefaultOutgoing; - -- (UIImage *)makeStretchableSquareIncoming; -- (UIImage *)makeStretchableSquareOutgoing; - -- (UIImage *)makeStretchableFlatIncoming; -- (UIImage *)makeStretchableFlatOutgoing; - -#pragma mark - Incoming message bubbles -+ (UIImage *)bubbleDefaultIncoming; -+ (UIImage *)bubbleDefaultIncomingSelected; - -+ (UIImage *)bubbleDefaultIncomingGreen; - -+ (UIImage *)bubbleSquareIncoming; -+ (UIImage *)bubbleSquareIncomingSelected; - -+ (UIImage *)bubbleFlatIncoming; -+ (UIImage *)bubbleFlatIncomingSelected; - -#pragma mark - Outgoing message bubbles -+ (UIImage *)bubbleDefaultOutgoing; -+ (UIImage *)bubbleDefaultOutgoingSelected; - -+ (UIImage *)bubbleDefaultOutgoingGreen; - -+ (UIImage *)bubbleSquareOutgoing; -+ (UIImage *)bubbleSquareOutgoingSelected; - -+ (UIImage *)bubbleFlatOutgoing; -+ (UIImage *)bubbleFlatOutgoingSelected; - -@end diff --git a/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.m b/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.m deleted file mode 100755 index 993b33d..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIImage+JSMessagesView.m +++ /dev/null @@ -1,242 +0,0 @@ -// -// UIImage+JSMessagesView.m -// -// Created by Jesse Squires on 7/25/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import "UIImage+JSMessagesView.h" -#import "JSMessageInputView.h" - -@implementation UIImage (JSMessagesView) - -#pragma mark - Avatar styles -- (UIImage *)circleImageWithSize:(CGFloat)size -{ - return [self imageAsCircle:YES - withDiamter:size - borderColor:[UIColor colorWithHue:0.0f saturation:0.0f brightness:0.8f alpha:1.0f] - borderWidth:1.0f - shadowOffSet:CGSizeMake(0.0f, 1.0f)]; -} - -- (UIImage *)squareImageWithSize:(CGFloat)size -{ - return [self imageAsCircle:NO - withDiamter:size - borderColor:[UIColor colorWithHue:0.0f saturation:0.0f brightness:0.8f alpha:1.0f] - borderWidth:1.0f - shadowOffSet:CGSizeMake(0.0f, 1.0f)]; -} - -- (UIImage *)imageAsCircle:(BOOL)clipToCircle - withDiamter:(CGFloat)diameter - borderColor:(UIColor *)borderColor - borderWidth:(CGFloat)borderWidth - shadowOffSet:(CGSize)shadowOffset -{ - // increase given size for border and shadow - CGFloat increase = diameter * 0.15f; - CGFloat newSize = diameter + increase; - - CGRect newRect = CGRectMake(0.0f, - 0.0f, - newSize, - newSize); - - // fit image inside border and shadow - CGRect imgRect = CGRectMake(increase, - increase, - newRect.size.width - (increase * 2.0f), - newRect.size.height - (increase * 2.0f)); - - UIGraphicsBeginImageContextWithOptions(newRect.size, NO, [UIScreen mainScreen].scale); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSaveGState(context); - - // draw shadow - if(!CGSizeEqualToSize(shadowOffset, CGSizeZero)) - CGContextSetShadowWithColor(context, - CGSizeMake(shadowOffset.width, shadowOffset.height), - 3.0f, - [UIColor colorWithWhite:0.0f alpha:0.45f].CGColor); - - // draw border - // as circle or square - CGPathRef borderPath = (clipToCircle) ? CGPathCreateWithEllipseInRect(imgRect, NULL) : CGPathCreateWithRect(imgRect, NULL); - - CGContextSetStrokeColorWithColor(context, borderColor.CGColor); - CGContextSetLineWidth(context, borderWidth); - CGContextAddPath(context, borderPath); - CGContextDrawPath(context, kCGPathFillStroke); - CGPathRelease(borderPath); - CGContextRestoreGState(context); - - // clip to circle - if(clipToCircle) { - UIBezierPath *imgPath = [UIBezierPath bezierPathWithOvalInRect:imgRect]; - [imgPath addClip]; - } - - [self drawInRect:imgRect]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return newImage; -} - - -#pragma mark - Input bar -+ (UIImage *)inputBar -{ - if ([JSMessageInputView inputBarStyle] == JSInputBarStyleFlat) - return [UIImage imageNamed:@"input-bar-flat"]; - else // jSInputBarStyleDefault - return [[UIImage imageNamed:@"input-bar"] resizableImageWithCapInsets:UIEdgeInsetsMake(19.0f, 3.0f, 19.0f, 3.0f)]; -} - -+ (UIImage *)inputField -{ - if ([JSMessageInputView inputBarStyle] == JSInputBarStyleFlat) - return nil; // no graphic around input field. - else // jSInputBarStyleDefault - return [[UIImage imageNamed:@"input-field"] resizableImageWithCapInsets:UIEdgeInsetsMake(20.0f, 12.0f, 18.0f, 18.0f)]; -} - -#pragma mark - Bubble cap insets -- (UIImage *)makeStretchableDefaultIncoming -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(15.0f, 20.0f, 15.0f, 20.0f) - resizingMode:UIImageResizingModeStretch]; -} - -- (UIImage *)makeStretchableDefaultOutgoing -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(15.0f, 20.0f, 15.0f, 20.0f) - resizingMode:UIImageResizingModeStretch]; -} - -- (UIImage *)makeStretchableSquareIncoming -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(15.0f, 25.0f, 16.0f, 23.0f) - resizingMode:UIImageResizingModeStretch]; -} - -- (UIImage *)makeStretchableSquareOutgoing -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(15.0f, 18.0f, 16.0f, 23.0f) - resizingMode:UIImageResizingModeStretch]; -} - -// JeremyStone -- (UIImage *)makeStretchableFlatIncoming -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(15.0f, 20.0f, 15.0f, 20.0f) - resizingMode:UIImageResizingModeStretch]; -} - -// JeremyStone -- (UIImage *)makeStretchableFlatOutgoing -{ - return [self resizableImageWithCapInsets:UIEdgeInsetsMake(14.0f, 15.0f, 14.0f, 20.0f) - resizingMode:UIImageResizingModeStretch]; -} - -#pragma mark - Incoming message bubbles -+ (UIImage *)bubbleDefaultIncoming -{ - return [[UIImage imageNamed:@"bubble-default-incoming"] makeStretchableDefaultIncoming]; -} - -+ (UIImage *)bubbleDefaultIncomingSelected -{ - return [[UIImage imageNamed:@"bubble-default-incoming-selected"] makeStretchableDefaultIncoming]; -} - -+ (UIImage *)bubbleDefaultIncomingGreen -{ - return [[UIImage imageNamed:@"bubble-default-incoming-green"] makeStretchableDefaultIncoming]; -} - -+ (UIImage *)bubbleSquareIncoming -{ - return [[UIImage imageNamed:@"bubble-square-incoming"] makeStretchableSquareIncoming]; -} - -+ (UIImage *)bubbleSquareIncomingSelected -{ - return [[UIImage imageNamed:@"bubble-square-incoming-selected"] makeStretchableSquareIncoming]; -} - -// JeremyStone -+ (UIImage *)bubbleFlatIncoming -{ - return [[UIImage imageNamed:@"bubble-flat-incoming"] makeStretchableFlatIncoming]; -} - -// JeremyStone -+ (UIImage *)bubbleFlatIncomingSelected -{ - return [[UIImage imageNamed:@"bubble-flat-incoming-selected"] makeStretchableFlatIncoming]; -} - -#pragma mark - Outgoing message bubbles -+ (UIImage *)bubbleDefaultOutgoing -{ - return [[UIImage imageNamed:@"bubble-default-outgoing"] makeStretchableDefaultOutgoing]; -} - -+ (UIImage *)bubbleDefaultOutgoingSelected -{ - return [[UIImage imageNamed:@"bubble-default-outgoing-selected"] makeStretchableDefaultOutgoing]; -} - -+ (UIImage *)bubbleDefaultOutgoingGreen -{ - return [[UIImage imageNamed:@"bubble-default-outgoing-green"] makeStretchableDefaultOutgoing]; -} - -+ (UIImage *)bubbleSquareOutgoing -{ - return [[UIImage imageNamed:@"bubble-square-outgoing"] makeStretchableSquareOutgoing]; -} - -+ (UIImage *)bubbleSquareOutgoingSelected -{ - return [[UIImage imageNamed:@"bubble-square-outgoing-selected"] makeStretchableSquareOutgoing]; -} - -// JeremyStone -+ (UIImage *)bubbleFlatOutgoing -{ - return [[UIImage imageNamed:@"bubble-flat-outgoing-selected"] makeStretchableFlatOutgoing]; -} - -// JeremyStone -+ (UIImage *)bubbleFlatOutgoingSelected -{ - return [[UIImage imageNamed:@"bubble-flat-outgoing"] makeStretchableFlatOutgoing]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.h b/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.h deleted file mode 100755 index 28ef424..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// UIView+AnimationOptionsForCurve.h -// -// Created by Jesse Squires on 3/11/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import - -@interface UIView (AnimationOptionsForCurve) - -+ (UIViewAnimationOptions)animationOptionsForCurve:(UIViewAnimationCurve)curve; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.m b/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.m deleted file mode 100755 index 813d292..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIView+AnimationOptionsForCurve.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// UIView+AnimationOptionsForCurve.m -// -// Created by Jesse Squires on 3/11/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import "UIView+AnimationOptionsForCurve.h" - -@implementation UIView (AnimationOptionsForCurve) - -+ (UIViewAnimationOptions)animationOptionsForCurve:(UIViewAnimationCurve)curve -{ - switch (curve) { - case UIViewAnimationCurveEaseInOut: - return UIViewAnimationOptionCurveEaseInOut; - break; - case UIViewAnimationCurveEaseIn: - return UIViewAnimationOptionCurveEaseIn; - break; - case UIViewAnimationCurveEaseOut: - return UIViewAnimationOptionCurveEaseOut; - break; - case UIViewAnimationCurveLinear: - return UIViewAnimationOptionCurveLinear; - break; - } - - return kNilOptions; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.h b/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.h deleted file mode 100644 index 2bb28ee..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// UIView+DDAddition.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import - -/** - 增加了一些好用的基本属性 - */ - -@interface UIView (DDAddition) - -/** - * Shortcut for frame.origin.x. - * - * Sets frame.origin.x = left - */ -@property (nonatomic) CGFloat left; - -/** - * Shortcut for frame.origin.y - * - * Sets frame.origin.y = top - */ -@property (nonatomic) CGFloat top; - -/** - * Shortcut for frame.origin.x + frame.size.width - * - * Sets frame.origin.x = right - frame.size.width - */ -@property (nonatomic) CGFloat right; - -/** - * Shortcut for frame.origin.y + frame.size.height - * - * Sets frame.origin.y = bottom - frame.size.height - */ -@property (nonatomic) CGFloat bottom; - -/** - * Shortcut for frame.size.width - * - * Sets frame.size.width = width - */ -@property (nonatomic) CGFloat width; - -/** - * Shortcut for frame.size.height - * - * Sets frame.size.height = height - */ -@property (nonatomic) CGFloat height; - -/** - * Shortcut for frame.origin - */ -@property (nonatomic) CGPoint origin; - -/** - * Shortcut for frame.size - */ -@property (nonatomic) CGSize size; - -@property (nonatomic) CGFloat centerX; -@property (nonatomic) CGFloat centerY; - - -/** - * Finds the first descendant view (including this view) that is a member of a particular class. - */ -- (UIView*)descendantOrSelfWithClass:(Class)cls; - -/** - * Finds the first ancestor view (including this view) that is a member of a particular class. - */ -- (UIView*)ancestorOrSelfWithClass:(Class)cls; - -/** - * Removes all subviews. - */ -- (void)removeAllSubviews; - -/** - * The view controller whose view contains this view. - */ -- (UIViewController*)viewController; - -/** - 给View加上圆角和边框 - */ -- (UIView *)roundedCornerAndBorderView; - -- (id)subviewWithTag:(NSInteger)tag; -@end diff --git a/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.m b/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.m deleted file mode 100644 index 7be2c1f..0000000 --- a/TeamTalk/IOSDuoduo/Category/UIView+DDAddition.m +++ /dev/null @@ -1,226 +0,0 @@ -// -// UIView+DDAddition.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - - -#import "UIView+DDAddition.h" -#import - -@implementation UIView (DDAddition) - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)left { - return self.frame.origin.x; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setLeft:(CGFloat)x { - CGRect frame = self.frame; - frame.origin.x = x; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)top { - return self.frame.origin.y; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setTop:(CGFloat)y { - CGRect frame = self.frame; - frame.origin.y = y; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)right { - return self.left + self.width; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setRight:(CGFloat)right { - if(right == self.right){ - return; - } - CGRect frame = self.frame; - frame.origin.x = right - frame.size.width; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)bottom { - return self.top + self.height; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setBottom:(CGFloat)bottom { - if(bottom == self.bottom){ - return; - } - - CGRect frame = self.frame; - frame.origin.y = bottom - frame.size.height; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)centerX { - return self.center.x; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setCenterX:(CGFloat)centerX { - self.center = CGPointMake(centerX, self.center.y); -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)centerY { - return self.center.y; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setCenterY:(CGFloat)centerY { - self.center = CGPointMake(self.center.x, centerY); -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)width { - return self.frame.size.width; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setWidth:(CGFloat)width { - CGRect frame = self.frame; - frame.size.width = width; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGFloat)height { - return self.frame.size.height; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setHeight:(CGFloat)height { - if(height == self.height){ - return; - } - - CGRect frame = self.frame; - frame.size.height = height; - self.frame = frame; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGPoint)origin { - return self.frame.origin; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setOrigin:(CGPoint)origin { - CGRect frame = self.frame; - frame.origin = origin; - self.frame = frame; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGSize)size { - return self.frame.size; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)setSize:(CGSize)size { - CGRect frame = self.frame; - frame.size = size; - self.frame = frame; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (UIView*)descendantOrSelfWithClass:(Class)cls { - if ([self isKindOfClass:cls]) - return self; - - for (UIView* child in self.subviews) { - UIView* it = [child descendantOrSelfWithClass:cls]; - if (it) - return it; - } - - return nil; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (UIView*)ancestorOrSelfWithClass:(Class)cls { - if ([self isKindOfClass:cls]) { - return self; - } else if (self.superview) { - return [self.superview ancestorOrSelfWithClass:cls]; - } else { - return nil; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)removeAllSubviews { - while (self.subviews.count) { - UIView* child = self.subviews.lastObject; - [child removeFromSuperview]; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (UIViewController*)viewController { - for (UIView* next = [self superview]; next; next = next.superview) { - UIResponder* nextResponder = [next nextResponder]; - if ([nextResponder isKindOfClass:[UIViewController class]]) { - return (UIViewController*)nextResponder; - } - } - return nil; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (UIView *)roundedCornerAndBorderView{ - self.clipsToBounds = YES; - self.layer.borderColor = [UIColor grayColor].CGColor; - self.layer.cornerRadius = 5; - self.layer.borderWidth = 1; - - return self; -} - -- (id)subviewWithTag:(NSInteger)tag{ - - for(UIView *view in [self subviews]){ - if(view.tag == tag){ - return view; - } - } - return nil; -} - -@end diff --git a/TeamTalk/IOSDuoduo/DDCONSTANT.h b/TeamTalk/IOSDuoduo/DDCONSTANT.h deleted file mode 100644 index bb7abd4..0000000 --- a/TeamTalk/IOSDuoduo/DDCONSTANT.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// CONSTANT.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#ifndef IOSDuoduo_CONSTANT_h -#define IOSDuoduo_CONSTANT_h - -/** - * Debug模式和Release模式不同的宏定义 - */ - -//-------------------打印-------------------- -#ifdef DEBUG -#define NEED_OUTPUT_LOG 1 -#define Is_CanSwitchServer 1 -#else -#define NEED_OUTPUT_LOG 0 -#define Is_CanSwitchServer 0 -#endif - -#if NEED_OUTPUT_LOG -#define DDLog(xx, ...) NSLog(@"%s(%d): " xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) -#else -#define DDLog(xx, ...) -#endif - -#define IM_PDU_HEADER_LEN 12 -#define IM_PDU_VERSION 1 - -#define SERVER_IP @"122.225.68.125" -#define SERVER_PORT 18008 -#define IMAGE_UPLOAD_IP @"http://122.225.68.125:8600/" - -//-------------------本地化-------------------- -//在所有显示在界面上的字符串进行本地化处理 -#define _(x) NSLocalizedString(x,@"") -#endif - - diff --git a/TeamTalk/IOSDuoduo/DDSearch.h b/TeamTalk/IOSDuoduo/DDSearch.h deleted file mode 100755 index a4fe1ac..0000000 --- a/TeamTalk/IOSDuoduo/DDSearch.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDSearch.h -// Duoduo -// -// Created by 独嘉 on 14-4-22. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import - -typedef void(^SearchCompletion)(NSArray* result,NSError* error); - -@interface DDSearch : NSObject -+ (instancetype)instance; -- (void)searchContent:(NSString*)content completion:(SearchCompletion)completion; -- (void)searchContent:(NSString *)content inRange:(NSArray*)ranges completion:(SearchCompletion)completion; -- (void)searchDepartment:(NSString*)content completion:(SearchCompletion)completion; -@end diff --git a/TeamTalk/IOSDuoduo/DDSearch.m b/TeamTalk/IOSDuoduo/DDSearch.m deleted file mode 100755 index 0fc5c10..0000000 --- a/TeamTalk/IOSDuoduo/DDSearch.m +++ /dev/null @@ -1,258 +0,0 @@ -// -// DDSearch.m -// Duoduo -// -// Created by 独嘉 on 14-4-22. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSearch.h" -#import "DDDatabaseUtil.h" -#import "DDGroupModule.h" -#import "DDUserEntity.h" -#import "DDGroupEntity.h" -#import "SpellLibrary.h" -@interface DDSearch(PrivateAPI) - -- (NSArray*)p_getAllUsersAndGroups; -- (NSString*)p_getIDForObject:(id)sender; - -@end - -@implementation DDSearch -{ - NSArray* _allUsersAndGroups; -} -+ (instancetype)instance -{ - static DDSearch* g_search; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_search = [[DDSearch alloc] init]; - }); - return g_search; -} - -#pragma mark - Public API -- (void)searchContent:(NSString*)content completion:(SearchCompletion)completion -{ - content = [content lowercaseString]; - [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - NSMutableArray* matchesIDArray = [[NSMutableArray alloc] init]; - if (!_allUsersAndGroups || [_allUsersAndGroups count] == 0) - { - _allUsersAndGroups = [self p_getAllUsersAndGroups]; - } - NSMutableArray* matches = NULL; - NSUInteger i,count; - NSString* string; - - count = [_allUsersAndGroups count]; - matches = [NSMutableArray array]; - - // find any match in our keyword array against what was typed - - for (i=0; i< count; i++) - { - NSObject* user = [_allUsersAndGroups objectAtIndex:i]; - string = [(DDUserEntity*)user nick]; - NSString* objectID = [self p_getIDForObject:user]; - - if ([string rangeOfString:content].length > 0) - { - if (![matches containsObject:user]) - { - [matches addObject:user]; - [matchesIDArray addObject:objectID]; - } - } - } - NSString* partialSpell = [[SpellLibrary instance] getSpellForWord:content]; - NSArray* userInSpellLibaray = [[SpellLibrary instance] checkoutForWordsForSpell:partialSpell]; - - if ([userInSpellLibaray count] > 0) - { - [userInSpellLibaray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* objectID = [self p_getIDForObject:obj]; - if (!objectID) - { - return; - } - if (![matches containsObject:obj] && ![matchesIDArray containsObject:objectID]) { - [matches addObject:obj]; - [matchesIDArray addObject:objectID]; - } - }]; - } - - [matches sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { - if ([obj1 isKindOfClass:[DDUserEntity class]]) - { - return NSOrderedAscending; - } - else - { - return NSOrderedDescending; - } - }]; - - dispatch_async(dispatch_get_main_queue(), ^{ - completion(matches,nil); - }); - }]; -} -- (void)searchDepartment:(NSString*)content completion:(SearchCompletion)completion -{ - content = [content lowercaseString]; - [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - NSMutableArray* matchesIDArray = [[NSMutableArray alloc] init]; - if (!_allUsersAndGroups || [_allUsersAndGroups count] == 0) - { - _allUsersAndGroups = [self p_getAllUsersAndGroups]; - } - NSMutableArray* matches = NULL; - NSUInteger i,count; - NSString* string; - - count = [_allUsersAndGroups count]; - matches = [NSMutableArray array]; - - // find any match in our keyword array against what was typed - - for (i=0; i< count; i++) - { - NSObject* user = [_allUsersAndGroups objectAtIndex:i]; - string = [(DDUserEntity*)user department]; - NSString* objectID = [self p_getIDForObject:user]; - - if ([string rangeOfString:content].length > 0) - { - if (![matches containsObject:user]) - { - [matches addObject:user]; - [matchesIDArray addObject:objectID]; - } - } - } - NSString* partialSpell = [[SpellLibrary instance] getSpellForWord:content]; - NSArray* userInSpellLibaray = [[SpellLibrary instance] checkoutForWordsForSpell_Deparment:partialSpell]; - - if ([userInSpellLibaray count] > 0) - { - [userInSpellLibaray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* objectID = [self p_getIDForObject:obj]; - if (!objectID) - { - return; - } - if (![matches containsObject:obj] && ![matchesIDArray containsObject:objectID]) { - [matches addObject:obj]; - [matchesIDArray addObject:objectID]; - } - }]; - } - - [matches sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { - if ([obj1 isKindOfClass:[DDUserEntity class]]) - { - return NSOrderedAscending; - } - else - { - return NSOrderedDescending; - } - }]; - - dispatch_async(dispatch_get_main_queue(), ^{ - completion(matches,nil); - }); - }]; -} -- (void)searchContent:(NSString *)content inRange:(NSArray*)ranges completion:(SearchCompletion)completion -{ - [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - NSUInteger i,count; - NSString* string; - - count = [ranges count]; - NSMutableArray* matches = [[NSMutableArray alloc] init]; - - // find any match in our keyword array against what was typed - - for (i=0; i< count; i++) - { - DDUserEntity* user = [ranges objectAtIndex:i]; - string = user.nick; - if ([string rangeOfString:content].length > 0) - { - if (![matches containsObject:user]) - { - [matches addObject:user]; - } - } - } - NSString* partialSpell = [[SpellLibrary instance] getSpellForWord:content]; - NSArray* userInSpellLibaray = [[SpellLibrary instance] checkoutForWordsForSpell:partialSpell]; - - NSMutableArray* rangsIDs = [[NSMutableArray alloc] init]; - [ranges enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* ID = [self p_getIDForObject:obj]; - [rangsIDs addObject:ID]; - }]; - - if ([userInSpellLibaray count] > 0) - { - for (NSInteger index = 0; index < [userInSpellLibaray count]; index ++) - { - id object = userInSpellLibaray[index]; - NSString* objectID = [self p_getIDForObject:object]; - if (!objectID) { - continue; - } - if (![matches containsObject:object] && [rangsIDs containsObject:objectID]) { - [matches addObject:object]; - } - } -// [userInSpellLibaray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { -// NSString* objectID = [self p_getIDForObject:obj]; -// if (!objectID) -// { -// return; -// } -// if (![matches containsObject:obj] && [ranges containsObject:obj]) { -// [matches addObject:[obj copy]]; -// } -// }]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(matches,nil); - }); - }]; -} - -#pragma mark PrivateAPI -- (NSArray*)p_getAllUsersAndGroups -{ - //导入所有的用户 - __block NSMutableArray* allSessions = [NSMutableArray new]; - dispatch_semaphore_t sema = dispatch_semaphore_create(0); - [[DDDatabaseUtil instance] getAllUsers:^(NSArray *contacts, NSError *error) { - [allSessions addObjectsFromArray:contacts]; - dispatch_semaphore_signal(sema); - }]; - dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); - return allSessions; -} - -- (NSString*)p_getIDForObject:(id)sender -{ - NSString* objectID = nil; - if ([sender isKindOfClass:[DDUserEntity class]]) - { - objectID = [(DDUserEntity*)sender objID]; - } - else if ([sender isKindOfClass:[DDGroupEntity class]]) - { - objectID = [(DDGroupEntity*)sender objID]; - } - - return objectID; -} -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.h b/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.h deleted file mode 100644 index d5527a7..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDBaseEntity.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import - -@interface DDBaseEntity : NSObject -@property(assign)long lastUpdateTime; -@property(copy)NSString *objID; -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.m b/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.m deleted file mode 100644 index e489d2e..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDBaseEntity.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDBaseEntity.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDBaseEntity.h" - -@implementation DDBaseEntity - -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.h b/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.h deleted file mode 100644 index e499ae1..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.h +++ /dev/null @@ -1,36 +0,0 @@ -/************************************************************ - * @file GroupEntity.h - * @author 快刀 - * summery 群实体信息 - ************************************************************/ - -#import -#import "DDBaseEntity.h" -static NSString* const GROUP_PRE = @"group_"; //group id 前缀 - -enum -{ - GROUP_TYPE_FIXED = 1, //固定群 - GROUP_TYPE_TEMPORARY, //临时群 -}; - -@interface DDGroupEntity : DDBaseEntity - -@property(nonatomic,strong) NSString* groupCreatorId; //群创建者ID -@property(nonatomic,assign) int groupType; //群类型 -@property(nonatomic,strong) NSString* name; //群名称 -@property(nonatomic,strong) NSString* avatar; //群头像 -@property(nonatomic,strong) NSMutableArray* groupUserIds; //群用户列表ids -@property(nonatomic,readonly)NSMutableArray* fixGroupUserIds;//固定的群用户列表IDS,用户生成群头像 -@property(strong)NSString *lastMsg; -@property(assign)BOOL isShield; -//对群成员排序 --(void)sortGroupUsers; - --(void)copyContent:(DDGroupEntity*)entity; - - -- (void)addFixOrderGroupUserIDS:(NSString*)ID; -+(DDGroupEntity *)dicToGroupEntity:(NSDictionary *)dic; -+(NSString *)getSessionId:(NSString *)groupId; -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.m b/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.m deleted file mode 100644 index ad274c5..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDGroupEntity.m +++ /dev/null @@ -1,105 +0,0 @@ -/************************************************************ - * @file GroupEntity.m - * @author 快刀 - * summery 群实体信息 - ************************************************************/ - -#import "DDGroupEntity.h" -#import "DDUserEntity.h" -#import "NSDictionary+Safe.h" -@implementation DDGroupEntity - -- (void)setGroupUserIds:(NSMutableArray *)groupUserIds -{ - if (_groupUserIds) - { - _groupUserIds = nil; - _fixGroupUserIds = nil; - } - _groupUserIds = groupUserIds; - [groupUserIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [self addFixOrderGroupUserIDS:obj]; - }]; - -} - - - -//-(void)sortGroupUsers -//{ -// if([_groupUserIds count] < 2) -// return; -// [_groupUserIds sortUsingComparator: -// ^NSComparisonResult(NSString* uId1, NSString* uId2) -// { -// StateMaintenanceManager* stateMaintenanceManager = [StateMaintenanceManager instance]; -// UserState user1OnlineState = [stateMaintenanceManager getUserStateForUserID:uId1]; -// UserState user2OnlineState = [stateMaintenanceManager getUserStateForUserID:uId2]; -// if((user1OnlineState == USER_STATUS_ONLINE) && -// (user2OnlineState == USER_STATUS_LEAVE || user2OnlineState == USER_STATUS_OFFLINE)) -// { -// return NSOrderedAscending; -// } -// else if(user1OnlineState == USER_STATUS_LEAVE && user2OnlineState == USER_STATUS_OFFLINE) -// { -// return NSOrderedAscending; -// } -// else if (user2OnlineState == USER_STATUS_ONLINE && -// (user1OnlineState == USER_STATUS_LEAVE || user1OnlineState == USER_STATUS_OFFLINE)) -// { -// return NSOrderedDescending; -// } -// else if(user2OnlineState == USER_STATUS_LEAVE && user1OnlineState == USER_STATUS_OFFLINE) -// { -// return NSOrderedDescending; -// } -// else -// { -// return NSOrderedSame; -// } -// }]; -//} - --(void)copyContent:(DDGroupEntity*)entity -{ - self.groupType = entity.groupType; - self.lastUpdateTime = entity.lastUpdateTime; - self.name = entity.name; - self.avatar = entity.avatar; - self.groupUserIds = entity.groupUserIds; -} - -+(NSString *)getSessionId:(NSString *)groupId -{ - return groupId; -} - -- (void)addFixOrderGroupUserIDS:(NSString*)ID -{ - if (!_fixGroupUserIds) - { - _fixGroupUserIds = [[NSMutableArray alloc] init]; - } - [_fixGroupUserIds addObject:ID]; -} - -+(DDGroupEntity *)dicToGroupEntity:(NSDictionary *)dic -{ - DDGroupEntity *group = [DDGroupEntity new]; - group.groupCreatorId=[dic safeObjectForKey:@"creatID"]; - group.objID = [dic safeObjectForKey:@"groupId"]; - group.avatar = [dic safeObjectForKey:@"avatar"]; - group.GroupType = [[dic safeObjectForKey:@"groupType"] integerValue]; - group.name = [dic safeObjectForKey:@"name"]; - group.avatar = [dic safeObjectForKey:@"avatar"]; - group.isShield = [[dic safeObjectForKey:@"isshield"] boolValue]; - NSString *string =[dic safeObjectForKey:@"Users"]; - NSArray *array = [string componentsSeparatedByString:@"-"]; - if ([array count] >0) { - group.groupUserIds=[array copy]; - } - group.lastMsg =[dic safeObjectForKey:@"lastMessage"]; - group.lastUpdateTime=[[dic safeObjectForKey:@"lastUpdateTime"] longValue]; - return group; -} -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.h b/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.h deleted file mode 100644 index 0c7b69f..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.h +++ /dev/null @@ -1,74 +0,0 @@ -// -// DDMessageEntity.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import -@class ChattingModule; -@class DDDataInputStream; -typedef NS_ENUM(NSUInteger, DDMessageType) -{ - MESSAGE_TYPE_SINGLE =1, //单个人会话消息 - MESSAGE_TYPE_TEMP_GROUP =2, //临时群消息. -}; -typedef NS_ENUM(NSUInteger, DDMessageContentType) -{ - DDMessageTypeText = 1, - DDMessageTypeVoice, - DDMessageTypeImage, - DDGroup_Message_TypeText=17, - DDGroup_MessageTypeVoice=18, -}; - -typedef NS_ENUM(NSUInteger, DDMessageState) -{ - DDMessageSending =0, - DDMessageSendFailure =1, - DDmessageSendSuccess =2 -}; - -//图片 -#define DD_MESSAGE_IMAGE_PREFIX @"&$#@~^@[{:" -#define DD_MESSAGE_IMAGE_SUFFIX @":}]&$~@#@" - -//语音 -#define VOICE_LENGTH @"voiceLength" -#define DDVOICE_PLAYED @"voicePlayed" - -//voice -#define DD_IMAGE_LOCAL_KEY @"local" -#define DD_IMAGE_URL_KEY @"url" - -//商品 -#define DD_COMMODITY_ORGPRICE @"orgprice" -#define DD_COMMODITY_PICURL @"picUrl" -#define DD_COMMODITY_PRICE @"price" -#define DD_COMMODITY_TIMES @"times" -#define DD_COMMODITY_TITLE @"title" -#define DD_COMMODITY_URL @"URL" -#define DD_COMMODITY_ID @"CommodityID" - -@interface DDMessageEntity : NSObject -@property(strong) NSString * msgID; //MessageID -@property(nonatomic,assign) DDMessageType msgType; //消息类型 -@property(nonatomic,assign) NSUInteger msgTime; //消息收发时间 -@property(nonatomic,strong) NSString* sessionId; //会话id, -@property(assign)NSUInteger seqNo; -@property(nonatomic,strong) NSString* senderId; //发送者的Id,群聊天表示发送者id -@property(nonatomic,strong) NSString* msgContent; //消息内容,若为非文本消息则是json -@property(nonatomic,strong) NSString* toUserID; //发消息的用户ID -@property(nonatomic,strong) NSMutableDictionary* info; //一些附属的属性,包括语音时长 -@property(assign)DDMessageContentType msgContentType; -@property(nonatomic,strong) NSString* attach; -//@property(nonatomic,assign) BOOL isSend; -@property(nonatomic,assign) DDMessageState state; //消息发送状态 -- (DDMessageEntity*)initWithMsgID:(NSString *)ID msgType:(DDMessageType)msgType msgTime:(NSUInteger)msgTime sessionID:(NSString*)sessionID senderID:(NSString*)senderID msgContent:(NSString*)msgContent toUserID:(NSString*)toUserID; -+(DDMessageEntity *)makeMessage:(NSString *)content Module:(ChattingModule *)module MsgType:(DDMessageContentType )type; -+(DDMessageEntity *)makeMessageFromStream:(DDDataInputStream *)bodyData; --(BOOL)isGroupMessage; --(BOOL)isImageMessage; --(BOOL)isSendBySelf; -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.m b/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.m deleted file mode 100644 index 8c8c083..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDMessageEntity.m +++ /dev/null @@ -1,224 +0,0 @@ -// -// DDMessageEntity.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDMessageEntity.h" -#import "DDUserModule.h" -#import "EmotionsModule.h" -#import "ChattingModule.h" -#import "Encapsulator.h" -#import "DDMessageModule.h" -#import "DDDataInputStream.h" -#import "RuntimeStatus.h" -@interface DDMessageEntity(private) - -- (NSString*)getNewMessageContentFromContent:(NSString*)content; - -@end -@implementation DDMessageEntity - -- (DDMessageEntity*)initWithMsgID:(NSString *)ID msgType:(DDMessageType)msgType msgTime:(NSUInteger)msgTime sessionID:(NSString*)sessionID senderID:(NSString*)senderID msgContent:(NSString*)msgContent toUserID:(NSString*)toUserID -{ - self = [super init]; - if (self) - { - - _msgID = ID; - _msgType = msgType; - _msgTime = msgTime; - _sessionId = [sessionID copy]; - _senderId = [senderID copy]; - _msgContent = [self getNewMessageContentFromContent:msgContent]; - _toUserID = [toUserID copy]; - _info = [[NSMutableDictionary alloc] init]; - } - return self; -} -- (id)copyWithZone:(NSZone *)zone -{ - DDMessageEntity *ddmentity =[[[self class] allocWithZone:zone] initWithMsgID:_msgID msgType:_msgType msgTime:_msgTime sessionID:_sessionId senderID:_senderId msgContent:_msgContent toUserID:_toUserID]; - return ddmentity; -} - -#pragma mark - -#pragma mark - privateAPI -- (NSString*)getNewMessageContentFromContent:(NSString*)content -{ - - NSMutableString *msgContent = [NSMutableString stringWithString:content?content:@""]; - NSMutableString *resultContent = [NSMutableString string]; - NSRange startRange; - NSDictionary* emotionDic = [EmotionsModule shareInstance].emotionUnicodeDic; - while ((startRange = [msgContent rangeOfString:@"["]).location != NSNotFound) { - if (startRange.location > 0) - { - NSString *str = [msgContent substringWithRange:NSMakeRange(0, startRange.location)]; - DDLog(@"[前文本内容:%@",str); - [msgContent deleteCharactersInRange:NSMakeRange(0, startRange.location)]; - startRange.location=0; - [resultContent appendString:str]; - } - - NSRange endRange = [msgContent rangeOfString:@"]"]; - if (endRange.location != NSNotFound) { - NSRange range; - range.location = 0; - range.length = endRange.location + endRange.length; - NSString *emotionText = [msgContent substringWithRange:range]; - [msgContent deleteCharactersInRange: - NSMakeRange(0, endRange.location + endRange.length)]; - - DDLog(@"类似表情字串:%@",emotionText); - NSString *emotion = emotionDic[emotionText]; - if (emotion) { - // 表情 - [resultContent appendString:emotion]; - } else - { - [resultContent appendString:emotionText]; - } - } else { - DDLog(@"没有[匹配的后缀"); - break; - } - } - - if ([msgContent length] > 0) - { - [resultContent appendString:msgContent]; - } - return resultContent; -} -+(DDMessageEntity *)makeMessage:(NSString *)content Module:(ChattingModule *)module MsgType:(DDMessageContentType )type -{ - NSUInteger msgTime = [[NSDate date] timeIntervalSince1970]; - NSString* senderID = [RuntimeStatus instance].user.objID; - DDMessageEntity* message = [[DDMessageEntity alloc] initWithMsgID:[DDMessageModule getMessageID] msgType:module.sessionEntity.sessionType msgTime:msgTime sessionID:module.sessionEntity.sessionID senderID:senderID msgContent:content toUserID:module.sessionEntity.sessionID]; - message.state = DDMessageSending; - message.msgContentType=type; - [module addShowMessage:message]; - [module updateSessionUpdateTime:message.msgTime]; - return message; -} --(BOOL)isGroupMessage -{ - if (self.msgType == MESSAGE_TYPE_SINGLE ) { - return NO; - } - return YES; -} --(BOOL)isGroupVoiceMessage -{ - if (self.msgType == DDGroup_Message_TypeText || self.msgType == DDGroup_MessageTypeVoice) { - return YES; - } - return NO; -} --(BOOL)isImageMessage -{ - if (self.msgContentType == DDMessageTypeImage) { - return YES; - } - return NO; -} --(BOOL)isSendBySelf -{ - if ([self.senderId isEqualToString:TheRuntime.user.objID]) { - return YES; - } - return NO; -} -+(DDMessageEntity *)makeMessageFromStream:(DDDataInputStream *)bodyData -{ - int32_t seqNo = [bodyData readInt]; - NSString *fromUserId = [bodyData readUTF]; - NSString *toUserId = [bodyData readUTF]; - int32_t msgTime = [bodyData readInt]; - int8_t msgType = [bodyData readChar]; - //int8_t msgRenderType = [bodyData readChar]; - DDMessageEntity *msg = [[DDMessageEntity alloc ] init]; - msg.msgType = msgType; - msg.msgContentType = msgType; - NSString* messageContent = nil; - NSMutableDictionary* info = [[NSMutableDictionary alloc] init]; - if (msgType == DDMessageTypeVoice || msgType == DDGroup_MessageTypeVoice) { - if (msgType ==DDMessageTypeVoice) { - msg.msgType = MESSAGE_TYPE_SINGLE; - msg.msgContentType =DDMessageTypeVoice; - }else{ - msg.msgType = MESSAGE_TYPE_TEMP_GROUP; - msg.msgContentType =DDGroup_MessageTypeVoice; - } - int32_t dataLength = [bodyData readInt]; - NSData* data = [bodyData readDataWithLength:dataLength]; - NSData* voiceData = [data subdataWithRange:NSMakeRange(4, [data length] - 4)]; - NSString* filename = [NSString stringWithString:[Encapsulator defaultFileName]]; - if ([voiceData writeToFile:filename atomically:YES]) - { - messageContent = filename; - } - else - { - messageContent = @"语音存储出错"; - } - NSData* voiceLengthData = [data subdataWithRange:NSMakeRange(0, 4)]; - - int8_t ch1; - [voiceLengthData getBytes:&ch1 range:NSMakeRange(0,1)]; - ch1 = ch1 & 0x0ff; - - int8_t ch2; - [voiceLengthData getBytes:&ch2 range:NSMakeRange(1,1)]; - ch2 = ch2 & 0x0ff; - - int32_t ch3; - [voiceLengthData getBytes:&ch3 range:NSMakeRange(2,1)]; - ch3 = ch3 & 0x0ff; - - int32_t ch4; - [voiceLengthData getBytes:&ch4 range:NSMakeRange(3,1)]; - ch4 = ch4 & 0x0ff; - - if ((ch1 | ch2 | ch3 | ch4) < 0){ - @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; - } - int voiceLength = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); - [info setObject:@(voiceLength) forKey:VOICE_LENGTH]; - [info setObject:@(0) forKey:DDVOICE_PLAYED]; - }else - { - messageContent = (NSString *)[bodyData readUTF]; - if ([messageContent hasPrefix:DD_MESSAGE_IMAGE_PREFIX]) - { - msg.msgContentType = DDMessageTypeImage; - } - } - NSString *attach = [bodyData readUTF]; - msg.msgID = [DDMessageModule getMessageID]; - msg.seqNo = seqNo; - msg.msgTime = msgTime; - msg.toUserID=toUserId; - msg.msgContent = [msg getNewMessageContentFromContent:messageContent]; - msg.attach = attach; - if([msg isGroupMessage]) - { - msg.sessionId = toUserId; //群聊时,toUserId表示会话ID - msg.senderId = fromUserId; //群聊时,fromUserId表示发送者I - } - else - { - msg.sessionId = fromUserId; //单人时,fromUserId表示发送者ID,作为会话id - msg.senderId = fromUserId; //单人时,fromUserId表示发送者ID - - } - if ([msg.sessionId isEqualToString:TheRuntime.userID]) { - msg.sessionId = toUserId; - } - msg.info=info; - return msg; -} -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.h b/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.h deleted file mode 100644 index 63c032e..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// DDSessionEntity.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import -typedef enum -{ - SESSIONTYPE_SINGLE = 1, //单个用户会话 - SESSIONTYPE_GROUP = 2, //群会话 - SESSIONTYPE_TEMP_GROUP = 3, //临时群会话. - -}SessionType; - -@interface DDSessionEntity : NSObject -@property (nonatomic,retain)NSString* sessionID; -@property (nonatomic,assign)SessionType sessionType; -@property (nonatomic,readonly)NSString* name; -@property (nonatomic,readonly)NSUInteger timeInterval; -@property(nonatomic,strong,readonly)NSString* orginId; -//@property(nonatomic,strong,readonly)NSArray* groupUsers; --(NSArray*)groupUsers; -@property(nonatomic,strong,readonly)NSArray* groupName; - -/** - * 创建一个session,只需赋值sessionID和Type即可 - * - * @param sessionID 会话ID,群组传入groupid,p2p传入对方的userid - * @param type 会话的类型 - * - * @return - */ -- (id)initWithSessionID:(NSString*)sessionID type:(SessionType)type; -- (void)updateUpdateTime:(NSUInteger)date; --(NSString *)getSessionGroupID; --(void)setSessionName:(NSString *)theName; --(BOOL)isGroup; -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.m b/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.m deleted file mode 100644 index 1f7c861..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDSessionEntity.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// DDSessionEntity.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSessionEntity.h" -#import "DDUserModule.h" -#import "DDDatabaseUtil.h" -#import "DDGroupEntity.h" -#import "DDGroupModule.h" - -@implementation DDSessionEntity -@synthesize name; -@synthesize timeInterval; -- (void)setSessionID:(NSString *)sessionID -{ - _sessionID = [sessionID copy]; - name = nil; - timeInterval = 0; -} - -- (void)setSessionType:(SessionType)sessionType -{ - _sessionType = sessionType; - name = nil; - timeInterval = 0; -} - -- (NSString*)name -{ - if (!name) - { - switch (self.sessionType) - { - case SESSIONTYPE_SINGLE: - { - [[DDUserModule shareInstance] getUserForUserID:_sessionID Block:^(DDUserEntity *user) { - if ([user.nick length] > 0) - { - name = user.nick; - } - else - { - name = user.name; - } - - }]; - } - break; - case SESSIONTYPE_TEMP_GROUP: - { - DDGroupEntity* group = [[DDGroupModule instance] getGroupByGId:_sessionID]; - name=group.name; - } - break; - } - } - return name; -} --(void)setSessionName:(NSString *)theName -{ - name = theName; -} -- (NSUInteger)timeInterval -{ - if (timeInterval == 0) - { - switch (_sessionType) - { - case SESSIONTYPE_SINGLE: - { - [[DDUserModule shareInstance] getUserForUserID:_sessionID Block:^(DDUserEntity *user) { - timeInterval = user.lastUpdateTime; - }]; - - } - break; - } - } - return timeInterval; -} - -#pragma mark - -#pragma mark Public API -- (id)initWithSessionID:(NSString*)sessionID type:(SessionType)type -{ - self = [super init]; - if (self) - { - self.sessionID = sessionID; - self.sessionType = type; - } - return self; -} - -- (void)updateUpdateTime:(NSUInteger)date -{ - timeInterval = date; - if (_sessionType == SESSIONTYPE_SINGLE ) { - - [[DDUserModule shareInstance] getUserForUserID:_sessionID Block:^(DDUserEntity *user) { - if (user) - { - user.lastUpdateTime = timeInterval; - [[DDDatabaseUtil instance] updateContact:user inDBCompletion:^(NSError *error) { - - }]; - } - - }]; - }else - { -// DDGroupEntity *group= [[DDGroupModule instance] getGroupByGId:_sessionID]; -// group.lastUpdateTime=timeInterval; -// [[DDDatabaseUtil instance] updateRecentGroup:group completion:^(NSError *error) { -// -// }]; - } -} --(NSArray*)groupUsers -{ - if(SESSIONTYPE_GROUP == self.sessionType || SESSIONTYPE_TEMP_GROUP == self.sessionType) - { - DDGroupEntity* group = [[DDGroupModule instance] getGroupByGId:_sessionID]; - return group.groupUserIds; - } - else - { - DDLog(@"groupUsers error session type is :%d",self.sessionType); - return nil; - } -} --(NSString *)getSessionGroupID -{ - return _sessionID; -} --(BOOL)isGroup -{ - if(SESSIONTYPE_GROUP == self.sessionType || SESSIONTYPE_TEMP_GROUP == self.sessionType) - { - return YES; - } - return NO; -} -@end diff --git a/TeamTalk/IOSDuoduo/Entity/DDUserEntity.h b/TeamTalk/IOSDuoduo/Entity/DDUserEntity.h deleted file mode 100644 index 681542a..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDUserEntity.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// DDUserEntity.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import -#import "DDepartment.h" -#import "DDBaseEntity.h" -#define DD_USER_INFO_SHOP_ID_KEY @"shopID" - -@interface DDUserEntity : DDBaseEntity -@property(nonatomic,strong) NSString *name; //用户名 -@property(nonatomic,strong) NSString *nick; //用户昵称 -@property(nonatomic,strong) NSString *avatar; //用户头像 -@property(nonatomic,strong) NSString *department; //用户部门 -@property(strong)NSString *position; -@property(assign)NSInteger roleStatus; -@property(assign)NSInteger sex; -@property(strong)NSString *departId; -@property(assign)NSInteger jobNum; -@property(strong)NSString *telphone; -@property(strong)NSString *email; -@property(strong)NSString *token; -@property(strong)NSString *title; -@property(strong)NSString *pyname; -@property(nonatomic,assign) NSInteger userRole; //用户角色 -@property(nonatomic,retain) NSMutableDictionary* info; //用户附属信息 -- (id)initWithUserID:(NSString*)userID name:(NSString*)name nick:(NSString*)nick avatar:(NSString*)avatar userRole:(NSInteger)userRole userUpdated:(NSUInteger)updated; -+(id)dicToUserEntity:(NSDictionary *)dic; -+(NSMutableDictionary *)userToDic:(DDUserEntity *)user; --(void)sendEmail; --(void)callPhoneNum; --(void)checkUserInfo; -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Entity/DDUserEntity.m b/TeamTalk/IOSDuoduo/Entity/DDUserEntity.m deleted file mode 100644 index 11c4f50..0000000 --- a/TeamTalk/IOSDuoduo/Entity/DDUserEntity.m +++ /dev/null @@ -1,152 +0,0 @@ -// -// DDUserEntity.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDUserEntity.h" -#import "NSDictionary+Safe.h" -#import "PublicProfileViewControll.h" -@implementation DDUserEntity -- (id)initWithUserID:(NSString*)userID name:(NSString*)name nick:(NSString*)nick avatar:(NSString*)avatar userRole:(NSInteger)userRole userUpdated:(NSUInteger)updated -{ - self = [super init]; - if (self) - { - self.objID = [userID copy]; - _name = [name copy]; - _nick = [nick copy]; - _avatar = [avatar copy]; - _userRole = userRole; - self.lastUpdateTime = updated; - _info = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (NSString*)avatar -{ - if (![_avatar hasSuffix:@"_100x100"]) - { - return [NSString stringWithFormat:@"%@_100x100",_avatar]; - } - return _avatar; -} - -+(NSMutableDictionary *)userToDic:(DDUserEntity *)user -{ - NSMutableDictionary *dic = [NSMutableDictionary new]; - [dic safeSetObject:user.objID forKey:@"userId"]; - [dic safeSetObject:user.name forKey:@"name"]; - [dic safeSetObject:user.nick forKey:@"nick"]; - [dic safeSetObject:user.avatar forKey:@"avatar"]; - [dic safeSetObject:user.departId forKey:@"departId"]; - [dic safeSetObject:user.email forKey:@"email"]; - [dic safeSetObject:user.department forKey:@"department"]; - [dic safeSetObject:user.position forKey:@"position"]; - [dic safeSetObject:user.token forKey:@"token"]; - [dic safeSetObject:[NSNumber numberWithInt:user.jobNum] forKey:@"jobNum"]; - [dic safeSetObject:user.telphone forKey:@"telphone"]; - [dic safeSetObject:user.department forKey:@"departName"]; - [dic safeSetObject:[NSNumber numberWithInt:user.sex ]forKey:@"sex"]; - [dic safeSetObject:[NSNumber numberWithInt:user.roleStatus] forKey:@"roleStatus"]; - [dic safeSetObject:[NSNumber numberWithInt:user.userRole] forKey:@"userRole"]; - [dic safeSetObject:[NSNumber numberWithInt:user.lastUpdateTime] forKey:@"lastUpdateTime"]; - return dic; -} -- (void) encodeWithCoder:(NSCoder *)encoder { - - [encoder encodeObject:self.objID forKey:@"userId"]; - [encoder encodeObject:self.name forKey:@"name"]; - [encoder encodeObject:self.nick forKey:@"nick"]; - [encoder encodeObject:self.avatar forKey:@"avatar"]; - [encoder encodeObject:self.departId forKey:@"departId"]; - [encoder encodeObject:self.email forKey:@"email"]; - [encoder encodeObject:self.department forKey:@"department"]; - [encoder encodeObject:self.position forKey:@"position"]; - [encoder encodeObject:self.token forKey:@"token"]; - [encoder encodeObject:[NSNumber numberWithInt:self.jobNum] forKey:@"jobNum"]; - [encoder encodeObject:self.telphone forKey:@"telphone"]; - [encoder encodeObject:[NSNumber numberWithInt:self.sex ]forKey:@"sex"]; - [encoder encodeObject:[NSNumber numberWithInt:self.roleStatus] forKey:@"roleStatus"]; - [encoder encodeObject:[NSNumber numberWithInt:self.userRole] forKey:@"userRole"]; - [encoder encodeObject:[NSNumber numberWithInt:self.lastUpdateTime] forKey:@"lastUpdateTime"]; -} -- (id)initWithCoder:(NSCoder *)aDecoder -{ - if((self = [super init])) { - self.objID = [aDecoder decodeObjectForKey:@"userId"]; - self.name = [aDecoder decodeObjectForKey:@"name"]; - self.nick = [aDecoder decodeObjectForKey:@"nickName"]; - self.title = [aDecoder decodeObjectForKey:@"title"]; - self.avatar = [aDecoder decodeObjectForKey:@"avatar"]; - self.department = [aDecoder decodeObjectForKey:@"department"]; - self.departId = [aDecoder decodeObjectForKey:@"departId"]; - self.email = [aDecoder decodeObjectForKey:@"email"]; - self.position = [aDecoder decodeObjectForKey:@"position"]; - self.token = [aDecoder decodeObjectForKey:@"token"]; - self.jobNum = [[aDecoder - decodeObjectForKey:@"jobNum"] integerValue]; - self.telphone = [aDecoder decodeObjectForKey:@"telphone"]; - self.sex = [[aDecoder decodeObjectForKey:@"sex"] integerValue]; - self.roleStatus = [[aDecoder decodeObjectForKey:@"roleStatus"] integerValue]; - - } - return self; - -} -//@"serverTime":@(serverTime), -//@"result":@(loginResult), -//@"state":@(state), -//@"nickName":nickName, -//@"userId":userId, -//@"title":title, -//@"position":position, -//@"isDeleted":@(isDeleted), -//@"sex":@(sex), -//@"departId":departId, -//@"jobNum":@(jobNum), -//@"telphone":telphone, -//@"email":email, -//@"creatTime":@(creatTime), -//@"updateTime":@(updateTime), -//@"token":token, -//@"userType":@(userType) -+(id)dicToUserEntity:(NSDictionary *)dic -{ - DDUserEntity *user = [DDUserEntity new]; - user.objID = [dic safeObjectForKey:@"userId"]; - user.name = [dic safeObjectForKey:@"name"]; - user.nick = [dic safeObjectForKey:@"nickName"]; - user.title = [dic safeObjectForKey:@"title"]; - user.avatar = [dic safeObjectForKey:@"avatar"]; - user.department = [dic safeObjectForKey:@"department"]; - user.departId =[dic safeObjectForKey:@"departId"]; - user.email = [dic safeObjectForKey:@"email"]; - user.position = [dic safeObjectForKey:@"position"]; - user.token = [dic safeObjectForKey:@"token"]; - user.jobNum = [[dic - safeObjectForKey:@"jobNum"] integerValue]; - user.telphone = [dic safeObjectForKey:@"telphone"]; - user.sex = [[dic safeObjectForKey:@"sex"] integerValue]; - user.roleStatus = [[dic safeObjectForKey:@"roleStatus"] integerValue]; - user.lastUpdateTime = [[dic safeObjectForKey:@"lastUpdateTime"] integerValue]; - user.pyname = [dic safeObjectForKey:@"pyname"]; - return user; - -} --(void)sendEmail -{ - NSString *stringURL =[NSString stringWithFormat:@"mailto:%@",self.email]; - NSURL *url = [NSURL URLWithString:stringURL]; - [[UIApplication sharedApplication] openURL:url]; -} --(void)callPhoneNum -{ - NSString *string = [NSString stringWithFormat:@"tel:%@",self.telphone]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/IMBaseDefine.pb.h b/TeamTalk/IOSDuoduo/IMBaseDefine.pb.h deleted file mode 100644 index 29d7012..0000000 --- a/TeamTalk/IOSDuoduo/IMBaseDefine.pb.h +++ /dev/null @@ -1,1426 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "ProtocolBuffers.h" - -// @@protoc_insertion_point(imports) - -@class ClientGroupInfo; -@class ClientGroupInfoBuilder; -@class ClientGroupMsg; -@class ClientGroupMsgBuilder; -@class ClientGroupUnReadCnt; -@class ClientGroupUnReadCntBuilder; -@class ClientMsgInfo; -@class ClientMsgInfoBuilder; -@class ClientOfflineFileInfo; -@class ClientOfflineFileInfoBuilder; -@class ClientUnReadInfo; -@class ClientUnReadInfoBuilder; -@class ClientUserInfo; -@class ClientUserInfoBuilder; -@class ClientUserStat; -@class ClientUserStatBuilder; -@class IpAddr; -@class IpAddrBuilder; -@class ServerGroupInfo; -@class ServerGroupInfoBuilder; -@class ServerGroupMsg; -@class ServerGroupMsgBuilder; -@class ServerGroupUnReadCnt; -@class ServerGroupUnReadCntBuilder; -@class ServerMsgInfo; -@class ServerMsgInfoBuilder; -@class ServerOfflineFileInfo; -@class ServerOfflineFileInfoBuilder; -@class ServerUnReadInfo; -@class ServerUnReadInfoBuilder; -@class ServerUserInfo; -@class ServerUserInfoBuilder; -@class ServerUserStat; -@class ServerUserStatBuilder; -#ifndef __has_feature - #define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif // __has_feature - -#ifndef NS_RETURNS_NOT_RETAINED - #if __has_feature(attribute_ns_returns_not_retained) - #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) - #else - #define NS_RETURNS_NOT_RETAINED - #endif -#endif - -typedef enum { - ResultTypeRefuseReasonNone = 0, - ResultTypeRefuseReasonNoMsgServer = 1, - ResultTypeRefuseReasonMsgServerFull = 2, - ResultTypeRefuseReasonNoDbServer = 3, - ResultTypeRefuseReasonNoLoginServer = 4, - ResultTypeRefuseReasonNoRouteServer = 5, - ResultTypeRefuseReasonDbValidateFailed = 6, - ResultTypeResuseReasonVersionTooOld = 7, -} ResultType; - -BOOL ResultTypeIsValidValue(ResultType value); - -typedef enum { - UserTypeUserTypeNormal = 0, -} UserType; - -BOOL UserTypeIsValidValue(UserType value); - -typedef enum { - KickReasonTypeKickReasonDuplicateUser = 1, -} KickReasonType; - -BOOL KickReasonTypeIsValidValue(KickReasonType value); - -typedef enum { - OnlineListTypeOnlineListTypeFriendList = 1, -} OnlineListType; - -BOOL OnlineListTypeIsValidValue(OnlineListType value); - -typedef enum { - UserStatTypeUserStatusOnline = 1, - UserStatTypeUserStatusOffline = 2, - UserStatTypeUserStatusLeave = 3, -} UserStatType; - -BOOL UserStatTypeIsValidValue(UserStatType value); - -typedef enum { - SessionTypeSessionTypeSingle = 1, - SessionTypeSessionTypeGroup = 2, - SessionTypeSessionTypeTempGroup = 3, -} SessionType; - -BOOL SessionTypeIsValidValue(SessionType value); - -typedef enum { - GroupTypeNormalGroup = 0, - GroupTypeTemporaryGroup = 1, -} GroupType; - -BOOL GroupTypeIsValidValue(GroupType value); - - -@interface ImbaseDefineRoot : NSObject { -} -+ (PBExtensionRegistry*) extensionRegistry; -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry; -@end - -@interface IpAddr : PBGeneratedMessage { -@private - BOOL hasIp_:1; - BOOL hasPort_:1; - NSString* ip; - UInt32 port; -} -- (BOOL) hasIp; -- (BOOL) hasPort; -@property (readonly, strong) NSString* ip; -@property (readonly) UInt32 port; - -+ (IpAddr*) defaultInstance; -- (IpAddr*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (IpAddrBuilder*) builder; -+ (IpAddrBuilder*) builder; -+ (IpAddrBuilder*) builderWithPrototype:(IpAddr*) prototype; -- (IpAddrBuilder*) toBuilder; - -+ (IpAddr*) parseFromData:(NSData*) data; -+ (IpAddr*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (IpAddr*) parseFromInputStream:(NSInputStream*) input; -+ (IpAddr*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (IpAddr*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (IpAddr*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface IpAddrBuilder : PBGeneratedMessageBuilder { -@private - IpAddr* result; -} - -- (IpAddr*) defaultInstance; - -- (IpAddrBuilder*) clear; -- (IpAddrBuilder*) clone; - -- (IpAddr*) build; -- (IpAddr*) buildPartial; - -- (IpAddrBuilder*) mergeFrom:(IpAddr*) other; -- (IpAddrBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (IpAddrBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasIp; -- (NSString*) ip; -- (IpAddrBuilder*) setIp:(NSString*) value; -- (IpAddrBuilder*) clearIp; - -- (BOOL) hasPort; -- (UInt32) port; -- (IpAddrBuilder*) setPort:(UInt32) value; -- (IpAddrBuilder*) clearPort; -@end - -@interface ClientUserInfo : PBGeneratedMessage { -@private - BOOL hasUserId_:1; - BOOL hasName_:1; - BOOL hasNickName_:1; - BOOL hasAvatarUrl_:1; - BOOL hasDepartment_:1; - BOOL hasUserUpdated_:1; - BOOL hasUserType_:1; - NSString* userId; - NSString* name; - NSString* nickName; - NSString* avatarUrl; - NSString* department; - UInt32 userUpdated; - UserType userType; -} -- (BOOL) hasUserId; -- (BOOL) hasName; -- (BOOL) hasNickName; -- (BOOL) hasAvatarUrl; -- (BOOL) hasDepartment; -- (BOOL) hasUserType; -- (BOOL) hasUserUpdated; -@property (readonly, strong) NSString* userId; -@property (readonly, strong) NSString* name; -@property (readonly, strong) NSString* nickName; -@property (readonly, strong) NSString* avatarUrl; -@property (readonly, strong) NSString* department; -@property (readonly) UserType userType; -@property (readonly) UInt32 userUpdated; - -+ (ClientUserInfo*) defaultInstance; -- (ClientUserInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientUserInfoBuilder*) builder; -+ (ClientUserInfoBuilder*) builder; -+ (ClientUserInfoBuilder*) builderWithPrototype:(ClientUserInfo*) prototype; -- (ClientUserInfoBuilder*) toBuilder; - -+ (ClientUserInfo*) parseFromData:(NSData*) data; -+ (ClientUserInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUserInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ClientUserInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientUserInfoBuilder : PBGeneratedMessageBuilder { -@private - ClientUserInfo* result; -} - -- (ClientUserInfo*) defaultInstance; - -- (ClientUserInfoBuilder*) clear; -- (ClientUserInfoBuilder*) clone; - -- (ClientUserInfo*) build; -- (ClientUserInfo*) buildPartial; - -- (ClientUserInfoBuilder*) mergeFrom:(ClientUserInfo*) other; -- (ClientUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (ClientUserInfoBuilder*) setUserId:(NSString*) value; -- (ClientUserInfoBuilder*) clearUserId; - -- (BOOL) hasName; -- (NSString*) name; -- (ClientUserInfoBuilder*) setName:(NSString*) value; -- (ClientUserInfoBuilder*) clearName; - -- (BOOL) hasNickName; -- (NSString*) nickName; -- (ClientUserInfoBuilder*) setNickName:(NSString*) value; -- (ClientUserInfoBuilder*) clearNickName; - -- (BOOL) hasAvatarUrl; -- (NSString*) avatarUrl; -- (ClientUserInfoBuilder*) setAvatarUrl:(NSString*) value; -- (ClientUserInfoBuilder*) clearAvatarUrl; - -- (BOOL) hasDepartment; -- (NSString*) department; -- (ClientUserInfoBuilder*) setDepartment:(NSString*) value; -- (ClientUserInfoBuilder*) clearDepartment; - -- (BOOL) hasUserType; -- (UserType) userType; -- (ClientUserInfoBuilder*) setUserType:(UserType) value; -- (ClientUserInfoBuilder*) clearUserType; - -- (BOOL) hasUserUpdated; -- (UInt32) userUpdated; -- (ClientUserInfoBuilder*) setUserUpdated:(UInt32) value; -- (ClientUserInfoBuilder*) clearUserUpdated; -@end - -@interface ServerUserInfo : PBGeneratedMessage { -@private - BOOL hasName_:1; - BOOL hasNickName_:1; - BOOL hasAvatarUrl_:1; - BOOL hasDepartment_:1; - BOOL hasUserId_:1; - BOOL hasUserType_:1; - BOOL hasUserUpdate_:1; - NSString* name; - NSString* nickName; - NSString* avatarUrl; - NSString* department; - UInt32 userId; - UInt32 userType; - UInt32 userUpdate; -} -- (BOOL) hasUserId; -- (BOOL) hasName; -- (BOOL) hasNickName; -- (BOOL) hasAvatarUrl; -- (BOOL) hasDepartment; -- (BOOL) hasUserType; -- (BOOL) hasUserUpdate; -@property (readonly) UInt32 userId; -@property (readonly, strong) NSString* name; -@property (readonly, strong) NSString* nickName; -@property (readonly, strong) NSString* avatarUrl; -@property (readonly, strong) NSString* department; -@property (readonly) UInt32 userType; -@property (readonly) UInt32 userUpdate; - -+ (ServerUserInfo*) defaultInstance; -- (ServerUserInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerUserInfoBuilder*) builder; -+ (ServerUserInfoBuilder*) builder; -+ (ServerUserInfoBuilder*) builderWithPrototype:(ServerUserInfo*) prototype; -- (ServerUserInfoBuilder*) toBuilder; - -+ (ServerUserInfo*) parseFromData:(NSData*) data; -+ (ServerUserInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUserInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ServerUserInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerUserInfoBuilder : PBGeneratedMessageBuilder { -@private - ServerUserInfo* result; -} - -- (ServerUserInfo*) defaultInstance; - -- (ServerUserInfoBuilder*) clear; -- (ServerUserInfoBuilder*) clone; - -- (ServerUserInfo*) build; -- (ServerUserInfo*) buildPartial; - -- (ServerUserInfoBuilder*) mergeFrom:(ServerUserInfo*) other; -- (ServerUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (UInt32) userId; -- (ServerUserInfoBuilder*) setUserId:(UInt32) value; -- (ServerUserInfoBuilder*) clearUserId; - -- (BOOL) hasName; -- (NSString*) name; -- (ServerUserInfoBuilder*) setName:(NSString*) value; -- (ServerUserInfoBuilder*) clearName; - -- (BOOL) hasNickName; -- (NSString*) nickName; -- (ServerUserInfoBuilder*) setNickName:(NSString*) value; -- (ServerUserInfoBuilder*) clearNickName; - -- (BOOL) hasAvatarUrl; -- (NSString*) avatarUrl; -- (ServerUserInfoBuilder*) setAvatarUrl:(NSString*) value; -- (ServerUserInfoBuilder*) clearAvatarUrl; - -- (BOOL) hasDepartment; -- (NSString*) department; -- (ServerUserInfoBuilder*) setDepartment:(NSString*) value; -- (ServerUserInfoBuilder*) clearDepartment; - -- (BOOL) hasUserType; -- (UInt32) userType; -- (ServerUserInfoBuilder*) setUserType:(UInt32) value; -- (ServerUserInfoBuilder*) clearUserType; - -- (BOOL) hasUserUpdate; -- (UInt32) userUpdate; -- (ServerUserInfoBuilder*) setUserUpdate:(UInt32) value; -- (ServerUserInfoBuilder*) clearUserUpdate; -@end - -@interface ClientUserStat : PBGeneratedMessage { -@private - BOOL hasUserId_:1; - BOOL hasUserStat_:1; - NSString* userId; - UserStatType userStat; -} -- (BOOL) hasUserId; -- (BOOL) hasUserStat; -@property (readonly, strong) NSString* userId; -@property (readonly) UserStatType userStat; - -+ (ClientUserStat*) defaultInstance; -- (ClientUserStat*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientUserStatBuilder*) builder; -+ (ClientUserStatBuilder*) builder; -+ (ClientUserStatBuilder*) builderWithPrototype:(ClientUserStat*) prototype; -- (ClientUserStatBuilder*) toBuilder; - -+ (ClientUserStat*) parseFromData:(NSData*) data; -+ (ClientUserStat*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUserStat*) parseFromInputStream:(NSInputStream*) input; -+ (ClientUserStat*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientUserStatBuilder : PBGeneratedMessageBuilder { -@private - ClientUserStat* result; -} - -- (ClientUserStat*) defaultInstance; - -- (ClientUserStatBuilder*) clear; -- (ClientUserStatBuilder*) clone; - -- (ClientUserStat*) build; -- (ClientUserStat*) buildPartial; - -- (ClientUserStatBuilder*) mergeFrom:(ClientUserStat*) other; -- (ClientUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (ClientUserStatBuilder*) setUserId:(NSString*) value; -- (ClientUserStatBuilder*) clearUserId; - -- (BOOL) hasUserStat; -- (UserStatType) userStat; -- (ClientUserStatBuilder*) setUserStat:(UserStatType) value; -- (ClientUserStatBuilder*) clearUserStat; -@end - -@interface ServerUserStat : PBGeneratedMessage { -@private - BOOL hasUserId_:1; - BOOL hasUserStat_:1; - UInt32 userId; - UserStatType userStat; -} -- (BOOL) hasUserId; -- (BOOL) hasUserStat; -@property (readonly) UInt32 userId; -@property (readonly) UserStatType userStat; - -+ (ServerUserStat*) defaultInstance; -- (ServerUserStat*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerUserStatBuilder*) builder; -+ (ServerUserStatBuilder*) builder; -+ (ServerUserStatBuilder*) builderWithPrototype:(ServerUserStat*) prototype; -- (ServerUserStatBuilder*) toBuilder; - -+ (ServerUserStat*) parseFromData:(NSData*) data; -+ (ServerUserStat*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUserStat*) parseFromInputStream:(NSInputStream*) input; -+ (ServerUserStat*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerUserStatBuilder : PBGeneratedMessageBuilder { -@private - ServerUserStat* result; -} - -- (ServerUserStat*) defaultInstance; - -- (ServerUserStatBuilder*) clear; -- (ServerUserStatBuilder*) clone; - -- (ServerUserStat*) build; -- (ServerUserStat*) buildPartial; - -- (ServerUserStatBuilder*) mergeFrom:(ServerUserStat*) other; -- (ServerUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (UInt32) userId; -- (ServerUserStatBuilder*) setUserId:(UInt32) value; -- (ServerUserStatBuilder*) clearUserId; - -- (BOOL) hasUserStat; -- (UserStatType) userStat; -- (ServerUserStatBuilder*) setUserStat:(UserStatType) value; -- (ServerUserStatBuilder*) clearUserStat; -@end - -@interface ClientUnReadInfo : PBGeneratedMessage { -@private - BOOL hasUserId_:1; - BOOL hasUnreadCount_:1; - NSString* userId; - UInt32 unreadCount; -} -- (BOOL) hasUserId; -- (BOOL) hasUnreadCount; -@property (readonly, strong) NSString* userId; -@property (readonly) UInt32 unreadCount; - -+ (ClientUnReadInfo*) defaultInstance; -- (ClientUnReadInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientUnReadInfoBuilder*) builder; -+ (ClientUnReadInfoBuilder*) builder; -+ (ClientUnReadInfoBuilder*) builderWithPrototype:(ClientUnReadInfo*) prototype; -- (ClientUnReadInfoBuilder*) toBuilder; - -+ (ClientUnReadInfo*) parseFromData:(NSData*) data; -+ (ClientUnReadInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUnReadInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ClientUnReadInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientUnReadInfoBuilder : PBGeneratedMessageBuilder { -@private - ClientUnReadInfo* result; -} - -- (ClientUnReadInfo*) defaultInstance; - -- (ClientUnReadInfoBuilder*) clear; -- (ClientUnReadInfoBuilder*) clone; - -- (ClientUnReadInfo*) build; -- (ClientUnReadInfo*) buildPartial; - -- (ClientUnReadInfoBuilder*) mergeFrom:(ClientUnReadInfo*) other; -- (ClientUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (ClientUnReadInfoBuilder*) setUserId:(NSString*) value; -- (ClientUnReadInfoBuilder*) clearUserId; - -- (BOOL) hasUnreadCount; -- (UInt32) unreadCount; -- (ClientUnReadInfoBuilder*) setUnreadCount:(UInt32) value; -- (ClientUnReadInfoBuilder*) clearUnreadCount; -@end - -@interface ServerUnReadInfo : PBGeneratedMessage { -@private - BOOL hasUserId_:1; - BOOL hasUnreadCount_:1; - UInt32 userId; - UInt32 unreadCount; -} -- (BOOL) hasUserId; -- (BOOL) hasUnreadCount; -@property (readonly) UInt32 userId; -@property (readonly) UInt32 unreadCount; - -+ (ServerUnReadInfo*) defaultInstance; -- (ServerUnReadInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerUnReadInfoBuilder*) builder; -+ (ServerUnReadInfoBuilder*) builder; -+ (ServerUnReadInfoBuilder*) builderWithPrototype:(ServerUnReadInfo*) prototype; -- (ServerUnReadInfoBuilder*) toBuilder; - -+ (ServerUnReadInfo*) parseFromData:(NSData*) data; -+ (ServerUnReadInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUnReadInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ServerUnReadInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerUnReadInfoBuilder : PBGeneratedMessageBuilder { -@private - ServerUnReadInfo* result; -} - -- (ServerUnReadInfo*) defaultInstance; - -- (ServerUnReadInfoBuilder*) clear; -- (ServerUnReadInfoBuilder*) clone; - -- (ServerUnReadInfo*) build; -- (ServerUnReadInfo*) buildPartial; - -- (ServerUnReadInfoBuilder*) mergeFrom:(ServerUnReadInfo*) other; -- (ServerUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasUserId; -- (UInt32) userId; -- (ServerUnReadInfoBuilder*) setUserId:(UInt32) value; -- (ServerUnReadInfoBuilder*) clearUserId; - -- (BOOL) hasUnreadCount; -- (UInt32) unreadCount; -- (ServerUnReadInfoBuilder*) setUnreadCount:(UInt32) value; -- (ServerUnReadInfoBuilder*) clearUnreadCount; -@end - -@interface ClientMsgInfo : PBGeneratedMessage { -@private - BOOL hasFromUserId_:1; - BOOL hasFromUserName_:1; - BOOL hasFromUserNickName_:1; - BOOL hasFromUserAvatarUrl_:1; - BOOL hasMsgContent_:1; - BOOL hasCreateTime_:1; - BOOL hasMsgType_:1; - NSString* fromUserId; - NSString* fromUserName; - NSString* fromUserNickName; - NSString* fromUserAvatarUrl; - NSString* msgContent; - UInt32 createTime; - UInt32 msgType; -} -- (BOOL) hasFromUserId; -- (BOOL) hasFromUserName; -- (BOOL) hasFromUserNickName; -- (BOOL) hasFromUserAvatarUrl; -- (BOOL) hasCreateTime; -- (BOOL) hasMsgType; -- (BOOL) hasMsgContent; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* fromUserName; -@property (readonly, strong) NSString* fromUserNickName; -@property (readonly, strong) NSString* fromUserAvatarUrl; -@property (readonly) UInt32 createTime; -@property (readonly) UInt32 msgType; -@property (readonly, strong) NSString* msgContent; - -+ (ClientMsgInfo*) defaultInstance; -- (ClientMsgInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientMsgInfoBuilder*) builder; -+ (ClientMsgInfoBuilder*) builder; -+ (ClientMsgInfoBuilder*) builderWithPrototype:(ClientMsgInfo*) prototype; -- (ClientMsgInfoBuilder*) toBuilder; - -+ (ClientMsgInfo*) parseFromData:(NSData*) data; -+ (ClientMsgInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ClientMsgInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientMsgInfoBuilder : PBGeneratedMessageBuilder { -@private - ClientMsgInfo* result; -} - -- (ClientMsgInfo*) defaultInstance; - -- (ClientMsgInfoBuilder*) clear; -- (ClientMsgInfoBuilder*) clone; - -- (ClientMsgInfo*) build; -- (ClientMsgInfo*) buildPartial; - -- (ClientMsgInfoBuilder*) mergeFrom:(ClientMsgInfo*) other; -- (ClientMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientMsgInfoBuilder*) setFromUserId:(NSString*) value; -- (ClientMsgInfoBuilder*) clearFromUserId; - -- (BOOL) hasFromUserName; -- (NSString*) fromUserName; -- (ClientMsgInfoBuilder*) setFromUserName:(NSString*) value; -- (ClientMsgInfoBuilder*) clearFromUserName; - -- (BOOL) hasFromUserNickName; -- (NSString*) fromUserNickName; -- (ClientMsgInfoBuilder*) setFromUserNickName:(NSString*) value; -- (ClientMsgInfoBuilder*) clearFromUserNickName; - -- (BOOL) hasFromUserAvatarUrl; -- (NSString*) fromUserAvatarUrl; -- (ClientMsgInfoBuilder*) setFromUserAvatarUrl:(NSString*) value; -- (ClientMsgInfoBuilder*) clearFromUserAvatarUrl; - -- (BOOL) hasCreateTime; -- (UInt32) createTime; -- (ClientMsgInfoBuilder*) setCreateTime:(UInt32) value; -- (ClientMsgInfoBuilder*) clearCreateTime; - -- (BOOL) hasMsgType; -- (UInt32) msgType; -- (ClientMsgInfoBuilder*) setMsgType:(UInt32) value; -- (ClientMsgInfoBuilder*) clearMsgType; - -- (BOOL) hasMsgContent; -- (NSString*) msgContent; -- (ClientMsgInfoBuilder*) setMsgContent:(NSString*) value; -- (ClientMsgInfoBuilder*) clearMsgContent; -@end - -@interface ServerMsgInfo : PBGeneratedMessage { -@private - BOOL hasFromUserName_:1; - BOOL hasFromUserNickName_:1; - BOOL hasFromUserAvatarUrl_:1; - BOOL hasMsgContent_:1; - BOOL hasFromUserId_:1; - BOOL hasCreateTime_:1; - BOOL hasMsgType_:1; - NSString* fromUserName; - NSString* fromUserNickName; - NSString* fromUserAvatarUrl; - NSString* msgContent; - UInt32 fromUserId; - UInt32 createTime; - UInt32 msgType; -} -- (BOOL) hasFromUserId; -- (BOOL) hasFromUserName; -- (BOOL) hasFromUserNickName; -- (BOOL) hasFromUserAvatarUrl; -- (BOOL) hasCreateTime; -- (BOOL) hasMsgType; -- (BOOL) hasMsgContent; -@property (readonly) UInt32 fromUserId; -@property (readonly, strong) NSString* fromUserName; -@property (readonly, strong) NSString* fromUserNickName; -@property (readonly, strong) NSString* fromUserAvatarUrl; -@property (readonly) UInt32 createTime; -@property (readonly) UInt32 msgType; -@property (readonly, strong) NSString* msgContent; - -+ (ServerMsgInfo*) defaultInstance; -- (ServerMsgInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerMsgInfoBuilder*) builder; -+ (ServerMsgInfoBuilder*) builder; -+ (ServerMsgInfoBuilder*) builderWithPrototype:(ServerMsgInfo*) prototype; -- (ServerMsgInfoBuilder*) toBuilder; - -+ (ServerMsgInfo*) parseFromData:(NSData*) data; -+ (ServerMsgInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerMsgInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ServerMsgInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerMsgInfoBuilder : PBGeneratedMessageBuilder { -@private - ServerMsgInfo* result; -} - -- (ServerMsgInfo*) defaultInstance; - -- (ServerMsgInfoBuilder*) clear; -- (ServerMsgInfoBuilder*) clone; - -- (ServerMsgInfo*) build; -- (ServerMsgInfo*) buildPartial; - -- (ServerMsgInfoBuilder*) mergeFrom:(ServerMsgInfo*) other; -- (ServerMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (UInt32) fromUserId; -- (ServerMsgInfoBuilder*) setFromUserId:(UInt32) value; -- (ServerMsgInfoBuilder*) clearFromUserId; - -- (BOOL) hasFromUserName; -- (NSString*) fromUserName; -- (ServerMsgInfoBuilder*) setFromUserName:(NSString*) value; -- (ServerMsgInfoBuilder*) clearFromUserName; - -- (BOOL) hasFromUserNickName; -- (NSString*) fromUserNickName; -- (ServerMsgInfoBuilder*) setFromUserNickName:(NSString*) value; -- (ServerMsgInfoBuilder*) clearFromUserNickName; - -- (BOOL) hasFromUserAvatarUrl; -- (NSString*) fromUserAvatarUrl; -- (ServerMsgInfoBuilder*) setFromUserAvatarUrl:(NSString*) value; -- (ServerMsgInfoBuilder*) clearFromUserAvatarUrl; - -- (BOOL) hasCreateTime; -- (UInt32) createTime; -- (ServerMsgInfoBuilder*) setCreateTime:(UInt32) value; -- (ServerMsgInfoBuilder*) clearCreateTime; - -- (BOOL) hasMsgType; -- (UInt32) msgType; -- (ServerMsgInfoBuilder*) setMsgType:(UInt32) value; -- (ServerMsgInfoBuilder*) clearMsgType; - -- (BOOL) hasMsgContent; -- (NSString*) msgContent; -- (ServerMsgInfoBuilder*) setMsgContent:(NSString*) value; -- (ServerMsgInfoBuilder*) clearMsgContent; -@end - -@interface ClientGroupInfo : PBGeneratedMessage { -@private - BOOL hasGroupId_:1; - BOOL hasGroupName_:1; - BOOL hasGroupAvatar_:1; - BOOL hasGroupCreatorId_:1; - BOOL hasGroupUpdated_:1; - BOOL hasGroupType_:1; - NSString* groupId; - NSString* groupName; - NSString* groupAvatar; - NSString* groupCreatorId; - UInt32 groupUpdated; - GroupType groupType; - NSMutableArray * groupMemberListArray; -} -- (BOOL) hasGroupId; -- (BOOL) hasGroupName; -- (BOOL) hasGroupAvatar; -- (BOOL) hasGroupCreatorId; -- (BOOL) hasGroupType; -- (BOOL) hasGroupUpdated; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) NSString* groupName; -@property (readonly, strong) NSString* groupAvatar; -@property (readonly, strong) NSString* groupCreatorId; -@property (readonly) GroupType groupType; -@property (readonly) UInt32 groupUpdated; -@property (readonly, strong) PBArray * groupMemberList; -- (NSString*)groupMemberListAtIndex:(NSUInteger)index; - -+ (ClientGroupInfo*) defaultInstance; -- (ClientGroupInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientGroupInfoBuilder*) builder; -+ (ClientGroupInfoBuilder*) builder; -+ (ClientGroupInfoBuilder*) builderWithPrototype:(ClientGroupInfo*) prototype; -- (ClientGroupInfoBuilder*) toBuilder; - -+ (ClientGroupInfo*) parseFromData:(NSData*) data; -+ (ClientGroupInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ClientGroupInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientGroupInfoBuilder : PBGeneratedMessageBuilder { -@private - ClientGroupInfo* result; -} - -- (ClientGroupInfo*) defaultInstance; - -- (ClientGroupInfoBuilder*) clear; -- (ClientGroupInfoBuilder*) clone; - -- (ClientGroupInfo*) build; -- (ClientGroupInfo*) buildPartial; - -- (ClientGroupInfoBuilder*) mergeFrom:(ClientGroupInfo*) other; -- (ClientGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (ClientGroupInfoBuilder*) setGroupId:(NSString*) value; -- (ClientGroupInfoBuilder*) clearGroupId; - -- (BOOL) hasGroupName; -- (NSString*) groupName; -- (ClientGroupInfoBuilder*) setGroupName:(NSString*) value; -- (ClientGroupInfoBuilder*) clearGroupName; - -- (BOOL) hasGroupAvatar; -- (NSString*) groupAvatar; -- (ClientGroupInfoBuilder*) setGroupAvatar:(NSString*) value; -- (ClientGroupInfoBuilder*) clearGroupAvatar; - -- (BOOL) hasGroupCreatorId; -- (NSString*) groupCreatorId; -- (ClientGroupInfoBuilder*) setGroupCreatorId:(NSString*) value; -- (ClientGroupInfoBuilder*) clearGroupCreatorId; - -- (BOOL) hasGroupType; -- (GroupType) groupType; -- (ClientGroupInfoBuilder*) setGroupType:(GroupType) value; -- (ClientGroupInfoBuilder*) clearGroupType; - -- (BOOL) hasGroupUpdated; -- (UInt32) groupUpdated; -- (ClientGroupInfoBuilder*) setGroupUpdated:(UInt32) value; -- (ClientGroupInfoBuilder*) clearGroupUpdated; - -- (NSMutableArray *)groupMemberList; -- (NSString*)groupMemberListAtIndex:(NSUInteger)index; -- (ClientGroupInfoBuilder *)addGroupMemberList:(NSString*)value; -- (ClientGroupInfoBuilder *)setGroupMemberListArray:(NSArray *)array; -- (ClientGroupInfoBuilder *)clearGroupMemberList; -@end - -@interface ServerGroupInfo : PBGeneratedMessage { -@private - BOOL hasGroupName_:1; - BOOL hasGroupAvatar_:1; - BOOL hasGroupId_:1; - BOOL hasGroupCreatorId_:1; - BOOL hasGroupUpdated_:1; - BOOL hasGroupType_:1; - NSString* groupName; - NSString* groupAvatar; - UInt32 groupId; - UInt32 groupCreatorId; - UInt32 groupUpdated; - GroupType groupType; - PBAppendableArray * groupMemberListArray; -} -- (BOOL) hasGroupId; -- (BOOL) hasGroupName; -- (BOOL) hasGroupAvatar; -- (BOOL) hasGroupCreatorId; -- (BOOL) hasGroupType; -- (BOOL) hasGroupUpdated; -@property (readonly) UInt32 groupId; -@property (readonly, strong) NSString* groupName; -@property (readonly, strong) NSString* groupAvatar; -@property (readonly) UInt32 groupCreatorId; -@property (readonly) GroupType groupType; -@property (readonly) UInt32 groupUpdated; -@property (readonly, strong) PBArray * groupMemberList; -- (UInt32)groupMemberListAtIndex:(NSUInteger)index; - -+ (ServerGroupInfo*) defaultInstance; -- (ServerGroupInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerGroupInfoBuilder*) builder; -+ (ServerGroupInfoBuilder*) builder; -+ (ServerGroupInfoBuilder*) builderWithPrototype:(ServerGroupInfo*) prototype; -- (ServerGroupInfoBuilder*) toBuilder; - -+ (ServerGroupInfo*) parseFromData:(NSData*) data; -+ (ServerGroupInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ServerGroupInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerGroupInfoBuilder : PBGeneratedMessageBuilder { -@private - ServerGroupInfo* result; -} - -- (ServerGroupInfo*) defaultInstance; - -- (ServerGroupInfoBuilder*) clear; -- (ServerGroupInfoBuilder*) clone; - -- (ServerGroupInfo*) build; -- (ServerGroupInfo*) buildPartial; - -- (ServerGroupInfoBuilder*) mergeFrom:(ServerGroupInfo*) other; -- (ServerGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasGroupId; -- (UInt32) groupId; -- (ServerGroupInfoBuilder*) setGroupId:(UInt32) value; -- (ServerGroupInfoBuilder*) clearGroupId; - -- (BOOL) hasGroupName; -- (NSString*) groupName; -- (ServerGroupInfoBuilder*) setGroupName:(NSString*) value; -- (ServerGroupInfoBuilder*) clearGroupName; - -- (BOOL) hasGroupAvatar; -- (NSString*) groupAvatar; -- (ServerGroupInfoBuilder*) setGroupAvatar:(NSString*) value; -- (ServerGroupInfoBuilder*) clearGroupAvatar; - -- (BOOL) hasGroupCreatorId; -- (UInt32) groupCreatorId; -- (ServerGroupInfoBuilder*) setGroupCreatorId:(UInt32) value; -- (ServerGroupInfoBuilder*) clearGroupCreatorId; - -- (BOOL) hasGroupType; -- (GroupType) groupType; -- (ServerGroupInfoBuilder*) setGroupType:(GroupType) value; -- (ServerGroupInfoBuilder*) clearGroupType; - -- (BOOL) hasGroupUpdated; -- (UInt32) groupUpdated; -- (ServerGroupInfoBuilder*) setGroupUpdated:(UInt32) value; -- (ServerGroupInfoBuilder*) clearGroupUpdated; - -- (PBAppendableArray *)groupMemberList; -- (UInt32)groupMemberListAtIndex:(NSUInteger)index; -- (ServerGroupInfoBuilder *)addGroupMemberList:(UInt32)value; -- (ServerGroupInfoBuilder *)setGroupMemberListArray:(NSArray *)array; -- (ServerGroupInfoBuilder *)setGroupMemberListValues:(const UInt32 *)values count:(NSUInteger)count; -- (ServerGroupInfoBuilder *)clearGroupMemberList; -@end - -@interface ClientGroupUnReadCnt : PBGeneratedMessage { -@private - BOOL hasGroupId_:1; - BOOL hasUnreadCnt_:1; - NSString* groupId; - UInt32 unreadCnt; -} -- (BOOL) hasGroupId; -- (BOOL) hasUnreadCnt; -@property (readonly, strong) NSString* groupId; -@property (readonly) UInt32 unreadCnt; - -+ (ClientGroupUnReadCnt*) defaultInstance; -- (ClientGroupUnReadCnt*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientGroupUnReadCntBuilder*) builder; -+ (ClientGroupUnReadCntBuilder*) builder; -+ (ClientGroupUnReadCntBuilder*) builderWithPrototype:(ClientGroupUnReadCnt*) prototype; -- (ClientGroupUnReadCntBuilder*) toBuilder; - -+ (ClientGroupUnReadCnt*) parseFromData:(NSData*) data; -+ (ClientGroupUnReadCnt*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input; -+ (ClientGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientGroupUnReadCntBuilder : PBGeneratedMessageBuilder { -@private - ClientGroupUnReadCnt* result; -} - -- (ClientGroupUnReadCnt*) defaultInstance; - -- (ClientGroupUnReadCntBuilder*) clear; -- (ClientGroupUnReadCntBuilder*) clone; - -- (ClientGroupUnReadCnt*) build; -- (ClientGroupUnReadCnt*) buildPartial; - -- (ClientGroupUnReadCntBuilder*) mergeFrom:(ClientGroupUnReadCnt*) other; -- (ClientGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (ClientGroupUnReadCntBuilder*) setGroupId:(NSString*) value; -- (ClientGroupUnReadCntBuilder*) clearGroupId; - -- (BOOL) hasUnreadCnt; -- (UInt32) unreadCnt; -- (ClientGroupUnReadCntBuilder*) setUnreadCnt:(UInt32) value; -- (ClientGroupUnReadCntBuilder*) clearUnreadCnt; -@end - -@interface ServerGroupUnReadCnt : PBGeneratedMessage { -@private - BOOL hasGroupId_:1; - BOOL hasUnreadCnt_:1; - UInt32 groupId; - UInt32 unreadCnt; -} -- (BOOL) hasGroupId; -- (BOOL) hasUnreadCnt; -@property (readonly) UInt32 groupId; -@property (readonly) UInt32 unreadCnt; - -+ (ServerGroupUnReadCnt*) defaultInstance; -- (ServerGroupUnReadCnt*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerGroupUnReadCntBuilder*) builder; -+ (ServerGroupUnReadCntBuilder*) builder; -+ (ServerGroupUnReadCntBuilder*) builderWithPrototype:(ServerGroupUnReadCnt*) prototype; -- (ServerGroupUnReadCntBuilder*) toBuilder; - -+ (ServerGroupUnReadCnt*) parseFromData:(NSData*) data; -+ (ServerGroupUnReadCnt*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input; -+ (ServerGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerGroupUnReadCntBuilder : PBGeneratedMessageBuilder { -@private - ServerGroupUnReadCnt* result; -} - -- (ServerGroupUnReadCnt*) defaultInstance; - -- (ServerGroupUnReadCntBuilder*) clear; -- (ServerGroupUnReadCntBuilder*) clone; - -- (ServerGroupUnReadCnt*) build; -- (ServerGroupUnReadCnt*) buildPartial; - -- (ServerGroupUnReadCntBuilder*) mergeFrom:(ServerGroupUnReadCnt*) other; -- (ServerGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasGroupId; -- (UInt32) groupId; -- (ServerGroupUnReadCntBuilder*) setGroupId:(UInt32) value; -- (ServerGroupUnReadCntBuilder*) clearGroupId; - -- (BOOL) hasUnreadCnt; -- (UInt32) unreadCnt; -- (ServerGroupUnReadCntBuilder*) setUnreadCnt:(UInt32) value; -- (ServerGroupUnReadCntBuilder*) clearUnreadCnt; -@end - -@interface ClientGroupMsg : PBGeneratedMessage { -@private - BOOL hasFromUserId_:1; - BOOL hasMsgContent_:1; - BOOL hasCreateTime_:1; - NSString* fromUserId; - NSString* msgContent; - UInt32 createTime; -} -- (BOOL) hasFromUserId; -- (BOOL) hasCreateTime; -- (BOOL) hasMsgContent; -@property (readonly, strong) NSString* fromUserId; -@property (readonly) UInt32 createTime; -@property (readonly, strong) NSString* msgContent; - -+ (ClientGroupMsg*) defaultInstance; -- (ClientGroupMsg*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientGroupMsgBuilder*) builder; -+ (ClientGroupMsgBuilder*) builder; -+ (ClientGroupMsgBuilder*) builderWithPrototype:(ClientGroupMsg*) prototype; -- (ClientGroupMsgBuilder*) toBuilder; - -+ (ClientGroupMsg*) parseFromData:(NSData*) data; -+ (ClientGroupMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupMsg*) parseFromInputStream:(NSInputStream*) input; -+ (ClientGroupMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientGroupMsgBuilder : PBGeneratedMessageBuilder { -@private - ClientGroupMsg* result; -} - -- (ClientGroupMsg*) defaultInstance; - -- (ClientGroupMsgBuilder*) clear; -- (ClientGroupMsgBuilder*) clone; - -- (ClientGroupMsg*) build; -- (ClientGroupMsg*) buildPartial; - -- (ClientGroupMsgBuilder*) mergeFrom:(ClientGroupMsg*) other; -- (ClientGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientGroupMsgBuilder*) setFromUserId:(NSString*) value; -- (ClientGroupMsgBuilder*) clearFromUserId; - -- (BOOL) hasCreateTime; -- (UInt32) createTime; -- (ClientGroupMsgBuilder*) setCreateTime:(UInt32) value; -- (ClientGroupMsgBuilder*) clearCreateTime; - -- (BOOL) hasMsgContent; -- (NSString*) msgContent; -- (ClientGroupMsgBuilder*) setMsgContent:(NSString*) value; -- (ClientGroupMsgBuilder*) clearMsgContent; -@end - -@interface ServerGroupMsg : PBGeneratedMessage { -@private - BOOL hasMsgContent_:1; - BOOL hasFromUserId_:1; - BOOL hasCreateTime_:1; - NSString* msgContent; - UInt32 fromUserId; - UInt32 createTime; -} -- (BOOL) hasFromUserId; -- (BOOL) hasCreateTime; -- (BOOL) hasMsgContent; -@property (readonly) UInt32 fromUserId; -@property (readonly) UInt32 createTime; -@property (readonly, strong) NSString* msgContent; - -+ (ServerGroupMsg*) defaultInstance; -- (ServerGroupMsg*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerGroupMsgBuilder*) builder; -+ (ServerGroupMsgBuilder*) builder; -+ (ServerGroupMsgBuilder*) builderWithPrototype:(ServerGroupMsg*) prototype; -- (ServerGroupMsgBuilder*) toBuilder; - -+ (ServerGroupMsg*) parseFromData:(NSData*) data; -+ (ServerGroupMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupMsg*) parseFromInputStream:(NSInputStream*) input; -+ (ServerGroupMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerGroupMsgBuilder : PBGeneratedMessageBuilder { -@private - ServerGroupMsg* result; -} - -- (ServerGroupMsg*) defaultInstance; - -- (ServerGroupMsgBuilder*) clear; -- (ServerGroupMsgBuilder*) clone; - -- (ServerGroupMsg*) build; -- (ServerGroupMsg*) buildPartial; - -- (ServerGroupMsgBuilder*) mergeFrom:(ServerGroupMsg*) other; -- (ServerGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (UInt32) fromUserId; -- (ServerGroupMsgBuilder*) setFromUserId:(UInt32) value; -- (ServerGroupMsgBuilder*) clearFromUserId; - -- (BOOL) hasCreateTime; -- (UInt32) createTime; -- (ServerGroupMsgBuilder*) setCreateTime:(UInt32) value; -- (ServerGroupMsgBuilder*) clearCreateTime; - -- (BOOL) hasMsgContent; -- (NSString*) msgContent; -- (ServerGroupMsgBuilder*) setMsgContent:(NSString*) value; -- (ServerGroupMsgBuilder*) clearMsgContent; -@end - -@interface ClientOfflineFileInfo : PBGeneratedMessage { -@private - BOOL hasFromUserId_:1; - BOOL hasFilePath_:1; - BOOL hasFileId_:1; - BOOL hasFileSize_:1; - NSString* fromUserId; - NSString* filePath; - UInt32 fileId; - UInt32 fileSize; -} -- (BOOL) hasFromUserId; -- (BOOL) hasFileId; -- (BOOL) hasFileSize; -- (BOOL) hasFilePath; -@property (readonly, strong) NSString* fromUserId; -@property (readonly) UInt32 fileId; -@property (readonly) UInt32 fileSize; -@property (readonly, strong) NSString* filePath; - -+ (ClientOfflineFileInfo*) defaultInstance; -- (ClientOfflineFileInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientOfflineFileInfoBuilder*) builder; -+ (ClientOfflineFileInfoBuilder*) builder; -+ (ClientOfflineFileInfoBuilder*) builderWithPrototype:(ClientOfflineFileInfo*) prototype; -- (ClientOfflineFileInfoBuilder*) toBuilder; - -+ (ClientOfflineFileInfo*) parseFromData:(NSData*) data; -+ (ClientOfflineFileInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ClientOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientOfflineFileInfoBuilder : PBGeneratedMessageBuilder { -@private - ClientOfflineFileInfo* result; -} - -- (ClientOfflineFileInfo*) defaultInstance; - -- (ClientOfflineFileInfoBuilder*) clear; -- (ClientOfflineFileInfoBuilder*) clone; - -- (ClientOfflineFileInfo*) build; -- (ClientOfflineFileInfo*) buildPartial; - -- (ClientOfflineFileInfoBuilder*) mergeFrom:(ClientOfflineFileInfo*) other; -- (ClientOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientOfflineFileInfoBuilder*) setFromUserId:(NSString*) value; -- (ClientOfflineFileInfoBuilder*) clearFromUserId; - -- (BOOL) hasFileId; -- (UInt32) fileId; -- (ClientOfflineFileInfoBuilder*) setFileId:(UInt32) value; -- (ClientOfflineFileInfoBuilder*) clearFileId; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (ClientOfflineFileInfoBuilder*) setFileSize:(UInt32) value; -- (ClientOfflineFileInfoBuilder*) clearFileSize; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (ClientOfflineFileInfoBuilder*) setFilePath:(NSString*) value; -- (ClientOfflineFileInfoBuilder*) clearFilePath; -@end - -@interface ServerOfflineFileInfo : PBGeneratedMessage { -@private - BOOL hasFilePath_:1; - BOOL hasFromUserId_:1; - BOOL hasFileId_:1; - BOOL hasFileSize_:1; - NSString* filePath; - UInt32 fromUserId; - UInt32 fileId; - UInt32 fileSize; -} -- (BOOL) hasFromUserId; -- (BOOL) hasFileId; -- (BOOL) hasFileSize; -- (BOOL) hasFilePath; -@property (readonly) UInt32 fromUserId; -@property (readonly) UInt32 fileId; -@property (readonly) UInt32 fileSize; -@property (readonly, strong) NSString* filePath; - -+ (ServerOfflineFileInfo*) defaultInstance; -- (ServerOfflineFileInfo*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ServerOfflineFileInfoBuilder*) builder; -+ (ServerOfflineFileInfoBuilder*) builder; -+ (ServerOfflineFileInfoBuilder*) builderWithPrototype:(ServerOfflineFileInfo*) prototype; -- (ServerOfflineFileInfoBuilder*) toBuilder; - -+ (ServerOfflineFileInfo*) parseFromData:(NSData*) data; -+ (ServerOfflineFileInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input; -+ (ServerOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ServerOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ServerOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ServerOfflineFileInfoBuilder : PBGeneratedMessageBuilder { -@private - ServerOfflineFileInfo* result; -} - -- (ServerOfflineFileInfo*) defaultInstance; - -- (ServerOfflineFileInfoBuilder*) clear; -- (ServerOfflineFileInfoBuilder*) clone; - -- (ServerOfflineFileInfo*) build; -- (ServerOfflineFileInfo*) buildPartial; - -- (ServerOfflineFileInfoBuilder*) mergeFrom:(ServerOfflineFileInfo*) other; -- (ServerOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ServerOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasFromUserId; -- (UInt32) fromUserId; -- (ServerOfflineFileInfoBuilder*) setFromUserId:(UInt32) value; -- (ServerOfflineFileInfoBuilder*) clearFromUserId; - -- (BOOL) hasFileId; -- (UInt32) fileId; -- (ServerOfflineFileInfoBuilder*) setFileId:(UInt32) value; -- (ServerOfflineFileInfoBuilder*) clearFileId; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (ServerOfflineFileInfoBuilder*) setFileSize:(UInt32) value; -- (ServerOfflineFileInfoBuilder*) clearFileSize; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (ServerOfflineFileInfoBuilder*) setFilePath:(NSString*) value; -- (ServerOfflineFileInfoBuilder*) clearFilePath; -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMBaseDefine.pb.m b/TeamTalk/IOSDuoduo/IMBaseDefine.pb.m deleted file mode 100644 index 8508ec9..0000000 --- a/TeamTalk/IOSDuoduo/IMBaseDefine.pb.m +++ /dev/null @@ -1,6317 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "IMBaseDefine.pb.h" -// @@protoc_insertion_point(imports) - -@implementation ImbaseDefineRoot -static PBExtensionRegistry* extensionRegistry = nil; -+ (PBExtensionRegistry*) extensionRegistry { - return extensionRegistry; -} - -+ (void) initialize { - if (self == [ImbaseDefineRoot class]) { - PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry]; - [self registerAllExtensions:registry]; - extensionRegistry = registry; - } -} -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry { -} -@end - -BOOL ResultTypeIsValidValue(ResultType value) { - switch (value) { - case ResultTypeRefuseReasonNone: - case ResultTypeRefuseReasonNoMsgServer: - case ResultTypeRefuseReasonMsgServerFull: - case ResultTypeRefuseReasonNoDbServer: - case ResultTypeRefuseReasonNoLoginServer: - case ResultTypeRefuseReasonNoRouteServer: - case ResultTypeRefuseReasonDbValidateFailed: - case ResultTypeResuseReasonVersionTooOld: - return YES; - default: - return NO; - } -} -BOOL UserTypeIsValidValue(UserType value) { - switch (value) { - case UserTypeUserTypeNormal: - return YES; - default: - return NO; - } -} -BOOL KickReasonTypeIsValidValue(KickReasonType value) { - switch (value) { - case KickReasonTypeKickReasonDuplicateUser: - return YES; - default: - return NO; - } -} -BOOL OnlineListTypeIsValidValue(OnlineListType value) { - switch (value) { - case OnlineListTypeOnlineListTypeFriendList: - return YES; - default: - return NO; - } -} -BOOL UserStatTypeIsValidValue(UserStatType value) { - switch (value) { - case UserStatTypeUserStatusOnline: - case UserStatTypeUserStatusOffline: - case UserStatTypeUserStatusLeave: - return YES; - default: - return NO; - } -} -BOOL SessionTypeIsValidValue(SessionType value) { - switch (value) { - case SessionTypeSessionTypeSingle: - case SessionTypeSessionTypeGroup: - case SessionTypeSessionTypeTempGroup: - return YES; - default: - return NO; - } -} -BOOL GroupTypeIsValidValue(GroupType value) { - switch (value) { - case GroupTypeNormalGroup: - case GroupTypeTemporaryGroup: - return YES; - default: - return NO; - } -} -@interface IpAddr () -@property (strong) NSString* ip; -@property UInt32 port; -@end - -@implementation IpAddr - -- (BOOL) hasIp { - return !!hasIp_; -} -- (void) setHasIp:(BOOL) value_ { - hasIp_ = !!value_; -} -@synthesize ip; -- (BOOL) hasPort { - return !!hasPort_; -} -- (void) setHasPort:(BOOL) value_ { - hasPort_ = !!value_; -} -@synthesize port; -- (void) dealloc { - self.ip = nil; -} -- (id) init { - if ((self = [super init])) { - self.ip = @""; - self.port = 0; - } - return self; -} -static IpAddr* defaultIpAddrInstance = nil; -+ (void) initialize { - if (self == [IpAddr class]) { - defaultIpAddrInstance = [[IpAddr alloc] init]; - } -} -+ (IpAddr*) defaultInstance { - return defaultIpAddrInstance; -} -- (IpAddr*) defaultInstance { - return defaultIpAddrInstance; -} -- (BOOL) isInitialized { - if (!self.hasIp) { - return NO; - } - if (!self.hasPort) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasIp) { - [output writeString:1 value:self.ip]; - } - if (self.hasPort) { - [output writeUInt32:2 value:self.port]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasIp) { - size_ += computeStringSize(1, self.ip); - } - if (self.hasPort) { - size_ += computeUInt32Size(2, self.port); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (IpAddr*) parseFromData:(NSData*) data { - return (IpAddr*)[[[IpAddr builder] mergeFromData:data] build]; -} -+ (IpAddr*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (IpAddr*)[[[IpAddr builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (IpAddr*) parseFromInputStream:(NSInputStream*) input { - return (IpAddr*)[[[IpAddr builder] mergeFromInputStream:input] build]; -} -+ (IpAddr*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (IpAddr*)[[[IpAddr builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (IpAddr*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (IpAddr*)[[[IpAddr builder] mergeFromCodedInputStream:input] build]; -} -+ (IpAddr*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (IpAddr*)[[[IpAddr builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (IpAddrBuilder*) builder { - return [[IpAddrBuilder alloc] init]; -} -+ (IpAddrBuilder*) builderWithPrototype:(IpAddr*) prototype { - return [[IpAddr builder] mergeFrom:prototype]; -} -- (IpAddrBuilder*) builder { - return [IpAddr builder]; -} -- (IpAddrBuilder*) toBuilder { - return [IpAddr builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasIp) { - [output appendFormat:@"%@%@: %@\n", indent, @"ip", self.ip]; - } - if (self.hasPort) { - [output appendFormat:@"%@%@: %@\n", indent, @"port", [NSNumber numberWithInteger:self.port]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[IpAddr class]]) { - return NO; - } - IpAddr *otherMessage = other; - return - self.hasIp == otherMessage.hasIp && - (!self.hasIp || [self.ip isEqual:otherMessage.ip]) && - self.hasPort == otherMessage.hasPort && - (!self.hasPort || self.port == otherMessage.port) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasIp) { - hashCode = hashCode * 31 + [self.ip hash]; - } - if (self.hasPort) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.port] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface IpAddrBuilder() -@property (strong) IpAddr* result; -@end - -@implementation IpAddrBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[IpAddr alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (IpAddrBuilder*) clear { - self.result = [[IpAddr alloc] init]; - return self; -} -- (IpAddrBuilder*) clone { - return [IpAddr builderWithPrototype:result]; -} -- (IpAddr*) defaultInstance { - return [IpAddr defaultInstance]; -} -- (IpAddr*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (IpAddr*) buildPartial { - IpAddr* returnMe = result; - self.result = nil; - return returnMe; -} -- (IpAddrBuilder*) mergeFrom:(IpAddr*) other { - if (other == [IpAddr defaultInstance]) { - return self; - } - if (other.hasIp) { - [self setIp:other.ip]; - } - if (other.hasPort) { - [self setPort:other.port]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (IpAddrBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (IpAddrBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setIp:[input readString]]; - break; - } - case 16: { - [self setPort:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasIp { - return result.hasIp; -} -- (NSString*) ip { - return result.ip; -} -- (IpAddrBuilder*) setIp:(NSString*) value { - result.hasIp = YES; - result.ip = value; - return self; -} -- (IpAddrBuilder*) clearIp { - result.hasIp = NO; - result.ip = @""; - return self; -} -- (BOOL) hasPort { - return result.hasPort; -} -- (UInt32) port { - return result.port; -} -- (IpAddrBuilder*) setPort:(UInt32) value { - result.hasPort = YES; - result.port = value; - return self; -} -- (IpAddrBuilder*) clearPort { - result.hasPort = NO; - result.port = 0; - return self; -} -@end - -@interface ClientUserInfo () -@property (strong) NSString* userId; -@property (strong) NSString* name; -@property (strong) NSString* nickName; -@property (strong) NSString* avatarUrl; -@property (strong) NSString* department; -@property UserType userType; -@property UInt32 userUpdated; -@end - -@implementation ClientUserInfo - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasName { - return !!hasName_; -} -- (void) setHasName:(BOOL) value_ { - hasName_ = !!value_; -} -@synthesize name; -- (BOOL) hasNickName { - return !!hasNickName_; -} -- (void) setHasNickName:(BOOL) value_ { - hasNickName_ = !!value_; -} -@synthesize nickName; -- (BOOL) hasAvatarUrl { - return !!hasAvatarUrl_; -} -- (void) setHasAvatarUrl:(BOOL) value_ { - hasAvatarUrl_ = !!value_; -} -@synthesize avatarUrl; -- (BOOL) hasDepartment { - return !!hasDepartment_; -} -- (void) setHasDepartment:(BOOL) value_ { - hasDepartment_ = !!value_; -} -@synthesize department; -- (BOOL) hasUserType { - return !!hasUserType_; -} -- (void) setHasUserType:(BOOL) value_ { - hasUserType_ = !!value_; -} -@synthesize userType; -- (BOOL) hasUserUpdated { - return !!hasUserUpdated_; -} -- (void) setHasUserUpdated:(BOOL) value_ { - hasUserUpdated_ = !!value_; -} -@synthesize userUpdated; -- (void) dealloc { - self.userId = nil; - self.name = nil; - self.nickName = nil; - self.avatarUrl = nil; - self.department = nil; -} -- (id) init { - if ((self = [super init])) { - self.userId = @""; - self.name = @""; - self.nickName = @""; - self.avatarUrl = @""; - self.department = @""; - self.userType = UserTypeUserTypeNormal; - self.userUpdated = 0; - } - return self; -} -static ClientUserInfo* defaultClientUserInfoInstance = nil; -+ (void) initialize { - if (self == [ClientUserInfo class]) { - defaultClientUserInfoInstance = [[ClientUserInfo alloc] init]; - } -} -+ (ClientUserInfo*) defaultInstance { - return defaultClientUserInfoInstance; -} -- (ClientUserInfo*) defaultInstance { - return defaultClientUserInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasName) { - return NO; - } - if (!self.hasNickName) { - return NO; - } - if (!self.hasAvatarUrl) { - return NO; - } - if (!self.hasDepartment) { - return NO; - } - if (!self.hasUserType) { - return NO; - } - if (!self.hasUserUpdated) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeString:1 value:self.userId]; - } - if (self.hasName) { - [output writeString:2 value:self.name]; - } - if (self.hasNickName) { - [output writeString:3 value:self.nickName]; - } - if (self.hasAvatarUrl) { - [output writeString:4 value:self.avatarUrl]; - } - if (self.hasDepartment) { - [output writeString:5 value:self.department]; - } - if (self.hasUserType) { - [output writeEnum:6 value:self.userType]; - } - if (self.hasUserUpdated) { - [output writeUInt32:7 value:self.userUpdated]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeStringSize(1, self.userId); - } - if (self.hasName) { - size_ += computeStringSize(2, self.name); - } - if (self.hasNickName) { - size_ += computeStringSize(3, self.nickName); - } - if (self.hasAvatarUrl) { - size_ += computeStringSize(4, self.avatarUrl); - } - if (self.hasDepartment) { - size_ += computeStringSize(5, self.department); - } - if (self.hasUserType) { - size_ += computeEnumSize(6, self.userType); - } - if (self.hasUserUpdated) { - size_ += computeUInt32Size(7, self.userUpdated); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientUserInfo*) parseFromData:(NSData*) data { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromData:data] build]; -} -+ (ClientUserInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserInfo*) parseFromInputStream:(NSInputStream*) input { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromInputStream:input] build]; -} -+ (ClientUserInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserInfo*)[[[ClientUserInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserInfoBuilder*) builder { - return [[ClientUserInfoBuilder alloc] init]; -} -+ (ClientUserInfoBuilder*) builderWithPrototype:(ClientUserInfo*) prototype { - return [[ClientUserInfo builder] mergeFrom:prototype]; -} -- (ClientUserInfoBuilder*) builder { - return [ClientUserInfo builder]; -} -- (ClientUserInfoBuilder*) toBuilder { - return [ClientUserInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasName) { - [output appendFormat:@"%@%@: %@\n", indent, @"name", self.name]; - } - if (self.hasNickName) { - [output appendFormat:@"%@%@: %@\n", indent, @"nickName", self.nickName]; - } - if (self.hasAvatarUrl) { - [output appendFormat:@"%@%@: %@\n", indent, @"avatarUrl", self.avatarUrl]; - } - if (self.hasDepartment) { - [output appendFormat:@"%@%@: %@\n", indent, @"department", self.department]; - } - if (self.hasUserType) { - [output appendFormat:@"%@%@: %d\n", indent, @"userType", self.userType]; - } - if (self.hasUserUpdated) { - [output appendFormat:@"%@%@: %@\n", indent, @"userUpdated", [NSNumber numberWithInteger:self.userUpdated]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientUserInfo class]]) { - return NO; - } - ClientUserInfo *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasName == otherMessage.hasName && - (!self.hasName || [self.name isEqual:otherMessage.name]) && - self.hasNickName == otherMessage.hasNickName && - (!self.hasNickName || [self.nickName isEqual:otherMessage.nickName]) && - self.hasAvatarUrl == otherMessage.hasAvatarUrl && - (!self.hasAvatarUrl || [self.avatarUrl isEqual:otherMessage.avatarUrl]) && - self.hasDepartment == otherMessage.hasDepartment && - (!self.hasDepartment || [self.department isEqual:otherMessage.department]) && - self.hasUserType == otherMessage.hasUserType && - (!self.hasUserType || self.userType == otherMessage.userType) && - self.hasUserUpdated == otherMessage.hasUserUpdated && - (!self.hasUserUpdated || self.userUpdated == otherMessage.userUpdated) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasName) { - hashCode = hashCode * 31 + [self.name hash]; - } - if (self.hasNickName) { - hashCode = hashCode * 31 + [self.nickName hash]; - } - if (self.hasAvatarUrl) { - hashCode = hashCode * 31 + [self.avatarUrl hash]; - } - if (self.hasDepartment) { - hashCode = hashCode * 31 + [self.department hash]; - } - if (self.hasUserType) { - hashCode = hashCode * 31 + self.userType; - } - if (self.hasUserUpdated) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userUpdated] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientUserInfoBuilder() -@property (strong) ClientUserInfo* result; -@end - -@implementation ClientUserInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientUserInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientUserInfoBuilder*) clear { - self.result = [[ClientUserInfo alloc] init]; - return self; -} -- (ClientUserInfoBuilder*) clone { - return [ClientUserInfo builderWithPrototype:result]; -} -- (ClientUserInfo*) defaultInstance { - return [ClientUserInfo defaultInstance]; -} -- (ClientUserInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientUserInfo*) buildPartial { - ClientUserInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientUserInfoBuilder*) mergeFrom:(ClientUserInfo*) other { - if (other == [ClientUserInfo defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasName) { - [self setName:other.name]; - } - if (other.hasNickName) { - [self setNickName:other.nickName]; - } - if (other.hasAvatarUrl) { - [self setAvatarUrl:other.avatarUrl]; - } - if (other.hasDepartment) { - [self setDepartment:other.department]; - } - if (other.hasUserType) { - [self setUserType:other.userType]; - } - if (other.hasUserUpdated) { - [self setUserUpdated:other.userUpdated]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setUserId:[input readString]]; - break; - } - case 18: { - [self setName:[input readString]]; - break; - } - case 26: { - [self setNickName:[input readString]]; - break; - } - case 34: { - [self setAvatarUrl:[input readString]]; - break; - } - case 42: { - [self setDepartment:[input readString]]; - break; - } - case 48: { - UserType value = (UserType)[input readEnum]; - if (UserTypeIsValidValue(value)) { - [self setUserType:value]; - } else { - [unknownFields mergeVarintField:6 value:value]; - } - break; - } - case 56: { - [self setUserUpdated:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (ClientUserInfoBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ClientUserInfoBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasName { - return result.hasName; -} -- (NSString*) name { - return result.name; -} -- (ClientUserInfoBuilder*) setName:(NSString*) value { - result.hasName = YES; - result.name = value; - return self; -} -- (ClientUserInfoBuilder*) clearName { - result.hasName = NO; - result.name = @""; - return self; -} -- (BOOL) hasNickName { - return result.hasNickName; -} -- (NSString*) nickName { - return result.nickName; -} -- (ClientUserInfoBuilder*) setNickName:(NSString*) value { - result.hasNickName = YES; - result.nickName = value; - return self; -} -- (ClientUserInfoBuilder*) clearNickName { - result.hasNickName = NO; - result.nickName = @""; - return self; -} -- (BOOL) hasAvatarUrl { - return result.hasAvatarUrl; -} -- (NSString*) avatarUrl { - return result.avatarUrl; -} -- (ClientUserInfoBuilder*) setAvatarUrl:(NSString*) value { - result.hasAvatarUrl = YES; - result.avatarUrl = value; - return self; -} -- (ClientUserInfoBuilder*) clearAvatarUrl { - result.hasAvatarUrl = NO; - result.avatarUrl = @""; - return self; -} -- (BOOL) hasDepartment { - return result.hasDepartment; -} -- (NSString*) department { - return result.department; -} -- (ClientUserInfoBuilder*) setDepartment:(NSString*) value { - result.hasDepartment = YES; - result.department = value; - return self; -} -- (ClientUserInfoBuilder*) clearDepartment { - result.hasDepartment = NO; - result.department = @""; - return self; -} -- (BOOL) hasUserType { - return result.hasUserType; -} -- (UserType) userType { - return result.userType; -} -- (ClientUserInfoBuilder*) setUserType:(UserType) value { - result.hasUserType = YES; - result.userType = value; - return self; -} -- (ClientUserInfoBuilder*) clearUserType { - result.hasUserType = NO; - result.userType = UserTypeUserTypeNormal; - return self; -} -- (BOOL) hasUserUpdated { - return result.hasUserUpdated; -} -- (UInt32) userUpdated { - return result.userUpdated; -} -- (ClientUserInfoBuilder*) setUserUpdated:(UInt32) value { - result.hasUserUpdated = YES; - result.userUpdated = value; - return self; -} -- (ClientUserInfoBuilder*) clearUserUpdated { - result.hasUserUpdated = NO; - result.userUpdated = 0; - return self; -} -@end - -@interface ServerUserInfo () -@property UInt32 userId; -@property (strong) NSString* name; -@property (strong) NSString* nickName; -@property (strong) NSString* avatarUrl; -@property (strong) NSString* department; -@property UInt32 userType; -@property UInt32 userUpdate; -@end - -@implementation ServerUserInfo - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasName { - return !!hasName_; -} -- (void) setHasName:(BOOL) value_ { - hasName_ = !!value_; -} -@synthesize name; -- (BOOL) hasNickName { - return !!hasNickName_; -} -- (void) setHasNickName:(BOOL) value_ { - hasNickName_ = !!value_; -} -@synthesize nickName; -- (BOOL) hasAvatarUrl { - return !!hasAvatarUrl_; -} -- (void) setHasAvatarUrl:(BOOL) value_ { - hasAvatarUrl_ = !!value_; -} -@synthesize avatarUrl; -- (BOOL) hasDepartment { - return !!hasDepartment_; -} -- (void) setHasDepartment:(BOOL) value_ { - hasDepartment_ = !!value_; -} -@synthesize department; -- (BOOL) hasUserType { - return !!hasUserType_; -} -- (void) setHasUserType:(BOOL) value_ { - hasUserType_ = !!value_; -} -@synthesize userType; -- (BOOL) hasUserUpdate { - return !!hasUserUpdate_; -} -- (void) setHasUserUpdate:(BOOL) value_ { - hasUserUpdate_ = !!value_; -} -@synthesize userUpdate; -- (void) dealloc { - self.name = nil; - self.nickName = nil; - self.avatarUrl = nil; - self.department = nil; -} -- (id) init { - if ((self = [super init])) { - self.userId = 0; - self.name = @""; - self.nickName = @""; - self.avatarUrl = @""; - self.department = @""; - self.userType = 0; - self.userUpdate = 0; - } - return self; -} -static ServerUserInfo* defaultServerUserInfoInstance = nil; -+ (void) initialize { - if (self == [ServerUserInfo class]) { - defaultServerUserInfoInstance = [[ServerUserInfo alloc] init]; - } -} -+ (ServerUserInfo*) defaultInstance { - return defaultServerUserInfoInstance; -} -- (ServerUserInfo*) defaultInstance { - return defaultServerUserInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasName) { - return NO; - } - if (!self.hasNickName) { - return NO; - } - if (!self.hasAvatarUrl) { - return NO; - } - if (!self.hasDepartment) { - return NO; - } - if (!self.hasUserType) { - return NO; - } - if (!self.hasUserUpdate) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeUInt32:1 value:self.userId]; - } - if (self.hasName) { - [output writeString:2 value:self.name]; - } - if (self.hasNickName) { - [output writeString:3 value:self.nickName]; - } - if (self.hasAvatarUrl) { - [output writeString:4 value:self.avatarUrl]; - } - if (self.hasDepartment) { - [output writeString:5 value:self.department]; - } - if (self.hasUserType) { - [output writeUInt32:6 value:self.userType]; - } - if (self.hasUserUpdate) { - [output writeUInt32:7 value:self.userUpdate]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeUInt32Size(1, self.userId); - } - if (self.hasName) { - size_ += computeStringSize(2, self.name); - } - if (self.hasNickName) { - size_ += computeStringSize(3, self.nickName); - } - if (self.hasAvatarUrl) { - size_ += computeStringSize(4, self.avatarUrl); - } - if (self.hasDepartment) { - size_ += computeStringSize(5, self.department); - } - if (self.hasUserType) { - size_ += computeUInt32Size(6, self.userType); - } - if (self.hasUserUpdate) { - size_ += computeUInt32Size(7, self.userUpdate); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerUserInfo*) parseFromData:(NSData*) data { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromData:data] build]; -} -+ (ServerUserInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserInfo*) parseFromInputStream:(NSInputStream*) input { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromInputStream:input] build]; -} -+ (ServerUserInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerUserInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserInfo*)[[[ServerUserInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserInfoBuilder*) builder { - return [[ServerUserInfoBuilder alloc] init]; -} -+ (ServerUserInfoBuilder*) builderWithPrototype:(ServerUserInfo*) prototype { - return [[ServerUserInfo builder] mergeFrom:prototype]; -} -- (ServerUserInfoBuilder*) builder { - return [ServerUserInfo builder]; -} -- (ServerUserInfoBuilder*) toBuilder { - return [ServerUserInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", [NSNumber numberWithInteger:self.userId]]; - } - if (self.hasName) { - [output appendFormat:@"%@%@: %@\n", indent, @"name", self.name]; - } - if (self.hasNickName) { - [output appendFormat:@"%@%@: %@\n", indent, @"nickName", self.nickName]; - } - if (self.hasAvatarUrl) { - [output appendFormat:@"%@%@: %@\n", indent, @"avatarUrl", self.avatarUrl]; - } - if (self.hasDepartment) { - [output appendFormat:@"%@%@: %@\n", indent, @"department", self.department]; - } - if (self.hasUserType) { - [output appendFormat:@"%@%@: %@\n", indent, @"userType", [NSNumber numberWithInteger:self.userType]]; - } - if (self.hasUserUpdate) { - [output appendFormat:@"%@%@: %@\n", indent, @"userUpdate", [NSNumber numberWithInteger:self.userUpdate]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerUserInfo class]]) { - return NO; - } - ServerUserInfo *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || self.userId == otherMessage.userId) && - self.hasName == otherMessage.hasName && - (!self.hasName || [self.name isEqual:otherMessage.name]) && - self.hasNickName == otherMessage.hasNickName && - (!self.hasNickName || [self.nickName isEqual:otherMessage.nickName]) && - self.hasAvatarUrl == otherMessage.hasAvatarUrl && - (!self.hasAvatarUrl || [self.avatarUrl isEqual:otherMessage.avatarUrl]) && - self.hasDepartment == otherMessage.hasDepartment && - (!self.hasDepartment || [self.department isEqual:otherMessage.department]) && - self.hasUserType == otherMessage.hasUserType && - (!self.hasUserType || self.userType == otherMessage.userType) && - self.hasUserUpdate == otherMessage.hasUserUpdate && - (!self.hasUserUpdate || self.userUpdate == otherMessage.userUpdate) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userId] hash]; - } - if (self.hasName) { - hashCode = hashCode * 31 + [self.name hash]; - } - if (self.hasNickName) { - hashCode = hashCode * 31 + [self.nickName hash]; - } - if (self.hasAvatarUrl) { - hashCode = hashCode * 31 + [self.avatarUrl hash]; - } - if (self.hasDepartment) { - hashCode = hashCode * 31 + [self.department hash]; - } - if (self.hasUserType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userType] hash]; - } - if (self.hasUserUpdate) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userUpdate] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerUserInfoBuilder() -@property (strong) ServerUserInfo* result; -@end - -@implementation ServerUserInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerUserInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerUserInfoBuilder*) clear { - self.result = [[ServerUserInfo alloc] init]; - return self; -} -- (ServerUserInfoBuilder*) clone { - return [ServerUserInfo builderWithPrototype:result]; -} -- (ServerUserInfo*) defaultInstance { - return [ServerUserInfo defaultInstance]; -} -- (ServerUserInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerUserInfo*) buildPartial { - ServerUserInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerUserInfoBuilder*) mergeFrom:(ServerUserInfo*) other { - if (other == [ServerUserInfo defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasName) { - [self setName:other.name]; - } - if (other.hasNickName) { - [self setNickName:other.nickName]; - } - if (other.hasAvatarUrl) { - [self setAvatarUrl:other.avatarUrl]; - } - if (other.hasDepartment) { - [self setDepartment:other.department]; - } - if (other.hasUserType) { - [self setUserType:other.userType]; - } - if (other.hasUserUpdate) { - [self setUserUpdate:other.userUpdate]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerUserInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setUserId:[input readUInt32]]; - break; - } - case 18: { - [self setName:[input readString]]; - break; - } - case 26: { - [self setNickName:[input readString]]; - break; - } - case 34: { - [self setAvatarUrl:[input readString]]; - break; - } - case 42: { - [self setDepartment:[input readString]]; - break; - } - case 48: { - [self setUserType:[input readUInt32]]; - break; - } - case 56: { - [self setUserUpdate:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (UInt32) userId { - return result.userId; -} -- (ServerUserInfoBuilder*) setUserId:(UInt32) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ServerUserInfoBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = 0; - return self; -} -- (BOOL) hasName { - return result.hasName; -} -- (NSString*) name { - return result.name; -} -- (ServerUserInfoBuilder*) setName:(NSString*) value { - result.hasName = YES; - result.name = value; - return self; -} -- (ServerUserInfoBuilder*) clearName { - result.hasName = NO; - result.name = @""; - return self; -} -- (BOOL) hasNickName { - return result.hasNickName; -} -- (NSString*) nickName { - return result.nickName; -} -- (ServerUserInfoBuilder*) setNickName:(NSString*) value { - result.hasNickName = YES; - result.nickName = value; - return self; -} -- (ServerUserInfoBuilder*) clearNickName { - result.hasNickName = NO; - result.nickName = @""; - return self; -} -- (BOOL) hasAvatarUrl { - return result.hasAvatarUrl; -} -- (NSString*) avatarUrl { - return result.avatarUrl; -} -- (ServerUserInfoBuilder*) setAvatarUrl:(NSString*) value { - result.hasAvatarUrl = YES; - result.avatarUrl = value; - return self; -} -- (ServerUserInfoBuilder*) clearAvatarUrl { - result.hasAvatarUrl = NO; - result.avatarUrl = @""; - return self; -} -- (BOOL) hasDepartment { - return result.hasDepartment; -} -- (NSString*) department { - return result.department; -} -- (ServerUserInfoBuilder*) setDepartment:(NSString*) value { - result.hasDepartment = YES; - result.department = value; - return self; -} -- (ServerUserInfoBuilder*) clearDepartment { - result.hasDepartment = NO; - result.department = @""; - return self; -} -- (BOOL) hasUserType { - return result.hasUserType; -} -- (UInt32) userType { - return result.userType; -} -- (ServerUserInfoBuilder*) setUserType:(UInt32) value { - result.hasUserType = YES; - result.userType = value; - return self; -} -- (ServerUserInfoBuilder*) clearUserType { - result.hasUserType = NO; - result.userType = 0; - return self; -} -- (BOOL) hasUserUpdate { - return result.hasUserUpdate; -} -- (UInt32) userUpdate { - return result.userUpdate; -} -- (ServerUserInfoBuilder*) setUserUpdate:(UInt32) value { - result.hasUserUpdate = YES; - result.userUpdate = value; - return self; -} -- (ServerUserInfoBuilder*) clearUserUpdate { - result.hasUserUpdate = NO; - result.userUpdate = 0; - return self; -} -@end - -@interface ClientUserStat () -@property (strong) NSString* userId; -@property UserStatType userStat; -@end - -@implementation ClientUserStat - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasUserStat { - return !!hasUserStat_; -} -- (void) setHasUserStat:(BOOL) value_ { - hasUserStat_ = !!value_; -} -@synthesize userStat; -- (void) dealloc { - self.userId = nil; -} -- (id) init { - if ((self = [super init])) { - self.userId = @""; - self.userStat = UserStatTypeUserStatusOnline; - } - return self; -} -static ClientUserStat* defaultClientUserStatInstance = nil; -+ (void) initialize { - if (self == [ClientUserStat class]) { - defaultClientUserStatInstance = [[ClientUserStat alloc] init]; - } -} -+ (ClientUserStat*) defaultInstance { - return defaultClientUserStatInstance; -} -- (ClientUserStat*) defaultInstance { - return defaultClientUserStatInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasUserStat) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeString:1 value:self.userId]; - } - if (self.hasUserStat) { - [output writeEnum:2 value:self.userStat]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeStringSize(1, self.userId); - } - if (self.hasUserStat) { - size_ += computeEnumSize(2, self.userStat); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientUserStat*) parseFromData:(NSData*) data { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromData:data] build]; -} -+ (ClientUserStat*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserStat*) parseFromInputStream:(NSInputStream*) input { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromInputStream:input] build]; -} -+ (ClientUserStat*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUserStat*)[[[ClientUserStat builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUserStatBuilder*) builder { - return [[ClientUserStatBuilder alloc] init]; -} -+ (ClientUserStatBuilder*) builderWithPrototype:(ClientUserStat*) prototype { - return [[ClientUserStat builder] mergeFrom:prototype]; -} -- (ClientUserStatBuilder*) builder { - return [ClientUserStat builder]; -} -- (ClientUserStatBuilder*) toBuilder { - return [ClientUserStat builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasUserStat) { - [output appendFormat:@"%@%@: %d\n", indent, @"userStat", self.userStat]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientUserStat class]]) { - return NO; - } - ClientUserStat *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasUserStat == otherMessage.hasUserStat && - (!self.hasUserStat || self.userStat == otherMessage.userStat) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasUserStat) { - hashCode = hashCode * 31 + self.userStat; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientUserStatBuilder() -@property (strong) ClientUserStat* result; -@end - -@implementation ClientUserStatBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientUserStat alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientUserStatBuilder*) clear { - self.result = [[ClientUserStat alloc] init]; - return self; -} -- (ClientUserStatBuilder*) clone { - return [ClientUserStat builderWithPrototype:result]; -} -- (ClientUserStat*) defaultInstance { - return [ClientUserStat defaultInstance]; -} -- (ClientUserStat*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientUserStat*) buildPartial { - ClientUserStat* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientUserStatBuilder*) mergeFrom:(ClientUserStat*) other { - if (other == [ClientUserStat defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasUserStat) { - [self setUserStat:other.userStat]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setUserId:[input readString]]; - break; - } - case 16: { - UserStatType value = (UserStatType)[input readEnum]; - if (UserStatTypeIsValidValue(value)) { - [self setUserStat:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (ClientUserStatBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ClientUserStatBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasUserStat { - return result.hasUserStat; -} -- (UserStatType) userStat { - return result.userStat; -} -- (ClientUserStatBuilder*) setUserStat:(UserStatType) value { - result.hasUserStat = YES; - result.userStat = value; - return self; -} -- (ClientUserStatBuilder*) clearUserStat { - result.hasUserStat = NO; - result.userStat = UserStatTypeUserStatusOnline; - return self; -} -@end - -@interface ServerUserStat () -@property UInt32 userId; -@property UserStatType userStat; -@end - -@implementation ServerUserStat - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasUserStat { - return !!hasUserStat_; -} -- (void) setHasUserStat:(BOOL) value_ { - hasUserStat_ = !!value_; -} -@synthesize userStat; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.userId = 0; - self.userStat = UserStatTypeUserStatusOnline; - } - return self; -} -static ServerUserStat* defaultServerUserStatInstance = nil; -+ (void) initialize { - if (self == [ServerUserStat class]) { - defaultServerUserStatInstance = [[ServerUserStat alloc] init]; - } -} -+ (ServerUserStat*) defaultInstance { - return defaultServerUserStatInstance; -} -- (ServerUserStat*) defaultInstance { - return defaultServerUserStatInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasUserStat) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeUInt32:1 value:self.userId]; - } - if (self.hasUserStat) { - [output writeEnum:2 value:self.userStat]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeUInt32Size(1, self.userId); - } - if (self.hasUserStat) { - size_ += computeEnumSize(2, self.userStat); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerUserStat*) parseFromData:(NSData*) data { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromData:data] build]; -} -+ (ServerUserStat*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserStat*) parseFromInputStream:(NSInputStream*) input { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromInputStream:input] build]; -} -+ (ServerUserStat*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerUserStat*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUserStat*)[[[ServerUserStat builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUserStatBuilder*) builder { - return [[ServerUserStatBuilder alloc] init]; -} -+ (ServerUserStatBuilder*) builderWithPrototype:(ServerUserStat*) prototype { - return [[ServerUserStat builder] mergeFrom:prototype]; -} -- (ServerUserStatBuilder*) builder { - return [ServerUserStat builder]; -} -- (ServerUserStatBuilder*) toBuilder { - return [ServerUserStat builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", [NSNumber numberWithInteger:self.userId]]; - } - if (self.hasUserStat) { - [output appendFormat:@"%@%@: %d\n", indent, @"userStat", self.userStat]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerUserStat class]]) { - return NO; - } - ServerUserStat *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || self.userId == otherMessage.userId) && - self.hasUserStat == otherMessage.hasUserStat && - (!self.hasUserStat || self.userStat == otherMessage.userStat) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userId] hash]; - } - if (self.hasUserStat) { - hashCode = hashCode * 31 + self.userStat; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerUserStatBuilder() -@property (strong) ServerUserStat* result; -@end - -@implementation ServerUserStatBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerUserStat alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerUserStatBuilder*) clear { - self.result = [[ServerUserStat alloc] init]; - return self; -} -- (ServerUserStatBuilder*) clone { - return [ServerUserStat builderWithPrototype:result]; -} -- (ServerUserStat*) defaultInstance { - return [ServerUserStat defaultInstance]; -} -- (ServerUserStat*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerUserStat*) buildPartial { - ServerUserStat* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerUserStatBuilder*) mergeFrom:(ServerUserStat*) other { - if (other == [ServerUserStat defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasUserStat) { - [self setUserStat:other.userStat]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerUserStatBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setUserId:[input readUInt32]]; - break; - } - case 16: { - UserStatType value = (UserStatType)[input readEnum]; - if (UserStatTypeIsValidValue(value)) { - [self setUserStat:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (UInt32) userId { - return result.userId; -} -- (ServerUserStatBuilder*) setUserId:(UInt32) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ServerUserStatBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = 0; - return self; -} -- (BOOL) hasUserStat { - return result.hasUserStat; -} -- (UserStatType) userStat { - return result.userStat; -} -- (ServerUserStatBuilder*) setUserStat:(UserStatType) value { - result.hasUserStat = YES; - result.userStat = value; - return self; -} -- (ServerUserStatBuilder*) clearUserStat { - result.hasUserStat = NO; - result.userStat = UserStatTypeUserStatusOnline; - return self; -} -@end - -@interface ClientUnReadInfo () -@property (strong) NSString* userId; -@property UInt32 unreadCount; -@end - -@implementation ClientUnReadInfo - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasUnreadCount { - return !!hasUnreadCount_; -} -- (void) setHasUnreadCount:(BOOL) value_ { - hasUnreadCount_ = !!value_; -} -@synthesize unreadCount; -- (void) dealloc { - self.userId = nil; -} -- (id) init { - if ((self = [super init])) { - self.userId = @""; - self.unreadCount = 0; - } - return self; -} -static ClientUnReadInfo* defaultClientUnReadInfoInstance = nil; -+ (void) initialize { - if (self == [ClientUnReadInfo class]) { - defaultClientUnReadInfoInstance = [[ClientUnReadInfo alloc] init]; - } -} -+ (ClientUnReadInfo*) defaultInstance { - return defaultClientUnReadInfoInstance; -} -- (ClientUnReadInfo*) defaultInstance { - return defaultClientUnReadInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasUnreadCount) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeString:1 value:self.userId]; - } - if (self.hasUnreadCount) { - [output writeUInt32:2 value:self.unreadCount]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeStringSize(1, self.userId); - } - if (self.hasUnreadCount) { - size_ += computeUInt32Size(2, self.unreadCount); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientUnReadInfo*) parseFromData:(NSData*) data { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromData:data] build]; -} -+ (ClientUnReadInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientUnReadInfo*) parseFromInputStream:(NSInputStream*) input { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromInputStream:input] build]; -} -+ (ClientUnReadInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientUnReadInfo*)[[[ClientUnReadInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientUnReadInfoBuilder*) builder { - return [[ClientUnReadInfoBuilder alloc] init]; -} -+ (ClientUnReadInfoBuilder*) builderWithPrototype:(ClientUnReadInfo*) prototype { - return [[ClientUnReadInfo builder] mergeFrom:prototype]; -} -- (ClientUnReadInfoBuilder*) builder { - return [ClientUnReadInfo builder]; -} -- (ClientUnReadInfoBuilder*) toBuilder { - return [ClientUnReadInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasUnreadCount) { - [output appendFormat:@"%@%@: %@\n", indent, @"unreadCount", [NSNumber numberWithInteger:self.unreadCount]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientUnReadInfo class]]) { - return NO; - } - ClientUnReadInfo *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasUnreadCount == otherMessage.hasUnreadCount && - (!self.hasUnreadCount || self.unreadCount == otherMessage.unreadCount) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasUnreadCount) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.unreadCount] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientUnReadInfoBuilder() -@property (strong) ClientUnReadInfo* result; -@end - -@implementation ClientUnReadInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientUnReadInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientUnReadInfoBuilder*) clear { - self.result = [[ClientUnReadInfo alloc] init]; - return self; -} -- (ClientUnReadInfoBuilder*) clone { - return [ClientUnReadInfo builderWithPrototype:result]; -} -- (ClientUnReadInfo*) defaultInstance { - return [ClientUnReadInfo defaultInstance]; -} -- (ClientUnReadInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientUnReadInfo*) buildPartial { - ClientUnReadInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientUnReadInfoBuilder*) mergeFrom:(ClientUnReadInfo*) other { - if (other == [ClientUnReadInfo defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasUnreadCount) { - [self setUnreadCount:other.unreadCount]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setUserId:[input readString]]; - break; - } - case 16: { - [self setUnreadCount:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (ClientUnReadInfoBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ClientUnReadInfoBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasUnreadCount { - return result.hasUnreadCount; -} -- (UInt32) unreadCount { - return result.unreadCount; -} -- (ClientUnReadInfoBuilder*) setUnreadCount:(UInt32) value { - result.hasUnreadCount = YES; - result.unreadCount = value; - return self; -} -- (ClientUnReadInfoBuilder*) clearUnreadCount { - result.hasUnreadCount = NO; - result.unreadCount = 0; - return self; -} -@end - -@interface ServerUnReadInfo () -@property UInt32 userId; -@property UInt32 unreadCount; -@end - -@implementation ServerUnReadInfo - -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasUnreadCount { - return !!hasUnreadCount_; -} -- (void) setHasUnreadCount:(BOOL) value_ { - hasUnreadCount_ = !!value_; -} -@synthesize unreadCount; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.userId = 0; - self.unreadCount = 0; - } - return self; -} -static ServerUnReadInfo* defaultServerUnReadInfoInstance = nil; -+ (void) initialize { - if (self == [ServerUnReadInfo class]) { - defaultServerUnReadInfoInstance = [[ServerUnReadInfo alloc] init]; - } -} -+ (ServerUnReadInfo*) defaultInstance { - return defaultServerUnReadInfoInstance; -} -- (ServerUnReadInfo*) defaultInstance { - return defaultServerUnReadInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasUnreadCount) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasUserId) { - [output writeUInt32:1 value:self.userId]; - } - if (self.hasUnreadCount) { - [output writeUInt32:2 value:self.unreadCount]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasUserId) { - size_ += computeUInt32Size(1, self.userId); - } - if (self.hasUnreadCount) { - size_ += computeUInt32Size(2, self.unreadCount); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerUnReadInfo*) parseFromData:(NSData*) data { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromData:data] build]; -} -+ (ServerUnReadInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerUnReadInfo*) parseFromInputStream:(NSInputStream*) input { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromInputStream:input] build]; -} -+ (ServerUnReadInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerUnReadInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerUnReadInfo*)[[[ServerUnReadInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerUnReadInfoBuilder*) builder { - return [[ServerUnReadInfoBuilder alloc] init]; -} -+ (ServerUnReadInfoBuilder*) builderWithPrototype:(ServerUnReadInfo*) prototype { - return [[ServerUnReadInfo builder] mergeFrom:prototype]; -} -- (ServerUnReadInfoBuilder*) builder { - return [ServerUnReadInfo builder]; -} -- (ServerUnReadInfoBuilder*) toBuilder { - return [ServerUnReadInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", [NSNumber numberWithInteger:self.userId]]; - } - if (self.hasUnreadCount) { - [output appendFormat:@"%@%@: %@\n", indent, @"unreadCount", [NSNumber numberWithInteger:self.unreadCount]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerUnReadInfo class]]) { - return NO; - } - ServerUnReadInfo *otherMessage = other; - return - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || self.userId == otherMessage.userId) && - self.hasUnreadCount == otherMessage.hasUnreadCount && - (!self.hasUnreadCount || self.unreadCount == otherMessage.unreadCount) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userId] hash]; - } - if (self.hasUnreadCount) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.unreadCount] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerUnReadInfoBuilder() -@property (strong) ServerUnReadInfo* result; -@end - -@implementation ServerUnReadInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerUnReadInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerUnReadInfoBuilder*) clear { - self.result = [[ServerUnReadInfo alloc] init]; - return self; -} -- (ServerUnReadInfoBuilder*) clone { - return [ServerUnReadInfo builderWithPrototype:result]; -} -- (ServerUnReadInfo*) defaultInstance { - return [ServerUnReadInfo defaultInstance]; -} -- (ServerUnReadInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerUnReadInfo*) buildPartial { - ServerUnReadInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerUnReadInfoBuilder*) mergeFrom:(ServerUnReadInfo*) other { - if (other == [ServerUnReadInfo defaultInstance]) { - return self; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasUnreadCount) { - [self setUnreadCount:other.unreadCount]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerUnReadInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setUserId:[input readUInt32]]; - break; - } - case 16: { - [self setUnreadCount:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (UInt32) userId { - return result.userId; -} -- (ServerUnReadInfoBuilder*) setUserId:(UInt32) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (ServerUnReadInfoBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = 0; - return self; -} -- (BOOL) hasUnreadCount { - return result.hasUnreadCount; -} -- (UInt32) unreadCount { - return result.unreadCount; -} -- (ServerUnReadInfoBuilder*) setUnreadCount:(UInt32) value { - result.hasUnreadCount = YES; - result.unreadCount = value; - return self; -} -- (ServerUnReadInfoBuilder*) clearUnreadCount { - result.hasUnreadCount = NO; - result.unreadCount = 0; - return self; -} -@end - -@interface ClientMsgInfo () -@property (strong) NSString* fromUserId; -@property (strong) NSString* fromUserName; -@property (strong) NSString* fromUserNickName; -@property (strong) NSString* fromUserAvatarUrl; -@property UInt32 createTime; -@property UInt32 msgType; -@property (strong) NSString* msgContent; -@end - -@implementation ClientMsgInfo - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasFromUserName { - return !!hasFromUserName_; -} -- (void) setHasFromUserName:(BOOL) value_ { - hasFromUserName_ = !!value_; -} -@synthesize fromUserName; -- (BOOL) hasFromUserNickName { - return !!hasFromUserNickName_; -} -- (void) setHasFromUserNickName:(BOOL) value_ { - hasFromUserNickName_ = !!value_; -} -@synthesize fromUserNickName; -- (BOOL) hasFromUserAvatarUrl { - return !!hasFromUserAvatarUrl_; -} -- (void) setHasFromUserAvatarUrl:(BOOL) value_ { - hasFromUserAvatarUrl_ = !!value_; -} -@synthesize fromUserAvatarUrl; -- (BOOL) hasCreateTime { - return !!hasCreateTime_; -} -- (void) setHasCreateTime:(BOOL) value_ { - hasCreateTime_ = !!value_; -} -@synthesize createTime; -- (BOOL) hasMsgType { - return !!hasMsgType_; -} -- (void) setHasMsgType:(BOOL) value_ { - hasMsgType_ = !!value_; -} -@synthesize msgType; -- (BOOL) hasMsgContent { - return !!hasMsgContent_; -} -- (void) setHasMsgContent:(BOOL) value_ { - hasMsgContent_ = !!value_; -} -@synthesize msgContent; -- (void) dealloc { - self.fromUserId = nil; - self.fromUserName = nil; - self.fromUserNickName = nil; - self.fromUserAvatarUrl = nil; - self.msgContent = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = @""; - self.fromUserName = @""; - self.fromUserNickName = @""; - self.fromUserAvatarUrl = @""; - self.createTime = 0; - self.msgType = 0; - self.msgContent = @""; - } - return self; -} -static ClientMsgInfo* defaultClientMsgInfoInstance = nil; -+ (void) initialize { - if (self == [ClientMsgInfo class]) { - defaultClientMsgInfoInstance = [[ClientMsgInfo alloc] init]; - } -} -+ (ClientMsgInfo*) defaultInstance { - return defaultClientMsgInfoInstance; -} -- (ClientMsgInfo*) defaultInstance { - return defaultClientMsgInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasFromUserName) { - return NO; - } - if (!self.hasFromUserNickName) { - return NO; - } - if (!self.hasFromUserAvatarUrl) { - return NO; - } - if (!self.hasCreateTime) { - return NO; - } - if (!self.hasMsgType) { - return NO; - } - if (!self.hasMsgContent) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeString:1 value:self.fromUserId]; - } - if (self.hasFromUserName) { - [output writeString:2 value:self.fromUserName]; - } - if (self.hasFromUserNickName) { - [output writeString:3 value:self.fromUserNickName]; - } - if (self.hasFromUserAvatarUrl) { - [output writeString:4 value:self.fromUserAvatarUrl]; - } - if (self.hasCreateTime) { - [output writeUInt32:5 value:self.createTime]; - } - if (self.hasMsgType) { - [output writeUInt32:6 value:self.msgType]; - } - if (self.hasMsgContent) { - [output writeString:7 value:self.msgContent]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeStringSize(1, self.fromUserId); - } - if (self.hasFromUserName) { - size_ += computeStringSize(2, self.fromUserName); - } - if (self.hasFromUserNickName) { - size_ += computeStringSize(3, self.fromUserNickName); - } - if (self.hasFromUserAvatarUrl) { - size_ += computeStringSize(4, self.fromUserAvatarUrl); - } - if (self.hasCreateTime) { - size_ += computeUInt32Size(5, self.createTime); - } - if (self.hasMsgType) { - size_ += computeUInt32Size(6, self.msgType); - } - if (self.hasMsgContent) { - size_ += computeStringSize(7, self.msgContent); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientMsgInfo*) parseFromData:(NSData*) data { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromData:data] build]; -} -+ (ClientMsgInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgInfo*) parseFromInputStream:(NSInputStream*) input { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromInputStream:input] build]; -} -+ (ClientMsgInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgInfo*)[[[ClientMsgInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgInfoBuilder*) builder { - return [[ClientMsgInfoBuilder alloc] init]; -} -+ (ClientMsgInfoBuilder*) builderWithPrototype:(ClientMsgInfo*) prototype { - return [[ClientMsgInfo builder] mergeFrom:prototype]; -} -- (ClientMsgInfoBuilder*) builder { - return [ClientMsgInfo builder]; -} -- (ClientMsgInfoBuilder*) toBuilder { - return [ClientMsgInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasFromUserName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserName", self.fromUserName]; - } - if (self.hasFromUserNickName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserNickName", self.fromUserNickName]; - } - if (self.hasFromUserAvatarUrl) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserAvatarUrl", self.fromUserAvatarUrl]; - } - if (self.hasCreateTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"createTime", [NSNumber numberWithInteger:self.createTime]]; - } - if (self.hasMsgType) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgType", [NSNumber numberWithInteger:self.msgType]]; - } - if (self.hasMsgContent) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgContent", self.msgContent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientMsgInfo class]]) { - return NO; - } - ClientMsgInfo *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasFromUserName == otherMessage.hasFromUserName && - (!self.hasFromUserName || [self.fromUserName isEqual:otherMessage.fromUserName]) && - self.hasFromUserNickName == otherMessage.hasFromUserNickName && - (!self.hasFromUserNickName || [self.fromUserNickName isEqual:otherMessage.fromUserNickName]) && - self.hasFromUserAvatarUrl == otherMessage.hasFromUserAvatarUrl && - (!self.hasFromUserAvatarUrl || [self.fromUserAvatarUrl isEqual:otherMessage.fromUserAvatarUrl]) && - self.hasCreateTime == otherMessage.hasCreateTime && - (!self.hasCreateTime || self.createTime == otherMessage.createTime) && - self.hasMsgType == otherMessage.hasMsgType && - (!self.hasMsgType || self.msgType == otherMessage.msgType) && - self.hasMsgContent == otherMessage.hasMsgContent && - (!self.hasMsgContent || [self.msgContent isEqual:otherMessage.msgContent]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasFromUserName) { - hashCode = hashCode * 31 + [self.fromUserName hash]; - } - if (self.hasFromUserNickName) { - hashCode = hashCode * 31 + [self.fromUserNickName hash]; - } - if (self.hasFromUserAvatarUrl) { - hashCode = hashCode * 31 + [self.fromUserAvatarUrl hash]; - } - if (self.hasCreateTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.createTime] hash]; - } - if (self.hasMsgType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgType] hash]; - } - if (self.hasMsgContent) { - hashCode = hashCode * 31 + [self.msgContent hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientMsgInfoBuilder() -@property (strong) ClientMsgInfo* result; -@end - -@implementation ClientMsgInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientMsgInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientMsgInfoBuilder*) clear { - self.result = [[ClientMsgInfo alloc] init]; - return self; -} -- (ClientMsgInfoBuilder*) clone { - return [ClientMsgInfo builderWithPrototype:result]; -} -- (ClientMsgInfo*) defaultInstance { - return [ClientMsgInfo defaultInstance]; -} -- (ClientMsgInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientMsgInfo*) buildPartial { - ClientMsgInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientMsgInfoBuilder*) mergeFrom:(ClientMsgInfo*) other { - if (other == [ClientMsgInfo defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasFromUserName) { - [self setFromUserName:other.fromUserName]; - } - if (other.hasFromUserNickName) { - [self setFromUserNickName:other.fromUserNickName]; - } - if (other.hasFromUserAvatarUrl) { - [self setFromUserAvatarUrl:other.fromUserAvatarUrl]; - } - if (other.hasCreateTime) { - [self setCreateTime:other.createTime]; - } - if (other.hasMsgType) { - [self setMsgType:other.msgType]; - } - if (other.hasMsgContent) { - [self setMsgContent:other.msgContent]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setFromUserId:[input readString]]; - break; - } - case 18: { - [self setFromUserName:[input readString]]; - break; - } - case 26: { - [self setFromUserNickName:[input readString]]; - break; - } - case 34: { - [self setFromUserAvatarUrl:[input readString]]; - break; - } - case 40: { - [self setCreateTime:[input readUInt32]]; - break; - } - case 48: { - [self setMsgType:[input readUInt32]]; - break; - } - case 58: { - [self setMsgContent:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientMsgInfoBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientMsgInfoBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasFromUserName { - return result.hasFromUserName; -} -- (NSString*) fromUserName { - return result.fromUserName; -} -- (ClientMsgInfoBuilder*) setFromUserName:(NSString*) value { - result.hasFromUserName = YES; - result.fromUserName = value; - return self; -} -- (ClientMsgInfoBuilder*) clearFromUserName { - result.hasFromUserName = NO; - result.fromUserName = @""; - return self; -} -- (BOOL) hasFromUserNickName { - return result.hasFromUserNickName; -} -- (NSString*) fromUserNickName { - return result.fromUserNickName; -} -- (ClientMsgInfoBuilder*) setFromUserNickName:(NSString*) value { - result.hasFromUserNickName = YES; - result.fromUserNickName = value; - return self; -} -- (ClientMsgInfoBuilder*) clearFromUserNickName { - result.hasFromUserNickName = NO; - result.fromUserNickName = @""; - return self; -} -- (BOOL) hasFromUserAvatarUrl { - return result.hasFromUserAvatarUrl; -} -- (NSString*) fromUserAvatarUrl { - return result.fromUserAvatarUrl; -} -- (ClientMsgInfoBuilder*) setFromUserAvatarUrl:(NSString*) value { - result.hasFromUserAvatarUrl = YES; - result.fromUserAvatarUrl = value; - return self; -} -- (ClientMsgInfoBuilder*) clearFromUserAvatarUrl { - result.hasFromUserAvatarUrl = NO; - result.fromUserAvatarUrl = @""; - return self; -} -- (BOOL) hasCreateTime { - return result.hasCreateTime; -} -- (UInt32) createTime { - return result.createTime; -} -- (ClientMsgInfoBuilder*) setCreateTime:(UInt32) value { - result.hasCreateTime = YES; - result.createTime = value; - return self; -} -- (ClientMsgInfoBuilder*) clearCreateTime { - result.hasCreateTime = NO; - result.createTime = 0; - return self; -} -- (BOOL) hasMsgType { - return result.hasMsgType; -} -- (UInt32) msgType { - return result.msgType; -} -- (ClientMsgInfoBuilder*) setMsgType:(UInt32) value { - result.hasMsgType = YES; - result.msgType = value; - return self; -} -- (ClientMsgInfoBuilder*) clearMsgType { - result.hasMsgType = NO; - result.msgType = 0; - return self; -} -- (BOOL) hasMsgContent { - return result.hasMsgContent; -} -- (NSString*) msgContent { - return result.msgContent; -} -- (ClientMsgInfoBuilder*) setMsgContent:(NSString*) value { - result.hasMsgContent = YES; - result.msgContent = value; - return self; -} -- (ClientMsgInfoBuilder*) clearMsgContent { - result.hasMsgContent = NO; - result.msgContent = @""; - return self; -} -@end - -@interface ServerMsgInfo () -@property UInt32 fromUserId; -@property (strong) NSString* fromUserName; -@property (strong) NSString* fromUserNickName; -@property (strong) NSString* fromUserAvatarUrl; -@property UInt32 createTime; -@property UInt32 msgType; -@property (strong) NSString* msgContent; -@end - -@implementation ServerMsgInfo - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasFromUserName { - return !!hasFromUserName_; -} -- (void) setHasFromUserName:(BOOL) value_ { - hasFromUserName_ = !!value_; -} -@synthesize fromUserName; -- (BOOL) hasFromUserNickName { - return !!hasFromUserNickName_; -} -- (void) setHasFromUserNickName:(BOOL) value_ { - hasFromUserNickName_ = !!value_; -} -@synthesize fromUserNickName; -- (BOOL) hasFromUserAvatarUrl { - return !!hasFromUserAvatarUrl_; -} -- (void) setHasFromUserAvatarUrl:(BOOL) value_ { - hasFromUserAvatarUrl_ = !!value_; -} -@synthesize fromUserAvatarUrl; -- (BOOL) hasCreateTime { - return !!hasCreateTime_; -} -- (void) setHasCreateTime:(BOOL) value_ { - hasCreateTime_ = !!value_; -} -@synthesize createTime; -- (BOOL) hasMsgType { - return !!hasMsgType_; -} -- (void) setHasMsgType:(BOOL) value_ { - hasMsgType_ = !!value_; -} -@synthesize msgType; -- (BOOL) hasMsgContent { - return !!hasMsgContent_; -} -- (void) setHasMsgContent:(BOOL) value_ { - hasMsgContent_ = !!value_; -} -@synthesize msgContent; -- (void) dealloc { - self.fromUserName = nil; - self.fromUserNickName = nil; - self.fromUserAvatarUrl = nil; - self.msgContent = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = 0; - self.fromUserName = @""; - self.fromUserNickName = @""; - self.fromUserAvatarUrl = @""; - self.createTime = 0; - self.msgType = 0; - self.msgContent = @""; - } - return self; -} -static ServerMsgInfo* defaultServerMsgInfoInstance = nil; -+ (void) initialize { - if (self == [ServerMsgInfo class]) { - defaultServerMsgInfoInstance = [[ServerMsgInfo alloc] init]; - } -} -+ (ServerMsgInfo*) defaultInstance { - return defaultServerMsgInfoInstance; -} -- (ServerMsgInfo*) defaultInstance { - return defaultServerMsgInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasFromUserName) { - return NO; - } - if (!self.hasFromUserNickName) { - return NO; - } - if (!self.hasFromUserAvatarUrl) { - return NO; - } - if (!self.hasCreateTime) { - return NO; - } - if (!self.hasMsgType) { - return NO; - } - if (!self.hasMsgContent) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeUInt32:1 value:self.fromUserId]; - } - if (self.hasFromUserName) { - [output writeString:2 value:self.fromUserName]; - } - if (self.hasFromUserNickName) { - [output writeString:3 value:self.fromUserNickName]; - } - if (self.hasFromUserAvatarUrl) { - [output writeString:4 value:self.fromUserAvatarUrl]; - } - if (self.hasCreateTime) { - [output writeUInt32:5 value:self.createTime]; - } - if (self.hasMsgType) { - [output writeUInt32:6 value:self.msgType]; - } - if (self.hasMsgContent) { - [output writeString:7 value:self.msgContent]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeUInt32Size(1, self.fromUserId); - } - if (self.hasFromUserName) { - size_ += computeStringSize(2, self.fromUserName); - } - if (self.hasFromUserNickName) { - size_ += computeStringSize(3, self.fromUserNickName); - } - if (self.hasFromUserAvatarUrl) { - size_ += computeStringSize(4, self.fromUserAvatarUrl); - } - if (self.hasCreateTime) { - size_ += computeUInt32Size(5, self.createTime); - } - if (self.hasMsgType) { - size_ += computeUInt32Size(6, self.msgType); - } - if (self.hasMsgContent) { - size_ += computeStringSize(7, self.msgContent); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerMsgInfo*) parseFromData:(NSData*) data { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromData:data] build]; -} -+ (ServerMsgInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerMsgInfo*) parseFromInputStream:(NSInputStream*) input { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromInputStream:input] build]; -} -+ (ServerMsgInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerMsgInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerMsgInfo*)[[[ServerMsgInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerMsgInfoBuilder*) builder { - return [[ServerMsgInfoBuilder alloc] init]; -} -+ (ServerMsgInfoBuilder*) builderWithPrototype:(ServerMsgInfo*) prototype { - return [[ServerMsgInfo builder] mergeFrom:prototype]; -} -- (ServerMsgInfoBuilder*) builder { - return [ServerMsgInfo builder]; -} -- (ServerMsgInfoBuilder*) toBuilder { - return [ServerMsgInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", [NSNumber numberWithInteger:self.fromUserId]]; - } - if (self.hasFromUserName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserName", self.fromUserName]; - } - if (self.hasFromUserNickName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserNickName", self.fromUserNickName]; - } - if (self.hasFromUserAvatarUrl) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserAvatarUrl", self.fromUserAvatarUrl]; - } - if (self.hasCreateTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"createTime", [NSNumber numberWithInteger:self.createTime]]; - } - if (self.hasMsgType) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgType", [NSNumber numberWithInteger:self.msgType]]; - } - if (self.hasMsgContent) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgContent", self.msgContent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerMsgInfo class]]) { - return NO; - } - ServerMsgInfo *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || self.fromUserId == otherMessage.fromUserId) && - self.hasFromUserName == otherMessage.hasFromUserName && - (!self.hasFromUserName || [self.fromUserName isEqual:otherMessage.fromUserName]) && - self.hasFromUserNickName == otherMessage.hasFromUserNickName && - (!self.hasFromUserNickName || [self.fromUserNickName isEqual:otherMessage.fromUserNickName]) && - self.hasFromUserAvatarUrl == otherMessage.hasFromUserAvatarUrl && - (!self.hasFromUserAvatarUrl || [self.fromUserAvatarUrl isEqual:otherMessage.fromUserAvatarUrl]) && - self.hasCreateTime == otherMessage.hasCreateTime && - (!self.hasCreateTime || self.createTime == otherMessage.createTime) && - self.hasMsgType == otherMessage.hasMsgType && - (!self.hasMsgType || self.msgType == otherMessage.msgType) && - self.hasMsgContent == otherMessage.hasMsgContent && - (!self.hasMsgContent || [self.msgContent isEqual:otherMessage.msgContent]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fromUserId] hash]; - } - if (self.hasFromUserName) { - hashCode = hashCode * 31 + [self.fromUserName hash]; - } - if (self.hasFromUserNickName) { - hashCode = hashCode * 31 + [self.fromUserNickName hash]; - } - if (self.hasFromUserAvatarUrl) { - hashCode = hashCode * 31 + [self.fromUserAvatarUrl hash]; - } - if (self.hasCreateTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.createTime] hash]; - } - if (self.hasMsgType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgType] hash]; - } - if (self.hasMsgContent) { - hashCode = hashCode * 31 + [self.msgContent hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerMsgInfoBuilder() -@property (strong) ServerMsgInfo* result; -@end - -@implementation ServerMsgInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerMsgInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerMsgInfoBuilder*) clear { - self.result = [[ServerMsgInfo alloc] init]; - return self; -} -- (ServerMsgInfoBuilder*) clone { - return [ServerMsgInfo builderWithPrototype:result]; -} -- (ServerMsgInfo*) defaultInstance { - return [ServerMsgInfo defaultInstance]; -} -- (ServerMsgInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerMsgInfo*) buildPartial { - ServerMsgInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerMsgInfoBuilder*) mergeFrom:(ServerMsgInfo*) other { - if (other == [ServerMsgInfo defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasFromUserName) { - [self setFromUserName:other.fromUserName]; - } - if (other.hasFromUserNickName) { - [self setFromUserNickName:other.fromUserNickName]; - } - if (other.hasFromUserAvatarUrl) { - [self setFromUserAvatarUrl:other.fromUserAvatarUrl]; - } - if (other.hasCreateTime) { - [self setCreateTime:other.createTime]; - } - if (other.hasMsgType) { - [self setMsgType:other.msgType]; - } - if (other.hasMsgContent) { - [self setMsgContent:other.msgContent]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerMsgInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setFromUserId:[input readUInt32]]; - break; - } - case 18: { - [self setFromUserName:[input readString]]; - break; - } - case 26: { - [self setFromUserNickName:[input readString]]; - break; - } - case 34: { - [self setFromUserAvatarUrl:[input readString]]; - break; - } - case 40: { - [self setCreateTime:[input readUInt32]]; - break; - } - case 48: { - [self setMsgType:[input readUInt32]]; - break; - } - case 58: { - [self setMsgContent:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (UInt32) fromUserId { - return result.fromUserId; -} -- (ServerMsgInfoBuilder*) setFromUserId:(UInt32) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ServerMsgInfoBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = 0; - return self; -} -- (BOOL) hasFromUserName { - return result.hasFromUserName; -} -- (NSString*) fromUserName { - return result.fromUserName; -} -- (ServerMsgInfoBuilder*) setFromUserName:(NSString*) value { - result.hasFromUserName = YES; - result.fromUserName = value; - return self; -} -- (ServerMsgInfoBuilder*) clearFromUserName { - result.hasFromUserName = NO; - result.fromUserName = @""; - return self; -} -- (BOOL) hasFromUserNickName { - return result.hasFromUserNickName; -} -- (NSString*) fromUserNickName { - return result.fromUserNickName; -} -- (ServerMsgInfoBuilder*) setFromUserNickName:(NSString*) value { - result.hasFromUserNickName = YES; - result.fromUserNickName = value; - return self; -} -- (ServerMsgInfoBuilder*) clearFromUserNickName { - result.hasFromUserNickName = NO; - result.fromUserNickName = @""; - return self; -} -- (BOOL) hasFromUserAvatarUrl { - return result.hasFromUserAvatarUrl; -} -- (NSString*) fromUserAvatarUrl { - return result.fromUserAvatarUrl; -} -- (ServerMsgInfoBuilder*) setFromUserAvatarUrl:(NSString*) value { - result.hasFromUserAvatarUrl = YES; - result.fromUserAvatarUrl = value; - return self; -} -- (ServerMsgInfoBuilder*) clearFromUserAvatarUrl { - result.hasFromUserAvatarUrl = NO; - result.fromUserAvatarUrl = @""; - return self; -} -- (BOOL) hasCreateTime { - return result.hasCreateTime; -} -- (UInt32) createTime { - return result.createTime; -} -- (ServerMsgInfoBuilder*) setCreateTime:(UInt32) value { - result.hasCreateTime = YES; - result.createTime = value; - return self; -} -- (ServerMsgInfoBuilder*) clearCreateTime { - result.hasCreateTime = NO; - result.createTime = 0; - return self; -} -- (BOOL) hasMsgType { - return result.hasMsgType; -} -- (UInt32) msgType { - return result.msgType; -} -- (ServerMsgInfoBuilder*) setMsgType:(UInt32) value { - result.hasMsgType = YES; - result.msgType = value; - return self; -} -- (ServerMsgInfoBuilder*) clearMsgType { - result.hasMsgType = NO; - result.msgType = 0; - return self; -} -- (BOOL) hasMsgContent { - return result.hasMsgContent; -} -- (NSString*) msgContent { - return result.msgContent; -} -- (ServerMsgInfoBuilder*) setMsgContent:(NSString*) value { - result.hasMsgContent = YES; - result.msgContent = value; - return self; -} -- (ServerMsgInfoBuilder*) clearMsgContent { - result.hasMsgContent = NO; - result.msgContent = @""; - return self; -} -@end - -@interface ClientGroupInfo () -@property (strong) NSString* groupId; -@property (strong) NSString* groupName; -@property (strong) NSString* groupAvatar; -@property (strong) NSString* groupCreatorId; -@property GroupType groupType; -@property UInt32 groupUpdated; -@property (strong) NSMutableArray * groupMemberListArray; -@end - -@implementation ClientGroupInfo - -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasGroupName { - return !!hasGroupName_; -} -- (void) setHasGroupName:(BOOL) value_ { - hasGroupName_ = !!value_; -} -@synthesize groupName; -- (BOOL) hasGroupAvatar { - return !!hasGroupAvatar_; -} -- (void) setHasGroupAvatar:(BOOL) value_ { - hasGroupAvatar_ = !!value_; -} -@synthesize groupAvatar; -- (BOOL) hasGroupCreatorId { - return !!hasGroupCreatorId_; -} -- (void) setHasGroupCreatorId:(BOOL) value_ { - hasGroupCreatorId_ = !!value_; -} -@synthesize groupCreatorId; -- (BOOL) hasGroupType { - return !!hasGroupType_; -} -- (void) setHasGroupType:(BOOL) value_ { - hasGroupType_ = !!value_; -} -@synthesize groupType; -- (BOOL) hasGroupUpdated { - return !!hasGroupUpdated_; -} -- (void) setHasGroupUpdated:(BOOL) value_ { - hasGroupUpdated_ = !!value_; -} -@synthesize groupUpdated; -@synthesize groupMemberListArray; -@dynamic groupMemberList; -- (void) dealloc { - self.groupId = nil; - self.groupName = nil; - self.groupAvatar = nil; - self.groupCreatorId = nil; - self.groupMemberListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.groupId = @""; - self.groupName = @""; - self.groupAvatar = @""; - self.groupCreatorId = @""; - self.groupType = GroupTypeNormalGroup; - self.groupUpdated = 0; - } - return self; -} -static ClientGroupInfo* defaultClientGroupInfoInstance = nil; -+ (void) initialize { - if (self == [ClientGroupInfo class]) { - defaultClientGroupInfoInstance = [[ClientGroupInfo alloc] init]; - } -} -+ (ClientGroupInfo*) defaultInstance { - return defaultClientGroupInfoInstance; -} -- (ClientGroupInfo*) defaultInstance { - return defaultClientGroupInfoInstance; -} -- (NSArray *)groupMemberList { - return groupMemberListArray; -} -- (NSString*)groupMemberListAtIndex:(NSUInteger)index { - return [groupMemberListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - if (!self.hasGroupName) { - return NO; - } - if (!self.hasGroupAvatar) { - return NO; - } - if (!self.hasGroupCreatorId) { - return NO; - } - if (!self.hasGroupType) { - return NO; - } - if (!self.hasGroupUpdated) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasGroupId) { - [output writeString:1 value:self.groupId]; - } - if (self.hasGroupName) { - [output writeString:2 value:self.groupName]; - } - if (self.hasGroupAvatar) { - [output writeString:3 value:self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output writeString:4 value:self.groupCreatorId]; - } - if (self.hasGroupType) { - [output writeEnum:5 value:self.groupType]; - } - if (self.hasGroupUpdated) { - [output writeUInt32:6 value:self.groupUpdated]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:7 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasGroupId) { - size_ += computeStringSize(1, self.groupId); - } - if (self.hasGroupName) { - size_ += computeStringSize(2, self.groupName); - } - if (self.hasGroupAvatar) { - size_ += computeStringSize(3, self.groupAvatar); - } - if (self.hasGroupCreatorId) { - size_ += computeStringSize(4, self.groupCreatorId); - } - if (self.hasGroupType) { - size_ += computeEnumSize(5, self.groupType); - } - if (self.hasGroupUpdated) { - size_ += computeUInt32Size(6, self.groupUpdated); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.groupMemberListArray.count; - [self.groupMemberListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientGroupInfo*) parseFromData:(NSData*) data { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromData:data] build]; -} -+ (ClientGroupInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupInfo*) parseFromInputStream:(NSInputStream*) input { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromInputStream:input] build]; -} -+ (ClientGroupInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupInfo*)[[[ClientGroupInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupInfoBuilder*) builder { - return [[ClientGroupInfoBuilder alloc] init]; -} -+ (ClientGroupInfoBuilder*) builderWithPrototype:(ClientGroupInfo*) prototype { - return [[ClientGroupInfo builder] mergeFrom:prototype]; -} -- (ClientGroupInfoBuilder*) builder { - return [ClientGroupInfo builder]; -} -- (ClientGroupInfoBuilder*) toBuilder { - return [ClientGroupInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - if (self.hasGroupName) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupName", self.groupName]; - } - if (self.hasGroupAvatar) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupAvatar", self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupCreatorId", self.groupCreatorId]; - } - if (self.hasGroupType) { - [output appendFormat:@"%@%@: %d\n", indent, @"groupType", self.groupType]; - } - if (self.hasGroupUpdated) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupUpdated", [NSNumber numberWithInteger:self.groupUpdated]]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupMemberList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientGroupInfo class]]) { - return NO; - } - ClientGroupInfo *otherMessage = other; - return - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - self.hasGroupName == otherMessage.hasGroupName && - (!self.hasGroupName || [self.groupName isEqual:otherMessage.groupName]) && - self.hasGroupAvatar == otherMessage.hasGroupAvatar && - (!self.hasGroupAvatar || [self.groupAvatar isEqual:otherMessage.groupAvatar]) && - self.hasGroupCreatorId == otherMessage.hasGroupCreatorId && - (!self.hasGroupCreatorId || [self.groupCreatorId isEqual:otherMessage.groupCreatorId]) && - self.hasGroupType == otherMessage.hasGroupType && - (!self.hasGroupType || self.groupType == otherMessage.groupType) && - self.hasGroupUpdated == otherMessage.hasGroupUpdated && - (!self.hasGroupUpdated || self.groupUpdated == otherMessage.groupUpdated) && - [self.groupMemberListArray isEqualToArray:otherMessage.groupMemberListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - if (self.hasGroupName) { - hashCode = hashCode * 31 + [self.groupName hash]; - } - if (self.hasGroupAvatar) { - hashCode = hashCode * 31 + [self.groupAvatar hash]; - } - if (self.hasGroupCreatorId) { - hashCode = hashCode * 31 + [self.groupCreatorId hash]; - } - if (self.hasGroupType) { - hashCode = hashCode * 31 + self.groupType; - } - if (self.hasGroupUpdated) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.groupUpdated] hash]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientGroupInfoBuilder() -@property (strong) ClientGroupInfo* result; -@end - -@implementation ClientGroupInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientGroupInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientGroupInfoBuilder*) clear { - self.result = [[ClientGroupInfo alloc] init]; - return self; -} -- (ClientGroupInfoBuilder*) clone { - return [ClientGroupInfo builderWithPrototype:result]; -} -- (ClientGroupInfo*) defaultInstance { - return [ClientGroupInfo defaultInstance]; -} -- (ClientGroupInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientGroupInfo*) buildPartial { - ClientGroupInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientGroupInfoBuilder*) mergeFrom:(ClientGroupInfo*) other { - if (other == [ClientGroupInfo defaultInstance]) { - return self; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasGroupName) { - [self setGroupName:other.groupName]; - } - if (other.hasGroupAvatar) { - [self setGroupAvatar:other.groupAvatar]; - } - if (other.hasGroupCreatorId) { - [self setGroupCreatorId:other.groupCreatorId]; - } - if (other.hasGroupType) { - [self setGroupType:other.groupType]; - } - if (other.hasGroupUpdated) { - [self setGroupUpdated:other.groupUpdated]; - } - if (other.groupMemberListArray.count > 0) { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [[NSMutableArray alloc] initWithArray:other.groupMemberListArray]; - } else { - [result.groupMemberListArray addObjectsFromArray:other.groupMemberListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setGroupId:[input readString]]; - break; - } - case 18: { - [self setGroupName:[input readString]]; - break; - } - case 26: { - [self setGroupAvatar:[input readString]]; - break; - } - case 34: { - [self setGroupCreatorId:[input readString]]; - break; - } - case 40: { - GroupType value = (GroupType)[input readEnum]; - if (GroupTypeIsValidValue(value)) { - [self setGroupType:value]; - } else { - [unknownFields mergeVarintField:5 value:value]; - } - break; - } - case 48: { - [self setGroupUpdated:[input readUInt32]]; - break; - } - case 58: { - [self addGroupMemberList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (ClientGroupInfoBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (BOOL) hasGroupName { - return result.hasGroupName; -} -- (NSString*) groupName { - return result.groupName; -} -- (ClientGroupInfoBuilder*) setGroupName:(NSString*) value { - result.hasGroupName = YES; - result.groupName = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupName { - result.hasGroupName = NO; - result.groupName = @""; - return self; -} -- (BOOL) hasGroupAvatar { - return result.hasGroupAvatar; -} -- (NSString*) groupAvatar { - return result.groupAvatar; -} -- (ClientGroupInfoBuilder*) setGroupAvatar:(NSString*) value { - result.hasGroupAvatar = YES; - result.groupAvatar = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupAvatar { - result.hasGroupAvatar = NO; - result.groupAvatar = @""; - return self; -} -- (BOOL) hasGroupCreatorId { - return result.hasGroupCreatorId; -} -- (NSString*) groupCreatorId { - return result.groupCreatorId; -} -- (ClientGroupInfoBuilder*) setGroupCreatorId:(NSString*) value { - result.hasGroupCreatorId = YES; - result.groupCreatorId = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupCreatorId { - result.hasGroupCreatorId = NO; - result.groupCreatorId = @""; - return self; -} -- (BOOL) hasGroupType { - return result.hasGroupType; -} -- (GroupType) groupType { - return result.groupType; -} -- (ClientGroupInfoBuilder*) setGroupType:(GroupType) value { - result.hasGroupType = YES; - result.groupType = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupType { - result.hasGroupType = NO; - result.groupType = GroupTypeNormalGroup; - return self; -} -- (BOOL) hasGroupUpdated { - return result.hasGroupUpdated; -} -- (UInt32) groupUpdated { - return result.groupUpdated; -} -- (ClientGroupInfoBuilder*) setGroupUpdated:(UInt32) value { - result.hasGroupUpdated = YES; - result.groupUpdated = value; - return self; -} -- (ClientGroupInfoBuilder*) clearGroupUpdated { - result.hasGroupUpdated = NO; - result.groupUpdated = 0; - return self; -} -- (NSMutableArray *)groupMemberList { - return result.groupMemberListArray; -} -- (NSString*)groupMemberListAtIndex:(NSUInteger)index { - return [result groupMemberListAtIndex:index]; -} -- (ClientGroupInfoBuilder *)addGroupMemberList:(NSString*)value { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [[NSMutableArray alloc]init]; - } - [result.groupMemberListArray addObject:value]; - return self; -} -- (ClientGroupInfoBuilder *)setGroupMemberListArray:(NSArray *)array { - result.groupMemberListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (ClientGroupInfoBuilder *)clearGroupMemberList { - result.groupMemberListArray = nil; - return self; -} -@end - -@interface ServerGroupInfo () -@property UInt32 groupId; -@property (strong) NSString* groupName; -@property (strong) NSString* groupAvatar; -@property UInt32 groupCreatorId; -@property GroupType groupType; -@property UInt32 groupUpdated; -@property (strong) PBAppendableArray * groupMemberListArray; -@end - -@implementation ServerGroupInfo - -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasGroupName { - return !!hasGroupName_; -} -- (void) setHasGroupName:(BOOL) value_ { - hasGroupName_ = !!value_; -} -@synthesize groupName; -- (BOOL) hasGroupAvatar { - return !!hasGroupAvatar_; -} -- (void) setHasGroupAvatar:(BOOL) value_ { - hasGroupAvatar_ = !!value_; -} -@synthesize groupAvatar; -- (BOOL) hasGroupCreatorId { - return !!hasGroupCreatorId_; -} -- (void) setHasGroupCreatorId:(BOOL) value_ { - hasGroupCreatorId_ = !!value_; -} -@synthesize groupCreatorId; -- (BOOL) hasGroupType { - return !!hasGroupType_; -} -- (void) setHasGroupType:(BOOL) value_ { - hasGroupType_ = !!value_; -} -@synthesize groupType; -- (BOOL) hasGroupUpdated { - return !!hasGroupUpdated_; -} -- (void) setHasGroupUpdated:(BOOL) value_ { - hasGroupUpdated_ = !!value_; -} -@synthesize groupUpdated; -@synthesize groupMemberListArray; -@dynamic groupMemberList; -- (void) dealloc { - self.groupName = nil; - self.groupAvatar = nil; - self.groupMemberListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.groupId = 0; - self.groupName = @""; - self.groupAvatar = @""; - self.groupCreatorId = 0; - self.groupType = GroupTypeNormalGroup; - self.groupUpdated = 0; - } - return self; -} -static ServerGroupInfo* defaultServerGroupInfoInstance = nil; -+ (void) initialize { - if (self == [ServerGroupInfo class]) { - defaultServerGroupInfoInstance = [[ServerGroupInfo alloc] init]; - } -} -+ (ServerGroupInfo*) defaultInstance { - return defaultServerGroupInfoInstance; -} -- (ServerGroupInfo*) defaultInstance { - return defaultServerGroupInfoInstance; -} -- (PBArray *)groupMemberList { - return groupMemberListArray; -} -- (UInt32)groupMemberListAtIndex:(NSUInteger)index { - return [groupMemberListArray uint32AtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - if (!self.hasGroupName) { - return NO; - } - if (!self.hasGroupAvatar) { - return NO; - } - if (!self.hasGroupCreatorId) { - return NO; - } - if (!self.hasGroupType) { - return NO; - } - if (!self.hasGroupUpdated) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasGroupId) { - [output writeUInt32:1 value:self.groupId]; - } - if (self.hasGroupName) { - [output writeString:2 value:self.groupName]; - } - if (self.hasGroupAvatar) { - [output writeString:3 value:self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output writeUInt32:4 value:self.groupCreatorId]; - } - if (self.hasGroupType) { - [output writeEnum:5 value:self.groupType]; - } - if (self.hasGroupUpdated) { - [output writeUInt32:6 value:self.groupUpdated]; - } - const NSUInteger groupMemberListArrayCount = self.groupMemberListArray.count; - if (groupMemberListArrayCount > 0) { - const UInt32 *values = (const UInt32 *)self.groupMemberListArray.data; - for (NSUInteger i = 0; i < groupMemberListArrayCount; ++i) { - [output writeUInt32:7 value:values[i]]; - } - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasGroupId) { - size_ += computeUInt32Size(1, self.groupId); - } - if (self.hasGroupName) { - size_ += computeStringSize(2, self.groupName); - } - if (self.hasGroupAvatar) { - size_ += computeStringSize(3, self.groupAvatar); - } - if (self.hasGroupCreatorId) { - size_ += computeUInt32Size(4, self.groupCreatorId); - } - if (self.hasGroupType) { - size_ += computeEnumSize(5, self.groupType); - } - if (self.hasGroupUpdated) { - size_ += computeUInt32Size(6, self.groupUpdated); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.groupMemberListArray.count; - const UInt32 *values = (const UInt32 *)self.groupMemberListArray.data; - for (NSUInteger i = 0; i < count; ++i) { - dataSize += computeUInt32SizeNoTag(values[i]); - } - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerGroupInfo*) parseFromData:(NSData*) data { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromData:data] build]; -} -+ (ServerGroupInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupInfo*) parseFromInputStream:(NSInputStream*) input { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromInputStream:input] build]; -} -+ (ServerGroupInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerGroupInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupInfo*)[[[ServerGroupInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupInfoBuilder*) builder { - return [[ServerGroupInfoBuilder alloc] init]; -} -+ (ServerGroupInfoBuilder*) builderWithPrototype:(ServerGroupInfo*) prototype { - return [[ServerGroupInfo builder] mergeFrom:prototype]; -} -- (ServerGroupInfoBuilder*) builder { - return [ServerGroupInfo builder]; -} -- (ServerGroupInfoBuilder*) toBuilder { - return [ServerGroupInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", [NSNumber numberWithInteger:self.groupId]]; - } - if (self.hasGroupName) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupName", self.groupName]; - } - if (self.hasGroupAvatar) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupAvatar", self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupCreatorId", [NSNumber numberWithInteger:self.groupCreatorId]]; - } - if (self.hasGroupType) { - [output appendFormat:@"%@%@: %d\n", indent, @"groupType", self.groupType]; - } - if (self.hasGroupUpdated) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupUpdated", [NSNumber numberWithInteger:self.groupUpdated]]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupMemberList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerGroupInfo class]]) { - return NO; - } - ServerGroupInfo *otherMessage = other; - return - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || self.groupId == otherMessage.groupId) && - self.hasGroupName == otherMessage.hasGroupName && - (!self.hasGroupName || [self.groupName isEqual:otherMessage.groupName]) && - self.hasGroupAvatar == otherMessage.hasGroupAvatar && - (!self.hasGroupAvatar || [self.groupAvatar isEqual:otherMessage.groupAvatar]) && - self.hasGroupCreatorId == otherMessage.hasGroupCreatorId && - (!self.hasGroupCreatorId || self.groupCreatorId == otherMessage.groupCreatorId) && - self.hasGroupType == otherMessage.hasGroupType && - (!self.hasGroupType || self.groupType == otherMessage.groupType) && - self.hasGroupUpdated == otherMessage.hasGroupUpdated && - (!self.hasGroupUpdated || self.groupUpdated == otherMessage.groupUpdated) && - [self.groupMemberListArray isEqualToArray:otherMessage.groupMemberListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasGroupId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.groupId] hash]; - } - if (self.hasGroupName) { - hashCode = hashCode * 31 + [self.groupName hash]; - } - if (self.hasGroupAvatar) { - hashCode = hashCode * 31 + [self.groupAvatar hash]; - } - if (self.hasGroupCreatorId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.groupCreatorId] hash]; - } - if (self.hasGroupType) { - hashCode = hashCode * 31 + self.groupType; - } - if (self.hasGroupUpdated) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.groupUpdated] hash]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [obj longValue]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerGroupInfoBuilder() -@property (strong) ServerGroupInfo* result; -@end - -@implementation ServerGroupInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerGroupInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerGroupInfoBuilder*) clear { - self.result = [[ServerGroupInfo alloc] init]; - return self; -} -- (ServerGroupInfoBuilder*) clone { - return [ServerGroupInfo builderWithPrototype:result]; -} -- (ServerGroupInfo*) defaultInstance { - return [ServerGroupInfo defaultInstance]; -} -- (ServerGroupInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerGroupInfo*) buildPartial { - ServerGroupInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerGroupInfoBuilder*) mergeFrom:(ServerGroupInfo*) other { - if (other == [ServerGroupInfo defaultInstance]) { - return self; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasGroupName) { - [self setGroupName:other.groupName]; - } - if (other.hasGroupAvatar) { - [self setGroupAvatar:other.groupAvatar]; - } - if (other.hasGroupCreatorId) { - [self setGroupCreatorId:other.groupCreatorId]; - } - if (other.hasGroupType) { - [self setGroupType:other.groupType]; - } - if (other.hasGroupUpdated) { - [self setGroupUpdated:other.groupUpdated]; - } - if (other.groupMemberListArray.count > 0) { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [other.groupMemberListArray copy]; - } else { - [result.groupMemberListArray appendArray:other.groupMemberListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerGroupInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setGroupId:[input readUInt32]]; - break; - } - case 18: { - [self setGroupName:[input readString]]; - break; - } - case 26: { - [self setGroupAvatar:[input readString]]; - break; - } - case 32: { - [self setGroupCreatorId:[input readUInt32]]; - break; - } - case 40: { - GroupType value = (GroupType)[input readEnum]; - if (GroupTypeIsValidValue(value)) { - [self setGroupType:value]; - } else { - [unknownFields mergeVarintField:5 value:value]; - } - break; - } - case 48: { - [self setGroupUpdated:[input readUInt32]]; - break; - } - case 56: { - [self addGroupMemberList:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (UInt32) groupId { - return result.groupId; -} -- (ServerGroupInfoBuilder*) setGroupId:(UInt32) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = 0; - return self; -} -- (BOOL) hasGroupName { - return result.hasGroupName; -} -- (NSString*) groupName { - return result.groupName; -} -- (ServerGroupInfoBuilder*) setGroupName:(NSString*) value { - result.hasGroupName = YES; - result.groupName = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupName { - result.hasGroupName = NO; - result.groupName = @""; - return self; -} -- (BOOL) hasGroupAvatar { - return result.hasGroupAvatar; -} -- (NSString*) groupAvatar { - return result.groupAvatar; -} -- (ServerGroupInfoBuilder*) setGroupAvatar:(NSString*) value { - result.hasGroupAvatar = YES; - result.groupAvatar = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupAvatar { - result.hasGroupAvatar = NO; - result.groupAvatar = @""; - return self; -} -- (BOOL) hasGroupCreatorId { - return result.hasGroupCreatorId; -} -- (UInt32) groupCreatorId { - return result.groupCreatorId; -} -- (ServerGroupInfoBuilder*) setGroupCreatorId:(UInt32) value { - result.hasGroupCreatorId = YES; - result.groupCreatorId = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupCreatorId { - result.hasGroupCreatorId = NO; - result.groupCreatorId = 0; - return self; -} -- (BOOL) hasGroupType { - return result.hasGroupType; -} -- (GroupType) groupType { - return result.groupType; -} -- (ServerGroupInfoBuilder*) setGroupType:(GroupType) value { - result.hasGroupType = YES; - result.groupType = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupType { - result.hasGroupType = NO; - result.groupType = GroupTypeNormalGroup; - return self; -} -- (BOOL) hasGroupUpdated { - return result.hasGroupUpdated; -} -- (UInt32) groupUpdated { - return result.groupUpdated; -} -- (ServerGroupInfoBuilder*) setGroupUpdated:(UInt32) value { - result.hasGroupUpdated = YES; - result.groupUpdated = value; - return self; -} -- (ServerGroupInfoBuilder*) clearGroupUpdated { - result.hasGroupUpdated = NO; - result.groupUpdated = 0; - return self; -} -- (PBAppendableArray *)groupMemberList { - return result.groupMemberListArray; -} -- (UInt32)groupMemberListAtIndex:(NSUInteger)index { - return [result groupMemberListAtIndex:index]; -} -- (ServerGroupInfoBuilder *)addGroupMemberList:(UInt32)value { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [PBAppendableArray arrayWithValueType:PBArrayValueTypeUInt32]; - } - [result.groupMemberListArray addUint32:value]; - return self; -} -- (ServerGroupInfoBuilder *)setGroupMemberListArray:(NSArray *)array { - result.groupMemberListArray = [PBAppendableArray arrayWithArray:array valueType:PBArrayValueTypeUInt32]; - return self; -} -- (ServerGroupInfoBuilder *)setGroupMemberListValues:(const UInt32 *)values count:(NSUInteger)count { - result.groupMemberListArray = [PBAppendableArray arrayWithValues:values count:count valueType:PBArrayValueTypeUInt32]; - return self; -} -- (ServerGroupInfoBuilder *)clearGroupMemberList { - result.groupMemberListArray = nil; - return self; -} -@end - -@interface ClientGroupUnReadCnt () -@property (strong) NSString* groupId; -@property UInt32 unreadCnt; -@end - -@implementation ClientGroupUnReadCnt - -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasUnreadCnt { - return !!hasUnreadCnt_; -} -- (void) setHasUnreadCnt:(BOOL) value_ { - hasUnreadCnt_ = !!value_; -} -@synthesize unreadCnt; -- (void) dealloc { - self.groupId = nil; -} -- (id) init { - if ((self = [super init])) { - self.groupId = @""; - self.unreadCnt = 0; - } - return self; -} -static ClientGroupUnReadCnt* defaultClientGroupUnReadCntInstance = nil; -+ (void) initialize { - if (self == [ClientGroupUnReadCnt class]) { - defaultClientGroupUnReadCntInstance = [[ClientGroupUnReadCnt alloc] init]; - } -} -+ (ClientGroupUnReadCnt*) defaultInstance { - return defaultClientGroupUnReadCntInstance; -} -- (ClientGroupUnReadCnt*) defaultInstance { - return defaultClientGroupUnReadCntInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - if (!self.hasUnreadCnt) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasGroupId) { - [output writeString:1 value:self.groupId]; - } - if (self.hasUnreadCnt) { - [output writeUInt32:2 value:self.unreadCnt]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasGroupId) { - size_ += computeStringSize(1, self.groupId); - } - if (self.hasUnreadCnt) { - size_ += computeUInt32Size(2, self.unreadCnt); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientGroupUnReadCnt*) parseFromData:(NSData*) data { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromData:data] build]; -} -+ (ClientGroupUnReadCnt*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromInputStream:input] build]; -} -+ (ClientGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupUnReadCnt*)[[[ClientGroupUnReadCnt builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupUnReadCntBuilder*) builder { - return [[ClientGroupUnReadCntBuilder alloc] init]; -} -+ (ClientGroupUnReadCntBuilder*) builderWithPrototype:(ClientGroupUnReadCnt*) prototype { - return [[ClientGroupUnReadCnt builder] mergeFrom:prototype]; -} -- (ClientGroupUnReadCntBuilder*) builder { - return [ClientGroupUnReadCnt builder]; -} -- (ClientGroupUnReadCntBuilder*) toBuilder { - return [ClientGroupUnReadCnt builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - if (self.hasUnreadCnt) { - [output appendFormat:@"%@%@: %@\n", indent, @"unreadCnt", [NSNumber numberWithInteger:self.unreadCnt]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientGroupUnReadCnt class]]) { - return NO; - } - ClientGroupUnReadCnt *otherMessage = other; - return - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - self.hasUnreadCnt == otherMessage.hasUnreadCnt && - (!self.hasUnreadCnt || self.unreadCnt == otherMessage.unreadCnt) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - if (self.hasUnreadCnt) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.unreadCnt] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientGroupUnReadCntBuilder() -@property (strong) ClientGroupUnReadCnt* result; -@end - -@implementation ClientGroupUnReadCntBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientGroupUnReadCnt alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientGroupUnReadCntBuilder*) clear { - self.result = [[ClientGroupUnReadCnt alloc] init]; - return self; -} -- (ClientGroupUnReadCntBuilder*) clone { - return [ClientGroupUnReadCnt builderWithPrototype:result]; -} -- (ClientGroupUnReadCnt*) defaultInstance { - return [ClientGroupUnReadCnt defaultInstance]; -} -- (ClientGroupUnReadCnt*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientGroupUnReadCnt*) buildPartial { - ClientGroupUnReadCnt* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientGroupUnReadCntBuilder*) mergeFrom:(ClientGroupUnReadCnt*) other { - if (other == [ClientGroupUnReadCnt defaultInstance]) { - return self; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasUnreadCnt) { - [self setUnreadCnt:other.unreadCnt]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setGroupId:[input readString]]; - break; - } - case 16: { - [self setUnreadCnt:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (ClientGroupUnReadCntBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (ClientGroupUnReadCntBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (BOOL) hasUnreadCnt { - return result.hasUnreadCnt; -} -- (UInt32) unreadCnt { - return result.unreadCnt; -} -- (ClientGroupUnReadCntBuilder*) setUnreadCnt:(UInt32) value { - result.hasUnreadCnt = YES; - result.unreadCnt = value; - return self; -} -- (ClientGroupUnReadCntBuilder*) clearUnreadCnt { - result.hasUnreadCnt = NO; - result.unreadCnt = 0; - return self; -} -@end - -@interface ServerGroupUnReadCnt () -@property UInt32 groupId; -@property UInt32 unreadCnt; -@end - -@implementation ServerGroupUnReadCnt - -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasUnreadCnt { - return !!hasUnreadCnt_; -} -- (void) setHasUnreadCnt:(BOOL) value_ { - hasUnreadCnt_ = !!value_; -} -@synthesize unreadCnt; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.groupId = 0; - self.unreadCnt = 0; - } - return self; -} -static ServerGroupUnReadCnt* defaultServerGroupUnReadCntInstance = nil; -+ (void) initialize { - if (self == [ServerGroupUnReadCnt class]) { - defaultServerGroupUnReadCntInstance = [[ServerGroupUnReadCnt alloc] init]; - } -} -+ (ServerGroupUnReadCnt*) defaultInstance { - return defaultServerGroupUnReadCntInstance; -} -- (ServerGroupUnReadCnt*) defaultInstance { - return defaultServerGroupUnReadCntInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - if (!self.hasUnreadCnt) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasGroupId) { - [output writeUInt32:1 value:self.groupId]; - } - if (self.hasUnreadCnt) { - [output writeUInt32:2 value:self.unreadCnt]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasGroupId) { - size_ += computeUInt32Size(1, self.groupId); - } - if (self.hasUnreadCnt) { - size_ += computeUInt32Size(2, self.unreadCnt); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerGroupUnReadCnt*) parseFromData:(NSData*) data { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromData:data] build]; -} -+ (ServerGroupUnReadCnt*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromInputStream:input] build]; -} -+ (ServerGroupUnReadCnt*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerGroupUnReadCnt*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupUnReadCnt*)[[[ServerGroupUnReadCnt builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupUnReadCntBuilder*) builder { - return [[ServerGroupUnReadCntBuilder alloc] init]; -} -+ (ServerGroupUnReadCntBuilder*) builderWithPrototype:(ServerGroupUnReadCnt*) prototype { - return [[ServerGroupUnReadCnt builder] mergeFrom:prototype]; -} -- (ServerGroupUnReadCntBuilder*) builder { - return [ServerGroupUnReadCnt builder]; -} -- (ServerGroupUnReadCntBuilder*) toBuilder { - return [ServerGroupUnReadCnt builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", [NSNumber numberWithInteger:self.groupId]]; - } - if (self.hasUnreadCnt) { - [output appendFormat:@"%@%@: %@\n", indent, @"unreadCnt", [NSNumber numberWithInteger:self.unreadCnt]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerGroupUnReadCnt class]]) { - return NO; - } - ServerGroupUnReadCnt *otherMessage = other; - return - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || self.groupId == otherMessage.groupId) && - self.hasUnreadCnt == otherMessage.hasUnreadCnt && - (!self.hasUnreadCnt || self.unreadCnt == otherMessage.unreadCnt) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasGroupId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.groupId] hash]; - } - if (self.hasUnreadCnt) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.unreadCnt] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerGroupUnReadCntBuilder() -@property (strong) ServerGroupUnReadCnt* result; -@end - -@implementation ServerGroupUnReadCntBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerGroupUnReadCnt alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerGroupUnReadCntBuilder*) clear { - self.result = [[ServerGroupUnReadCnt alloc] init]; - return self; -} -- (ServerGroupUnReadCntBuilder*) clone { - return [ServerGroupUnReadCnt builderWithPrototype:result]; -} -- (ServerGroupUnReadCnt*) defaultInstance { - return [ServerGroupUnReadCnt defaultInstance]; -} -- (ServerGroupUnReadCnt*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerGroupUnReadCnt*) buildPartial { - ServerGroupUnReadCnt* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerGroupUnReadCntBuilder*) mergeFrom:(ServerGroupUnReadCnt*) other { - if (other == [ServerGroupUnReadCnt defaultInstance]) { - return self; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasUnreadCnt) { - [self setUnreadCnt:other.unreadCnt]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerGroupUnReadCntBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setGroupId:[input readUInt32]]; - break; - } - case 16: { - [self setUnreadCnt:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (UInt32) groupId { - return result.groupId; -} -- (ServerGroupUnReadCntBuilder*) setGroupId:(UInt32) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (ServerGroupUnReadCntBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = 0; - return self; -} -- (BOOL) hasUnreadCnt { - return result.hasUnreadCnt; -} -- (UInt32) unreadCnt { - return result.unreadCnt; -} -- (ServerGroupUnReadCntBuilder*) setUnreadCnt:(UInt32) value { - result.hasUnreadCnt = YES; - result.unreadCnt = value; - return self; -} -- (ServerGroupUnReadCntBuilder*) clearUnreadCnt { - result.hasUnreadCnt = NO; - result.unreadCnt = 0; - return self; -} -@end - -@interface ClientGroupMsg () -@property (strong) NSString* fromUserId; -@property UInt32 createTime; -@property (strong) NSString* msgContent; -@end - -@implementation ClientGroupMsg - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasCreateTime { - return !!hasCreateTime_; -} -- (void) setHasCreateTime:(BOOL) value_ { - hasCreateTime_ = !!value_; -} -@synthesize createTime; -- (BOOL) hasMsgContent { - return !!hasMsgContent_; -} -- (void) setHasMsgContent:(BOOL) value_ { - hasMsgContent_ = !!value_; -} -@synthesize msgContent; -- (void) dealloc { - self.fromUserId = nil; - self.msgContent = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = @""; - self.createTime = 0; - self.msgContent = @""; - } - return self; -} -static ClientGroupMsg* defaultClientGroupMsgInstance = nil; -+ (void) initialize { - if (self == [ClientGroupMsg class]) { - defaultClientGroupMsgInstance = [[ClientGroupMsg alloc] init]; - } -} -+ (ClientGroupMsg*) defaultInstance { - return defaultClientGroupMsgInstance; -} -- (ClientGroupMsg*) defaultInstance { - return defaultClientGroupMsgInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasCreateTime) { - return NO; - } - if (!self.hasMsgContent) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeString:1 value:self.fromUserId]; - } - if (self.hasCreateTime) { - [output writeUInt32:2 value:self.createTime]; - } - if (self.hasMsgContent) { - [output writeString:3 value:self.msgContent]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeStringSize(1, self.fromUserId); - } - if (self.hasCreateTime) { - size_ += computeUInt32Size(2, self.createTime); - } - if (self.hasMsgContent) { - size_ += computeStringSize(3, self.msgContent); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientGroupMsg*) parseFromData:(NSData*) data { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromData:data] build]; -} -+ (ClientGroupMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupMsg*) parseFromInputStream:(NSInputStream*) input { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromInputStream:input] build]; -} -+ (ClientGroupMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientGroupMsg*)[[[ClientGroupMsg builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientGroupMsgBuilder*) builder { - return [[ClientGroupMsgBuilder alloc] init]; -} -+ (ClientGroupMsgBuilder*) builderWithPrototype:(ClientGroupMsg*) prototype { - return [[ClientGroupMsg builder] mergeFrom:prototype]; -} -- (ClientGroupMsgBuilder*) builder { - return [ClientGroupMsg builder]; -} -- (ClientGroupMsgBuilder*) toBuilder { - return [ClientGroupMsg builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasCreateTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"createTime", [NSNumber numberWithInteger:self.createTime]]; - } - if (self.hasMsgContent) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgContent", self.msgContent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientGroupMsg class]]) { - return NO; - } - ClientGroupMsg *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasCreateTime == otherMessage.hasCreateTime && - (!self.hasCreateTime || self.createTime == otherMessage.createTime) && - self.hasMsgContent == otherMessage.hasMsgContent && - (!self.hasMsgContent || [self.msgContent isEqual:otherMessage.msgContent]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasCreateTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.createTime] hash]; - } - if (self.hasMsgContent) { - hashCode = hashCode * 31 + [self.msgContent hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientGroupMsgBuilder() -@property (strong) ClientGroupMsg* result; -@end - -@implementation ClientGroupMsgBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientGroupMsg alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientGroupMsgBuilder*) clear { - self.result = [[ClientGroupMsg alloc] init]; - return self; -} -- (ClientGroupMsgBuilder*) clone { - return [ClientGroupMsg builderWithPrototype:result]; -} -- (ClientGroupMsg*) defaultInstance { - return [ClientGroupMsg defaultInstance]; -} -- (ClientGroupMsg*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientGroupMsg*) buildPartial { - ClientGroupMsg* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientGroupMsgBuilder*) mergeFrom:(ClientGroupMsg*) other { - if (other == [ClientGroupMsg defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasCreateTime) { - [self setCreateTime:other.createTime]; - } - if (other.hasMsgContent) { - [self setMsgContent:other.msgContent]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setFromUserId:[input readString]]; - break; - } - case 16: { - [self setCreateTime:[input readUInt32]]; - break; - } - case 26: { - [self setMsgContent:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientGroupMsgBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientGroupMsgBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasCreateTime { - return result.hasCreateTime; -} -- (UInt32) createTime { - return result.createTime; -} -- (ClientGroupMsgBuilder*) setCreateTime:(UInt32) value { - result.hasCreateTime = YES; - result.createTime = value; - return self; -} -- (ClientGroupMsgBuilder*) clearCreateTime { - result.hasCreateTime = NO; - result.createTime = 0; - return self; -} -- (BOOL) hasMsgContent { - return result.hasMsgContent; -} -- (NSString*) msgContent { - return result.msgContent; -} -- (ClientGroupMsgBuilder*) setMsgContent:(NSString*) value { - result.hasMsgContent = YES; - result.msgContent = value; - return self; -} -- (ClientGroupMsgBuilder*) clearMsgContent { - result.hasMsgContent = NO; - result.msgContent = @""; - return self; -} -@end - -@interface ServerGroupMsg () -@property UInt32 fromUserId; -@property UInt32 createTime; -@property (strong) NSString* msgContent; -@end - -@implementation ServerGroupMsg - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasCreateTime { - return !!hasCreateTime_; -} -- (void) setHasCreateTime:(BOOL) value_ { - hasCreateTime_ = !!value_; -} -@synthesize createTime; -- (BOOL) hasMsgContent { - return !!hasMsgContent_; -} -- (void) setHasMsgContent:(BOOL) value_ { - hasMsgContent_ = !!value_; -} -@synthesize msgContent; -- (void) dealloc { - self.msgContent = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = 0; - self.createTime = 0; - self.msgContent = @""; - } - return self; -} -static ServerGroupMsg* defaultServerGroupMsgInstance = nil; -+ (void) initialize { - if (self == [ServerGroupMsg class]) { - defaultServerGroupMsgInstance = [[ServerGroupMsg alloc] init]; - } -} -+ (ServerGroupMsg*) defaultInstance { - return defaultServerGroupMsgInstance; -} -- (ServerGroupMsg*) defaultInstance { - return defaultServerGroupMsgInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasCreateTime) { - return NO; - } - if (!self.hasMsgContent) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeUInt32:1 value:self.fromUserId]; - } - if (self.hasCreateTime) { - [output writeUInt32:2 value:self.createTime]; - } - if (self.hasMsgContent) { - [output writeString:3 value:self.msgContent]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeUInt32Size(1, self.fromUserId); - } - if (self.hasCreateTime) { - size_ += computeUInt32Size(2, self.createTime); - } - if (self.hasMsgContent) { - size_ += computeStringSize(3, self.msgContent); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerGroupMsg*) parseFromData:(NSData*) data { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromData:data] build]; -} -+ (ServerGroupMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupMsg*) parseFromInputStream:(NSInputStream*) input { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromInputStream:input] build]; -} -+ (ServerGroupMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerGroupMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerGroupMsg*)[[[ServerGroupMsg builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerGroupMsgBuilder*) builder { - return [[ServerGroupMsgBuilder alloc] init]; -} -+ (ServerGroupMsgBuilder*) builderWithPrototype:(ServerGroupMsg*) prototype { - return [[ServerGroupMsg builder] mergeFrom:prototype]; -} -- (ServerGroupMsgBuilder*) builder { - return [ServerGroupMsg builder]; -} -- (ServerGroupMsgBuilder*) toBuilder { - return [ServerGroupMsg builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", [NSNumber numberWithInteger:self.fromUserId]]; - } - if (self.hasCreateTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"createTime", [NSNumber numberWithInteger:self.createTime]]; - } - if (self.hasMsgContent) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgContent", self.msgContent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerGroupMsg class]]) { - return NO; - } - ServerGroupMsg *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || self.fromUserId == otherMessage.fromUserId) && - self.hasCreateTime == otherMessage.hasCreateTime && - (!self.hasCreateTime || self.createTime == otherMessage.createTime) && - self.hasMsgContent == otherMessage.hasMsgContent && - (!self.hasMsgContent || [self.msgContent isEqual:otherMessage.msgContent]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fromUserId] hash]; - } - if (self.hasCreateTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.createTime] hash]; - } - if (self.hasMsgContent) { - hashCode = hashCode * 31 + [self.msgContent hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerGroupMsgBuilder() -@property (strong) ServerGroupMsg* result; -@end - -@implementation ServerGroupMsgBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerGroupMsg alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerGroupMsgBuilder*) clear { - self.result = [[ServerGroupMsg alloc] init]; - return self; -} -- (ServerGroupMsgBuilder*) clone { - return [ServerGroupMsg builderWithPrototype:result]; -} -- (ServerGroupMsg*) defaultInstance { - return [ServerGroupMsg defaultInstance]; -} -- (ServerGroupMsg*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerGroupMsg*) buildPartial { - ServerGroupMsg* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerGroupMsgBuilder*) mergeFrom:(ServerGroupMsg*) other { - if (other == [ServerGroupMsg defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasCreateTime) { - [self setCreateTime:other.createTime]; - } - if (other.hasMsgContent) { - [self setMsgContent:other.msgContent]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerGroupMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setFromUserId:[input readUInt32]]; - break; - } - case 16: { - [self setCreateTime:[input readUInt32]]; - break; - } - case 26: { - [self setMsgContent:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (UInt32) fromUserId { - return result.fromUserId; -} -- (ServerGroupMsgBuilder*) setFromUserId:(UInt32) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ServerGroupMsgBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = 0; - return self; -} -- (BOOL) hasCreateTime { - return result.hasCreateTime; -} -- (UInt32) createTime { - return result.createTime; -} -- (ServerGroupMsgBuilder*) setCreateTime:(UInt32) value { - result.hasCreateTime = YES; - result.createTime = value; - return self; -} -- (ServerGroupMsgBuilder*) clearCreateTime { - result.hasCreateTime = NO; - result.createTime = 0; - return self; -} -- (BOOL) hasMsgContent { - return result.hasMsgContent; -} -- (NSString*) msgContent { - return result.msgContent; -} -- (ServerGroupMsgBuilder*) setMsgContent:(NSString*) value { - result.hasMsgContent = YES; - result.msgContent = value; - return self; -} -- (ServerGroupMsgBuilder*) clearMsgContent { - result.hasMsgContent = NO; - result.msgContent = @""; - return self; -} -@end - -@interface ClientOfflineFileInfo () -@property (strong) NSString* fromUserId; -@property UInt32 fileId; -@property UInt32 fileSize; -@property (strong) NSString* filePath; -@end - -@implementation ClientOfflineFileInfo - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasFileId { - return !!hasFileId_; -} -- (void) setHasFileId:(BOOL) value_ { - hasFileId_ = !!value_; -} -@synthesize fileId; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (void) dealloc { - self.fromUserId = nil; - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = @""; - self.fileId = 0; - self.fileSize = 0; - self.filePath = @""; - } - return self; -} -static ClientOfflineFileInfo* defaultClientOfflineFileInfoInstance = nil; -+ (void) initialize { - if (self == [ClientOfflineFileInfo class]) { - defaultClientOfflineFileInfoInstance = [[ClientOfflineFileInfo alloc] init]; - } -} -+ (ClientOfflineFileInfo*) defaultInstance { - return defaultClientOfflineFileInfoInstance; -} -- (ClientOfflineFileInfo*) defaultInstance { - return defaultClientOfflineFileInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasFileId) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeString:1 value:self.fromUserId]; - } - if (self.hasFileId) { - [output writeUInt32:2 value:self.fileId]; - } - if (self.hasFileSize) { - [output writeUInt32:3 value:self.fileSize]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeStringSize(1, self.fromUserId); - } - if (self.hasFileId) { - size_ += computeUInt32Size(2, self.fileId); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(3, self.fileSize); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientOfflineFileInfo*) parseFromData:(NSData*) data { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromData:data] build]; -} -+ (ClientOfflineFileInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromInputStream:input] build]; -} -+ (ClientOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientOfflineFileInfo*)[[[ClientOfflineFileInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientOfflineFileInfoBuilder*) builder { - return [[ClientOfflineFileInfoBuilder alloc] init]; -} -+ (ClientOfflineFileInfoBuilder*) builderWithPrototype:(ClientOfflineFileInfo*) prototype { - return [[ClientOfflineFileInfo builder] mergeFrom:prototype]; -} -- (ClientOfflineFileInfoBuilder*) builder { - return [ClientOfflineFileInfo builder]; -} -- (ClientOfflineFileInfoBuilder*) toBuilder { - return [ClientOfflineFileInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasFileId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileId", [NSNumber numberWithInteger:self.fileId]]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientOfflineFileInfo class]]) { - return NO; - } - ClientOfflineFileInfo *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasFileId == otherMessage.hasFileId && - (!self.hasFileId || self.fileId == otherMessage.fileId) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasFileId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileId] hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientOfflineFileInfoBuilder() -@property (strong) ClientOfflineFileInfo* result; -@end - -@implementation ClientOfflineFileInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientOfflineFileInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientOfflineFileInfoBuilder*) clear { - self.result = [[ClientOfflineFileInfo alloc] init]; - return self; -} -- (ClientOfflineFileInfoBuilder*) clone { - return [ClientOfflineFileInfo builderWithPrototype:result]; -} -- (ClientOfflineFileInfo*) defaultInstance { - return [ClientOfflineFileInfo defaultInstance]; -} -- (ClientOfflineFileInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientOfflineFileInfo*) buildPartial { - ClientOfflineFileInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientOfflineFileInfoBuilder*) mergeFrom:(ClientOfflineFileInfo*) other { - if (other == [ClientOfflineFileInfo defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasFileId) { - [self setFileId:other.fileId]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 10: { - [self setFromUserId:[input readString]]; - break; - } - case 16: { - [self setFileId:[input readUInt32]]; - break; - } - case 24: { - [self setFileSize:[input readUInt32]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientOfflineFileInfoBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientOfflineFileInfoBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasFileId { - return result.hasFileId; -} -- (UInt32) fileId { - return result.fileId; -} -- (ClientOfflineFileInfoBuilder*) setFileId:(UInt32) value { - result.hasFileId = YES; - result.fileId = value; - return self; -} -- (ClientOfflineFileInfoBuilder*) clearFileId { - result.hasFileId = NO; - result.fileId = 0; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (ClientOfflineFileInfoBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (ClientOfflineFileInfoBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (ClientOfflineFileInfoBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (ClientOfflineFileInfoBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -@end - -@interface ServerOfflineFileInfo () -@property UInt32 fromUserId; -@property UInt32 fileId; -@property UInt32 fileSize; -@property (strong) NSString* filePath; -@end - -@implementation ServerOfflineFileInfo - -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasFileId { - return !!hasFileId_; -} -- (void) setHasFileId:(BOOL) value_ { - hasFileId_ = !!value_; -} -@synthesize fileId; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (void) dealloc { - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.fromUserId = 0; - self.fileId = 0; - self.fileSize = 0; - self.filePath = @""; - } - return self; -} -static ServerOfflineFileInfo* defaultServerOfflineFileInfoInstance = nil; -+ (void) initialize { - if (self == [ServerOfflineFileInfo class]) { - defaultServerOfflineFileInfoInstance = [[ServerOfflineFileInfo alloc] init]; - } -} -+ (ServerOfflineFileInfo*) defaultInstance { - return defaultServerOfflineFileInfoInstance; -} -- (ServerOfflineFileInfo*) defaultInstance { - return defaultServerOfflineFileInfoInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasFileId) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasFromUserId) { - [output writeUInt32:1 value:self.fromUserId]; - } - if (self.hasFileId) { - [output writeUInt32:2 value:self.fileId]; - } - if (self.hasFileSize) { - [output writeUInt32:3 value:self.fileSize]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasFromUserId) { - size_ += computeUInt32Size(1, self.fromUserId); - } - if (self.hasFileId) { - size_ += computeUInt32Size(2, self.fileId); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(3, self.fileSize); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ServerOfflineFileInfo*) parseFromData:(NSData*) data { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromData:data] build]; -} -+ (ServerOfflineFileInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ServerOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromInputStream:input] build]; -} -+ (ServerOfflineFileInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromCodedInputStream:input] build]; -} -+ (ServerOfflineFileInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ServerOfflineFileInfo*)[[[ServerOfflineFileInfo builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ServerOfflineFileInfoBuilder*) builder { - return [[ServerOfflineFileInfoBuilder alloc] init]; -} -+ (ServerOfflineFileInfoBuilder*) builderWithPrototype:(ServerOfflineFileInfo*) prototype { - return [[ServerOfflineFileInfo builder] mergeFrom:prototype]; -} -- (ServerOfflineFileInfoBuilder*) builder { - return [ServerOfflineFileInfo builder]; -} -- (ServerOfflineFileInfoBuilder*) toBuilder { - return [ServerOfflineFileInfo builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", [NSNumber numberWithInteger:self.fromUserId]]; - } - if (self.hasFileId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileId", [NSNumber numberWithInteger:self.fileId]]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ServerOfflineFileInfo class]]) { - return NO; - } - ServerOfflineFileInfo *otherMessage = other; - return - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || self.fromUserId == otherMessage.fromUserId) && - self.hasFileId == otherMessage.hasFileId && - (!self.hasFileId || self.fileId == otherMessage.fileId) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fromUserId] hash]; - } - if (self.hasFileId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileId] hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ServerOfflineFileInfoBuilder() -@property (strong) ServerOfflineFileInfo* result; -@end - -@implementation ServerOfflineFileInfoBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ServerOfflineFileInfo alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ServerOfflineFileInfoBuilder*) clear { - self.result = [[ServerOfflineFileInfo alloc] init]; - return self; -} -- (ServerOfflineFileInfoBuilder*) clone { - return [ServerOfflineFileInfo builderWithPrototype:result]; -} -- (ServerOfflineFileInfo*) defaultInstance { - return [ServerOfflineFileInfo defaultInstance]; -} -- (ServerOfflineFileInfo*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ServerOfflineFileInfo*) buildPartial { - ServerOfflineFileInfo* returnMe = result; - self.result = nil; - return returnMe; -} -- (ServerOfflineFileInfoBuilder*) mergeFrom:(ServerOfflineFileInfo*) other { - if (other == [ServerOfflineFileInfo defaultInstance]) { - return self; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasFileId) { - [self setFileId:other.fileId]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ServerOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ServerOfflineFileInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setFromUserId:[input readUInt32]]; - break; - } - case 16: { - [self setFileId:[input readUInt32]]; - break; - } - case 24: { - [self setFileSize:[input readUInt32]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (UInt32) fromUserId { - return result.fromUserId; -} -- (ServerOfflineFileInfoBuilder*) setFromUserId:(UInt32) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ServerOfflineFileInfoBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = 0; - return self; -} -- (BOOL) hasFileId { - return result.hasFileId; -} -- (UInt32) fileId { - return result.fileId; -} -- (ServerOfflineFileInfoBuilder*) setFileId:(UInt32) value { - result.hasFileId = YES; - result.fileId = value; - return self; -} -- (ServerOfflineFileInfoBuilder*) clearFileId { - result.hasFileId = NO; - result.fileId = 0; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (ServerOfflineFileInfoBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (ServerOfflineFileInfoBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (ServerOfflineFileInfoBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (ServerOfflineFileInfoBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.h b/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.h deleted file mode 100644 index 2076a56..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.h +++ /dev/null @@ -1,2349 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "ProtocolBuffers.h" - -#import "IMBaseDefine.pb.h" -// @@protoc_insertion_point(imports) - -@class C2LMsgServReq; -@class C2LMsgServReqBuilder; -@class C2LMsgServRsp; -@class C2LMsgServRspBuilder; -@class C2MAllUserReq; -@class C2MAllUserReqBuilder; -@class C2MBuddyListReq; -@class C2MBuddyListReqBuilder; -@class C2MDBQueryReq; -@class C2MDBQueryReqBuilder; -@class C2MDBQueryRsp; -@class C2MDBQueryRspBuilder; -@class C2MHeartBeatReq; -@class C2MHeartBeatReqBuilder; -@class C2MHeartBeatRsp; -@class C2MHeartBeatRspBuilder; -@class C2MHistoryMsgReq; -@class C2MHistoryMsgReqBuilder; -@class C2MLoginReq; -@class C2MLoginReqBuilder; -@class C2MLoginRsp; -@class C2MLoginRspBuilder; -@class C2MMsgListRsp; -@class C2MMsgListRspBuilder; -@class C2MRemoveSessionReq; -@class C2MRemoveSessionReqBuilder; -@class C2MRemoveSessionRsp; -@class C2MRemoveSessionRspBuilder; -@class C2MServiceSetting; -@class C2MServiceSettingBuilder; -@class C2MTimeReq; -@class C2MTimeReqBuilder; -@class C2MTimeRsp; -@class C2MTimeRspBuilder; -@class C2MUnReadMsgCntReq; -@class C2MUnReadMsgCntReqBuilder; -@class C2MUnReadMsgCntRsp; -@class C2MUnReadMsgCntRspBuilder; -@class C2MUnReadMsgReq; -@class C2MUnReadMsgReqBuilder; -@class C2MUserInfoReq; -@class C2MUserInfoReqBuilder; -@class C2MUserInfoRsp; -@class C2MUserInfoRspBuilder; -@class C2MUserListStatReq; -@class C2MUserListStatReqBuilder; -@class C2MUserListStatRsp; -@class C2MUserListStatRspBuilder; -@class C2MUserStatusReq; -@class C2MUserStatusReqBuilder; -@class C2MUserStatusRsp; -@class C2MUserStatusRspBuilder; -@class ClientGroupInfo; -@class ClientGroupInfoBuilder; -@class ClientGroupMsg; -@class ClientGroupMsgBuilder; -@class ClientGroupUnReadCnt; -@class ClientGroupUnReadCntBuilder; -@class ClientMsgData; -@class ClientMsgDataAck; -@class ClientMsgDataAckBuilder; -@class ClientMsgDataBuilder; -@class ClientMsgInfo; -@class ClientMsgInfoBuilder; -@class ClientMsgReadAck; -@class ClientMsgReadAckBuilder; -@class ClientOfflineFileInfo; -@class ClientOfflineFileInfoBuilder; -@class ClientP2PCmdMsg; -@class ClientP2PCmdMsgBuilder; -@class ClientUnReadInfo; -@class ClientUnReadInfoBuilder; -@class ClientUserInfo; -@class ClientUserInfoBuilder; -@class ClientUserStat; -@class ClientUserStatBuilder; -@class IpAddr; -@class IpAddrBuilder; -@class M2CFriendListNotify; -@class M2CFriendListNotifyBuilder; -@class M2CFriendStatNotify; -@class M2CFriendStatNotifyBuilder; -@class M2CKickUserNotify; -@class M2CKickUserNotifyBuilder; -@class M2COnlineFriendListNotify; -@class M2COnlineFriendListNotifyBuilder; -@class ServerGroupInfo; -@class ServerGroupInfoBuilder; -@class ServerGroupMsg; -@class ServerGroupMsgBuilder; -@class ServerGroupUnReadCnt; -@class ServerGroupUnReadCntBuilder; -@class ServerMsgInfo; -@class ServerMsgInfoBuilder; -@class ServerOfflineFileInfo; -@class ServerOfflineFileInfoBuilder; -@class ServerUnReadInfo; -@class ServerUnReadInfoBuilder; -@class ServerUserInfo; -@class ServerUserInfoBuilder; -@class ServerUserStat; -@class ServerUserStatBuilder; -#ifndef __has_feature - #define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif // __has_feature - -#ifndef NS_RETURNS_NOT_RETAINED - #if __has_feature(attribute_ns_returns_not_retained) - #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) - #else - #define NS_RETURNS_NOT_RETAINED - #endif -#endif - - -@interface Imclient2ServBaseRoot : NSObject { -} -+ (PBExtensionRegistry*) extensionRegistry; -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry; -@end - -@interface C2LMsgServReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserType_:1; - SInt32 cmdId; - UInt32 userType; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserType; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 userType; - -+ (C2LMsgServReq*) defaultInstance; -- (C2LMsgServReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2LMsgServReqBuilder*) builder; -+ (C2LMsgServReqBuilder*) builder; -+ (C2LMsgServReqBuilder*) builderWithPrototype:(C2LMsgServReq*) prototype; -- (C2LMsgServReqBuilder*) toBuilder; - -+ (C2LMsgServReq*) parseFromData:(NSData*) data; -+ (C2LMsgServReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2LMsgServReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2LMsgServReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2LMsgServReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2LMsgServReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2LMsgServReqBuilder : PBGeneratedMessageBuilder { -@private - C2LMsgServReq* result; -} - -- (C2LMsgServReq*) defaultInstance; - -- (C2LMsgServReqBuilder*) clear; -- (C2LMsgServReqBuilder*) clone; - -- (C2LMsgServReq*) build; -- (C2LMsgServReq*) buildPartial; - -- (C2LMsgServReqBuilder*) mergeFrom:(C2LMsgServReq*) other; -- (C2LMsgServReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2LMsgServReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2LMsgServReqBuilder*) setCmdId:(SInt32) value; -- (C2LMsgServReqBuilder*) clearCmdId; - -- (BOOL) hasUserType; -- (UInt32) userType; -- (C2LMsgServReqBuilder*) setUserType:(UInt32) value; -- (C2LMsgServReqBuilder*) clearUserType; -@end - -@interface C2LMsgServRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasResults_:1; - SInt32 cmdId; - ResultType results; - NSMutableArray * ipAddrListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -@property (readonly) SInt32 cmdId; -@property (readonly) ResultType results; -@property (readonly, strong) NSArray * ipAddrList; -- (IpAddr*)ipAddrListAtIndex:(NSUInteger)index; - -+ (C2LMsgServRsp*) defaultInstance; -- (C2LMsgServRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2LMsgServRspBuilder*) builder; -+ (C2LMsgServRspBuilder*) builder; -+ (C2LMsgServRspBuilder*) builderWithPrototype:(C2LMsgServRsp*) prototype; -- (C2LMsgServRspBuilder*) toBuilder; - -+ (C2LMsgServRsp*) parseFromData:(NSData*) data; -+ (C2LMsgServRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2LMsgServRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2LMsgServRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2LMsgServRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2LMsgServRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2LMsgServRspBuilder : PBGeneratedMessageBuilder { -@private - C2LMsgServRsp* result; -} - -- (C2LMsgServRsp*) defaultInstance; - -- (C2LMsgServRspBuilder*) clear; -- (C2LMsgServRspBuilder*) clone; - -- (C2LMsgServRsp*) build; -- (C2LMsgServRsp*) buildPartial; - -- (C2LMsgServRspBuilder*) mergeFrom:(C2LMsgServRsp*) other; -- (C2LMsgServRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2LMsgServRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2LMsgServRspBuilder*) setCmdId:(SInt32) value; -- (C2LMsgServRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (ResultType) results; -- (C2LMsgServRspBuilder*) setResults:(ResultType) value; -- (C2LMsgServRspBuilder*) clearResults; - -- (NSMutableArray *)ipAddrList; -- (IpAddr*)ipAddrListAtIndex:(NSUInteger)index; -- (C2LMsgServRspBuilder *)addIpAddrList:(IpAddr*)value; -- (C2LMsgServRspBuilder *)setIpAddrListArray:(NSArray *)array; -- (C2LMsgServRspBuilder *)clearIpAddrList; -@end - -@interface C2MHeartBeatReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MHeartBeatReq*) defaultInstance; -- (C2MHeartBeatReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MHeartBeatReqBuilder*) builder; -+ (C2MHeartBeatReqBuilder*) builder; -+ (C2MHeartBeatReqBuilder*) builderWithPrototype:(C2MHeartBeatReq*) prototype; -- (C2MHeartBeatReqBuilder*) toBuilder; - -+ (C2MHeartBeatReq*) parseFromData:(NSData*) data; -+ (C2MHeartBeatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHeartBeatReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MHeartBeatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MHeartBeatReqBuilder : PBGeneratedMessageBuilder { -@private - C2MHeartBeatReq* result; -} - -- (C2MHeartBeatReq*) defaultInstance; - -- (C2MHeartBeatReqBuilder*) clear; -- (C2MHeartBeatReqBuilder*) clone; - -- (C2MHeartBeatReq*) build; -- (C2MHeartBeatReq*) buildPartial; - -- (C2MHeartBeatReqBuilder*) mergeFrom:(C2MHeartBeatReq*) other; -- (C2MHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MHeartBeatReqBuilder*) setCmdId:(SInt32) value; -- (C2MHeartBeatReqBuilder*) clearCmdId; -@end - -@interface C2MHeartBeatRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MHeartBeatRsp*) defaultInstance; -- (C2MHeartBeatRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MHeartBeatRspBuilder*) builder; -+ (C2MHeartBeatRspBuilder*) builder; -+ (C2MHeartBeatRspBuilder*) builderWithPrototype:(C2MHeartBeatRsp*) prototype; -- (C2MHeartBeatRspBuilder*) toBuilder; - -+ (C2MHeartBeatRsp*) parseFromData:(NSData*) data; -+ (C2MHeartBeatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MHeartBeatRspBuilder : PBGeneratedMessageBuilder { -@private - C2MHeartBeatRsp* result; -} - -- (C2MHeartBeatRsp*) defaultInstance; - -- (C2MHeartBeatRspBuilder*) clear; -- (C2MHeartBeatRspBuilder*) clone; - -- (C2MHeartBeatRsp*) build; -- (C2MHeartBeatRsp*) buildPartial; - -- (C2MHeartBeatRspBuilder*) mergeFrom:(C2MHeartBeatRsp*) other; -- (C2MHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MHeartBeatRspBuilder*) setCmdId:(SInt32) value; -- (C2MHeartBeatRspBuilder*) clearCmdId; -@end - -@interface C2MLoginReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserId_:1; - BOOL hasUuid_:1; - BOOL hasClientVersion_:1; - BOOL hasOnlineStatus_:1; - SInt32 cmdId; - NSString* userId; - NSString* uuid; - NSString* clientVersion; - UInt32 onlineStatus; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserId; -- (BOOL) hasUuid; -- (BOOL) hasOnlineStatus; -- (BOOL) hasClientVersion; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* userId; -@property (readonly, strong) NSString* uuid; -@property (readonly) UInt32 onlineStatus; -@property (readonly, strong) NSString* clientVersion; - -+ (C2MLoginReq*) defaultInstance; -- (C2MLoginReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MLoginReqBuilder*) builder; -+ (C2MLoginReqBuilder*) builder; -+ (C2MLoginReqBuilder*) builderWithPrototype:(C2MLoginReq*) prototype; -- (C2MLoginReqBuilder*) toBuilder; - -+ (C2MLoginReq*) parseFromData:(NSData*) data; -+ (C2MLoginReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MLoginReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MLoginReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MLoginReqBuilder : PBGeneratedMessageBuilder { -@private - C2MLoginReq* result; -} - -- (C2MLoginReq*) defaultInstance; - -- (C2MLoginReqBuilder*) clear; -- (C2MLoginReqBuilder*) clone; - -- (C2MLoginReq*) build; -- (C2MLoginReq*) buildPartial; - -- (C2MLoginReqBuilder*) mergeFrom:(C2MLoginReq*) other; -- (C2MLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MLoginReqBuilder*) setCmdId:(SInt32) value; -- (C2MLoginReqBuilder*) clearCmdId; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (C2MLoginReqBuilder*) setUserId:(NSString*) value; -- (C2MLoginReqBuilder*) clearUserId; - -- (BOOL) hasUuid; -- (NSString*) uuid; -- (C2MLoginReqBuilder*) setUuid:(NSString*) value; -- (C2MLoginReqBuilder*) clearUuid; - -- (BOOL) hasOnlineStatus; -- (UInt32) onlineStatus; -- (C2MLoginReqBuilder*) setOnlineStatus:(UInt32) value; -- (C2MLoginReqBuilder*) clearOnlineStatus; - -- (BOOL) hasClientVersion; -- (NSString*) clientVersion; -- (C2MLoginReqBuilder*) setClientVersion:(NSString*) value; -- (C2MLoginReqBuilder*) clearClientVersion; -@end - -@interface C2MLoginRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasName_:1; - BOOL hasNickName_:1; - BOOL hasAvatarUrl_:1; - BOOL hasServerTime_:1; - BOOL hasOnlineStatus_:1; - BOOL hasResults_:1; - BOOL hasUserType_:1; - SInt32 cmdId; - NSString* name; - NSString* nickName; - NSString* avatarUrl; - UInt32 serverTime; - UInt32 onlineStatus; - ResultType results; - UserType userType; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -- (BOOL) hasServerTime; -- (BOOL) hasOnlineStatus; -- (BOOL) hasName; -- (BOOL) hasNickName; -- (BOOL) hasAvatarUrl; -- (BOOL) hasUserType; -@property (readonly) SInt32 cmdId; -@property (readonly) ResultType results; -@property (readonly) UInt32 serverTime; -@property (readonly) UInt32 onlineStatus; -@property (readonly, strong) NSString* name; -@property (readonly, strong) NSString* nickName; -@property (readonly, strong) NSString* avatarUrl; -@property (readonly) UserType userType; - -+ (C2MLoginRsp*) defaultInstance; -- (C2MLoginRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MLoginRspBuilder*) builder; -+ (C2MLoginRspBuilder*) builder; -+ (C2MLoginRspBuilder*) builderWithPrototype:(C2MLoginRsp*) prototype; -- (C2MLoginRspBuilder*) toBuilder; - -+ (C2MLoginRsp*) parseFromData:(NSData*) data; -+ (C2MLoginRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MLoginRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MLoginRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MLoginRspBuilder : PBGeneratedMessageBuilder { -@private - C2MLoginRsp* result; -} - -- (C2MLoginRsp*) defaultInstance; - -- (C2MLoginRspBuilder*) clear; -- (C2MLoginRspBuilder*) clone; - -- (C2MLoginRsp*) build; -- (C2MLoginRsp*) buildPartial; - -- (C2MLoginRspBuilder*) mergeFrom:(C2MLoginRsp*) other; -- (C2MLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MLoginRspBuilder*) setCmdId:(SInt32) value; -- (C2MLoginRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (ResultType) results; -- (C2MLoginRspBuilder*) setResults:(ResultType) value; -- (C2MLoginRspBuilder*) clearResults; - -- (BOOL) hasServerTime; -- (UInt32) serverTime; -- (C2MLoginRspBuilder*) setServerTime:(UInt32) value; -- (C2MLoginRspBuilder*) clearServerTime; - -- (BOOL) hasOnlineStatus; -- (UInt32) onlineStatus; -- (C2MLoginRspBuilder*) setOnlineStatus:(UInt32) value; -- (C2MLoginRspBuilder*) clearOnlineStatus; - -- (BOOL) hasName; -- (NSString*) name; -- (C2MLoginRspBuilder*) setName:(NSString*) value; -- (C2MLoginRspBuilder*) clearName; - -- (BOOL) hasNickName; -- (NSString*) nickName; -- (C2MLoginRspBuilder*) setNickName:(NSString*) value; -- (C2MLoginRspBuilder*) clearNickName; - -- (BOOL) hasAvatarUrl; -- (NSString*) avatarUrl; -- (C2MLoginRspBuilder*) setAvatarUrl:(NSString*) value; -- (C2MLoginRspBuilder*) clearAvatarUrl; - -- (BOOL) hasUserType; -- (UserType) userType; -- (C2MLoginRspBuilder*) setUserType:(UserType) value; -- (C2MLoginRspBuilder*) clearUserType; -@end - -@interface M2CKickUserNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserId_:1; - BOOL hasKickReason_:1; - SInt32 cmdId; - NSString* userId; - KickReasonType kickReason; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserId; -- (BOOL) hasKickReason; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* userId; -@property (readonly) KickReasonType kickReason; - -+ (M2CKickUserNotify*) defaultInstance; -- (M2CKickUserNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (M2CKickUserNotifyBuilder*) builder; -+ (M2CKickUserNotifyBuilder*) builder; -+ (M2CKickUserNotifyBuilder*) builderWithPrototype:(M2CKickUserNotify*) prototype; -- (M2CKickUserNotifyBuilder*) toBuilder; - -+ (M2CKickUserNotify*) parseFromData:(NSData*) data; -+ (M2CKickUserNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CKickUserNotify*) parseFromInputStream:(NSInputStream*) input; -+ (M2CKickUserNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CKickUserNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (M2CKickUserNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface M2CKickUserNotifyBuilder : PBGeneratedMessageBuilder { -@private - M2CKickUserNotify* result; -} - -- (M2CKickUserNotify*) defaultInstance; - -- (M2CKickUserNotifyBuilder*) clear; -- (M2CKickUserNotifyBuilder*) clone; - -- (M2CKickUserNotify*) build; -- (M2CKickUserNotify*) buildPartial; - -- (M2CKickUserNotifyBuilder*) mergeFrom:(M2CKickUserNotify*) other; -- (M2CKickUserNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (M2CKickUserNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (M2CKickUserNotifyBuilder*) setCmdId:(SInt32) value; -- (M2CKickUserNotifyBuilder*) clearCmdId; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (M2CKickUserNotifyBuilder*) setUserId:(NSString*) value; -- (M2CKickUserNotifyBuilder*) clearUserId; - -- (BOOL) hasKickReason; -- (KickReasonType) kickReason; -- (M2CKickUserNotifyBuilder*) setKickReason:(KickReasonType) value; -- (M2CKickUserNotifyBuilder*) clearKickReason; -@end - -@interface C2MBuddyListReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasReqType_:1; - SInt32 cmdId; - UInt32 reqType; -} -- (BOOL) hasCmdId; -- (BOOL) hasReqType; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 reqType; - -+ (C2MBuddyListReq*) defaultInstance; -- (C2MBuddyListReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MBuddyListReqBuilder*) builder; -+ (C2MBuddyListReqBuilder*) builder; -+ (C2MBuddyListReqBuilder*) builderWithPrototype:(C2MBuddyListReq*) prototype; -- (C2MBuddyListReqBuilder*) toBuilder; - -+ (C2MBuddyListReq*) parseFromData:(NSData*) data; -+ (C2MBuddyListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MBuddyListReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MBuddyListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MBuddyListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MBuddyListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MBuddyListReqBuilder : PBGeneratedMessageBuilder { -@private - C2MBuddyListReq* result; -} - -- (C2MBuddyListReq*) defaultInstance; - -- (C2MBuddyListReqBuilder*) clear; -- (C2MBuddyListReqBuilder*) clone; - -- (C2MBuddyListReq*) build; -- (C2MBuddyListReq*) buildPartial; - -- (C2MBuddyListReqBuilder*) mergeFrom:(C2MBuddyListReq*) other; -- (C2MBuddyListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MBuddyListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MBuddyListReqBuilder*) setCmdId:(SInt32) value; -- (C2MBuddyListReqBuilder*) clearCmdId; - -- (BOOL) hasReqType; -- (UInt32) reqType; -- (C2MBuddyListReqBuilder*) setReqType:(UInt32) value; -- (C2MBuddyListReqBuilder*) clearReqType; -@end - -@interface M2CFriendListNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * friendListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * friendList; -- (ClientUserInfo*)friendListAtIndex:(NSUInteger)index; - -+ (M2CFriendListNotify*) defaultInstance; -- (M2CFriendListNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (M2CFriendListNotifyBuilder*) builder; -+ (M2CFriendListNotifyBuilder*) builder; -+ (M2CFriendListNotifyBuilder*) builderWithPrototype:(M2CFriendListNotify*) prototype; -- (M2CFriendListNotifyBuilder*) toBuilder; - -+ (M2CFriendListNotify*) parseFromData:(NSData*) data; -+ (M2CFriendListNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CFriendListNotify*) parseFromInputStream:(NSInputStream*) input; -+ (M2CFriendListNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (M2CFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface M2CFriendListNotifyBuilder : PBGeneratedMessageBuilder { -@private - M2CFriendListNotify* result; -} - -- (M2CFriendListNotify*) defaultInstance; - -- (M2CFriendListNotifyBuilder*) clear; -- (M2CFriendListNotifyBuilder*) clone; - -- (M2CFriendListNotify*) build; -- (M2CFriendListNotify*) buildPartial; - -- (M2CFriendListNotifyBuilder*) mergeFrom:(M2CFriendListNotify*) other; -- (M2CFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (M2CFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (M2CFriendListNotifyBuilder*) setCmdId:(SInt32) value; -- (M2CFriendListNotifyBuilder*) clearCmdId; - -- (NSMutableArray *)friendList; -- (ClientUserInfo*)friendListAtIndex:(NSUInteger)index; -- (M2CFriendListNotifyBuilder *)addFriendList:(ClientUserInfo*)value; -- (M2CFriendListNotifyBuilder *)setFriendListArray:(NSArray *)array; -- (M2CFriendListNotifyBuilder *)clearFriendList; -@end - -@interface M2COnlineFriendListNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasListType_:1; - SInt32 cmdId; - OnlineListType listType; - NSMutableArray * friendStatusListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasListType; -@property (readonly) SInt32 cmdId; -@property (readonly) OnlineListType listType; -@property (readonly, strong) NSArray * friendStatusList; -- (ClientUserStat*)friendStatusListAtIndex:(NSUInteger)index; - -+ (M2COnlineFriendListNotify*) defaultInstance; -- (M2COnlineFriendListNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (M2COnlineFriendListNotifyBuilder*) builder; -+ (M2COnlineFriendListNotifyBuilder*) builder; -+ (M2COnlineFriendListNotifyBuilder*) builderWithPrototype:(M2COnlineFriendListNotify*) prototype; -- (M2COnlineFriendListNotifyBuilder*) toBuilder; - -+ (M2COnlineFriendListNotify*) parseFromData:(NSData*) data; -+ (M2COnlineFriendListNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2COnlineFriendListNotify*) parseFromInputStream:(NSInputStream*) input; -+ (M2COnlineFriendListNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2COnlineFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (M2COnlineFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface M2COnlineFriendListNotifyBuilder : PBGeneratedMessageBuilder { -@private - M2COnlineFriendListNotify* result; -} - -- (M2COnlineFriendListNotify*) defaultInstance; - -- (M2COnlineFriendListNotifyBuilder*) clear; -- (M2COnlineFriendListNotifyBuilder*) clone; - -- (M2COnlineFriendListNotify*) build; -- (M2COnlineFriendListNotify*) buildPartial; - -- (M2COnlineFriendListNotifyBuilder*) mergeFrom:(M2COnlineFriendListNotify*) other; -- (M2COnlineFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (M2COnlineFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (M2COnlineFriendListNotifyBuilder*) setCmdId:(SInt32) value; -- (M2COnlineFriendListNotifyBuilder*) clearCmdId; - -- (BOOL) hasListType; -- (OnlineListType) listType; -- (M2COnlineFriendListNotifyBuilder*) setListType:(OnlineListType) value; -- (M2COnlineFriendListNotifyBuilder*) clearListType; - -- (NSMutableArray *)friendStatusList; -- (ClientUserStat*)friendStatusListAtIndex:(NSUInteger)index; -- (M2COnlineFriendListNotifyBuilder *)addFriendStatusList:(ClientUserStat*)value; -- (M2COnlineFriendListNotifyBuilder *)setFriendStatusListArray:(NSArray *)array; -- (M2COnlineFriendListNotifyBuilder *)clearFriendStatusList; -@end - -@interface M2CFriendStatNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserStat_:1; - SInt32 cmdId; - ClientUserStat* userStat; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserStat; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) ClientUserStat* userStat; - -+ (M2CFriendStatNotify*) defaultInstance; -- (M2CFriendStatNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (M2CFriendStatNotifyBuilder*) builder; -+ (M2CFriendStatNotifyBuilder*) builder; -+ (M2CFriendStatNotifyBuilder*) builderWithPrototype:(M2CFriendStatNotify*) prototype; -- (M2CFriendStatNotifyBuilder*) toBuilder; - -+ (M2CFriendStatNotify*) parseFromData:(NSData*) data; -+ (M2CFriendStatNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CFriendStatNotify*) parseFromInputStream:(NSInputStream*) input; -+ (M2CFriendStatNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (M2CFriendStatNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (M2CFriendStatNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface M2CFriendStatNotifyBuilder : PBGeneratedMessageBuilder { -@private - M2CFriendStatNotify* result; -} - -- (M2CFriendStatNotify*) defaultInstance; - -- (M2CFriendStatNotifyBuilder*) clear; -- (M2CFriendStatNotifyBuilder*) clone; - -- (M2CFriendStatNotify*) build; -- (M2CFriendStatNotify*) buildPartial; - -- (M2CFriendStatNotifyBuilder*) mergeFrom:(M2CFriendStatNotify*) other; -- (M2CFriendStatNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (M2CFriendStatNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (M2CFriendStatNotifyBuilder*) setCmdId:(SInt32) value; -- (M2CFriendStatNotifyBuilder*) clearCmdId; - -- (BOOL) hasUserStat; -- (ClientUserStat*) userStat; -- (M2CFriendStatNotifyBuilder*) setUserStat:(ClientUserStat*) value; -- (M2CFriendStatNotifyBuilder*) setUserStatBuilder:(ClientUserStatBuilder*) builderForValue; -- (M2CFriendStatNotifyBuilder*) mergeUserStat:(ClientUserStat*) value; -- (M2CFriendStatNotifyBuilder*) clearUserStat; -@end - -@interface C2MUserStatusReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserId_:1; - SInt32 cmdId; - NSString* userId; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* userId; - -+ (C2MUserStatusReq*) defaultInstance; -- (C2MUserStatusReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserStatusReqBuilder*) builder; -+ (C2MUserStatusReqBuilder*) builder; -+ (C2MUserStatusReqBuilder*) builderWithPrototype:(C2MUserStatusReq*) prototype; -- (C2MUserStatusReqBuilder*) toBuilder; - -+ (C2MUserStatusReq*) parseFromData:(NSData*) data; -+ (C2MUserStatusReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserStatusReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserStatusReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserStatusReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserStatusReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserStatusReqBuilder : PBGeneratedMessageBuilder { -@private - C2MUserStatusReq* result; -} - -- (C2MUserStatusReq*) defaultInstance; - -- (C2MUserStatusReqBuilder*) clear; -- (C2MUserStatusReqBuilder*) clone; - -- (C2MUserStatusReq*) build; -- (C2MUserStatusReq*) buildPartial; - -- (C2MUserStatusReqBuilder*) mergeFrom:(C2MUserStatusReq*) other; -- (C2MUserStatusReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserStatusReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserStatusReqBuilder*) setCmdId:(SInt32) value; -- (C2MUserStatusReqBuilder*) clearCmdId; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (C2MUserStatusReqBuilder*) setUserId:(NSString*) value; -- (C2MUserStatusReqBuilder*) clearUserId; -@end - -@interface C2MUserStatusRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserStat_:1; - SInt32 cmdId; - ClientUserStat* userStat; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserStat; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) ClientUserStat* userStat; - -+ (C2MUserStatusRsp*) defaultInstance; -- (C2MUserStatusRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserStatusRspBuilder*) builder; -+ (C2MUserStatusRspBuilder*) builder; -+ (C2MUserStatusRspBuilder*) builderWithPrototype:(C2MUserStatusRsp*) prototype; -- (C2MUserStatusRspBuilder*) toBuilder; - -+ (C2MUserStatusRsp*) parseFromData:(NSData*) data; -+ (C2MUserStatusRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserStatusRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserStatusRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserStatusRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserStatusRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserStatusRspBuilder : PBGeneratedMessageBuilder { -@private - C2MUserStatusRsp* result; -} - -- (C2MUserStatusRsp*) defaultInstance; - -- (C2MUserStatusRspBuilder*) clear; -- (C2MUserStatusRspBuilder*) clone; - -- (C2MUserStatusRsp*) build; -- (C2MUserStatusRsp*) buildPartial; - -- (C2MUserStatusRspBuilder*) mergeFrom:(C2MUserStatusRsp*) other; -- (C2MUserStatusRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserStatusRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserStatusRspBuilder*) setCmdId:(SInt32) value; -- (C2MUserStatusRspBuilder*) clearCmdId; - -- (BOOL) hasUserStat; -- (ClientUserStat*) userStat; -- (C2MUserStatusRspBuilder*) setUserStat:(ClientUserStat*) value; -- (C2MUserStatusRspBuilder*) setUserStatBuilder:(ClientUserStatBuilder*) builderForValue; -- (C2MUserStatusRspBuilder*) mergeUserStat:(ClientUserStat*) value; -- (C2MUserStatusRspBuilder*) clearUserStat; -@end - -@interface C2MUserListStatReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * userListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) PBArray * userList; -- (NSString*)userListAtIndex:(NSUInteger)index; - -+ (C2MUserListStatReq*) defaultInstance; -- (C2MUserListStatReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserListStatReqBuilder*) builder; -+ (C2MUserListStatReqBuilder*) builder; -+ (C2MUserListStatReqBuilder*) builderWithPrototype:(C2MUserListStatReq*) prototype; -- (C2MUserListStatReqBuilder*) toBuilder; - -+ (C2MUserListStatReq*) parseFromData:(NSData*) data; -+ (C2MUserListStatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserListStatReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserListStatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserListStatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserListStatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserListStatReqBuilder : PBGeneratedMessageBuilder { -@private - C2MUserListStatReq* result; -} - -- (C2MUserListStatReq*) defaultInstance; - -- (C2MUserListStatReqBuilder*) clear; -- (C2MUserListStatReqBuilder*) clone; - -- (C2MUserListStatReq*) build; -- (C2MUserListStatReq*) buildPartial; - -- (C2MUserListStatReqBuilder*) mergeFrom:(C2MUserListStatReq*) other; -- (C2MUserListStatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserListStatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserListStatReqBuilder*) setCmdId:(SInt32) value; -- (C2MUserListStatReqBuilder*) clearCmdId; - -- (NSMutableArray *)userList; -- (NSString*)userListAtIndex:(NSUInteger)index; -- (C2MUserListStatReqBuilder *)addUserList:(NSString*)value; -- (C2MUserListStatReqBuilder *)setUserListArray:(NSArray *)array; -- (C2MUserListStatReqBuilder *)clearUserList; -@end - -@interface C2MUserListStatRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * userStatListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * userStatList; -- (ClientUserStat*)userStatListAtIndex:(NSUInteger)index; - -+ (C2MUserListStatRsp*) defaultInstance; -- (C2MUserListStatRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserListStatRspBuilder*) builder; -+ (C2MUserListStatRspBuilder*) builder; -+ (C2MUserListStatRspBuilder*) builderWithPrototype:(C2MUserListStatRsp*) prototype; -- (C2MUserListStatRspBuilder*) toBuilder; - -+ (C2MUserListStatRsp*) parseFromData:(NSData*) data; -+ (C2MUserListStatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserListStatRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserListStatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserListStatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserListStatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserListStatRspBuilder : PBGeneratedMessageBuilder { -@private - C2MUserListStatRsp* result; -} - -- (C2MUserListStatRsp*) defaultInstance; - -- (C2MUserListStatRspBuilder*) clear; -- (C2MUserListStatRspBuilder*) clone; - -- (C2MUserListStatRsp*) build; -- (C2MUserListStatRsp*) buildPartial; - -- (C2MUserListStatRspBuilder*) mergeFrom:(C2MUserListStatRsp*) other; -- (C2MUserListStatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserListStatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserListStatRspBuilder*) setCmdId:(SInt32) value; -- (C2MUserListStatRspBuilder*) clearCmdId; - -- (NSMutableArray *)userStatList; -- (ClientUserStat*)userStatListAtIndex:(NSUInteger)index; -- (C2MUserListStatRspBuilder *)addUserStatList:(ClientUserStat*)value; -- (C2MUserListStatRspBuilder *)setUserStatListArray:(NSArray *)array; -- (C2MUserListStatRspBuilder *)clearUserStatList; -@end - -@interface ClientMsgData : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasMsgData_:1; - BOOL hasAttachData_:1; - BOOL hasSeqNo_:1; - BOOL hasCreateTime_:1; - BOOL hasMsgType_:1; - BOOL hasRenderType_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* msgData; - NSData* attachData; - UInt32 seqNo; - UInt32 createTime; - UInt32 msgType; - UInt32 renderType; -} -- (BOOL) hasCmdId; -- (BOOL) hasSeqNo; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasCreateTime; -- (BOOL) hasMsgType; -- (BOOL) hasRenderType; -- (BOOL) hasMsgData; -- (BOOL) hasAttachData; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 seqNo; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly) UInt32 createTime; -@property (readonly) UInt32 msgType; -@property (readonly) UInt32 renderType; -@property (readonly, strong) NSString* msgData; -@property (readonly, strong) NSData* attachData; - -+ (ClientMsgData*) defaultInstance; -- (ClientMsgData*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientMsgDataBuilder*) builder; -+ (ClientMsgDataBuilder*) builder; -+ (ClientMsgDataBuilder*) builderWithPrototype:(ClientMsgData*) prototype; -- (ClientMsgDataBuilder*) toBuilder; - -+ (ClientMsgData*) parseFromData:(NSData*) data; -+ (ClientMsgData*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgData*) parseFromInputStream:(NSInputStream*) input; -+ (ClientMsgData*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgData*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientMsgData*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientMsgDataBuilder : PBGeneratedMessageBuilder { -@private - ClientMsgData* result; -} - -- (ClientMsgData*) defaultInstance; - -- (ClientMsgDataBuilder*) clear; -- (ClientMsgDataBuilder*) clone; - -- (ClientMsgData*) build; -- (ClientMsgData*) buildPartial; - -- (ClientMsgDataBuilder*) mergeFrom:(ClientMsgData*) other; -- (ClientMsgDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientMsgDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (ClientMsgDataBuilder*) setCmdId:(SInt32) value; -- (ClientMsgDataBuilder*) clearCmdId; - -- (BOOL) hasSeqNo; -- (UInt32) seqNo; -- (ClientMsgDataBuilder*) setSeqNo:(UInt32) value; -- (ClientMsgDataBuilder*) clearSeqNo; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientMsgDataBuilder*) setFromUserId:(NSString*) value; -- (ClientMsgDataBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (ClientMsgDataBuilder*) setToUserId:(NSString*) value; -- (ClientMsgDataBuilder*) clearToUserId; - -- (BOOL) hasCreateTime; -- (UInt32) createTime; -- (ClientMsgDataBuilder*) setCreateTime:(UInt32) value; -- (ClientMsgDataBuilder*) clearCreateTime; - -- (BOOL) hasMsgType; -- (UInt32) msgType; -- (ClientMsgDataBuilder*) setMsgType:(UInt32) value; -- (ClientMsgDataBuilder*) clearMsgType; - -- (BOOL) hasRenderType; -- (UInt32) renderType; -- (ClientMsgDataBuilder*) setRenderType:(UInt32) value; -- (ClientMsgDataBuilder*) clearRenderType; - -- (BOOL) hasMsgData; -- (NSString*) msgData; -- (ClientMsgDataBuilder*) setMsgData:(NSString*) value; -- (ClientMsgDataBuilder*) clearMsgData; - -- (BOOL) hasAttachData; -- (NSData*) attachData; -- (ClientMsgDataBuilder*) setAttachData:(NSData*) value; -- (ClientMsgDataBuilder*) clearAttachData; -@end - -@interface ClientMsgDataAck : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasSeqNo_:1; - SInt32 cmdId; - NSString* fromUserId; - UInt32 seqNo; -} -- (BOOL) hasCmdId; -- (BOOL) hasSeqNo; -- (BOOL) hasFromUserId; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 seqNo; -@property (readonly, strong) NSString* fromUserId; - -+ (ClientMsgDataAck*) defaultInstance; -- (ClientMsgDataAck*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientMsgDataAckBuilder*) builder; -+ (ClientMsgDataAckBuilder*) builder; -+ (ClientMsgDataAckBuilder*) builderWithPrototype:(ClientMsgDataAck*) prototype; -- (ClientMsgDataAckBuilder*) toBuilder; - -+ (ClientMsgDataAck*) parseFromData:(NSData*) data; -+ (ClientMsgDataAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgDataAck*) parseFromInputStream:(NSInputStream*) input; -+ (ClientMsgDataAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgDataAck*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientMsgDataAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientMsgDataAckBuilder : PBGeneratedMessageBuilder { -@private - ClientMsgDataAck* result; -} - -- (ClientMsgDataAck*) defaultInstance; - -- (ClientMsgDataAckBuilder*) clear; -- (ClientMsgDataAckBuilder*) clone; - -- (ClientMsgDataAck*) build; -- (ClientMsgDataAck*) buildPartial; - -- (ClientMsgDataAckBuilder*) mergeFrom:(ClientMsgDataAck*) other; -- (ClientMsgDataAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientMsgDataAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (ClientMsgDataAckBuilder*) setCmdId:(SInt32) value; -- (ClientMsgDataAckBuilder*) clearCmdId; - -- (BOOL) hasSeqNo; -- (UInt32) seqNo; -- (ClientMsgDataAckBuilder*) setSeqNo:(UInt32) value; -- (ClientMsgDataAckBuilder*) clearSeqNo; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientMsgDataAckBuilder*) setFromUserId:(NSString*) value; -- (ClientMsgDataAckBuilder*) clearFromUserId; -@end - -@interface ClientMsgReadAck : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - SInt32 cmdId; - NSString* fromUserId; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; - -+ (ClientMsgReadAck*) defaultInstance; -- (ClientMsgReadAck*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientMsgReadAckBuilder*) builder; -+ (ClientMsgReadAckBuilder*) builder; -+ (ClientMsgReadAckBuilder*) builderWithPrototype:(ClientMsgReadAck*) prototype; -- (ClientMsgReadAckBuilder*) toBuilder; - -+ (ClientMsgReadAck*) parseFromData:(NSData*) data; -+ (ClientMsgReadAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgReadAck*) parseFromInputStream:(NSInputStream*) input; -+ (ClientMsgReadAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientMsgReadAckBuilder : PBGeneratedMessageBuilder { -@private - ClientMsgReadAck* result; -} - -- (ClientMsgReadAck*) defaultInstance; - -- (ClientMsgReadAckBuilder*) clear; -- (ClientMsgReadAckBuilder*) clone; - -- (ClientMsgReadAck*) build; -- (ClientMsgReadAck*) buildPartial; - -- (ClientMsgReadAckBuilder*) mergeFrom:(ClientMsgReadAck*) other; -- (ClientMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (ClientMsgReadAckBuilder*) setCmdId:(SInt32) value; -- (ClientMsgReadAckBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientMsgReadAckBuilder*) setFromUserId:(NSString*) value; -- (ClientMsgReadAckBuilder*) clearFromUserId; -@end - -@interface ClientP2PCmdMsg : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasCmdMsgData_:1; - BOOL hasSeqNo_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSData* cmdMsgData; - UInt32 seqNo; -} -- (BOOL) hasCmdId; -- (BOOL) hasSeqNo; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasCmdMsgData; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 seqNo; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSData* cmdMsgData; - -+ (ClientP2PCmdMsg*) defaultInstance; -- (ClientP2PCmdMsg*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (ClientP2PCmdMsgBuilder*) builder; -+ (ClientP2PCmdMsgBuilder*) builder; -+ (ClientP2PCmdMsgBuilder*) builderWithPrototype:(ClientP2PCmdMsg*) prototype; -- (ClientP2PCmdMsgBuilder*) toBuilder; - -+ (ClientP2PCmdMsg*) parseFromData:(NSData*) data; -+ (ClientP2PCmdMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientP2PCmdMsg*) parseFromInputStream:(NSInputStream*) input; -+ (ClientP2PCmdMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (ClientP2PCmdMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (ClientP2PCmdMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface ClientP2PCmdMsgBuilder : PBGeneratedMessageBuilder { -@private - ClientP2PCmdMsg* result; -} - -- (ClientP2PCmdMsg*) defaultInstance; - -- (ClientP2PCmdMsgBuilder*) clear; -- (ClientP2PCmdMsgBuilder*) clone; - -- (ClientP2PCmdMsg*) build; -- (ClientP2PCmdMsg*) buildPartial; - -- (ClientP2PCmdMsgBuilder*) mergeFrom:(ClientP2PCmdMsg*) other; -- (ClientP2PCmdMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (ClientP2PCmdMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (ClientP2PCmdMsgBuilder*) setCmdId:(SInt32) value; -- (ClientP2PCmdMsgBuilder*) clearCmdId; - -- (BOOL) hasSeqNo; -- (UInt32) seqNo; -- (ClientP2PCmdMsgBuilder*) setSeqNo:(UInt32) value; -- (ClientP2PCmdMsgBuilder*) clearSeqNo; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (ClientP2PCmdMsgBuilder*) setFromUserId:(NSString*) value; -- (ClientP2PCmdMsgBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (ClientP2PCmdMsgBuilder*) setToUserId:(NSString*) value; -- (ClientP2PCmdMsgBuilder*) clearToUserId; - -- (BOOL) hasCmdMsgData; -- (NSData*) cmdMsgData; -- (ClientP2PCmdMsgBuilder*) setCmdMsgData:(NSData*) value; -- (ClientP2PCmdMsgBuilder*) clearCmdMsgData; -@end - -@interface C2MTimeReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MTimeReq*) defaultInstance; -- (C2MTimeReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MTimeReqBuilder*) builder; -+ (C2MTimeReqBuilder*) builder; -+ (C2MTimeReqBuilder*) builderWithPrototype:(C2MTimeReq*) prototype; -- (C2MTimeReqBuilder*) toBuilder; - -+ (C2MTimeReq*) parseFromData:(NSData*) data; -+ (C2MTimeReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MTimeReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MTimeReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MTimeReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MTimeReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MTimeReqBuilder : PBGeneratedMessageBuilder { -@private - C2MTimeReq* result; -} - -- (C2MTimeReq*) defaultInstance; - -- (C2MTimeReqBuilder*) clear; -- (C2MTimeReqBuilder*) clone; - -- (C2MTimeReq*) build; -- (C2MTimeReq*) buildPartial; - -- (C2MTimeReqBuilder*) mergeFrom:(C2MTimeReq*) other; -- (C2MTimeReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MTimeReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MTimeReqBuilder*) setCmdId:(SInt32) value; -- (C2MTimeReqBuilder*) clearCmdId; -@end - -@interface C2MTimeRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasServerTime_:1; - SInt32 cmdId; - UInt32 serverTime; -} -- (BOOL) hasCmdId; -- (BOOL) hasServerTime; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 serverTime; - -+ (C2MTimeRsp*) defaultInstance; -- (C2MTimeRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MTimeRspBuilder*) builder; -+ (C2MTimeRspBuilder*) builder; -+ (C2MTimeRspBuilder*) builderWithPrototype:(C2MTimeRsp*) prototype; -- (C2MTimeRspBuilder*) toBuilder; - -+ (C2MTimeRsp*) parseFromData:(NSData*) data; -+ (C2MTimeRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MTimeRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MTimeRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MTimeRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MTimeRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MTimeRspBuilder : PBGeneratedMessageBuilder { -@private - C2MTimeRsp* result; -} - -- (C2MTimeRsp*) defaultInstance; - -- (C2MTimeRspBuilder*) clear; -- (C2MTimeRspBuilder*) clone; - -- (C2MTimeRsp*) build; -- (C2MTimeRsp*) buildPartial; - -- (C2MTimeRspBuilder*) mergeFrom:(C2MTimeRsp*) other; -- (C2MTimeRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MTimeRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MTimeRspBuilder*) setCmdId:(SInt32) value; -- (C2MTimeRspBuilder*) clearCmdId; - -- (BOOL) hasServerTime; -- (UInt32) serverTime; -- (C2MTimeRspBuilder*) setServerTime:(UInt32) value; -- (C2MTimeRspBuilder*) clearServerTime; -@end - -@interface C2MUnReadMsgCntReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MUnReadMsgCntReq*) defaultInstance; -- (C2MUnReadMsgCntReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUnReadMsgCntReqBuilder*) builder; -+ (C2MUnReadMsgCntReqBuilder*) builder; -+ (C2MUnReadMsgCntReqBuilder*) builderWithPrototype:(C2MUnReadMsgCntReq*) prototype; -- (C2MUnReadMsgCntReqBuilder*) toBuilder; - -+ (C2MUnReadMsgCntReq*) parseFromData:(NSData*) data; -+ (C2MUnReadMsgCntReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUnReadMsgCntReqBuilder : PBGeneratedMessageBuilder { -@private - C2MUnReadMsgCntReq* result; -} - -- (C2MUnReadMsgCntReq*) defaultInstance; - -- (C2MUnReadMsgCntReqBuilder*) clear; -- (C2MUnReadMsgCntReqBuilder*) clone; - -- (C2MUnReadMsgCntReq*) build; -- (C2MUnReadMsgCntReq*) buildPartial; - -- (C2MUnReadMsgCntReqBuilder*) mergeFrom:(C2MUnReadMsgCntReq*) other; -- (C2MUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUnReadMsgCntReqBuilder*) setCmdId:(SInt32) value; -- (C2MUnReadMsgCntReqBuilder*) clearCmdId; -@end - -@interface C2MUnReadMsgCntRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * unreadListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * unreadList; -- (ClientUnReadInfo*)unreadListAtIndex:(NSUInteger)index; - -+ (C2MUnReadMsgCntRsp*) defaultInstance; -- (C2MUnReadMsgCntRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUnReadMsgCntRspBuilder*) builder; -+ (C2MUnReadMsgCntRspBuilder*) builder; -+ (C2MUnReadMsgCntRspBuilder*) builderWithPrototype:(C2MUnReadMsgCntRsp*) prototype; -- (C2MUnReadMsgCntRspBuilder*) toBuilder; - -+ (C2MUnReadMsgCntRsp*) parseFromData:(NSData*) data; -+ (C2MUnReadMsgCntRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUnReadMsgCntRspBuilder : PBGeneratedMessageBuilder { -@private - C2MUnReadMsgCntRsp* result; -} - -- (C2MUnReadMsgCntRsp*) defaultInstance; - -- (C2MUnReadMsgCntRspBuilder*) clear; -- (C2MUnReadMsgCntRspBuilder*) clone; - -- (C2MUnReadMsgCntRsp*) build; -- (C2MUnReadMsgCntRsp*) buildPartial; - -- (C2MUnReadMsgCntRspBuilder*) mergeFrom:(C2MUnReadMsgCntRsp*) other; -- (C2MUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUnReadMsgCntRspBuilder*) setCmdId:(SInt32) value; -- (C2MUnReadMsgCntRspBuilder*) clearCmdId; - -- (NSMutableArray *)unreadList; -- (ClientUnReadInfo*)unreadListAtIndex:(NSUInteger)index; -- (C2MUnReadMsgCntRspBuilder *)addUnreadList:(ClientUnReadInfo*)value; -- (C2MUnReadMsgCntRspBuilder *)setUnreadListArray:(NSArray *)array; -- (C2MUnReadMsgCntRspBuilder *)clearUnreadList; -@end - -@interface C2MUnReadMsgReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - SInt32 cmdId; - NSString* fromUserId; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; - -+ (C2MUnReadMsgReq*) defaultInstance; -- (C2MUnReadMsgReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUnReadMsgReqBuilder*) builder; -+ (C2MUnReadMsgReqBuilder*) builder; -+ (C2MUnReadMsgReqBuilder*) builderWithPrototype:(C2MUnReadMsgReq*) prototype; -- (C2MUnReadMsgReqBuilder*) toBuilder; - -+ (C2MUnReadMsgReq*) parseFromData:(NSData*) data; -+ (C2MUnReadMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUnReadMsgReqBuilder : PBGeneratedMessageBuilder { -@private - C2MUnReadMsgReq* result; -} - -- (C2MUnReadMsgReq*) defaultInstance; - -- (C2MUnReadMsgReqBuilder*) clear; -- (C2MUnReadMsgReqBuilder*) clone; - -- (C2MUnReadMsgReq*) build; -- (C2MUnReadMsgReq*) buildPartial; - -- (C2MUnReadMsgReqBuilder*) mergeFrom:(C2MUnReadMsgReq*) other; -- (C2MUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUnReadMsgReqBuilder*) setCmdId:(SInt32) value; -- (C2MUnReadMsgReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MUnReadMsgReqBuilder*) setFromUserId:(NSString*) value; -- (C2MUnReadMsgReqBuilder*) clearFromUserId; -@end - -@interface C2MHistoryMsgReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasMsgOffset_:1; - BOOL hasMsgCount_:1; - SInt32 cmdId; - NSString* fromUserId; - UInt32 msgOffset; - UInt32 msgCount; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasMsgOffset; -- (BOOL) hasMsgCount; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly) UInt32 msgOffset; -@property (readonly) UInt32 msgCount; - -+ (C2MHistoryMsgReq*) defaultInstance; -- (C2MHistoryMsgReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MHistoryMsgReqBuilder*) builder; -+ (C2MHistoryMsgReqBuilder*) builder; -+ (C2MHistoryMsgReqBuilder*) builderWithPrototype:(C2MHistoryMsgReq*) prototype; -- (C2MHistoryMsgReqBuilder*) toBuilder; - -+ (C2MHistoryMsgReq*) parseFromData:(NSData*) data; -+ (C2MHistoryMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MHistoryMsgReqBuilder : PBGeneratedMessageBuilder { -@private - C2MHistoryMsgReq* result; -} - -- (C2MHistoryMsgReq*) defaultInstance; - -- (C2MHistoryMsgReqBuilder*) clear; -- (C2MHistoryMsgReqBuilder*) clone; - -- (C2MHistoryMsgReq*) build; -- (C2MHistoryMsgReq*) buildPartial; - -- (C2MHistoryMsgReqBuilder*) mergeFrom:(C2MHistoryMsgReq*) other; -- (C2MHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MHistoryMsgReqBuilder*) setCmdId:(SInt32) value; -- (C2MHistoryMsgReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MHistoryMsgReqBuilder*) setFromUserId:(NSString*) value; -- (C2MHistoryMsgReqBuilder*) clearFromUserId; - -- (BOOL) hasMsgOffset; -- (UInt32) msgOffset; -- (C2MHistoryMsgReqBuilder*) setMsgOffset:(UInt32) value; -- (C2MHistoryMsgReqBuilder*) clearMsgOffset; - -- (BOOL) hasMsgCount; -- (UInt32) msgCount; -- (C2MHistoryMsgReqBuilder*) setMsgCount:(UInt32) value; -- (C2MHistoryMsgReqBuilder*) clearMsgCount; -@end - -@interface C2MMsgListRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasDisplayUserId_:1; - SInt32 cmdId; - NSString* displayUserId; - NSMutableArray * msgListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasDisplayUserId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* displayUserId; -@property (readonly, strong) NSArray * msgList; -- (ClientMsgInfo*)msgListAtIndex:(NSUInteger)index; - -+ (C2MMsgListRsp*) defaultInstance; -- (C2MMsgListRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MMsgListRspBuilder*) builder; -+ (C2MMsgListRspBuilder*) builder; -+ (C2MMsgListRspBuilder*) builderWithPrototype:(C2MMsgListRsp*) prototype; -- (C2MMsgListRspBuilder*) toBuilder; - -+ (C2MMsgListRsp*) parseFromData:(NSData*) data; -+ (C2MMsgListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MMsgListRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MMsgListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MMsgListRspBuilder : PBGeneratedMessageBuilder { -@private - C2MMsgListRsp* result; -} - -- (C2MMsgListRsp*) defaultInstance; - -- (C2MMsgListRspBuilder*) clear; -- (C2MMsgListRspBuilder*) clone; - -- (C2MMsgListRsp*) build; -- (C2MMsgListRsp*) buildPartial; - -- (C2MMsgListRspBuilder*) mergeFrom:(C2MMsgListRsp*) other; -- (C2MMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MMsgListRspBuilder*) setCmdId:(SInt32) value; -- (C2MMsgListRspBuilder*) clearCmdId; - -- (BOOL) hasDisplayUserId; -- (NSString*) displayUserId; -- (C2MMsgListRspBuilder*) setDisplayUserId:(NSString*) value; -- (C2MMsgListRspBuilder*) clearDisplayUserId; - -- (NSMutableArray *)msgList; -- (ClientMsgInfo*)msgListAtIndex:(NSUInteger)index; -- (C2MMsgListRspBuilder *)addMsgList:(ClientMsgInfo*)value; -- (C2MMsgListRspBuilder *)setMsgListArray:(NSArray *)array; -- (C2MMsgListRspBuilder *)clearMsgList; -@end - -@interface C2MAllUserReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MAllUserReq*) defaultInstance; -- (C2MAllUserReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MAllUserReqBuilder*) builder; -+ (C2MAllUserReqBuilder*) builder; -+ (C2MAllUserReqBuilder*) builderWithPrototype:(C2MAllUserReq*) prototype; -- (C2MAllUserReqBuilder*) toBuilder; - -+ (C2MAllUserReq*) parseFromData:(NSData*) data; -+ (C2MAllUserReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MAllUserReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MAllUserReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MAllUserReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MAllUserReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MAllUserReqBuilder : PBGeneratedMessageBuilder { -@private - C2MAllUserReq* result; -} - -- (C2MAllUserReq*) defaultInstance; - -- (C2MAllUserReqBuilder*) clear; -- (C2MAllUserReqBuilder*) clone; - -- (C2MAllUserReq*) build; -- (C2MAllUserReq*) buildPartial; - -- (C2MAllUserReqBuilder*) mergeFrom:(C2MAllUserReq*) other; -- (C2MAllUserReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MAllUserReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MAllUserReqBuilder*) setCmdId:(SInt32) value; -- (C2MAllUserReqBuilder*) clearCmdId; -@end - -@interface C2MUserInfoReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * userIdListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) PBArray * userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; - -+ (C2MUserInfoReq*) defaultInstance; -- (C2MUserInfoReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserInfoReqBuilder*) builder; -+ (C2MUserInfoReqBuilder*) builder; -+ (C2MUserInfoReqBuilder*) builderWithPrototype:(C2MUserInfoReq*) prototype; -- (C2MUserInfoReqBuilder*) toBuilder; - -+ (C2MUserInfoReq*) parseFromData:(NSData*) data; -+ (C2MUserInfoReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserInfoReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserInfoReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserInfoReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserInfoReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserInfoReqBuilder : PBGeneratedMessageBuilder { -@private - C2MUserInfoReq* result; -} - -- (C2MUserInfoReq*) defaultInstance; - -- (C2MUserInfoReqBuilder*) clear; -- (C2MUserInfoReqBuilder*) clone; - -- (C2MUserInfoReq*) build; -- (C2MUserInfoReq*) buildPartial; - -- (C2MUserInfoReqBuilder*) mergeFrom:(C2MUserInfoReq*) other; -- (C2MUserInfoReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserInfoReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserInfoReqBuilder*) setCmdId:(SInt32) value; -- (C2MUserInfoReqBuilder*) clearCmdId; - -- (NSMutableArray *)userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; -- (C2MUserInfoReqBuilder *)addUserIdList:(NSString*)value; -- (C2MUserInfoReqBuilder *)setUserIdListArray:(NSArray *)array; -- (C2MUserInfoReqBuilder *)clearUserIdList; -@end - -@interface C2MUserInfoRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * userInfoListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * userInfoList; -- (ClientUserInfo*)userInfoListAtIndex:(NSUInteger)index; - -+ (C2MUserInfoRsp*) defaultInstance; -- (C2MUserInfoRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MUserInfoRspBuilder*) builder; -+ (C2MUserInfoRspBuilder*) builder; -+ (C2MUserInfoRspBuilder*) builderWithPrototype:(C2MUserInfoRsp*) prototype; -- (C2MUserInfoRspBuilder*) toBuilder; - -+ (C2MUserInfoRsp*) parseFromData:(NSData*) data; -+ (C2MUserInfoRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserInfoRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MUserInfoRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MUserInfoRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MUserInfoRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MUserInfoRspBuilder : PBGeneratedMessageBuilder { -@private - C2MUserInfoRsp* result; -} - -- (C2MUserInfoRsp*) defaultInstance; - -- (C2MUserInfoRspBuilder*) clear; -- (C2MUserInfoRspBuilder*) clone; - -- (C2MUserInfoRsp*) build; -- (C2MUserInfoRsp*) buildPartial; - -- (C2MUserInfoRspBuilder*) mergeFrom:(C2MUserInfoRsp*) other; -- (C2MUserInfoRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MUserInfoRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MUserInfoRspBuilder*) setCmdId:(SInt32) value; -- (C2MUserInfoRspBuilder*) clearCmdId; - -- (NSMutableArray *)userInfoList; -- (ClientUserInfo*)userInfoListAtIndex:(NSUInteger)index; -- (C2MUserInfoRspBuilder *)addUserInfoList:(ClientUserInfo*)value; -- (C2MUserInfoRspBuilder *)setUserInfoListArray:(NSArray *)array; -- (C2MUserInfoRspBuilder *)clearUserInfoList; -@end - -@interface C2MDBQueryReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasQueryData_:1; - BOOL hasSeqNo_:1; - SInt32 cmdId; - NSData* queryData; - UInt32 seqNo; -} -- (BOOL) hasCmdId; -- (BOOL) hasSeqNo; -- (BOOL) hasQueryData; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 seqNo; -@property (readonly, strong) NSData* queryData; - -+ (C2MDBQueryReq*) defaultInstance; -- (C2MDBQueryReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MDBQueryReqBuilder*) builder; -+ (C2MDBQueryReqBuilder*) builder; -+ (C2MDBQueryReqBuilder*) builderWithPrototype:(C2MDBQueryReq*) prototype; -- (C2MDBQueryReqBuilder*) toBuilder; - -+ (C2MDBQueryReq*) parseFromData:(NSData*) data; -+ (C2MDBQueryReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MDBQueryReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MDBQueryReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MDBQueryReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MDBQueryReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MDBQueryReqBuilder : PBGeneratedMessageBuilder { -@private - C2MDBQueryReq* result; -} - -- (C2MDBQueryReq*) defaultInstance; - -- (C2MDBQueryReqBuilder*) clear; -- (C2MDBQueryReqBuilder*) clone; - -- (C2MDBQueryReq*) build; -- (C2MDBQueryReq*) buildPartial; - -- (C2MDBQueryReqBuilder*) mergeFrom:(C2MDBQueryReq*) other; -- (C2MDBQueryReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MDBQueryReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MDBQueryReqBuilder*) setCmdId:(SInt32) value; -- (C2MDBQueryReqBuilder*) clearCmdId; - -- (BOOL) hasSeqNo; -- (UInt32) seqNo; -- (C2MDBQueryReqBuilder*) setSeqNo:(UInt32) value; -- (C2MDBQueryReqBuilder*) clearSeqNo; - -- (BOOL) hasQueryData; -- (NSData*) queryData; -- (C2MDBQueryReqBuilder*) setQueryData:(NSData*) value; -- (C2MDBQueryReqBuilder*) clearQueryData; -@end - -@interface C2MDBQueryRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasResultData_:1; - BOOL hasSeqNo_:1; - SInt32 cmdId; - NSData* resultData; - UInt32 seqNo; -} -- (BOOL) hasCmdId; -- (BOOL) hasSeqNo; -- (BOOL) hasResultData; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 seqNo; -@property (readonly, strong) NSData* resultData; - -+ (C2MDBQueryRsp*) defaultInstance; -- (C2MDBQueryRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MDBQueryRspBuilder*) builder; -+ (C2MDBQueryRspBuilder*) builder; -+ (C2MDBQueryRspBuilder*) builderWithPrototype:(C2MDBQueryRsp*) prototype; -- (C2MDBQueryRspBuilder*) toBuilder; - -+ (C2MDBQueryRsp*) parseFromData:(NSData*) data; -+ (C2MDBQueryRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MDBQueryRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MDBQueryRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MDBQueryRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MDBQueryRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MDBQueryRspBuilder : PBGeneratedMessageBuilder { -@private - C2MDBQueryRsp* result; -} - -- (C2MDBQueryRsp*) defaultInstance; - -- (C2MDBQueryRspBuilder*) clear; -- (C2MDBQueryRspBuilder*) clone; - -- (C2MDBQueryRsp*) build; -- (C2MDBQueryRsp*) buildPartial; - -- (C2MDBQueryRspBuilder*) mergeFrom:(C2MDBQueryRsp*) other; -- (C2MDBQueryRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MDBQueryRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MDBQueryRspBuilder*) setCmdId:(SInt32) value; -- (C2MDBQueryRspBuilder*) clearCmdId; - -- (BOOL) hasSeqNo; -- (UInt32) seqNo; -- (C2MDBQueryRspBuilder*) setSeqNo:(UInt32) value; -- (C2MDBQueryRspBuilder*) clearSeqNo; - -- (BOOL) hasResultData; -- (NSData*) resultData; -- (C2MDBQueryRspBuilder*) setResultData:(NSData*) value; -- (C2MDBQueryRspBuilder*) clearResultData; -@end - -@interface C2MRemoveSessionReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasSessionId_:1; - BOOL hasSessionType_:1; - SInt32 cmdId; - NSString* sessionId; - SessionType sessionType; -} -- (BOOL) hasCmdId; -- (BOOL) hasSessionType; -- (BOOL) hasSessionId; -@property (readonly) SInt32 cmdId; -@property (readonly) SessionType sessionType; -@property (readonly, strong) NSString* sessionId; - -+ (C2MRemoveSessionReq*) defaultInstance; -- (C2MRemoveSessionReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MRemoveSessionReqBuilder*) builder; -+ (C2MRemoveSessionReqBuilder*) builder; -+ (C2MRemoveSessionReqBuilder*) builderWithPrototype:(C2MRemoveSessionReq*) prototype; -- (C2MRemoveSessionReqBuilder*) toBuilder; - -+ (C2MRemoveSessionReq*) parseFromData:(NSData*) data; -+ (C2MRemoveSessionReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MRemoveSessionReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MRemoveSessionReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MRemoveSessionReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MRemoveSessionReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MRemoveSessionReqBuilder : PBGeneratedMessageBuilder { -@private - C2MRemoveSessionReq* result; -} - -- (C2MRemoveSessionReq*) defaultInstance; - -- (C2MRemoveSessionReqBuilder*) clear; -- (C2MRemoveSessionReqBuilder*) clone; - -- (C2MRemoveSessionReq*) build; -- (C2MRemoveSessionReq*) buildPartial; - -- (C2MRemoveSessionReqBuilder*) mergeFrom:(C2MRemoveSessionReq*) other; -- (C2MRemoveSessionReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MRemoveSessionReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MRemoveSessionReqBuilder*) setCmdId:(SInt32) value; -- (C2MRemoveSessionReqBuilder*) clearCmdId; - -- (BOOL) hasSessionType; -- (SessionType) sessionType; -- (C2MRemoveSessionReqBuilder*) setSessionType:(SessionType) value; -- (C2MRemoveSessionReqBuilder*) clearSessionType; - -- (BOOL) hasSessionId; -- (NSString*) sessionId; -- (C2MRemoveSessionReqBuilder*) setSessionId:(NSString*) value; -- (C2MRemoveSessionReqBuilder*) clearSessionId; -@end - -@interface C2MRemoveSessionRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasSessionId_:1; - BOOL hasResults_:1; - BOOL hasSessionType_:1; - SInt32 cmdId; - NSString* sessionId; - UInt32 results; - SessionType sessionType; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -- (BOOL) hasSessionType; -- (BOOL) hasSessionId; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 results; -@property (readonly) SessionType sessionType; -@property (readonly, strong) NSString* sessionId; - -+ (C2MRemoveSessionRsp*) defaultInstance; -- (C2MRemoveSessionRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MRemoveSessionRspBuilder*) builder; -+ (C2MRemoveSessionRspBuilder*) builder; -+ (C2MRemoveSessionRspBuilder*) builderWithPrototype:(C2MRemoveSessionRsp*) prototype; -- (C2MRemoveSessionRspBuilder*) toBuilder; - -+ (C2MRemoveSessionRsp*) parseFromData:(NSData*) data; -+ (C2MRemoveSessionRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MRemoveSessionRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MRemoveSessionRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MRemoveSessionRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MRemoveSessionRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MRemoveSessionRspBuilder : PBGeneratedMessageBuilder { -@private - C2MRemoveSessionRsp* result; -} - -- (C2MRemoveSessionRsp*) defaultInstance; - -- (C2MRemoveSessionRspBuilder*) clear; -- (C2MRemoveSessionRspBuilder*) clone; - -- (C2MRemoveSessionRsp*) build; -- (C2MRemoveSessionRsp*) buildPartial; - -- (C2MRemoveSessionRspBuilder*) mergeFrom:(C2MRemoveSessionRsp*) other; -- (C2MRemoveSessionRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MRemoveSessionRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MRemoveSessionRspBuilder*) setCmdId:(SInt32) value; -- (C2MRemoveSessionRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (UInt32) results; -- (C2MRemoveSessionRspBuilder*) setResults:(UInt32) value; -- (C2MRemoveSessionRspBuilder*) clearResults; - -- (BOOL) hasSessionType; -- (SessionType) sessionType; -- (C2MRemoveSessionRspBuilder*) setSessionType:(SessionType) value; -- (C2MRemoveSessionRspBuilder*) clearSessionType; - -- (BOOL) hasSessionId; -- (NSString*) sessionId; -- (C2MRemoveSessionRspBuilder*) setSessionId:(NSString*) value; -- (C2MRemoveSessionRspBuilder*) clearSessionId; -@end - -@interface C2MServiceSetting : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasKey_:1; - BOOL hasValue_:1; - SInt32 cmdId; - UInt32 key; - UInt32 value; -} -- (BOOL) hasCmdId; -- (BOOL) hasKey; -- (BOOL) hasValue; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 key; -@property (readonly) UInt32 value; - -+ (C2MServiceSetting*) defaultInstance; -- (C2MServiceSetting*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MServiceSettingBuilder*) builder; -+ (C2MServiceSettingBuilder*) builder; -+ (C2MServiceSettingBuilder*) builderWithPrototype:(C2MServiceSetting*) prototype; -- (C2MServiceSettingBuilder*) toBuilder; - -+ (C2MServiceSetting*) parseFromData:(NSData*) data; -+ (C2MServiceSetting*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MServiceSetting*) parseFromInputStream:(NSInputStream*) input; -+ (C2MServiceSetting*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MServiceSetting*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MServiceSetting*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MServiceSettingBuilder : PBGeneratedMessageBuilder { -@private - C2MServiceSetting* result; -} - -- (C2MServiceSetting*) defaultInstance; - -- (C2MServiceSettingBuilder*) clear; -- (C2MServiceSettingBuilder*) clone; - -- (C2MServiceSetting*) build; -- (C2MServiceSetting*) buildPartial; - -- (C2MServiceSettingBuilder*) mergeFrom:(C2MServiceSetting*) other; -- (C2MServiceSettingBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MServiceSettingBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MServiceSettingBuilder*) setCmdId:(SInt32) value; -- (C2MServiceSettingBuilder*) clearCmdId; - -- (BOOL) hasKey; -- (UInt32) key; -- (C2MServiceSettingBuilder*) setKey:(UInt32) value; -- (C2MServiceSettingBuilder*) clearKey; - -- (BOOL) hasValue; -- (UInt32) value; -- (C2MServiceSettingBuilder*) setValue:(UInt32) value; -- (C2MServiceSettingBuilder*) clearValue; -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.m b/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.m deleted file mode 100644 index 1be43fb..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServBase.pb.m +++ /dev/null @@ -1,10252 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "IMClient2ServBase.pb.h" -// @@protoc_insertion_point(imports) - -@implementation Imclient2ServBaseRoot -static PBExtensionRegistry* extensionRegistry = nil; -+ (PBExtensionRegistry*) extensionRegistry { - return extensionRegistry; -} - -+ (void) initialize { - if (self == [Imclient2ServBaseRoot class]) { - PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry]; - [self registerAllExtensions:registry]; - [ImbaseDefineRoot registerAllExtensions:registry]; - extensionRegistry = registry; - } -} -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry { -} -@end - -@interface C2LMsgServReq () -@property SInt32 cmdId; -@property UInt32 userType; -@end - -@implementation C2LMsgServReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserType { - return !!hasUserType_; -} -- (void) setHasUserType:(BOOL) value_ { - hasUserType_ = !!value_; -} -@synthesize userType; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 1; - self.userType = 0; - } - return self; -} -static C2LMsgServReq* defaultC2LMsgServReqInstance = nil; -+ (void) initialize { - if (self == [C2LMsgServReq class]) { - defaultC2LMsgServReqInstance = [[C2LMsgServReq alloc] init]; - } -} -+ (C2LMsgServReq*) defaultInstance { - return defaultC2LMsgServReqInstance; -} -- (C2LMsgServReq*) defaultInstance { - return defaultC2LMsgServReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserType) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserType) { - [output writeUInt32:2 value:self.userType]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserType) { - size_ += computeUInt32Size(2, self.userType); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2LMsgServReq*) parseFromData:(NSData*) data { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromData:data] build]; -} -+ (C2LMsgServReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServReq*) parseFromInputStream:(NSInputStream*) input { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromInputStream:input] build]; -} -+ (C2LMsgServReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2LMsgServReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServReq*)[[[C2LMsgServReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServReqBuilder*) builder { - return [[C2LMsgServReqBuilder alloc] init]; -} -+ (C2LMsgServReqBuilder*) builderWithPrototype:(C2LMsgServReq*) prototype { - return [[C2LMsgServReq builder] mergeFrom:prototype]; -} -- (C2LMsgServReqBuilder*) builder { - return [C2LMsgServReq builder]; -} -- (C2LMsgServReqBuilder*) toBuilder { - return [C2LMsgServReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserType) { - [output appendFormat:@"%@%@: %@\n", indent, @"userType", [NSNumber numberWithInteger:self.userType]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2LMsgServReq class]]) { - return NO; - } - C2LMsgServReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserType == otherMessage.hasUserType && - (!self.hasUserType || self.userType == otherMessage.userType) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.userType] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2LMsgServReqBuilder() -@property (strong) C2LMsgServReq* result; -@end - -@implementation C2LMsgServReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2LMsgServReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2LMsgServReqBuilder*) clear { - self.result = [[C2LMsgServReq alloc] init]; - return self; -} -- (C2LMsgServReqBuilder*) clone { - return [C2LMsgServReq builderWithPrototype:result]; -} -- (C2LMsgServReq*) defaultInstance { - return [C2LMsgServReq defaultInstance]; -} -- (C2LMsgServReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2LMsgServReq*) buildPartial { - C2LMsgServReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2LMsgServReqBuilder*) mergeFrom:(C2LMsgServReq*) other { - if (other == [C2LMsgServReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserType) { - [self setUserType:other.userType]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2LMsgServReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2LMsgServReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setUserType:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2LMsgServReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2LMsgServReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 1; - return self; -} -- (BOOL) hasUserType { - return result.hasUserType; -} -- (UInt32) userType { - return result.userType; -} -- (C2LMsgServReqBuilder*) setUserType:(UInt32) value { - result.hasUserType = YES; - result.userType = value; - return self; -} -- (C2LMsgServReqBuilder*) clearUserType { - result.hasUserType = NO; - result.userType = 0; - return self; -} -@end - -@interface C2LMsgServRsp () -@property SInt32 cmdId; -@property ResultType results; -@property (strong) NSMutableArray * ipAddrListArray; -@end - -@implementation C2LMsgServRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -@synthesize ipAddrListArray; -@dynamic ipAddrList; -- (void) dealloc { - self.ipAddrListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 2; - self.results = ResultTypeRefuseReasonNone; - } - return self; -} -static C2LMsgServRsp* defaultC2LMsgServRspInstance = nil; -+ (void) initialize { - if (self == [C2LMsgServRsp class]) { - defaultC2LMsgServRspInstance = [[C2LMsgServRsp alloc] init]; - } -} -+ (C2LMsgServRsp*) defaultInstance { - return defaultC2LMsgServRspInstance; -} -- (C2LMsgServRsp*) defaultInstance { - return defaultC2LMsgServRspInstance; -} -- (NSArray *)ipAddrList { - return ipAddrListArray; -} -- (IpAddr*)ipAddrListAtIndex:(NSUInteger)index { - return [ipAddrListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - __block BOOL isInitipAddrList = YES; - [self.ipAddrList enumerateObjectsUsingBlock:^(IpAddr *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitipAddrList = NO; - *stop = YES; - } - }]; - if (!isInitipAddrList) return isInitipAddrList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeEnum:2 value:self.results]; - } - [self.ipAddrListArray enumerateObjectsUsingBlock:^(IpAddr *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:3 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeEnumSize(2, self.results); - } - [self.ipAddrListArray enumerateObjectsUsingBlock:^(IpAddr *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(3, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2LMsgServRsp*) parseFromData:(NSData*) data { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromData:data] build]; -} -+ (C2LMsgServRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromInputStream:input] build]; -} -+ (C2LMsgServRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2LMsgServRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2LMsgServRsp*)[[[C2LMsgServRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2LMsgServRspBuilder*) builder { - return [[C2LMsgServRspBuilder alloc] init]; -} -+ (C2LMsgServRspBuilder*) builderWithPrototype:(C2LMsgServRsp*) prototype { - return [[C2LMsgServRsp builder] mergeFrom:prototype]; -} -- (C2LMsgServRspBuilder*) builder { - return [C2LMsgServRsp builder]; -} -- (C2LMsgServRspBuilder*) toBuilder { - return [C2LMsgServRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %d\n", indent, @"results", self.results]; - } - [self.ipAddrListArray enumerateObjectsUsingBlock:^(IpAddr *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"ipAddrList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2LMsgServRsp class]]) { - return NO; - } - C2LMsgServRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - [self.ipAddrListArray isEqualToArray:otherMessage.ipAddrListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + self.results; - } - [self.ipAddrListArray enumerateObjectsUsingBlock:^(IpAddr *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2LMsgServRspBuilder() -@property (strong) C2LMsgServRsp* result; -@end - -@implementation C2LMsgServRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2LMsgServRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2LMsgServRspBuilder*) clear { - self.result = [[C2LMsgServRsp alloc] init]; - return self; -} -- (C2LMsgServRspBuilder*) clone { - return [C2LMsgServRsp builderWithPrototype:result]; -} -- (C2LMsgServRsp*) defaultInstance { - return [C2LMsgServRsp defaultInstance]; -} -- (C2LMsgServRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2LMsgServRsp*) buildPartial { - C2LMsgServRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2LMsgServRspBuilder*) mergeFrom:(C2LMsgServRsp*) other { - if (other == [C2LMsgServRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.ipAddrListArray.count > 0) { - if (result.ipAddrListArray == nil) { - result.ipAddrListArray = [[NSMutableArray alloc] initWithArray:other.ipAddrListArray]; - } else { - [result.ipAddrListArray addObjectsFromArray:other.ipAddrListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2LMsgServRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2LMsgServRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - ResultType value = (ResultType)[input readEnum]; - if (ResultTypeIsValidValue(value)) { - [self setResults:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - case 26: { - IpAddrBuilder* subBuilder = [IpAddr builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addIpAddrList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2LMsgServRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2LMsgServRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 2; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (ResultType) results { - return result.results; -} -- (C2LMsgServRspBuilder*) setResults:(ResultType) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2LMsgServRspBuilder*) clearResults { - result.hasResults = NO; - result.results = ResultTypeRefuseReasonNone; - return self; -} -- (NSMutableArray *)ipAddrList { - return result.ipAddrListArray; -} -- (IpAddr*)ipAddrListAtIndex:(NSUInteger)index { - return [result ipAddrListAtIndex:index]; -} -- (C2LMsgServRspBuilder *)addIpAddrList:(IpAddr*)value { - if (result.ipAddrListArray == nil) { - result.ipAddrListArray = [[NSMutableArray alloc]init]; - } - [result.ipAddrListArray addObject:value]; - return self; -} -- (C2LMsgServRspBuilder *)setIpAddrListArray:(NSArray *)array { - result.ipAddrListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2LMsgServRspBuilder *)clearIpAddrList { - result.ipAddrListArray = nil; - return self; -} -@end - -@interface C2MHeartBeatReq () -@property SInt32 cmdId; -@end - -@implementation C2MHeartBeatReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 3; - } - return self; -} -static C2MHeartBeatReq* defaultC2MHeartBeatReqInstance = nil; -+ (void) initialize { - if (self == [C2MHeartBeatReq class]) { - defaultC2MHeartBeatReqInstance = [[C2MHeartBeatReq alloc] init]; - } -} -+ (C2MHeartBeatReq*) defaultInstance { - return defaultC2MHeartBeatReqInstance; -} -- (C2MHeartBeatReq*) defaultInstance { - return defaultC2MHeartBeatReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MHeartBeatReq*) parseFromData:(NSData*) data { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromData:data] build]; -} -+ (C2MHeartBeatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromInputStream:input] build]; -} -+ (C2MHeartBeatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatReq*)[[[C2MHeartBeatReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatReqBuilder*) builder { - return [[C2MHeartBeatReqBuilder alloc] init]; -} -+ (C2MHeartBeatReqBuilder*) builderWithPrototype:(C2MHeartBeatReq*) prototype { - return [[C2MHeartBeatReq builder] mergeFrom:prototype]; -} -- (C2MHeartBeatReqBuilder*) builder { - return [C2MHeartBeatReq builder]; -} -- (C2MHeartBeatReqBuilder*) toBuilder { - return [C2MHeartBeatReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MHeartBeatReq class]]) { - return NO; - } - C2MHeartBeatReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MHeartBeatReqBuilder() -@property (strong) C2MHeartBeatReq* result; -@end - -@implementation C2MHeartBeatReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MHeartBeatReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MHeartBeatReqBuilder*) clear { - self.result = [[C2MHeartBeatReq alloc] init]; - return self; -} -- (C2MHeartBeatReqBuilder*) clone { - return [C2MHeartBeatReq builderWithPrototype:result]; -} -- (C2MHeartBeatReq*) defaultInstance { - return [C2MHeartBeatReq defaultInstance]; -} -- (C2MHeartBeatReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MHeartBeatReq*) buildPartial { - C2MHeartBeatReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MHeartBeatReqBuilder*) mergeFrom:(C2MHeartBeatReq*) other { - if (other == [C2MHeartBeatReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MHeartBeatReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MHeartBeatReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 3; - return self; -} -@end - -@interface C2MHeartBeatRsp () -@property SInt32 cmdId; -@end - -@implementation C2MHeartBeatRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 4; - } - return self; -} -static C2MHeartBeatRsp* defaultC2MHeartBeatRspInstance = nil; -+ (void) initialize { - if (self == [C2MHeartBeatRsp class]) { - defaultC2MHeartBeatRspInstance = [[C2MHeartBeatRsp alloc] init]; - } -} -+ (C2MHeartBeatRsp*) defaultInstance { - return defaultC2MHeartBeatRspInstance; -} -- (C2MHeartBeatRsp*) defaultInstance { - return defaultC2MHeartBeatRspInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MHeartBeatRsp*) parseFromData:(NSData*) data { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromData:data] build]; -} -+ (C2MHeartBeatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHeartBeatRsp*)[[[C2MHeartBeatRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHeartBeatRspBuilder*) builder { - return [[C2MHeartBeatRspBuilder alloc] init]; -} -+ (C2MHeartBeatRspBuilder*) builderWithPrototype:(C2MHeartBeatRsp*) prototype { - return [[C2MHeartBeatRsp builder] mergeFrom:prototype]; -} -- (C2MHeartBeatRspBuilder*) builder { - return [C2MHeartBeatRsp builder]; -} -- (C2MHeartBeatRspBuilder*) toBuilder { - return [C2MHeartBeatRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MHeartBeatRsp class]]) { - return NO; - } - C2MHeartBeatRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MHeartBeatRspBuilder() -@property (strong) C2MHeartBeatRsp* result; -@end - -@implementation C2MHeartBeatRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MHeartBeatRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MHeartBeatRspBuilder*) clear { - self.result = [[C2MHeartBeatRsp alloc] init]; - return self; -} -- (C2MHeartBeatRspBuilder*) clone { - return [C2MHeartBeatRsp builderWithPrototype:result]; -} -- (C2MHeartBeatRsp*) defaultInstance { - return [C2MHeartBeatRsp defaultInstance]; -} -- (C2MHeartBeatRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MHeartBeatRsp*) buildPartial { - C2MHeartBeatRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MHeartBeatRspBuilder*) mergeFrom:(C2MHeartBeatRsp*) other { - if (other == [C2MHeartBeatRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MHeartBeatRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MHeartBeatRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 4; - return self; -} -@end - -@interface C2MLoginReq () -@property SInt32 cmdId; -@property (strong) NSString* userId; -@property (strong) NSString* uuid; -@property UInt32 onlineStatus; -@property (strong) NSString* clientVersion; -@end - -@implementation C2MLoginReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasUuid { - return !!hasUuid_; -} -- (void) setHasUuid:(BOOL) value_ { - hasUuid_ = !!value_; -} -@synthesize uuid; -- (BOOL) hasOnlineStatus { - return !!hasOnlineStatus_; -} -- (void) setHasOnlineStatus:(BOOL) value_ { - hasOnlineStatus_ = !!value_; -} -@synthesize onlineStatus; -- (BOOL) hasClientVersion { - return !!hasClientVersion_; -} -- (void) setHasClientVersion:(BOOL) value_ { - hasClientVersion_ = !!value_; -} -@synthesize clientVersion; -- (void) dealloc { - self.userId = nil; - self.uuid = nil; - self.clientVersion = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 5; - self.userId = @""; - self.uuid = @""; - self.onlineStatus = 0; - self.clientVersion = @""; - } - return self; -} -static C2MLoginReq* defaultC2MLoginReqInstance = nil; -+ (void) initialize { - if (self == [C2MLoginReq class]) { - defaultC2MLoginReqInstance = [[C2MLoginReq alloc] init]; - } -} -+ (C2MLoginReq*) defaultInstance { - return defaultC2MLoginReqInstance; -} -- (C2MLoginReq*) defaultInstance { - return defaultC2MLoginReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasUuid) { - return NO; - } - if (!self.hasOnlineStatus) { - return NO; - } - if (!self.hasClientVersion) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserId) { - [output writeString:2 value:self.userId]; - } - if (self.hasUuid) { - [output writeString:3 value:self.uuid]; - } - if (self.hasOnlineStatus) { - [output writeUInt32:4 value:self.onlineStatus]; - } - if (self.hasClientVersion) { - [output writeString:5 value:self.clientVersion]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserId) { - size_ += computeStringSize(2, self.userId); - } - if (self.hasUuid) { - size_ += computeStringSize(3, self.uuid); - } - if (self.hasOnlineStatus) { - size_ += computeUInt32Size(4, self.onlineStatus); - } - if (self.hasClientVersion) { - size_ += computeStringSize(5, self.clientVersion); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MLoginReq*) parseFromData:(NSData*) data { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromData:data] build]; -} -+ (C2MLoginReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromInputStream:input] build]; -} -+ (C2MLoginReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginReq*)[[[C2MLoginReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginReqBuilder*) builder { - return [[C2MLoginReqBuilder alloc] init]; -} -+ (C2MLoginReqBuilder*) builderWithPrototype:(C2MLoginReq*) prototype { - return [[C2MLoginReq builder] mergeFrom:prototype]; -} -- (C2MLoginReqBuilder*) builder { - return [C2MLoginReq builder]; -} -- (C2MLoginReqBuilder*) toBuilder { - return [C2MLoginReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasUuid) { - [output appendFormat:@"%@%@: %@\n", indent, @"uuid", self.uuid]; - } - if (self.hasOnlineStatus) { - [output appendFormat:@"%@%@: %@\n", indent, @"onlineStatus", [NSNumber numberWithInteger:self.onlineStatus]]; - } - if (self.hasClientVersion) { - [output appendFormat:@"%@%@: %@\n", indent, @"clientVersion", self.clientVersion]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MLoginReq class]]) { - return NO; - } - C2MLoginReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasUuid == otherMessage.hasUuid && - (!self.hasUuid || [self.uuid isEqual:otherMessage.uuid]) && - self.hasOnlineStatus == otherMessage.hasOnlineStatus && - (!self.hasOnlineStatus || self.onlineStatus == otherMessage.onlineStatus) && - self.hasClientVersion == otherMessage.hasClientVersion && - (!self.hasClientVersion || [self.clientVersion isEqual:otherMessage.clientVersion]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasUuid) { - hashCode = hashCode * 31 + [self.uuid hash]; - } - if (self.hasOnlineStatus) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.onlineStatus] hash]; - } - if (self.hasClientVersion) { - hashCode = hashCode * 31 + [self.clientVersion hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MLoginReqBuilder() -@property (strong) C2MLoginReq* result; -@end - -@implementation C2MLoginReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MLoginReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MLoginReqBuilder*) clear { - self.result = [[C2MLoginReq alloc] init]; - return self; -} -- (C2MLoginReqBuilder*) clone { - return [C2MLoginReq builderWithPrototype:result]; -} -- (C2MLoginReq*) defaultInstance { - return [C2MLoginReq defaultInstance]; -} -- (C2MLoginReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MLoginReq*) buildPartial { - C2MLoginReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MLoginReqBuilder*) mergeFrom:(C2MLoginReq*) other { - if (other == [C2MLoginReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasUuid) { - [self setUuid:other.uuid]; - } - if (other.hasOnlineStatus) { - [self setOnlineStatus:other.onlineStatus]; - } - if (other.hasClientVersion) { - [self setClientVersion:other.clientVersion]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setUserId:[input readString]]; - break; - } - case 26: { - [self setUuid:[input readString]]; - break; - } - case 32: { - [self setOnlineStatus:[input readUInt32]]; - break; - } - case 42: { - [self setClientVersion:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MLoginReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MLoginReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 5; - return self; -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (C2MLoginReqBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (C2MLoginReqBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasUuid { - return result.hasUuid; -} -- (NSString*) uuid { - return result.uuid; -} -- (C2MLoginReqBuilder*) setUuid:(NSString*) value { - result.hasUuid = YES; - result.uuid = value; - return self; -} -- (C2MLoginReqBuilder*) clearUuid { - result.hasUuid = NO; - result.uuid = @""; - return self; -} -- (BOOL) hasOnlineStatus { - return result.hasOnlineStatus; -} -- (UInt32) onlineStatus { - return result.onlineStatus; -} -- (C2MLoginReqBuilder*) setOnlineStatus:(UInt32) value { - result.hasOnlineStatus = YES; - result.onlineStatus = value; - return self; -} -- (C2MLoginReqBuilder*) clearOnlineStatus { - result.hasOnlineStatus = NO; - result.onlineStatus = 0; - return self; -} -- (BOOL) hasClientVersion { - return result.hasClientVersion; -} -- (NSString*) clientVersion { - return result.clientVersion; -} -- (C2MLoginReqBuilder*) setClientVersion:(NSString*) value { - result.hasClientVersion = YES; - result.clientVersion = value; - return self; -} -- (C2MLoginReqBuilder*) clearClientVersion { - result.hasClientVersion = NO; - result.clientVersion = @""; - return self; -} -@end - -@interface C2MLoginRsp () -@property SInt32 cmdId; -@property ResultType results; -@property UInt32 serverTime; -@property UInt32 onlineStatus; -@property (strong) NSString* name; -@property (strong) NSString* nickName; -@property (strong) NSString* avatarUrl; -@property UserType userType; -@end - -@implementation C2MLoginRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (BOOL) hasServerTime { - return !!hasServerTime_; -} -- (void) setHasServerTime:(BOOL) value_ { - hasServerTime_ = !!value_; -} -@synthesize serverTime; -- (BOOL) hasOnlineStatus { - return !!hasOnlineStatus_; -} -- (void) setHasOnlineStatus:(BOOL) value_ { - hasOnlineStatus_ = !!value_; -} -@synthesize onlineStatus; -- (BOOL) hasName { - return !!hasName_; -} -- (void) setHasName:(BOOL) value_ { - hasName_ = !!value_; -} -@synthesize name; -- (BOOL) hasNickName { - return !!hasNickName_; -} -- (void) setHasNickName:(BOOL) value_ { - hasNickName_ = !!value_; -} -@synthesize nickName; -- (BOOL) hasAvatarUrl { - return !!hasAvatarUrl_; -} -- (void) setHasAvatarUrl:(BOOL) value_ { - hasAvatarUrl_ = !!value_; -} -@synthesize avatarUrl; -- (BOOL) hasUserType { - return !!hasUserType_; -} -- (void) setHasUserType:(BOOL) value_ { - hasUserType_ = !!value_; -} -@synthesize userType; -- (void) dealloc { - self.name = nil; - self.nickName = nil; - self.avatarUrl = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 6; - self.results = ResultTypeRefuseReasonNone; - self.serverTime = 0; - self.onlineStatus = 0; - self.name = @""; - self.nickName = @""; - self.avatarUrl = @""; - self.userType = UserTypeUserTypeNormal; - } - return self; -} -static C2MLoginRsp* defaultC2MLoginRspInstance = nil; -+ (void) initialize { - if (self == [C2MLoginRsp class]) { - defaultC2MLoginRspInstance = [[C2MLoginRsp alloc] init]; - } -} -+ (C2MLoginRsp*) defaultInstance { - return defaultC2MLoginRspInstance; -} -- (C2MLoginRsp*) defaultInstance { - return defaultC2MLoginRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - if (!self.hasServerTime) { - return NO; - } - if (!self.hasOnlineStatus) { - return NO; - } - if (!self.hasName) { - return NO; - } - if (!self.hasNickName) { - return NO; - } - if (!self.hasAvatarUrl) { - return NO; - } - if (!self.hasUserType) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeEnum:2 value:self.results]; - } - if (self.hasServerTime) { - [output writeUInt32:3 value:self.serverTime]; - } - if (self.hasOnlineStatus) { - [output writeUInt32:4 value:self.onlineStatus]; - } - if (self.hasName) { - [output writeString:5 value:self.name]; - } - if (self.hasNickName) { - [output writeString:6 value:self.nickName]; - } - if (self.hasAvatarUrl) { - [output writeString:7 value:self.avatarUrl]; - } - if (self.hasUserType) { - [output writeEnum:8 value:self.userType]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeEnumSize(2, self.results); - } - if (self.hasServerTime) { - size_ += computeUInt32Size(3, self.serverTime); - } - if (self.hasOnlineStatus) { - size_ += computeUInt32Size(4, self.onlineStatus); - } - if (self.hasName) { - size_ += computeStringSize(5, self.name); - } - if (self.hasNickName) { - size_ += computeStringSize(6, self.nickName); - } - if (self.hasAvatarUrl) { - size_ += computeStringSize(7, self.avatarUrl); - } - if (self.hasUserType) { - size_ += computeEnumSize(8, self.userType); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MLoginRsp*) parseFromData:(NSData*) data { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromData:data] build]; -} -+ (C2MLoginRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MLoginRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MLoginRsp*)[[[C2MLoginRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MLoginRspBuilder*) builder { - return [[C2MLoginRspBuilder alloc] init]; -} -+ (C2MLoginRspBuilder*) builderWithPrototype:(C2MLoginRsp*) prototype { - return [[C2MLoginRsp builder] mergeFrom:prototype]; -} -- (C2MLoginRspBuilder*) builder { - return [C2MLoginRsp builder]; -} -- (C2MLoginRspBuilder*) toBuilder { - return [C2MLoginRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %d\n", indent, @"results", self.results]; - } - if (self.hasServerTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"serverTime", [NSNumber numberWithInteger:self.serverTime]]; - } - if (self.hasOnlineStatus) { - [output appendFormat:@"%@%@: %@\n", indent, @"onlineStatus", [NSNumber numberWithInteger:self.onlineStatus]]; - } - if (self.hasName) { - [output appendFormat:@"%@%@: %@\n", indent, @"name", self.name]; - } - if (self.hasNickName) { - [output appendFormat:@"%@%@: %@\n", indent, @"nickName", self.nickName]; - } - if (self.hasAvatarUrl) { - [output appendFormat:@"%@%@: %@\n", indent, @"avatarUrl", self.avatarUrl]; - } - if (self.hasUserType) { - [output appendFormat:@"%@%@: %d\n", indent, @"userType", self.userType]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MLoginRsp class]]) { - return NO; - } - C2MLoginRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - self.hasServerTime == otherMessage.hasServerTime && - (!self.hasServerTime || self.serverTime == otherMessage.serverTime) && - self.hasOnlineStatus == otherMessage.hasOnlineStatus && - (!self.hasOnlineStatus || self.onlineStatus == otherMessage.onlineStatus) && - self.hasName == otherMessage.hasName && - (!self.hasName || [self.name isEqual:otherMessage.name]) && - self.hasNickName == otherMessage.hasNickName && - (!self.hasNickName || [self.nickName isEqual:otherMessage.nickName]) && - self.hasAvatarUrl == otherMessage.hasAvatarUrl && - (!self.hasAvatarUrl || [self.avatarUrl isEqual:otherMessage.avatarUrl]) && - self.hasUserType == otherMessage.hasUserType && - (!self.hasUserType || self.userType == otherMessage.userType) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + self.results; - } - if (self.hasServerTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.serverTime] hash]; - } - if (self.hasOnlineStatus) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.onlineStatus] hash]; - } - if (self.hasName) { - hashCode = hashCode * 31 + [self.name hash]; - } - if (self.hasNickName) { - hashCode = hashCode * 31 + [self.nickName hash]; - } - if (self.hasAvatarUrl) { - hashCode = hashCode * 31 + [self.avatarUrl hash]; - } - if (self.hasUserType) { - hashCode = hashCode * 31 + self.userType; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MLoginRspBuilder() -@property (strong) C2MLoginRsp* result; -@end - -@implementation C2MLoginRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MLoginRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MLoginRspBuilder*) clear { - self.result = [[C2MLoginRsp alloc] init]; - return self; -} -- (C2MLoginRspBuilder*) clone { - return [C2MLoginRsp builderWithPrototype:result]; -} -- (C2MLoginRsp*) defaultInstance { - return [C2MLoginRsp defaultInstance]; -} -- (C2MLoginRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MLoginRsp*) buildPartial { - C2MLoginRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MLoginRspBuilder*) mergeFrom:(C2MLoginRsp*) other { - if (other == [C2MLoginRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.hasServerTime) { - [self setServerTime:other.serverTime]; - } - if (other.hasOnlineStatus) { - [self setOnlineStatus:other.onlineStatus]; - } - if (other.hasName) { - [self setName:other.name]; - } - if (other.hasNickName) { - [self setNickName:other.nickName]; - } - if (other.hasAvatarUrl) { - [self setAvatarUrl:other.avatarUrl]; - } - if (other.hasUserType) { - [self setUserType:other.userType]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - ResultType value = (ResultType)[input readEnum]; - if (ResultTypeIsValidValue(value)) { - [self setResults:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - case 24: { - [self setServerTime:[input readUInt32]]; - break; - } - case 32: { - [self setOnlineStatus:[input readUInt32]]; - break; - } - case 42: { - [self setName:[input readString]]; - break; - } - case 50: { - [self setNickName:[input readString]]; - break; - } - case 58: { - [self setAvatarUrl:[input readString]]; - break; - } - case 64: { - UserType value = (UserType)[input readEnum]; - if (UserTypeIsValidValue(value)) { - [self setUserType:value]; - } else { - [unknownFields mergeVarintField:8 value:value]; - } - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MLoginRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MLoginRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 6; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (ResultType) results { - return result.results; -} -- (C2MLoginRspBuilder*) setResults:(ResultType) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2MLoginRspBuilder*) clearResults { - result.hasResults = NO; - result.results = ResultTypeRefuseReasonNone; - return self; -} -- (BOOL) hasServerTime { - return result.hasServerTime; -} -- (UInt32) serverTime { - return result.serverTime; -} -- (C2MLoginRspBuilder*) setServerTime:(UInt32) value { - result.hasServerTime = YES; - result.serverTime = value; - return self; -} -- (C2MLoginRspBuilder*) clearServerTime { - result.hasServerTime = NO; - result.serverTime = 0; - return self; -} -- (BOOL) hasOnlineStatus { - return result.hasOnlineStatus; -} -- (UInt32) onlineStatus { - return result.onlineStatus; -} -- (C2MLoginRspBuilder*) setOnlineStatus:(UInt32) value { - result.hasOnlineStatus = YES; - result.onlineStatus = value; - return self; -} -- (C2MLoginRspBuilder*) clearOnlineStatus { - result.hasOnlineStatus = NO; - result.onlineStatus = 0; - return self; -} -- (BOOL) hasName { - return result.hasName; -} -- (NSString*) name { - return result.name; -} -- (C2MLoginRspBuilder*) setName:(NSString*) value { - result.hasName = YES; - result.name = value; - return self; -} -- (C2MLoginRspBuilder*) clearName { - result.hasName = NO; - result.name = @""; - return self; -} -- (BOOL) hasNickName { - return result.hasNickName; -} -- (NSString*) nickName { - return result.nickName; -} -- (C2MLoginRspBuilder*) setNickName:(NSString*) value { - result.hasNickName = YES; - result.nickName = value; - return self; -} -- (C2MLoginRspBuilder*) clearNickName { - result.hasNickName = NO; - result.nickName = @""; - return self; -} -- (BOOL) hasAvatarUrl { - return result.hasAvatarUrl; -} -- (NSString*) avatarUrl { - return result.avatarUrl; -} -- (C2MLoginRspBuilder*) setAvatarUrl:(NSString*) value { - result.hasAvatarUrl = YES; - result.avatarUrl = value; - return self; -} -- (C2MLoginRspBuilder*) clearAvatarUrl { - result.hasAvatarUrl = NO; - result.avatarUrl = @""; - return self; -} -- (BOOL) hasUserType { - return result.hasUserType; -} -- (UserType) userType { - return result.userType; -} -- (C2MLoginRspBuilder*) setUserType:(UserType) value { - result.hasUserType = YES; - result.userType = value; - return self; -} -- (C2MLoginRspBuilder*) clearUserType { - result.hasUserType = NO; - result.userType = UserTypeUserTypeNormal; - return self; -} -@end - -@interface M2CKickUserNotify () -@property SInt32 cmdId; -@property (strong) NSString* userId; -@property KickReasonType kickReason; -@end - -@implementation M2CKickUserNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasKickReason { - return !!hasKickReason_; -} -- (void) setHasKickReason:(BOOL) value_ { - hasKickReason_ = !!value_; -} -@synthesize kickReason; -- (void) dealloc { - self.userId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 7; - self.userId = @""; - self.kickReason = KickReasonTypeKickReasonDuplicateUser; - } - return self; -} -static M2CKickUserNotify* defaultM2CKickUserNotifyInstance = nil; -+ (void) initialize { - if (self == [M2CKickUserNotify class]) { - defaultM2CKickUserNotifyInstance = [[M2CKickUserNotify alloc] init]; - } -} -+ (M2CKickUserNotify*) defaultInstance { - return defaultM2CKickUserNotifyInstance; -} -- (M2CKickUserNotify*) defaultInstance { - return defaultM2CKickUserNotifyInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasKickReason) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserId) { - [output writeString:2 value:self.userId]; - } - if (self.hasKickReason) { - [output writeEnum:3 value:self.kickReason]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserId) { - size_ += computeStringSize(2, self.userId); - } - if (self.hasKickReason) { - size_ += computeEnumSize(3, self.kickReason); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (M2CKickUserNotify*) parseFromData:(NSData*) data { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromData:data] build]; -} -+ (M2CKickUserNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (M2CKickUserNotify*) parseFromInputStream:(NSInputStream*) input { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromInputStream:input] build]; -} -+ (M2CKickUserNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CKickUserNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (M2CKickUserNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CKickUserNotify*)[[[M2CKickUserNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CKickUserNotifyBuilder*) builder { - return [[M2CKickUserNotifyBuilder alloc] init]; -} -+ (M2CKickUserNotifyBuilder*) builderWithPrototype:(M2CKickUserNotify*) prototype { - return [[M2CKickUserNotify builder] mergeFrom:prototype]; -} -- (M2CKickUserNotifyBuilder*) builder { - return [M2CKickUserNotify builder]; -} -- (M2CKickUserNotifyBuilder*) toBuilder { - return [M2CKickUserNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasKickReason) { - [output appendFormat:@"%@%@: %d\n", indent, @"kickReason", self.kickReason]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[M2CKickUserNotify class]]) { - return NO; - } - M2CKickUserNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasKickReason == otherMessage.hasKickReason && - (!self.hasKickReason || self.kickReason == otherMessage.kickReason) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasKickReason) { - hashCode = hashCode * 31 + self.kickReason; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface M2CKickUserNotifyBuilder() -@property (strong) M2CKickUserNotify* result; -@end - -@implementation M2CKickUserNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[M2CKickUserNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (M2CKickUserNotifyBuilder*) clear { - self.result = [[M2CKickUserNotify alloc] init]; - return self; -} -- (M2CKickUserNotifyBuilder*) clone { - return [M2CKickUserNotify builderWithPrototype:result]; -} -- (M2CKickUserNotify*) defaultInstance { - return [M2CKickUserNotify defaultInstance]; -} -- (M2CKickUserNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (M2CKickUserNotify*) buildPartial { - M2CKickUserNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (M2CKickUserNotifyBuilder*) mergeFrom:(M2CKickUserNotify*) other { - if (other == [M2CKickUserNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasKickReason) { - [self setKickReason:other.kickReason]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (M2CKickUserNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (M2CKickUserNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setUserId:[input readString]]; - break; - } - case 24: { - KickReasonType value = (KickReasonType)[input readEnum]; - if (KickReasonTypeIsValidValue(value)) { - [self setKickReason:value]; - } else { - [unknownFields mergeVarintField:3 value:value]; - } - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (M2CKickUserNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (M2CKickUserNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 7; - return self; -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (M2CKickUserNotifyBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (M2CKickUserNotifyBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasKickReason { - return result.hasKickReason; -} -- (KickReasonType) kickReason { - return result.kickReason; -} -- (M2CKickUserNotifyBuilder*) setKickReason:(KickReasonType) value { - result.hasKickReason = YES; - result.kickReason = value; - return self; -} -- (M2CKickUserNotifyBuilder*) clearKickReason { - result.hasKickReason = NO; - result.kickReason = KickReasonTypeKickReasonDuplicateUser; - return self; -} -@end - -@interface C2MBuddyListReq () -@property SInt32 cmdId; -@property UInt32 reqType; -@end - -@implementation C2MBuddyListReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasReqType { - return !!hasReqType_; -} -- (void) setHasReqType:(BOOL) value_ { - hasReqType_ = !!value_; -} -@synthesize reqType; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 8; - self.reqType = 0; - } - return self; -} -static C2MBuddyListReq* defaultC2MBuddyListReqInstance = nil; -+ (void) initialize { - if (self == [C2MBuddyListReq class]) { - defaultC2MBuddyListReqInstance = [[C2MBuddyListReq alloc] init]; - } -} -+ (C2MBuddyListReq*) defaultInstance { - return defaultC2MBuddyListReqInstance; -} -- (C2MBuddyListReq*) defaultInstance { - return defaultC2MBuddyListReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasReqType) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasReqType) { - [output writeUInt32:2 value:self.reqType]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasReqType) { - size_ += computeUInt32Size(2, self.reqType); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MBuddyListReq*) parseFromData:(NSData*) data { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromData:data] build]; -} -+ (C2MBuddyListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MBuddyListReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromInputStream:input] build]; -} -+ (C2MBuddyListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MBuddyListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MBuddyListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MBuddyListReq*)[[[C2MBuddyListReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MBuddyListReqBuilder*) builder { - return [[C2MBuddyListReqBuilder alloc] init]; -} -+ (C2MBuddyListReqBuilder*) builderWithPrototype:(C2MBuddyListReq*) prototype { - return [[C2MBuddyListReq builder] mergeFrom:prototype]; -} -- (C2MBuddyListReqBuilder*) builder { - return [C2MBuddyListReq builder]; -} -- (C2MBuddyListReqBuilder*) toBuilder { - return [C2MBuddyListReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasReqType) { - [output appendFormat:@"%@%@: %@\n", indent, @"reqType", [NSNumber numberWithInteger:self.reqType]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MBuddyListReq class]]) { - return NO; - } - C2MBuddyListReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasReqType == otherMessage.hasReqType && - (!self.hasReqType || self.reqType == otherMessage.reqType) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasReqType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.reqType] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MBuddyListReqBuilder() -@property (strong) C2MBuddyListReq* result; -@end - -@implementation C2MBuddyListReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MBuddyListReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MBuddyListReqBuilder*) clear { - self.result = [[C2MBuddyListReq alloc] init]; - return self; -} -- (C2MBuddyListReqBuilder*) clone { - return [C2MBuddyListReq builderWithPrototype:result]; -} -- (C2MBuddyListReq*) defaultInstance { - return [C2MBuddyListReq defaultInstance]; -} -- (C2MBuddyListReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MBuddyListReq*) buildPartial { - C2MBuddyListReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MBuddyListReqBuilder*) mergeFrom:(C2MBuddyListReq*) other { - if (other == [C2MBuddyListReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasReqType) { - [self setReqType:other.reqType]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MBuddyListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MBuddyListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setReqType:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MBuddyListReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MBuddyListReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 8; - return self; -} -- (BOOL) hasReqType { - return result.hasReqType; -} -- (UInt32) reqType { - return result.reqType; -} -- (C2MBuddyListReqBuilder*) setReqType:(UInt32) value { - result.hasReqType = YES; - result.reqType = value; - return self; -} -- (C2MBuddyListReqBuilder*) clearReqType { - result.hasReqType = NO; - result.reqType = 0; - return self; -} -@end - -@interface M2CFriendListNotify () -@property SInt32 cmdId; -@property (strong) NSMutableArray * friendListArray; -@end - -@implementation M2CFriendListNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize friendListArray; -@dynamic friendList; -- (void) dealloc { - self.friendListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 9; - } - return self; -} -static M2CFriendListNotify* defaultM2CFriendListNotifyInstance = nil; -+ (void) initialize { - if (self == [M2CFriendListNotify class]) { - defaultM2CFriendListNotifyInstance = [[M2CFriendListNotify alloc] init]; - } -} -+ (M2CFriendListNotify*) defaultInstance { - return defaultM2CFriendListNotifyInstance; -} -- (M2CFriendListNotify*) defaultInstance { - return defaultM2CFriendListNotifyInstance; -} -- (NSArray *)friendList { - return friendListArray; -} -- (ClientUserInfo*)friendListAtIndex:(NSUInteger)index { - return [friendListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInitfriendList = YES; - [self.friendList enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitfriendList = NO; - *stop = YES; - } - }]; - if (!isInitfriendList) return isInitfriendList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.friendListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.friendListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (M2CFriendListNotify*) parseFromData:(NSData*) data { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromData:data] build]; -} -+ (M2CFriendListNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendListNotify*) parseFromInputStream:(NSInputStream*) input { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromInputStream:input] build]; -} -+ (M2CFriendListNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (M2CFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendListNotify*)[[[M2CFriendListNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendListNotifyBuilder*) builder { - return [[M2CFriendListNotifyBuilder alloc] init]; -} -+ (M2CFriendListNotifyBuilder*) builderWithPrototype:(M2CFriendListNotify*) prototype { - return [[M2CFriendListNotify builder] mergeFrom:prototype]; -} -- (M2CFriendListNotifyBuilder*) builder { - return [M2CFriendListNotify builder]; -} -- (M2CFriendListNotifyBuilder*) toBuilder { - return [M2CFriendListNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.friendListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"friendList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[M2CFriendListNotify class]]) { - return NO; - } - M2CFriendListNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.friendListArray isEqualToArray:otherMessage.friendListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.friendListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface M2CFriendListNotifyBuilder() -@property (strong) M2CFriendListNotify* result; -@end - -@implementation M2CFriendListNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[M2CFriendListNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (M2CFriendListNotifyBuilder*) clear { - self.result = [[M2CFriendListNotify alloc] init]; - return self; -} -- (M2CFriendListNotifyBuilder*) clone { - return [M2CFriendListNotify builderWithPrototype:result]; -} -- (M2CFriendListNotify*) defaultInstance { - return [M2CFriendListNotify defaultInstance]; -} -- (M2CFriendListNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (M2CFriendListNotify*) buildPartial { - M2CFriendListNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (M2CFriendListNotifyBuilder*) mergeFrom:(M2CFriendListNotify*) other { - if (other == [M2CFriendListNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.friendListArray.count > 0) { - if (result.friendListArray == nil) { - result.friendListArray = [[NSMutableArray alloc] initWithArray:other.friendListArray]; - } else { - [result.friendListArray addObjectsFromArray:other.friendListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (M2CFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (M2CFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUserInfoBuilder* subBuilder = [ClientUserInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addFriendList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (M2CFriendListNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (M2CFriendListNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 9; - return self; -} -- (NSMutableArray *)friendList { - return result.friendListArray; -} -- (ClientUserInfo*)friendListAtIndex:(NSUInteger)index { - return [result friendListAtIndex:index]; -} -- (M2CFriendListNotifyBuilder *)addFriendList:(ClientUserInfo*)value { - if (result.friendListArray == nil) { - result.friendListArray = [[NSMutableArray alloc]init]; - } - [result.friendListArray addObject:value]; - return self; -} -- (M2CFriendListNotifyBuilder *)setFriendListArray:(NSArray *)array { - result.friendListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (M2CFriendListNotifyBuilder *)clearFriendList { - result.friendListArray = nil; - return self; -} -@end - -@interface M2COnlineFriendListNotify () -@property SInt32 cmdId; -@property OnlineListType listType; -@property (strong) NSMutableArray * friendStatusListArray; -@end - -@implementation M2COnlineFriendListNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasListType { - return !!hasListType_; -} -- (void) setHasListType:(BOOL) value_ { - hasListType_ = !!value_; -} -@synthesize listType; -@synthesize friendStatusListArray; -@dynamic friendStatusList; -- (void) dealloc { - self.friendStatusListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 10; - self.listType = OnlineListTypeOnlineListTypeFriendList; - } - return self; -} -static M2COnlineFriendListNotify* defaultM2COnlineFriendListNotifyInstance = nil; -+ (void) initialize { - if (self == [M2COnlineFriendListNotify class]) { - defaultM2COnlineFriendListNotifyInstance = [[M2COnlineFriendListNotify alloc] init]; - } -} -+ (M2COnlineFriendListNotify*) defaultInstance { - return defaultM2COnlineFriendListNotifyInstance; -} -- (M2COnlineFriendListNotify*) defaultInstance { - return defaultM2COnlineFriendListNotifyInstance; -} -- (NSArray *)friendStatusList { - return friendStatusListArray; -} -- (ClientUserStat*)friendStatusListAtIndex:(NSUInteger)index { - return [friendStatusListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasListType) { - return NO; - } - __block BOOL isInitfriendStatusList = YES; - [self.friendStatusList enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitfriendStatusList = NO; - *stop = YES; - } - }]; - if (!isInitfriendStatusList) return isInitfriendStatusList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasListType) { - [output writeEnum:2 value:self.listType]; - } - [self.friendStatusListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:3 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasListType) { - size_ += computeEnumSize(2, self.listType); - } - [self.friendStatusListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(3, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (M2COnlineFriendListNotify*) parseFromData:(NSData*) data { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromData:data] build]; -} -+ (M2COnlineFriendListNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (M2COnlineFriendListNotify*) parseFromInputStream:(NSInputStream*) input { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromInputStream:input] build]; -} -+ (M2COnlineFriendListNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2COnlineFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (M2COnlineFriendListNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2COnlineFriendListNotify*)[[[M2COnlineFriendListNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2COnlineFriendListNotifyBuilder*) builder { - return [[M2COnlineFriendListNotifyBuilder alloc] init]; -} -+ (M2COnlineFriendListNotifyBuilder*) builderWithPrototype:(M2COnlineFriendListNotify*) prototype { - return [[M2COnlineFriendListNotify builder] mergeFrom:prototype]; -} -- (M2COnlineFriendListNotifyBuilder*) builder { - return [M2COnlineFriendListNotify builder]; -} -- (M2COnlineFriendListNotifyBuilder*) toBuilder { - return [M2COnlineFriendListNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasListType) { - [output appendFormat:@"%@%@: %d\n", indent, @"listType", self.listType]; - } - [self.friendStatusListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"friendStatusList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[M2COnlineFriendListNotify class]]) { - return NO; - } - M2COnlineFriendListNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasListType == otherMessage.hasListType && - (!self.hasListType || self.listType == otherMessage.listType) && - [self.friendStatusListArray isEqualToArray:otherMessage.friendStatusListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasListType) { - hashCode = hashCode * 31 + self.listType; - } - [self.friendStatusListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface M2COnlineFriendListNotifyBuilder() -@property (strong) M2COnlineFriendListNotify* result; -@end - -@implementation M2COnlineFriendListNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[M2COnlineFriendListNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (M2COnlineFriendListNotifyBuilder*) clear { - self.result = [[M2COnlineFriendListNotify alloc] init]; - return self; -} -- (M2COnlineFriendListNotifyBuilder*) clone { - return [M2COnlineFriendListNotify builderWithPrototype:result]; -} -- (M2COnlineFriendListNotify*) defaultInstance { - return [M2COnlineFriendListNotify defaultInstance]; -} -- (M2COnlineFriendListNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (M2COnlineFriendListNotify*) buildPartial { - M2COnlineFriendListNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (M2COnlineFriendListNotifyBuilder*) mergeFrom:(M2COnlineFriendListNotify*) other { - if (other == [M2COnlineFriendListNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasListType) { - [self setListType:other.listType]; - } - if (other.friendStatusListArray.count > 0) { - if (result.friendStatusListArray == nil) { - result.friendStatusListArray = [[NSMutableArray alloc] initWithArray:other.friendStatusListArray]; - } else { - [result.friendStatusListArray addObjectsFromArray:other.friendStatusListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (M2COnlineFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (M2COnlineFriendListNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - OnlineListType value = (OnlineListType)[input readEnum]; - if (OnlineListTypeIsValidValue(value)) { - [self setListType:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - case 26: { - ClientUserStatBuilder* subBuilder = [ClientUserStat builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addFriendStatusList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (M2COnlineFriendListNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (M2COnlineFriendListNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 10; - return self; -} -- (BOOL) hasListType { - return result.hasListType; -} -- (OnlineListType) listType { - return result.listType; -} -- (M2COnlineFriendListNotifyBuilder*) setListType:(OnlineListType) value { - result.hasListType = YES; - result.listType = value; - return self; -} -- (M2COnlineFriendListNotifyBuilder*) clearListType { - result.hasListType = NO; - result.listType = OnlineListTypeOnlineListTypeFriendList; - return self; -} -- (NSMutableArray *)friendStatusList { - return result.friendStatusListArray; -} -- (ClientUserStat*)friendStatusListAtIndex:(NSUInteger)index { - return [result friendStatusListAtIndex:index]; -} -- (M2COnlineFriendListNotifyBuilder *)addFriendStatusList:(ClientUserStat*)value { - if (result.friendStatusListArray == nil) { - result.friendStatusListArray = [[NSMutableArray alloc]init]; - } - [result.friendStatusListArray addObject:value]; - return self; -} -- (M2COnlineFriendListNotifyBuilder *)setFriendStatusListArray:(NSArray *)array { - result.friendStatusListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (M2COnlineFriendListNotifyBuilder *)clearFriendStatusList { - result.friendStatusListArray = nil; - return self; -} -@end - -@interface M2CFriendStatNotify () -@property SInt32 cmdId; -@property (strong) ClientUserStat* userStat; -@end - -@implementation M2CFriendStatNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserStat { - return !!hasUserStat_; -} -- (void) setHasUserStat:(BOOL) value_ { - hasUserStat_ = !!value_; -} -@synthesize userStat; -- (void) dealloc { - self.userStat = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 11; - self.userStat = [ClientUserStat defaultInstance]; - } - return self; -} -static M2CFriendStatNotify* defaultM2CFriendStatNotifyInstance = nil; -+ (void) initialize { - if (self == [M2CFriendStatNotify class]) { - defaultM2CFriendStatNotifyInstance = [[M2CFriendStatNotify alloc] init]; - } -} -+ (M2CFriendStatNotify*) defaultInstance { - return defaultM2CFriendStatNotifyInstance; -} -- (M2CFriendStatNotify*) defaultInstance { - return defaultM2CFriendStatNotifyInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserStat) { - return NO; - } - if (!self.userStat.isInitialized) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserStat) { - [output writeMessage:2 value:self.userStat]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserStat) { - size_ += computeMessageSize(2, self.userStat); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (M2CFriendStatNotify*) parseFromData:(NSData*) data { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromData:data] build]; -} -+ (M2CFriendStatNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendStatNotify*) parseFromInputStream:(NSInputStream*) input { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromInputStream:input] build]; -} -+ (M2CFriendStatNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendStatNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (M2CFriendStatNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (M2CFriendStatNotify*)[[[M2CFriendStatNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (M2CFriendStatNotifyBuilder*) builder { - return [[M2CFriendStatNotifyBuilder alloc] init]; -} -+ (M2CFriendStatNotifyBuilder*) builderWithPrototype:(M2CFriendStatNotify*) prototype { - return [[M2CFriendStatNotify builder] mergeFrom:prototype]; -} -- (M2CFriendStatNotifyBuilder*) builder { - return [M2CFriendStatNotify builder]; -} -- (M2CFriendStatNotifyBuilder*) toBuilder { - return [M2CFriendStatNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserStat) { - [output appendFormat:@"%@%@ {\n", indent, @"userStat"]; - [self.userStat writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[M2CFriendStatNotify class]]) { - return NO; - } - M2CFriendStatNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserStat == otherMessage.hasUserStat && - (!self.hasUserStat || [self.userStat isEqual:otherMessage.userStat]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserStat) { - hashCode = hashCode * 31 + [self.userStat hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface M2CFriendStatNotifyBuilder() -@property (strong) M2CFriendStatNotify* result; -@end - -@implementation M2CFriendStatNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[M2CFriendStatNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (M2CFriendStatNotifyBuilder*) clear { - self.result = [[M2CFriendStatNotify alloc] init]; - return self; -} -- (M2CFriendStatNotifyBuilder*) clone { - return [M2CFriendStatNotify builderWithPrototype:result]; -} -- (M2CFriendStatNotify*) defaultInstance { - return [M2CFriendStatNotify defaultInstance]; -} -- (M2CFriendStatNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (M2CFriendStatNotify*) buildPartial { - M2CFriendStatNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (M2CFriendStatNotifyBuilder*) mergeFrom:(M2CFriendStatNotify*) other { - if (other == [M2CFriendStatNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserStat) { - [self mergeUserStat:other.userStat]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (M2CFriendStatNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (M2CFriendStatNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUserStatBuilder* subBuilder = [ClientUserStat builder]; - if (self.hasUserStat) { - [subBuilder mergeFrom:self.userStat]; - } - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self setUserStat:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (M2CFriendStatNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (M2CFriendStatNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 11; - return self; -} -- (BOOL) hasUserStat { - return result.hasUserStat; -} -- (ClientUserStat*) userStat { - return result.userStat; -} -- (M2CFriendStatNotifyBuilder*) setUserStat:(ClientUserStat*) value { - result.hasUserStat = YES; - result.userStat = value; - return self; -} -- (M2CFriendStatNotifyBuilder*) setUserStatBuilder:(ClientUserStatBuilder*) builderForValue { - return [self setUserStat:[builderForValue build]]; -} -- (M2CFriendStatNotifyBuilder*) mergeUserStat:(ClientUserStat*) value { - if (result.hasUserStat && - result.userStat != [ClientUserStat defaultInstance]) { - result.userStat = - [[[ClientUserStat builderWithPrototype:result.userStat] mergeFrom:value] buildPartial]; - } else { - result.userStat = value; - } - result.hasUserStat = YES; - return self; -} -- (M2CFriendStatNotifyBuilder*) clearUserStat { - result.hasUserStat = NO; - result.userStat = [ClientUserStat defaultInstance]; - return self; -} -@end - -@interface C2MUserStatusReq () -@property SInt32 cmdId; -@property (strong) NSString* userId; -@end - -@implementation C2MUserStatusReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (void) dealloc { - self.userId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 12; - self.userId = @""; - } - return self; -} -static C2MUserStatusReq* defaultC2MUserStatusReqInstance = nil; -+ (void) initialize { - if (self == [C2MUserStatusReq class]) { - defaultC2MUserStatusReqInstance = [[C2MUserStatusReq alloc] init]; - } -} -+ (C2MUserStatusReq*) defaultInstance { - return defaultC2MUserStatusReqInstance; -} -- (C2MUserStatusReq*) defaultInstance { - return defaultC2MUserStatusReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserId) { - [output writeString:2 value:self.userId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserId) { - size_ += computeStringSize(2, self.userId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserStatusReq*) parseFromData:(NSData*) data { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromData:data] build]; -} -+ (C2MUserStatusReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromInputStream:input] build]; -} -+ (C2MUserStatusReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserStatusReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusReq*)[[[C2MUserStatusReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusReqBuilder*) builder { - return [[C2MUserStatusReqBuilder alloc] init]; -} -+ (C2MUserStatusReqBuilder*) builderWithPrototype:(C2MUserStatusReq*) prototype { - return [[C2MUserStatusReq builder] mergeFrom:prototype]; -} -- (C2MUserStatusReqBuilder*) builder { - return [C2MUserStatusReq builder]; -} -- (C2MUserStatusReqBuilder*) toBuilder { - return [C2MUserStatusReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserStatusReq class]]) { - return NO; - } - C2MUserStatusReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserStatusReqBuilder() -@property (strong) C2MUserStatusReq* result; -@end - -@implementation C2MUserStatusReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserStatusReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserStatusReqBuilder*) clear { - self.result = [[C2MUserStatusReq alloc] init]; - return self; -} -- (C2MUserStatusReqBuilder*) clone { - return [C2MUserStatusReq builderWithPrototype:result]; -} -- (C2MUserStatusReq*) defaultInstance { - return [C2MUserStatusReq defaultInstance]; -} -- (C2MUserStatusReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserStatusReq*) buildPartial { - C2MUserStatusReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserStatusReqBuilder*) mergeFrom:(C2MUserStatusReq*) other { - if (other == [C2MUserStatusReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserStatusReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserStatusReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setUserId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserStatusReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserStatusReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 12; - return self; -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (C2MUserStatusReqBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (C2MUserStatusReqBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -@end - -@interface C2MUserStatusRsp () -@property SInt32 cmdId; -@property (strong) ClientUserStat* userStat; -@end - -@implementation C2MUserStatusRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserStat { - return !!hasUserStat_; -} -- (void) setHasUserStat:(BOOL) value_ { - hasUserStat_ = !!value_; -} -@synthesize userStat; -- (void) dealloc { - self.userStat = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 13; - self.userStat = [ClientUserStat defaultInstance]; - } - return self; -} -static C2MUserStatusRsp* defaultC2MUserStatusRspInstance = nil; -+ (void) initialize { - if (self == [C2MUserStatusRsp class]) { - defaultC2MUserStatusRspInstance = [[C2MUserStatusRsp alloc] init]; - } -} -+ (C2MUserStatusRsp*) defaultInstance { - return defaultC2MUserStatusRspInstance; -} -- (C2MUserStatusRsp*) defaultInstance { - return defaultC2MUserStatusRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserStat) { - return NO; - } - if (!self.userStat.isInitialized) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserStat) { - [output writeMessage:2 value:self.userStat]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserStat) { - size_ += computeMessageSize(2, self.userStat); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserStatusRsp*) parseFromData:(NSData*) data { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromData:data] build]; -} -+ (C2MUserStatusRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MUserStatusRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserStatusRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserStatusRsp*)[[[C2MUserStatusRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserStatusRspBuilder*) builder { - return [[C2MUserStatusRspBuilder alloc] init]; -} -+ (C2MUserStatusRspBuilder*) builderWithPrototype:(C2MUserStatusRsp*) prototype { - return [[C2MUserStatusRsp builder] mergeFrom:prototype]; -} -- (C2MUserStatusRspBuilder*) builder { - return [C2MUserStatusRsp builder]; -} -- (C2MUserStatusRspBuilder*) toBuilder { - return [C2MUserStatusRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserStat) { - [output appendFormat:@"%@%@ {\n", indent, @"userStat"]; - [self.userStat writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserStatusRsp class]]) { - return NO; - } - C2MUserStatusRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserStat == otherMessage.hasUserStat && - (!self.hasUserStat || [self.userStat isEqual:otherMessage.userStat]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserStat) { - hashCode = hashCode * 31 + [self.userStat hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserStatusRspBuilder() -@property (strong) C2MUserStatusRsp* result; -@end - -@implementation C2MUserStatusRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserStatusRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserStatusRspBuilder*) clear { - self.result = [[C2MUserStatusRsp alloc] init]; - return self; -} -- (C2MUserStatusRspBuilder*) clone { - return [C2MUserStatusRsp builderWithPrototype:result]; -} -- (C2MUserStatusRsp*) defaultInstance { - return [C2MUserStatusRsp defaultInstance]; -} -- (C2MUserStatusRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserStatusRsp*) buildPartial { - C2MUserStatusRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserStatusRspBuilder*) mergeFrom:(C2MUserStatusRsp*) other { - if (other == [C2MUserStatusRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserStat) { - [self mergeUserStat:other.userStat]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserStatusRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserStatusRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUserStatBuilder* subBuilder = [ClientUserStat builder]; - if (self.hasUserStat) { - [subBuilder mergeFrom:self.userStat]; - } - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self setUserStat:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserStatusRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserStatusRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 13; - return self; -} -- (BOOL) hasUserStat { - return result.hasUserStat; -} -- (ClientUserStat*) userStat { - return result.userStat; -} -- (C2MUserStatusRspBuilder*) setUserStat:(ClientUserStat*) value { - result.hasUserStat = YES; - result.userStat = value; - return self; -} -- (C2MUserStatusRspBuilder*) setUserStatBuilder:(ClientUserStatBuilder*) builderForValue { - return [self setUserStat:[builderForValue build]]; -} -- (C2MUserStatusRspBuilder*) mergeUserStat:(ClientUserStat*) value { - if (result.hasUserStat && - result.userStat != [ClientUserStat defaultInstance]) { - result.userStat = - [[[ClientUserStat builderWithPrototype:result.userStat] mergeFrom:value] buildPartial]; - } else { - result.userStat = value; - } - result.hasUserStat = YES; - return self; -} -- (C2MUserStatusRspBuilder*) clearUserStat { - result.hasUserStat = NO; - result.userStat = [ClientUserStat defaultInstance]; - return self; -} -@end - -@interface C2MUserListStatReq () -@property SInt32 cmdId; -@property (strong) NSMutableArray * userListArray; -@end - -@implementation C2MUserListStatReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize userListArray; -@dynamic userList; -- (void) dealloc { - self.userListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 14; - } - return self; -} -static C2MUserListStatReq* defaultC2MUserListStatReqInstance = nil; -+ (void) initialize { - if (self == [C2MUserListStatReq class]) { - defaultC2MUserListStatReqInstance = [[C2MUserListStatReq alloc] init]; - } -} -+ (C2MUserListStatReq*) defaultInstance { - return defaultC2MUserListStatReqInstance; -} -- (C2MUserListStatReq*) defaultInstance { - return defaultC2MUserListStatReqInstance; -} -- (NSArray *)userList { - return userListArray; -} -- (NSString*)userListAtIndex:(NSUInteger)index { - return [userListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.userListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userListArray.count; - [self.userListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserListStatReq*) parseFromData:(NSData*) data { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromData:data] build]; -} -+ (C2MUserListStatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromInputStream:input] build]; -} -+ (C2MUserListStatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserListStatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatReq*)[[[C2MUserListStatReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatReqBuilder*) builder { - return [[C2MUserListStatReqBuilder alloc] init]; -} -+ (C2MUserListStatReqBuilder*) builderWithPrototype:(C2MUserListStatReq*) prototype { - return [[C2MUserListStatReq builder] mergeFrom:prototype]; -} -- (C2MUserListStatReqBuilder*) builder { - return [C2MUserListStatReq builder]; -} -- (C2MUserListStatReqBuilder*) toBuilder { - return [C2MUserListStatReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.userListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserListStatReq class]]) { - return NO; - } - C2MUserListStatReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.userListArray isEqualToArray:otherMessage.userListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.userListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserListStatReqBuilder() -@property (strong) C2MUserListStatReq* result; -@end - -@implementation C2MUserListStatReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserListStatReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserListStatReqBuilder*) clear { - self.result = [[C2MUserListStatReq alloc] init]; - return self; -} -- (C2MUserListStatReqBuilder*) clone { - return [C2MUserListStatReq builderWithPrototype:result]; -} -- (C2MUserListStatReq*) defaultInstance { - return [C2MUserListStatReq defaultInstance]; -} -- (C2MUserListStatReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserListStatReq*) buildPartial { - C2MUserListStatReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserListStatReqBuilder*) mergeFrom:(C2MUserListStatReq*) other { - if (other == [C2MUserListStatReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.userListArray.count > 0) { - if (result.userListArray == nil) { - result.userListArray = [[NSMutableArray alloc] initWithArray:other.userListArray]; - } else { - [result.userListArray addObjectsFromArray:other.userListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserListStatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserListStatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self addUserList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserListStatReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserListStatReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 14; - return self; -} -- (NSMutableArray *)userList { - return result.userListArray; -} -- (NSString*)userListAtIndex:(NSUInteger)index { - return [result userListAtIndex:index]; -} -- (C2MUserListStatReqBuilder *)addUserList:(NSString*)value { - if (result.userListArray == nil) { - result.userListArray = [[NSMutableArray alloc]init]; - } - [result.userListArray addObject:value]; - return self; -} -- (C2MUserListStatReqBuilder *)setUserListArray:(NSArray *)array { - result.userListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MUserListStatReqBuilder *)clearUserList { - result.userListArray = nil; - return self; -} -@end - -@interface C2MUserListStatRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * userStatListArray; -@end - -@implementation C2MUserListStatRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize userStatListArray; -@dynamic userStatList; -- (void) dealloc { - self.userStatListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 15; - } - return self; -} -static C2MUserListStatRsp* defaultC2MUserListStatRspInstance = nil; -+ (void) initialize { - if (self == [C2MUserListStatRsp class]) { - defaultC2MUserListStatRspInstance = [[C2MUserListStatRsp alloc] init]; - } -} -+ (C2MUserListStatRsp*) defaultInstance { - return defaultC2MUserListStatRspInstance; -} -- (C2MUserListStatRsp*) defaultInstance { - return defaultC2MUserListStatRspInstance; -} -- (NSArray *)userStatList { - return userStatListArray; -} -- (ClientUserStat*)userStatListAtIndex:(NSUInteger)index { - return [userStatListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInituserStatList = YES; - [self.userStatList enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInituserStatList = NO; - *stop = YES; - } - }]; - if (!isInituserStatList) return isInituserStatList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.userStatListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.userStatListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserListStatRsp*) parseFromData:(NSData*) data { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromData:data] build]; -} -+ (C2MUserListStatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MUserListStatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserListStatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserListStatRsp*)[[[C2MUserListStatRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserListStatRspBuilder*) builder { - return [[C2MUserListStatRspBuilder alloc] init]; -} -+ (C2MUserListStatRspBuilder*) builderWithPrototype:(C2MUserListStatRsp*) prototype { - return [[C2MUserListStatRsp builder] mergeFrom:prototype]; -} -- (C2MUserListStatRspBuilder*) builder { - return [C2MUserListStatRsp builder]; -} -- (C2MUserListStatRspBuilder*) toBuilder { - return [C2MUserListStatRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.userStatListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"userStatList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserListStatRsp class]]) { - return NO; - } - C2MUserListStatRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.userStatListArray isEqualToArray:otherMessage.userStatListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.userStatListArray enumerateObjectsUsingBlock:^(ClientUserStat *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserListStatRspBuilder() -@property (strong) C2MUserListStatRsp* result; -@end - -@implementation C2MUserListStatRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserListStatRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserListStatRspBuilder*) clear { - self.result = [[C2MUserListStatRsp alloc] init]; - return self; -} -- (C2MUserListStatRspBuilder*) clone { - return [C2MUserListStatRsp builderWithPrototype:result]; -} -- (C2MUserListStatRsp*) defaultInstance { - return [C2MUserListStatRsp defaultInstance]; -} -- (C2MUserListStatRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserListStatRsp*) buildPartial { - C2MUserListStatRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserListStatRspBuilder*) mergeFrom:(C2MUserListStatRsp*) other { - if (other == [C2MUserListStatRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.userStatListArray.count > 0) { - if (result.userStatListArray == nil) { - result.userStatListArray = [[NSMutableArray alloc] initWithArray:other.userStatListArray]; - } else { - [result.userStatListArray addObjectsFromArray:other.userStatListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserListStatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserListStatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUserStatBuilder* subBuilder = [ClientUserStat builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addUserStatList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserListStatRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserListStatRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 15; - return self; -} -- (NSMutableArray *)userStatList { - return result.userStatListArray; -} -- (ClientUserStat*)userStatListAtIndex:(NSUInteger)index { - return [result userStatListAtIndex:index]; -} -- (C2MUserListStatRspBuilder *)addUserStatList:(ClientUserStat*)value { - if (result.userStatListArray == nil) { - result.userStatListArray = [[NSMutableArray alloc]init]; - } - [result.userStatListArray addObject:value]; - return self; -} -- (C2MUserListStatRspBuilder *)setUserStatListArray:(NSArray *)array { - result.userStatListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MUserListStatRspBuilder *)clearUserStatList { - result.userStatListArray = nil; - return self; -} -@end - -@interface ClientMsgData () -@property SInt32 cmdId; -@property UInt32 seqNo; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property UInt32 createTime; -@property UInt32 msgType; -@property UInt32 renderType; -@property (strong) NSString* msgData; -@property (strong) NSData* attachData; -@end - -@implementation ClientMsgData - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSeqNo { - return !!hasSeqNo_; -} -- (void) setHasSeqNo:(BOOL) value_ { - hasSeqNo_ = !!value_; -} -@synthesize seqNo; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasCreateTime { - return !!hasCreateTime_; -} -- (void) setHasCreateTime:(BOOL) value_ { - hasCreateTime_ = !!value_; -} -@synthesize createTime; -- (BOOL) hasMsgType { - return !!hasMsgType_; -} -- (void) setHasMsgType:(BOOL) value_ { - hasMsgType_ = !!value_; -} -@synthesize msgType; -- (BOOL) hasRenderType { - return !!hasRenderType_; -} -- (void) setHasRenderType:(BOOL) value_ { - hasRenderType_ = !!value_; -} -@synthesize renderType; -- (BOOL) hasMsgData { - return !!hasMsgData_; -} -- (void) setHasMsgData:(BOOL) value_ { - hasMsgData_ = !!value_; -} -@synthesize msgData; -- (BOOL) hasAttachData { - return !!hasAttachData_; -} -- (void) setHasAttachData:(BOOL) value_ { - hasAttachData_ = !!value_; -} -@synthesize attachData; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.msgData = nil; - self.attachData = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 16; - self.seqNo = 0; - self.fromUserId = @""; - self.toUserId = @""; - self.createTime = 0; - self.msgType = 0; - self.renderType = 0; - self.msgData = @""; - self.attachData = [NSData data]; - } - return self; -} -static ClientMsgData* defaultClientMsgDataInstance = nil; -+ (void) initialize { - if (self == [ClientMsgData class]) { - defaultClientMsgDataInstance = [[ClientMsgData alloc] init]; - } -} -+ (ClientMsgData*) defaultInstance { - return defaultClientMsgDataInstance; -} -- (ClientMsgData*) defaultInstance { - return defaultClientMsgDataInstance; -} -- (BOOL) isInitialized { - if (!self.hasSeqNo) { - return NO; - } - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasCreateTime) { - return NO; - } - if (!self.hasMsgType) { - return NO; - } - if (!self.hasRenderType) { - return NO; - } - if (!self.hasMsgData) { - return NO; - } - if (!self.hasAttachData) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSeqNo) { - [output writeUInt32:2 value:self.seqNo]; - } - if (self.hasFromUserId) { - [output writeString:3 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:4 value:self.toUserId]; - } - if (self.hasCreateTime) { - [output writeUInt32:5 value:self.createTime]; - } - if (self.hasMsgType) { - [output writeUInt32:6 value:self.msgType]; - } - if (self.hasRenderType) { - [output writeUInt32:7 value:self.renderType]; - } - if (self.hasMsgData) { - [output writeString:8 value:self.msgData]; - } - if (self.hasAttachData) { - [output writeData:9 value:self.attachData]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSeqNo) { - size_ += computeUInt32Size(2, self.seqNo); - } - if (self.hasFromUserId) { - size_ += computeStringSize(3, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(4, self.toUserId); - } - if (self.hasCreateTime) { - size_ += computeUInt32Size(5, self.createTime); - } - if (self.hasMsgType) { - size_ += computeUInt32Size(6, self.msgType); - } - if (self.hasRenderType) { - size_ += computeUInt32Size(7, self.renderType); - } - if (self.hasMsgData) { - size_ += computeStringSize(8, self.msgData); - } - if (self.hasAttachData) { - size_ += computeDataSize(9, self.attachData); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientMsgData*) parseFromData:(NSData*) data { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromData:data] build]; -} -+ (ClientMsgData*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgData*) parseFromInputStream:(NSInputStream*) input { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromInputStream:input] build]; -} -+ (ClientMsgData*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgData*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientMsgData*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgData*)[[[ClientMsgData builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgDataBuilder*) builder { - return [[ClientMsgDataBuilder alloc] init]; -} -+ (ClientMsgDataBuilder*) builderWithPrototype:(ClientMsgData*) prototype { - return [[ClientMsgData builder] mergeFrom:prototype]; -} -- (ClientMsgDataBuilder*) builder { - return [ClientMsgData builder]; -} -- (ClientMsgDataBuilder*) toBuilder { - return [ClientMsgData builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSeqNo) { - [output appendFormat:@"%@%@: %@\n", indent, @"seqNo", [NSNumber numberWithInteger:self.seqNo]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasCreateTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"createTime", [NSNumber numberWithInteger:self.createTime]]; - } - if (self.hasMsgType) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgType", [NSNumber numberWithInteger:self.msgType]]; - } - if (self.hasRenderType) { - [output appendFormat:@"%@%@: %@\n", indent, @"renderType", [NSNumber numberWithInteger:self.renderType]]; - } - if (self.hasMsgData) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgData", self.msgData]; - } - if (self.hasAttachData) { - [output appendFormat:@"%@%@: %@\n", indent, @"attachData", self.attachData]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientMsgData class]]) { - return NO; - } - ClientMsgData *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSeqNo == otherMessage.hasSeqNo && - (!self.hasSeqNo || self.seqNo == otherMessage.seqNo) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasCreateTime == otherMessage.hasCreateTime && - (!self.hasCreateTime || self.createTime == otherMessage.createTime) && - self.hasMsgType == otherMessage.hasMsgType && - (!self.hasMsgType || self.msgType == otherMessage.msgType) && - self.hasRenderType == otherMessage.hasRenderType && - (!self.hasRenderType || self.renderType == otherMessage.renderType) && - self.hasMsgData == otherMessage.hasMsgData && - (!self.hasMsgData || [self.msgData isEqual:otherMessage.msgData]) && - self.hasAttachData == otherMessage.hasAttachData && - (!self.hasAttachData || [self.attachData isEqual:otherMessage.attachData]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSeqNo) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.seqNo] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasCreateTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.createTime] hash]; - } - if (self.hasMsgType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgType] hash]; - } - if (self.hasRenderType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.renderType] hash]; - } - if (self.hasMsgData) { - hashCode = hashCode * 31 + [self.msgData hash]; - } - if (self.hasAttachData) { - hashCode = hashCode * 31 + [self.attachData hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientMsgDataBuilder() -@property (strong) ClientMsgData* result; -@end - -@implementation ClientMsgDataBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientMsgData alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientMsgDataBuilder*) clear { - self.result = [[ClientMsgData alloc] init]; - return self; -} -- (ClientMsgDataBuilder*) clone { - return [ClientMsgData builderWithPrototype:result]; -} -- (ClientMsgData*) defaultInstance { - return [ClientMsgData defaultInstance]; -} -- (ClientMsgData*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientMsgData*) buildPartial { - ClientMsgData* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientMsgDataBuilder*) mergeFrom:(ClientMsgData*) other { - if (other == [ClientMsgData defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSeqNo) { - [self setSeqNo:other.seqNo]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasCreateTime) { - [self setCreateTime:other.createTime]; - } - if (other.hasMsgType) { - [self setMsgType:other.msgType]; - } - if (other.hasRenderType) { - [self setRenderType:other.renderType]; - } - if (other.hasMsgData) { - [self setMsgData:other.msgData]; - } - if (other.hasAttachData) { - [self setAttachData:other.attachData]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientMsgDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientMsgDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setSeqNo:[input readUInt32]]; - break; - } - case 26: { - [self setFromUserId:[input readString]]; - break; - } - case 34: { - [self setToUserId:[input readString]]; - break; - } - case 40: { - [self setCreateTime:[input readUInt32]]; - break; - } - case 48: { - [self setMsgType:[input readUInt32]]; - break; - } - case 56: { - [self setRenderType:[input readUInt32]]; - break; - } - case 66: { - [self setMsgData:[input readString]]; - break; - } - case 74: { - [self setAttachData:[input readData]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (ClientMsgDataBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (ClientMsgDataBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 16; - return self; -} -- (BOOL) hasSeqNo { - return result.hasSeqNo; -} -- (UInt32) seqNo { - return result.seqNo; -} -- (ClientMsgDataBuilder*) setSeqNo:(UInt32) value { - result.hasSeqNo = YES; - result.seqNo = value; - return self; -} -- (ClientMsgDataBuilder*) clearSeqNo { - result.hasSeqNo = NO; - result.seqNo = 0; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientMsgDataBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientMsgDataBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (ClientMsgDataBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (ClientMsgDataBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasCreateTime { - return result.hasCreateTime; -} -- (UInt32) createTime { - return result.createTime; -} -- (ClientMsgDataBuilder*) setCreateTime:(UInt32) value { - result.hasCreateTime = YES; - result.createTime = value; - return self; -} -- (ClientMsgDataBuilder*) clearCreateTime { - result.hasCreateTime = NO; - result.createTime = 0; - return self; -} -- (BOOL) hasMsgType { - return result.hasMsgType; -} -- (UInt32) msgType { - return result.msgType; -} -- (ClientMsgDataBuilder*) setMsgType:(UInt32) value { - result.hasMsgType = YES; - result.msgType = value; - return self; -} -- (ClientMsgDataBuilder*) clearMsgType { - result.hasMsgType = NO; - result.msgType = 0; - return self; -} -- (BOOL) hasRenderType { - return result.hasRenderType; -} -- (UInt32) renderType { - return result.renderType; -} -- (ClientMsgDataBuilder*) setRenderType:(UInt32) value { - result.hasRenderType = YES; - result.renderType = value; - return self; -} -- (ClientMsgDataBuilder*) clearRenderType { - result.hasRenderType = NO; - result.renderType = 0; - return self; -} -- (BOOL) hasMsgData { - return result.hasMsgData; -} -- (NSString*) msgData { - return result.msgData; -} -- (ClientMsgDataBuilder*) setMsgData:(NSString*) value { - result.hasMsgData = YES; - result.msgData = value; - return self; -} -- (ClientMsgDataBuilder*) clearMsgData { - result.hasMsgData = NO; - result.msgData = @""; - return self; -} -- (BOOL) hasAttachData { - return result.hasAttachData; -} -- (NSData*) attachData { - return result.attachData; -} -- (ClientMsgDataBuilder*) setAttachData:(NSData*) value { - result.hasAttachData = YES; - result.attachData = value; - return self; -} -- (ClientMsgDataBuilder*) clearAttachData { - result.hasAttachData = NO; - result.attachData = [NSData data]; - return self; -} -@end - -@interface ClientMsgDataAck () -@property SInt32 cmdId; -@property UInt32 seqNo; -@property (strong) NSString* fromUserId; -@end - -@implementation ClientMsgDataAck - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSeqNo { - return !!hasSeqNo_; -} -- (void) setHasSeqNo:(BOOL) value_ { - hasSeqNo_ = !!value_; -} -@synthesize seqNo; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (void) dealloc { - self.fromUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 17; - self.seqNo = 0; - self.fromUserId = @""; - } - return self; -} -static ClientMsgDataAck* defaultClientMsgDataAckInstance = nil; -+ (void) initialize { - if (self == [ClientMsgDataAck class]) { - defaultClientMsgDataAckInstance = [[ClientMsgDataAck alloc] init]; - } -} -+ (ClientMsgDataAck*) defaultInstance { - return defaultClientMsgDataAckInstance; -} -- (ClientMsgDataAck*) defaultInstance { - return defaultClientMsgDataAckInstance; -} -- (BOOL) isInitialized { - if (!self.hasSeqNo) { - return NO; - } - if (!self.hasFromUserId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSeqNo) { - [output writeUInt32:2 value:self.seqNo]; - } - if (self.hasFromUserId) { - [output writeString:3 value:self.fromUserId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSeqNo) { - size_ += computeUInt32Size(2, self.seqNo); - } - if (self.hasFromUserId) { - size_ += computeStringSize(3, self.fromUserId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientMsgDataAck*) parseFromData:(NSData*) data { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromData:data] build]; -} -+ (ClientMsgDataAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgDataAck*) parseFromInputStream:(NSInputStream*) input { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromInputStream:input] build]; -} -+ (ClientMsgDataAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgDataAck*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientMsgDataAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgDataAck*)[[[ClientMsgDataAck builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgDataAckBuilder*) builder { - return [[ClientMsgDataAckBuilder alloc] init]; -} -+ (ClientMsgDataAckBuilder*) builderWithPrototype:(ClientMsgDataAck*) prototype { - return [[ClientMsgDataAck builder] mergeFrom:prototype]; -} -- (ClientMsgDataAckBuilder*) builder { - return [ClientMsgDataAck builder]; -} -- (ClientMsgDataAckBuilder*) toBuilder { - return [ClientMsgDataAck builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSeqNo) { - [output appendFormat:@"%@%@: %@\n", indent, @"seqNo", [NSNumber numberWithInteger:self.seqNo]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientMsgDataAck class]]) { - return NO; - } - ClientMsgDataAck *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSeqNo == otherMessage.hasSeqNo && - (!self.hasSeqNo || self.seqNo == otherMessage.seqNo) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSeqNo) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.seqNo] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientMsgDataAckBuilder() -@property (strong) ClientMsgDataAck* result; -@end - -@implementation ClientMsgDataAckBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientMsgDataAck alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientMsgDataAckBuilder*) clear { - self.result = [[ClientMsgDataAck alloc] init]; - return self; -} -- (ClientMsgDataAckBuilder*) clone { - return [ClientMsgDataAck builderWithPrototype:result]; -} -- (ClientMsgDataAck*) defaultInstance { - return [ClientMsgDataAck defaultInstance]; -} -- (ClientMsgDataAck*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientMsgDataAck*) buildPartial { - ClientMsgDataAck* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientMsgDataAckBuilder*) mergeFrom:(ClientMsgDataAck*) other { - if (other == [ClientMsgDataAck defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSeqNo) { - [self setSeqNo:other.seqNo]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientMsgDataAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientMsgDataAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setSeqNo:[input readUInt32]]; - break; - } - case 26: { - [self setFromUserId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (ClientMsgDataAckBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (ClientMsgDataAckBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 17; - return self; -} -- (BOOL) hasSeqNo { - return result.hasSeqNo; -} -- (UInt32) seqNo { - return result.seqNo; -} -- (ClientMsgDataAckBuilder*) setSeqNo:(UInt32) value { - result.hasSeqNo = YES; - result.seqNo = value; - return self; -} -- (ClientMsgDataAckBuilder*) clearSeqNo { - result.hasSeqNo = NO; - result.seqNo = 0; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientMsgDataAckBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientMsgDataAckBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -@end - -@interface ClientMsgReadAck () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@end - -@implementation ClientMsgReadAck - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (void) dealloc { - self.fromUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 18; - self.fromUserId = @""; - } - return self; -} -static ClientMsgReadAck* defaultClientMsgReadAckInstance = nil; -+ (void) initialize { - if (self == [ClientMsgReadAck class]) { - defaultClientMsgReadAckInstance = [[ClientMsgReadAck alloc] init]; - } -} -+ (ClientMsgReadAck*) defaultInstance { - return defaultClientMsgReadAckInstance; -} -- (ClientMsgReadAck*) defaultInstance { - return defaultClientMsgReadAckInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientMsgReadAck*) parseFromData:(NSData*) data { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromData:data] build]; -} -+ (ClientMsgReadAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgReadAck*) parseFromInputStream:(NSInputStream*) input { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromInputStream:input] build]; -} -+ (ClientMsgReadAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientMsgReadAck*)[[[ClientMsgReadAck builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientMsgReadAckBuilder*) builder { - return [[ClientMsgReadAckBuilder alloc] init]; -} -+ (ClientMsgReadAckBuilder*) builderWithPrototype:(ClientMsgReadAck*) prototype { - return [[ClientMsgReadAck builder] mergeFrom:prototype]; -} -- (ClientMsgReadAckBuilder*) builder { - return [ClientMsgReadAck builder]; -} -- (ClientMsgReadAckBuilder*) toBuilder { - return [ClientMsgReadAck builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientMsgReadAck class]]) { - return NO; - } - ClientMsgReadAck *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientMsgReadAckBuilder() -@property (strong) ClientMsgReadAck* result; -@end - -@implementation ClientMsgReadAckBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientMsgReadAck alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientMsgReadAckBuilder*) clear { - self.result = [[ClientMsgReadAck alloc] init]; - return self; -} -- (ClientMsgReadAckBuilder*) clone { - return [ClientMsgReadAck builderWithPrototype:result]; -} -- (ClientMsgReadAck*) defaultInstance { - return [ClientMsgReadAck defaultInstance]; -} -- (ClientMsgReadAck*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientMsgReadAck*) buildPartial { - ClientMsgReadAck* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientMsgReadAckBuilder*) mergeFrom:(ClientMsgReadAck*) other { - if (other == [ClientMsgReadAck defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (ClientMsgReadAckBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (ClientMsgReadAckBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 18; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientMsgReadAckBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientMsgReadAckBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -@end - -@interface ClientP2PCmdMsg () -@property SInt32 cmdId; -@property UInt32 seqNo; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSData* cmdMsgData; -@end - -@implementation ClientP2PCmdMsg - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSeqNo { - return !!hasSeqNo_; -} -- (void) setHasSeqNo:(BOOL) value_ { - hasSeqNo_ = !!value_; -} -@synthesize seqNo; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasCmdMsgData { - return !!hasCmdMsgData_; -} -- (void) setHasCmdMsgData:(BOOL) value_ { - hasCmdMsgData_ = !!value_; -} -@synthesize cmdMsgData; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.cmdMsgData = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 19; - self.seqNo = 0; - self.fromUserId = @""; - self.toUserId = @""; - self.cmdMsgData = [NSData data]; - } - return self; -} -static ClientP2PCmdMsg* defaultClientP2PCmdMsgInstance = nil; -+ (void) initialize { - if (self == [ClientP2PCmdMsg class]) { - defaultClientP2PCmdMsgInstance = [[ClientP2PCmdMsg alloc] init]; - } -} -+ (ClientP2PCmdMsg*) defaultInstance { - return defaultClientP2PCmdMsgInstance; -} -- (ClientP2PCmdMsg*) defaultInstance { - return defaultClientP2PCmdMsgInstance; -} -- (BOOL) isInitialized { - if (!self.hasSeqNo) { - return NO; - } - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasCmdMsgData) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSeqNo) { - [output writeUInt32:2 value:self.seqNo]; - } - if (self.hasFromUserId) { - [output writeString:3 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:4 value:self.toUserId]; - } - if (self.hasCmdMsgData) { - [output writeData:5 value:self.cmdMsgData]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSeqNo) { - size_ += computeUInt32Size(2, self.seqNo); - } - if (self.hasFromUserId) { - size_ += computeStringSize(3, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(4, self.toUserId); - } - if (self.hasCmdMsgData) { - size_ += computeDataSize(5, self.cmdMsgData); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (ClientP2PCmdMsg*) parseFromData:(NSData*) data { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromData:data] build]; -} -+ (ClientP2PCmdMsg*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (ClientP2PCmdMsg*) parseFromInputStream:(NSInputStream*) input { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromInputStream:input] build]; -} -+ (ClientP2PCmdMsg*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientP2PCmdMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromCodedInputStream:input] build]; -} -+ (ClientP2PCmdMsg*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (ClientP2PCmdMsg*)[[[ClientP2PCmdMsg builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (ClientP2PCmdMsgBuilder*) builder { - return [[ClientP2PCmdMsgBuilder alloc] init]; -} -+ (ClientP2PCmdMsgBuilder*) builderWithPrototype:(ClientP2PCmdMsg*) prototype { - return [[ClientP2PCmdMsg builder] mergeFrom:prototype]; -} -- (ClientP2PCmdMsgBuilder*) builder { - return [ClientP2PCmdMsg builder]; -} -- (ClientP2PCmdMsgBuilder*) toBuilder { - return [ClientP2PCmdMsg builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSeqNo) { - [output appendFormat:@"%@%@: %@\n", indent, @"seqNo", [NSNumber numberWithInteger:self.seqNo]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasCmdMsgData) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdMsgData", self.cmdMsgData]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[ClientP2PCmdMsg class]]) { - return NO; - } - ClientP2PCmdMsg *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSeqNo == otherMessage.hasSeqNo && - (!self.hasSeqNo || self.seqNo == otherMessage.seqNo) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasCmdMsgData == otherMessage.hasCmdMsgData && - (!self.hasCmdMsgData || [self.cmdMsgData isEqual:otherMessage.cmdMsgData]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSeqNo) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.seqNo] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasCmdMsgData) { - hashCode = hashCode * 31 + [self.cmdMsgData hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface ClientP2PCmdMsgBuilder() -@property (strong) ClientP2PCmdMsg* result; -@end - -@implementation ClientP2PCmdMsgBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[ClientP2PCmdMsg alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (ClientP2PCmdMsgBuilder*) clear { - self.result = [[ClientP2PCmdMsg alloc] init]; - return self; -} -- (ClientP2PCmdMsgBuilder*) clone { - return [ClientP2PCmdMsg builderWithPrototype:result]; -} -- (ClientP2PCmdMsg*) defaultInstance { - return [ClientP2PCmdMsg defaultInstance]; -} -- (ClientP2PCmdMsg*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (ClientP2PCmdMsg*) buildPartial { - ClientP2PCmdMsg* returnMe = result; - self.result = nil; - return returnMe; -} -- (ClientP2PCmdMsgBuilder*) mergeFrom:(ClientP2PCmdMsg*) other { - if (other == [ClientP2PCmdMsg defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSeqNo) { - [self setSeqNo:other.seqNo]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasCmdMsgData) { - [self setCmdMsgData:other.cmdMsgData]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (ClientP2PCmdMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (ClientP2PCmdMsgBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setSeqNo:[input readUInt32]]; - break; - } - case 26: { - [self setFromUserId:[input readString]]; - break; - } - case 34: { - [self setToUserId:[input readString]]; - break; - } - case 42: { - [self setCmdMsgData:[input readData]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (ClientP2PCmdMsgBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (ClientP2PCmdMsgBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 19; - return self; -} -- (BOOL) hasSeqNo { - return result.hasSeqNo; -} -- (UInt32) seqNo { - return result.seqNo; -} -- (ClientP2PCmdMsgBuilder*) setSeqNo:(UInt32) value { - result.hasSeqNo = YES; - result.seqNo = value; - return self; -} -- (ClientP2PCmdMsgBuilder*) clearSeqNo { - result.hasSeqNo = NO; - result.seqNo = 0; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (ClientP2PCmdMsgBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (ClientP2PCmdMsgBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (ClientP2PCmdMsgBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (ClientP2PCmdMsgBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasCmdMsgData { - return result.hasCmdMsgData; -} -- (NSData*) cmdMsgData { - return result.cmdMsgData; -} -- (ClientP2PCmdMsgBuilder*) setCmdMsgData:(NSData*) value { - result.hasCmdMsgData = YES; - result.cmdMsgData = value; - return self; -} -- (ClientP2PCmdMsgBuilder*) clearCmdMsgData { - result.hasCmdMsgData = NO; - result.cmdMsgData = [NSData data]; - return self; -} -@end - -@interface C2MTimeReq () -@property SInt32 cmdId; -@end - -@implementation C2MTimeReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 20; - } - return self; -} -static C2MTimeReq* defaultC2MTimeReqInstance = nil; -+ (void) initialize { - if (self == [C2MTimeReq class]) { - defaultC2MTimeReqInstance = [[C2MTimeReq alloc] init]; - } -} -+ (C2MTimeReq*) defaultInstance { - return defaultC2MTimeReqInstance; -} -- (C2MTimeReq*) defaultInstance { - return defaultC2MTimeReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MTimeReq*) parseFromData:(NSData*) data { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromData:data] build]; -} -+ (C2MTimeReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromInputStream:input] build]; -} -+ (C2MTimeReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MTimeReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeReq*)[[[C2MTimeReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeReqBuilder*) builder { - return [[C2MTimeReqBuilder alloc] init]; -} -+ (C2MTimeReqBuilder*) builderWithPrototype:(C2MTimeReq*) prototype { - return [[C2MTimeReq builder] mergeFrom:prototype]; -} -- (C2MTimeReqBuilder*) builder { - return [C2MTimeReq builder]; -} -- (C2MTimeReqBuilder*) toBuilder { - return [C2MTimeReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MTimeReq class]]) { - return NO; - } - C2MTimeReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MTimeReqBuilder() -@property (strong) C2MTimeReq* result; -@end - -@implementation C2MTimeReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MTimeReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MTimeReqBuilder*) clear { - self.result = [[C2MTimeReq alloc] init]; - return self; -} -- (C2MTimeReqBuilder*) clone { - return [C2MTimeReq builderWithPrototype:result]; -} -- (C2MTimeReq*) defaultInstance { - return [C2MTimeReq defaultInstance]; -} -- (C2MTimeReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MTimeReq*) buildPartial { - C2MTimeReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MTimeReqBuilder*) mergeFrom:(C2MTimeReq*) other { - if (other == [C2MTimeReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MTimeReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MTimeReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MTimeReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MTimeReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 20; - return self; -} -@end - -@interface C2MTimeRsp () -@property SInt32 cmdId; -@property UInt32 serverTime; -@end - -@implementation C2MTimeRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasServerTime { - return !!hasServerTime_; -} -- (void) setHasServerTime:(BOOL) value_ { - hasServerTime_ = !!value_; -} -@synthesize serverTime; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 21; - self.serverTime = 0; - } - return self; -} -static C2MTimeRsp* defaultC2MTimeRspInstance = nil; -+ (void) initialize { - if (self == [C2MTimeRsp class]) { - defaultC2MTimeRspInstance = [[C2MTimeRsp alloc] init]; - } -} -+ (C2MTimeRsp*) defaultInstance { - return defaultC2MTimeRspInstance; -} -- (C2MTimeRsp*) defaultInstance { - return defaultC2MTimeRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasServerTime) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasServerTime) { - [output writeUInt32:2 value:self.serverTime]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasServerTime) { - size_ += computeUInt32Size(2, self.serverTime); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MTimeRsp*) parseFromData:(NSData*) data { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromData:data] build]; -} -+ (C2MTimeRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MTimeRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MTimeRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MTimeRsp*)[[[C2MTimeRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MTimeRspBuilder*) builder { - return [[C2MTimeRspBuilder alloc] init]; -} -+ (C2MTimeRspBuilder*) builderWithPrototype:(C2MTimeRsp*) prototype { - return [[C2MTimeRsp builder] mergeFrom:prototype]; -} -- (C2MTimeRspBuilder*) builder { - return [C2MTimeRsp builder]; -} -- (C2MTimeRspBuilder*) toBuilder { - return [C2MTimeRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasServerTime) { - [output appendFormat:@"%@%@: %@\n", indent, @"serverTime", [NSNumber numberWithInteger:self.serverTime]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MTimeRsp class]]) { - return NO; - } - C2MTimeRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasServerTime == otherMessage.hasServerTime && - (!self.hasServerTime || self.serverTime == otherMessage.serverTime) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasServerTime) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.serverTime] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MTimeRspBuilder() -@property (strong) C2MTimeRsp* result; -@end - -@implementation C2MTimeRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MTimeRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MTimeRspBuilder*) clear { - self.result = [[C2MTimeRsp alloc] init]; - return self; -} -- (C2MTimeRspBuilder*) clone { - return [C2MTimeRsp builderWithPrototype:result]; -} -- (C2MTimeRsp*) defaultInstance { - return [C2MTimeRsp defaultInstance]; -} -- (C2MTimeRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MTimeRsp*) buildPartial { - C2MTimeRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MTimeRspBuilder*) mergeFrom:(C2MTimeRsp*) other { - if (other == [C2MTimeRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasServerTime) { - [self setServerTime:other.serverTime]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MTimeRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MTimeRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setServerTime:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MTimeRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MTimeRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 21; - return self; -} -- (BOOL) hasServerTime { - return result.hasServerTime; -} -- (UInt32) serverTime { - return result.serverTime; -} -- (C2MTimeRspBuilder*) setServerTime:(UInt32) value { - result.hasServerTime = YES; - result.serverTime = value; - return self; -} -- (C2MTimeRspBuilder*) clearServerTime { - result.hasServerTime = NO; - result.serverTime = 0; - return self; -} -@end - -@interface C2MUnReadMsgCntReq () -@property SInt32 cmdId; -@end - -@implementation C2MUnReadMsgCntReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 22; - } - return self; -} -static C2MUnReadMsgCntReq* defaultC2MUnReadMsgCntReqInstance = nil; -+ (void) initialize { - if (self == [C2MUnReadMsgCntReq class]) { - defaultC2MUnReadMsgCntReqInstance = [[C2MUnReadMsgCntReq alloc] init]; - } -} -+ (C2MUnReadMsgCntReq*) defaultInstance { - return defaultC2MUnReadMsgCntReqInstance; -} -- (C2MUnReadMsgCntReq*) defaultInstance { - return defaultC2MUnReadMsgCntReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUnReadMsgCntReq*) parseFromData:(NSData*) data { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromData:data] build]; -} -+ (C2MUnReadMsgCntReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromInputStream:input] build]; -} -+ (C2MUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntReq*)[[[C2MUnReadMsgCntReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntReqBuilder*) builder { - return [[C2MUnReadMsgCntReqBuilder alloc] init]; -} -+ (C2MUnReadMsgCntReqBuilder*) builderWithPrototype:(C2MUnReadMsgCntReq*) prototype { - return [[C2MUnReadMsgCntReq builder] mergeFrom:prototype]; -} -- (C2MUnReadMsgCntReqBuilder*) builder { - return [C2MUnReadMsgCntReq builder]; -} -- (C2MUnReadMsgCntReqBuilder*) toBuilder { - return [C2MUnReadMsgCntReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUnReadMsgCntReq class]]) { - return NO; - } - C2MUnReadMsgCntReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUnReadMsgCntReqBuilder() -@property (strong) C2MUnReadMsgCntReq* result; -@end - -@implementation C2MUnReadMsgCntReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUnReadMsgCntReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUnReadMsgCntReqBuilder*) clear { - self.result = [[C2MUnReadMsgCntReq alloc] init]; - return self; -} -- (C2MUnReadMsgCntReqBuilder*) clone { - return [C2MUnReadMsgCntReq builderWithPrototype:result]; -} -- (C2MUnReadMsgCntReq*) defaultInstance { - return [C2MUnReadMsgCntReq defaultInstance]; -} -- (C2MUnReadMsgCntReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUnReadMsgCntReq*) buildPartial { - C2MUnReadMsgCntReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUnReadMsgCntReqBuilder*) mergeFrom:(C2MUnReadMsgCntReq*) other { - if (other == [C2MUnReadMsgCntReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUnReadMsgCntReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUnReadMsgCntReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 22; - return self; -} -@end - -@interface C2MUnReadMsgCntRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * unreadListArray; -@end - -@implementation C2MUnReadMsgCntRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize unreadListArray; -@dynamic unreadList; -- (void) dealloc { - self.unreadListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 23; - } - return self; -} -static C2MUnReadMsgCntRsp* defaultC2MUnReadMsgCntRspInstance = nil; -+ (void) initialize { - if (self == [C2MUnReadMsgCntRsp class]) { - defaultC2MUnReadMsgCntRspInstance = [[C2MUnReadMsgCntRsp alloc] init]; - } -} -+ (C2MUnReadMsgCntRsp*) defaultInstance { - return defaultC2MUnReadMsgCntRspInstance; -} -- (C2MUnReadMsgCntRsp*) defaultInstance { - return defaultC2MUnReadMsgCntRspInstance; -} -- (NSArray *)unreadList { - return unreadListArray; -} -- (ClientUnReadInfo*)unreadListAtIndex:(NSUInteger)index { - return [unreadListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInitunreadList = YES; - [self.unreadList enumerateObjectsUsingBlock:^(ClientUnReadInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitunreadList = NO; - *stop = YES; - } - }]; - if (!isInitunreadList) return isInitunreadList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unreadListArray enumerateObjectsUsingBlock:^(ClientUnReadInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.unreadListArray enumerateObjectsUsingBlock:^(ClientUnReadInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUnReadMsgCntRsp*) parseFromData:(NSData*) data { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromData:data] build]; -} -+ (C2MUnReadMsgCntRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgCntRsp*)[[[C2MUnReadMsgCntRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgCntRspBuilder*) builder { - return [[C2MUnReadMsgCntRspBuilder alloc] init]; -} -+ (C2MUnReadMsgCntRspBuilder*) builderWithPrototype:(C2MUnReadMsgCntRsp*) prototype { - return [[C2MUnReadMsgCntRsp builder] mergeFrom:prototype]; -} -- (C2MUnReadMsgCntRspBuilder*) builder { - return [C2MUnReadMsgCntRsp builder]; -} -- (C2MUnReadMsgCntRspBuilder*) toBuilder { - return [C2MUnReadMsgCntRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unreadListArray enumerateObjectsUsingBlock:^(ClientUnReadInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"unreadList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUnReadMsgCntRsp class]]) { - return NO; - } - C2MUnReadMsgCntRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.unreadListArray isEqualToArray:otherMessage.unreadListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.unreadListArray enumerateObjectsUsingBlock:^(ClientUnReadInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUnReadMsgCntRspBuilder() -@property (strong) C2MUnReadMsgCntRsp* result; -@end - -@implementation C2MUnReadMsgCntRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUnReadMsgCntRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUnReadMsgCntRspBuilder*) clear { - self.result = [[C2MUnReadMsgCntRsp alloc] init]; - return self; -} -- (C2MUnReadMsgCntRspBuilder*) clone { - return [C2MUnReadMsgCntRsp builderWithPrototype:result]; -} -- (C2MUnReadMsgCntRsp*) defaultInstance { - return [C2MUnReadMsgCntRsp defaultInstance]; -} -- (C2MUnReadMsgCntRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUnReadMsgCntRsp*) buildPartial { - C2MUnReadMsgCntRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUnReadMsgCntRspBuilder*) mergeFrom:(C2MUnReadMsgCntRsp*) other { - if (other == [C2MUnReadMsgCntRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.unreadListArray.count > 0) { - if (result.unreadListArray == nil) { - result.unreadListArray = [[NSMutableArray alloc] initWithArray:other.unreadListArray]; - } else { - [result.unreadListArray addObjectsFromArray:other.unreadListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUnReadInfoBuilder* subBuilder = [ClientUnReadInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addUnreadList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUnReadMsgCntRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUnReadMsgCntRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 23; - return self; -} -- (NSMutableArray *)unreadList { - return result.unreadListArray; -} -- (ClientUnReadInfo*)unreadListAtIndex:(NSUInteger)index { - return [result unreadListAtIndex:index]; -} -- (C2MUnReadMsgCntRspBuilder *)addUnreadList:(ClientUnReadInfo*)value { - if (result.unreadListArray == nil) { - result.unreadListArray = [[NSMutableArray alloc]init]; - } - [result.unreadListArray addObject:value]; - return self; -} -- (C2MUnReadMsgCntRspBuilder *)setUnreadListArray:(NSArray *)array { - result.unreadListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MUnReadMsgCntRspBuilder *)clearUnreadList { - result.unreadListArray = nil; - return self; -} -@end - -@interface C2MUnReadMsgReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@end - -@implementation C2MUnReadMsgReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (void) dealloc { - self.fromUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 24; - self.fromUserId = @""; - } - return self; -} -static C2MUnReadMsgReq* defaultC2MUnReadMsgReqInstance = nil; -+ (void) initialize { - if (self == [C2MUnReadMsgReq class]) { - defaultC2MUnReadMsgReqInstance = [[C2MUnReadMsgReq alloc] init]; - } -} -+ (C2MUnReadMsgReq*) defaultInstance { - return defaultC2MUnReadMsgReqInstance; -} -- (C2MUnReadMsgReq*) defaultInstance { - return defaultC2MUnReadMsgReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUnReadMsgReq*) parseFromData:(NSData*) data { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromData:data] build]; -} -+ (C2MUnReadMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromInputStream:input] build]; -} -+ (C2MUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUnReadMsgReq*)[[[C2MUnReadMsgReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUnReadMsgReqBuilder*) builder { - return [[C2MUnReadMsgReqBuilder alloc] init]; -} -+ (C2MUnReadMsgReqBuilder*) builderWithPrototype:(C2MUnReadMsgReq*) prototype { - return [[C2MUnReadMsgReq builder] mergeFrom:prototype]; -} -- (C2MUnReadMsgReqBuilder*) builder { - return [C2MUnReadMsgReq builder]; -} -- (C2MUnReadMsgReqBuilder*) toBuilder { - return [C2MUnReadMsgReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUnReadMsgReq class]]) { - return NO; - } - C2MUnReadMsgReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUnReadMsgReqBuilder() -@property (strong) C2MUnReadMsgReq* result; -@end - -@implementation C2MUnReadMsgReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUnReadMsgReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUnReadMsgReqBuilder*) clear { - self.result = [[C2MUnReadMsgReq alloc] init]; - return self; -} -- (C2MUnReadMsgReqBuilder*) clone { - return [C2MUnReadMsgReq builderWithPrototype:result]; -} -- (C2MUnReadMsgReq*) defaultInstance { - return [C2MUnReadMsgReq defaultInstance]; -} -- (C2MUnReadMsgReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUnReadMsgReq*) buildPartial { - C2MUnReadMsgReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUnReadMsgReqBuilder*) mergeFrom:(C2MUnReadMsgReq*) other { - if (other == [C2MUnReadMsgReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUnReadMsgReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUnReadMsgReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 24; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MUnReadMsgReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MUnReadMsgReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -@end - -@interface C2MHistoryMsgReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property UInt32 msgOffset; -@property UInt32 msgCount; -@end - -@implementation C2MHistoryMsgReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasMsgOffset { - return !!hasMsgOffset_; -} -- (void) setHasMsgOffset:(BOOL) value_ { - hasMsgOffset_ = !!value_; -} -@synthesize msgOffset; -- (BOOL) hasMsgCount { - return !!hasMsgCount_; -} -- (void) setHasMsgCount:(BOOL) value_ { - hasMsgCount_ = !!value_; -} -@synthesize msgCount; -- (void) dealloc { - self.fromUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 25; - self.fromUserId = @""; - self.msgOffset = 0; - self.msgCount = 0; - } - return self; -} -static C2MHistoryMsgReq* defaultC2MHistoryMsgReqInstance = nil; -+ (void) initialize { - if (self == [C2MHistoryMsgReq class]) { - defaultC2MHistoryMsgReqInstance = [[C2MHistoryMsgReq alloc] init]; - } -} -+ (C2MHistoryMsgReq*) defaultInstance { - return defaultC2MHistoryMsgReqInstance; -} -- (C2MHistoryMsgReq*) defaultInstance { - return defaultC2MHistoryMsgReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasMsgOffset) { - return NO; - } - if (!self.hasMsgCount) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasMsgOffset) { - [output writeUInt32:3 value:self.msgOffset]; - } - if (self.hasMsgCount) { - [output writeUInt32:4 value:self.msgCount]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasMsgOffset) { - size_ += computeUInt32Size(3, self.msgOffset); - } - if (self.hasMsgCount) { - size_ += computeUInt32Size(4, self.msgCount); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MHistoryMsgReq*) parseFromData:(NSData*) data { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromData:data] build]; -} -+ (C2MHistoryMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromInputStream:input] build]; -} -+ (C2MHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MHistoryMsgReq*)[[[C2MHistoryMsgReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MHistoryMsgReqBuilder*) builder { - return [[C2MHistoryMsgReqBuilder alloc] init]; -} -+ (C2MHistoryMsgReqBuilder*) builderWithPrototype:(C2MHistoryMsgReq*) prototype { - return [[C2MHistoryMsgReq builder] mergeFrom:prototype]; -} -- (C2MHistoryMsgReqBuilder*) builder { - return [C2MHistoryMsgReq builder]; -} -- (C2MHistoryMsgReqBuilder*) toBuilder { - return [C2MHistoryMsgReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasMsgOffset) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgOffset", [NSNumber numberWithInteger:self.msgOffset]]; - } - if (self.hasMsgCount) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgCount", [NSNumber numberWithInteger:self.msgCount]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MHistoryMsgReq class]]) { - return NO; - } - C2MHistoryMsgReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasMsgOffset == otherMessage.hasMsgOffset && - (!self.hasMsgOffset || self.msgOffset == otherMessage.msgOffset) && - self.hasMsgCount == otherMessage.hasMsgCount && - (!self.hasMsgCount || self.msgCount == otherMessage.msgCount) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasMsgOffset) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgOffset] hash]; - } - if (self.hasMsgCount) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgCount] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MHistoryMsgReqBuilder() -@property (strong) C2MHistoryMsgReq* result; -@end - -@implementation C2MHistoryMsgReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MHistoryMsgReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MHistoryMsgReqBuilder*) clear { - self.result = [[C2MHistoryMsgReq alloc] init]; - return self; -} -- (C2MHistoryMsgReqBuilder*) clone { - return [C2MHistoryMsgReq builderWithPrototype:result]; -} -- (C2MHistoryMsgReq*) defaultInstance { - return [C2MHistoryMsgReq defaultInstance]; -} -- (C2MHistoryMsgReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MHistoryMsgReq*) buildPartial { - C2MHistoryMsgReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MHistoryMsgReqBuilder*) mergeFrom:(C2MHistoryMsgReq*) other { - if (other == [C2MHistoryMsgReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasMsgOffset) { - [self setMsgOffset:other.msgOffset]; - } - if (other.hasMsgCount) { - [self setMsgCount:other.msgCount]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 24: { - [self setMsgOffset:[input readUInt32]]; - break; - } - case 32: { - [self setMsgCount:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MHistoryMsgReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MHistoryMsgReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 25; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MHistoryMsgReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MHistoryMsgReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasMsgOffset { - return result.hasMsgOffset; -} -- (UInt32) msgOffset { - return result.msgOffset; -} -- (C2MHistoryMsgReqBuilder*) setMsgOffset:(UInt32) value { - result.hasMsgOffset = YES; - result.msgOffset = value; - return self; -} -- (C2MHistoryMsgReqBuilder*) clearMsgOffset { - result.hasMsgOffset = NO; - result.msgOffset = 0; - return self; -} -- (BOOL) hasMsgCount { - return result.hasMsgCount; -} -- (UInt32) msgCount { - return result.msgCount; -} -- (C2MHistoryMsgReqBuilder*) setMsgCount:(UInt32) value { - result.hasMsgCount = YES; - result.msgCount = value; - return self; -} -- (C2MHistoryMsgReqBuilder*) clearMsgCount { - result.hasMsgCount = NO; - result.msgCount = 0; - return self; -} -@end - -@interface C2MMsgListRsp () -@property SInt32 cmdId; -@property (strong) NSString* displayUserId; -@property (strong) NSMutableArray * msgListArray; -@end - -@implementation C2MMsgListRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasDisplayUserId { - return !!hasDisplayUserId_; -} -- (void) setHasDisplayUserId:(BOOL) value_ { - hasDisplayUserId_ = !!value_; -} -@synthesize displayUserId; -@synthesize msgListArray; -@dynamic msgList; -- (void) dealloc { - self.displayUserId = nil; - self.msgListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 26; - self.displayUserId = @""; - } - return self; -} -static C2MMsgListRsp* defaultC2MMsgListRspInstance = nil; -+ (void) initialize { - if (self == [C2MMsgListRsp class]) { - defaultC2MMsgListRspInstance = [[C2MMsgListRsp alloc] init]; - } -} -+ (C2MMsgListRsp*) defaultInstance { - return defaultC2MMsgListRspInstance; -} -- (C2MMsgListRsp*) defaultInstance { - return defaultC2MMsgListRspInstance; -} -- (NSArray *)msgList { - return msgListArray; -} -- (ClientMsgInfo*)msgListAtIndex:(NSUInteger)index { - return [msgListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasDisplayUserId) { - return NO; - } - __block BOOL isInitmsgList = YES; - [self.msgList enumerateObjectsUsingBlock:^(ClientMsgInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitmsgList = NO; - *stop = YES; - } - }]; - if (!isInitmsgList) return isInitmsgList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasDisplayUserId) { - [output writeString:2 value:self.displayUserId]; - } - [self.msgListArray enumerateObjectsUsingBlock:^(ClientMsgInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:3 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasDisplayUserId) { - size_ += computeStringSize(2, self.displayUserId); - } - [self.msgListArray enumerateObjectsUsingBlock:^(ClientMsgInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(3, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MMsgListRsp*) parseFromData:(NSData*) data { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromData:data] build]; -} -+ (C2MMsgListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MMsgListRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MMsgListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MMsgListRsp*)[[[C2MMsgListRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MMsgListRspBuilder*) builder { - return [[C2MMsgListRspBuilder alloc] init]; -} -+ (C2MMsgListRspBuilder*) builderWithPrototype:(C2MMsgListRsp*) prototype { - return [[C2MMsgListRsp builder] mergeFrom:prototype]; -} -- (C2MMsgListRspBuilder*) builder { - return [C2MMsgListRsp builder]; -} -- (C2MMsgListRspBuilder*) toBuilder { - return [C2MMsgListRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasDisplayUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"displayUserId", self.displayUserId]; - } - [self.msgListArray enumerateObjectsUsingBlock:^(ClientMsgInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"msgList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MMsgListRsp class]]) { - return NO; - } - C2MMsgListRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasDisplayUserId == otherMessage.hasDisplayUserId && - (!self.hasDisplayUserId || [self.displayUserId isEqual:otherMessage.displayUserId]) && - [self.msgListArray isEqualToArray:otherMessage.msgListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasDisplayUserId) { - hashCode = hashCode * 31 + [self.displayUserId hash]; - } - [self.msgListArray enumerateObjectsUsingBlock:^(ClientMsgInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MMsgListRspBuilder() -@property (strong) C2MMsgListRsp* result; -@end - -@implementation C2MMsgListRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MMsgListRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MMsgListRspBuilder*) clear { - self.result = [[C2MMsgListRsp alloc] init]; - return self; -} -- (C2MMsgListRspBuilder*) clone { - return [C2MMsgListRsp builderWithPrototype:result]; -} -- (C2MMsgListRsp*) defaultInstance { - return [C2MMsgListRsp defaultInstance]; -} -- (C2MMsgListRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MMsgListRsp*) buildPartial { - C2MMsgListRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MMsgListRspBuilder*) mergeFrom:(C2MMsgListRsp*) other { - if (other == [C2MMsgListRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasDisplayUserId) { - [self setDisplayUserId:other.displayUserId]; - } - if (other.msgListArray.count > 0) { - if (result.msgListArray == nil) { - result.msgListArray = [[NSMutableArray alloc] initWithArray:other.msgListArray]; - } else { - [result.msgListArray addObjectsFromArray:other.msgListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setDisplayUserId:[input readString]]; - break; - } - case 26: { - ClientMsgInfoBuilder* subBuilder = [ClientMsgInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addMsgList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MMsgListRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MMsgListRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 26; - return self; -} -- (BOOL) hasDisplayUserId { - return result.hasDisplayUserId; -} -- (NSString*) displayUserId { - return result.displayUserId; -} -- (C2MMsgListRspBuilder*) setDisplayUserId:(NSString*) value { - result.hasDisplayUserId = YES; - result.displayUserId = value; - return self; -} -- (C2MMsgListRspBuilder*) clearDisplayUserId { - result.hasDisplayUserId = NO; - result.displayUserId = @""; - return self; -} -- (NSMutableArray *)msgList { - return result.msgListArray; -} -- (ClientMsgInfo*)msgListAtIndex:(NSUInteger)index { - return [result msgListAtIndex:index]; -} -- (C2MMsgListRspBuilder *)addMsgList:(ClientMsgInfo*)value { - if (result.msgListArray == nil) { - result.msgListArray = [[NSMutableArray alloc]init]; - } - [result.msgListArray addObject:value]; - return self; -} -- (C2MMsgListRspBuilder *)setMsgListArray:(NSArray *)array { - result.msgListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MMsgListRspBuilder *)clearMsgList { - result.msgListArray = nil; - return self; -} -@end - -@interface C2MAllUserReq () -@property SInt32 cmdId; -@end - -@implementation C2MAllUserReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 27; - } - return self; -} -static C2MAllUserReq* defaultC2MAllUserReqInstance = nil; -+ (void) initialize { - if (self == [C2MAllUserReq class]) { - defaultC2MAllUserReqInstance = [[C2MAllUserReq alloc] init]; - } -} -+ (C2MAllUserReq*) defaultInstance { - return defaultC2MAllUserReqInstance; -} -- (C2MAllUserReq*) defaultInstance { - return defaultC2MAllUserReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MAllUserReq*) parseFromData:(NSData*) data { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromData:data] build]; -} -+ (C2MAllUserReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MAllUserReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromInputStream:input] build]; -} -+ (C2MAllUserReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MAllUserReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MAllUserReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MAllUserReq*)[[[C2MAllUserReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MAllUserReqBuilder*) builder { - return [[C2MAllUserReqBuilder alloc] init]; -} -+ (C2MAllUserReqBuilder*) builderWithPrototype:(C2MAllUserReq*) prototype { - return [[C2MAllUserReq builder] mergeFrom:prototype]; -} -- (C2MAllUserReqBuilder*) builder { - return [C2MAllUserReq builder]; -} -- (C2MAllUserReqBuilder*) toBuilder { - return [C2MAllUserReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MAllUserReq class]]) { - return NO; - } - C2MAllUserReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MAllUserReqBuilder() -@property (strong) C2MAllUserReq* result; -@end - -@implementation C2MAllUserReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MAllUserReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MAllUserReqBuilder*) clear { - self.result = [[C2MAllUserReq alloc] init]; - return self; -} -- (C2MAllUserReqBuilder*) clone { - return [C2MAllUserReq builderWithPrototype:result]; -} -- (C2MAllUserReq*) defaultInstance { - return [C2MAllUserReq defaultInstance]; -} -- (C2MAllUserReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MAllUserReq*) buildPartial { - C2MAllUserReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MAllUserReqBuilder*) mergeFrom:(C2MAllUserReq*) other { - if (other == [C2MAllUserReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MAllUserReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MAllUserReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MAllUserReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MAllUserReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 27; - return self; -} -@end - -@interface C2MUserInfoReq () -@property SInt32 cmdId; -@property (strong) NSMutableArray * userIdListArray; -@end - -@implementation C2MUserInfoReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize userIdListArray; -@dynamic userIdList; -- (void) dealloc { - self.userIdListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 28; - } - return self; -} -static C2MUserInfoReq* defaultC2MUserInfoReqInstance = nil; -+ (void) initialize { - if (self == [C2MUserInfoReq class]) { - defaultC2MUserInfoReqInstance = [[C2MUserInfoReq alloc] init]; - } -} -+ (C2MUserInfoReq*) defaultInstance { - return defaultC2MUserInfoReqInstance; -} -- (C2MUserInfoReq*) defaultInstance { - return defaultC2MUserInfoReqInstance; -} -- (NSArray *)userIdList { - return userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [userIdListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userIdListArray.count; - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserInfoReq*) parseFromData:(NSData*) data { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromData:data] build]; -} -+ (C2MUserInfoReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromInputStream:input] build]; -} -+ (C2MUserInfoReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserInfoReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoReq*)[[[C2MUserInfoReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoReqBuilder*) builder { - return [[C2MUserInfoReqBuilder alloc] init]; -} -+ (C2MUserInfoReqBuilder*) builderWithPrototype:(C2MUserInfoReq*) prototype { - return [[C2MUserInfoReq builder] mergeFrom:prototype]; -} -- (C2MUserInfoReqBuilder*) builder { - return [C2MUserInfoReq builder]; -} -- (C2MUserInfoReqBuilder*) toBuilder { - return [C2MUserInfoReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userIdList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserInfoReq class]]) { - return NO; - } - C2MUserInfoReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.userIdListArray isEqualToArray:otherMessage.userIdListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserInfoReqBuilder() -@property (strong) C2MUserInfoReq* result; -@end - -@implementation C2MUserInfoReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserInfoReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserInfoReqBuilder*) clear { - self.result = [[C2MUserInfoReq alloc] init]; - return self; -} -- (C2MUserInfoReqBuilder*) clone { - return [C2MUserInfoReq builderWithPrototype:result]; -} -- (C2MUserInfoReq*) defaultInstance { - return [C2MUserInfoReq defaultInstance]; -} -- (C2MUserInfoReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserInfoReq*) buildPartial { - C2MUserInfoReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserInfoReqBuilder*) mergeFrom:(C2MUserInfoReq*) other { - if (other == [C2MUserInfoReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.userIdListArray.count > 0) { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:other.userIdListArray]; - } else { - [result.userIdListArray addObjectsFromArray:other.userIdListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserInfoReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserInfoReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self addUserIdList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserInfoReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserInfoReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 28; - return self; -} -- (NSMutableArray *)userIdList { - return result.userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [result userIdListAtIndex:index]; -} -- (C2MUserInfoReqBuilder *)addUserIdList:(NSString*)value { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc]init]; - } - [result.userIdListArray addObject:value]; - return self; -} -- (C2MUserInfoReqBuilder *)setUserIdListArray:(NSArray *)array { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MUserInfoReqBuilder *)clearUserIdList { - result.userIdListArray = nil; - return self; -} -@end - -@interface C2MUserInfoRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * userInfoListArray; -@end - -@implementation C2MUserInfoRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize userInfoListArray; -@dynamic userInfoList; -- (void) dealloc { - self.userInfoListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 29; - } - return self; -} -static C2MUserInfoRsp* defaultC2MUserInfoRspInstance = nil; -+ (void) initialize { - if (self == [C2MUserInfoRsp class]) { - defaultC2MUserInfoRspInstance = [[C2MUserInfoRsp alloc] init]; - } -} -+ (C2MUserInfoRsp*) defaultInstance { - return defaultC2MUserInfoRspInstance; -} -- (C2MUserInfoRsp*) defaultInstance { - return defaultC2MUserInfoRspInstance; -} -- (NSArray *)userInfoList { - return userInfoListArray; -} -- (ClientUserInfo*)userInfoListAtIndex:(NSUInteger)index { - return [userInfoListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInituserInfoList = YES; - [self.userInfoList enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInituserInfoList = NO; - *stop = YES; - } - }]; - if (!isInituserInfoList) return isInituserInfoList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.userInfoListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.userInfoListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MUserInfoRsp*) parseFromData:(NSData*) data { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromData:data] build]; -} -+ (C2MUserInfoRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MUserInfoRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MUserInfoRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MUserInfoRsp*)[[[C2MUserInfoRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MUserInfoRspBuilder*) builder { - return [[C2MUserInfoRspBuilder alloc] init]; -} -+ (C2MUserInfoRspBuilder*) builderWithPrototype:(C2MUserInfoRsp*) prototype { - return [[C2MUserInfoRsp builder] mergeFrom:prototype]; -} -- (C2MUserInfoRspBuilder*) builder { - return [C2MUserInfoRsp builder]; -} -- (C2MUserInfoRspBuilder*) toBuilder { - return [C2MUserInfoRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.userInfoListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"userInfoList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MUserInfoRsp class]]) { - return NO; - } - C2MUserInfoRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.userInfoListArray isEqualToArray:otherMessage.userInfoListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.userInfoListArray enumerateObjectsUsingBlock:^(ClientUserInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MUserInfoRspBuilder() -@property (strong) C2MUserInfoRsp* result; -@end - -@implementation C2MUserInfoRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MUserInfoRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MUserInfoRspBuilder*) clear { - self.result = [[C2MUserInfoRsp alloc] init]; - return self; -} -- (C2MUserInfoRspBuilder*) clone { - return [C2MUserInfoRsp builderWithPrototype:result]; -} -- (C2MUserInfoRsp*) defaultInstance { - return [C2MUserInfoRsp defaultInstance]; -} -- (C2MUserInfoRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MUserInfoRsp*) buildPartial { - C2MUserInfoRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MUserInfoRspBuilder*) mergeFrom:(C2MUserInfoRsp*) other { - if (other == [C2MUserInfoRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.userInfoListArray.count > 0) { - if (result.userInfoListArray == nil) { - result.userInfoListArray = [[NSMutableArray alloc] initWithArray:other.userInfoListArray]; - } else { - [result.userInfoListArray addObjectsFromArray:other.userInfoListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MUserInfoRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MUserInfoRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientUserInfoBuilder* subBuilder = [ClientUserInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addUserInfoList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MUserInfoRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MUserInfoRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 29; - return self; -} -- (NSMutableArray *)userInfoList { - return result.userInfoListArray; -} -- (ClientUserInfo*)userInfoListAtIndex:(NSUInteger)index { - return [result userInfoListAtIndex:index]; -} -- (C2MUserInfoRspBuilder *)addUserInfoList:(ClientUserInfo*)value { - if (result.userInfoListArray == nil) { - result.userInfoListArray = [[NSMutableArray alloc]init]; - } - [result.userInfoListArray addObject:value]; - return self; -} -- (C2MUserInfoRspBuilder *)setUserInfoListArray:(NSArray *)array { - result.userInfoListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MUserInfoRspBuilder *)clearUserInfoList { - result.userInfoListArray = nil; - return self; -} -@end - -@interface C2MDBQueryReq () -@property SInt32 cmdId; -@property UInt32 seqNo; -@property (strong) NSData* queryData; -@end - -@implementation C2MDBQueryReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSeqNo { - return !!hasSeqNo_; -} -- (void) setHasSeqNo:(BOOL) value_ { - hasSeqNo_ = !!value_; -} -@synthesize seqNo; -- (BOOL) hasQueryData { - return !!hasQueryData_; -} -- (void) setHasQueryData:(BOOL) value_ { - hasQueryData_ = !!value_; -} -@synthesize queryData; -- (void) dealloc { - self.queryData = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 30; - self.seqNo = 0; - self.queryData = [NSData data]; - } - return self; -} -static C2MDBQueryReq* defaultC2MDBQueryReqInstance = nil; -+ (void) initialize { - if (self == [C2MDBQueryReq class]) { - defaultC2MDBQueryReqInstance = [[C2MDBQueryReq alloc] init]; - } -} -+ (C2MDBQueryReq*) defaultInstance { - return defaultC2MDBQueryReqInstance; -} -- (C2MDBQueryReq*) defaultInstance { - return defaultC2MDBQueryReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasSeqNo) { - return NO; - } - if (!self.hasQueryData) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSeqNo) { - [output writeUInt32:2 value:self.seqNo]; - } - if (self.hasQueryData) { - [output writeData:3 value:self.queryData]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSeqNo) { - size_ += computeUInt32Size(2, self.seqNo); - } - if (self.hasQueryData) { - size_ += computeDataSize(3, self.queryData); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MDBQueryReq*) parseFromData:(NSData*) data { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromData:data] build]; -} -+ (C2MDBQueryReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromInputStream:input] build]; -} -+ (C2MDBQueryReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MDBQueryReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryReq*)[[[C2MDBQueryReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryReqBuilder*) builder { - return [[C2MDBQueryReqBuilder alloc] init]; -} -+ (C2MDBQueryReqBuilder*) builderWithPrototype:(C2MDBQueryReq*) prototype { - return [[C2MDBQueryReq builder] mergeFrom:prototype]; -} -- (C2MDBQueryReqBuilder*) builder { - return [C2MDBQueryReq builder]; -} -- (C2MDBQueryReqBuilder*) toBuilder { - return [C2MDBQueryReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSeqNo) { - [output appendFormat:@"%@%@: %@\n", indent, @"seqNo", [NSNumber numberWithInteger:self.seqNo]]; - } - if (self.hasQueryData) { - [output appendFormat:@"%@%@: %@\n", indent, @"queryData", self.queryData]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MDBQueryReq class]]) { - return NO; - } - C2MDBQueryReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSeqNo == otherMessage.hasSeqNo && - (!self.hasSeqNo || self.seqNo == otherMessage.seqNo) && - self.hasQueryData == otherMessage.hasQueryData && - (!self.hasQueryData || [self.queryData isEqual:otherMessage.queryData]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSeqNo) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.seqNo] hash]; - } - if (self.hasQueryData) { - hashCode = hashCode * 31 + [self.queryData hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MDBQueryReqBuilder() -@property (strong) C2MDBQueryReq* result; -@end - -@implementation C2MDBQueryReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MDBQueryReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MDBQueryReqBuilder*) clear { - self.result = [[C2MDBQueryReq alloc] init]; - return self; -} -- (C2MDBQueryReqBuilder*) clone { - return [C2MDBQueryReq builderWithPrototype:result]; -} -- (C2MDBQueryReq*) defaultInstance { - return [C2MDBQueryReq defaultInstance]; -} -- (C2MDBQueryReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MDBQueryReq*) buildPartial { - C2MDBQueryReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MDBQueryReqBuilder*) mergeFrom:(C2MDBQueryReq*) other { - if (other == [C2MDBQueryReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSeqNo) { - [self setSeqNo:other.seqNo]; - } - if (other.hasQueryData) { - [self setQueryData:other.queryData]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MDBQueryReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MDBQueryReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setSeqNo:[input readUInt32]]; - break; - } - case 26: { - [self setQueryData:[input readData]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MDBQueryReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MDBQueryReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 30; - return self; -} -- (BOOL) hasSeqNo { - return result.hasSeqNo; -} -- (UInt32) seqNo { - return result.seqNo; -} -- (C2MDBQueryReqBuilder*) setSeqNo:(UInt32) value { - result.hasSeqNo = YES; - result.seqNo = value; - return self; -} -- (C2MDBQueryReqBuilder*) clearSeqNo { - result.hasSeqNo = NO; - result.seqNo = 0; - return self; -} -- (BOOL) hasQueryData { - return result.hasQueryData; -} -- (NSData*) queryData { - return result.queryData; -} -- (C2MDBQueryReqBuilder*) setQueryData:(NSData*) value { - result.hasQueryData = YES; - result.queryData = value; - return self; -} -- (C2MDBQueryReqBuilder*) clearQueryData { - result.hasQueryData = NO; - result.queryData = [NSData data]; - return self; -} -@end - -@interface C2MDBQueryRsp () -@property SInt32 cmdId; -@property UInt32 seqNo; -@property (strong) NSData* resultData; -@end - -@implementation C2MDBQueryRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSeqNo { - return !!hasSeqNo_; -} -- (void) setHasSeqNo:(BOOL) value_ { - hasSeqNo_ = !!value_; -} -@synthesize seqNo; -- (BOOL) hasResultData { - return !!hasResultData_; -} -- (void) setHasResultData:(BOOL) value_ { - hasResultData_ = !!value_; -} -@synthesize resultData; -- (void) dealloc { - self.resultData = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 31; - self.seqNo = 0; - self.resultData = [NSData data]; - } - return self; -} -static C2MDBQueryRsp* defaultC2MDBQueryRspInstance = nil; -+ (void) initialize { - if (self == [C2MDBQueryRsp class]) { - defaultC2MDBQueryRspInstance = [[C2MDBQueryRsp alloc] init]; - } -} -+ (C2MDBQueryRsp*) defaultInstance { - return defaultC2MDBQueryRspInstance; -} -- (C2MDBQueryRsp*) defaultInstance { - return defaultC2MDBQueryRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasSeqNo) { - return NO; - } - if (!self.hasResultData) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSeqNo) { - [output writeUInt32:2 value:self.seqNo]; - } - if (self.hasResultData) { - [output writeData:3 value:self.resultData]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSeqNo) { - size_ += computeUInt32Size(2, self.seqNo); - } - if (self.hasResultData) { - size_ += computeDataSize(3, self.resultData); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MDBQueryRsp*) parseFromData:(NSData*) data { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromData:data] build]; -} -+ (C2MDBQueryRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MDBQueryRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MDBQueryRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MDBQueryRsp*)[[[C2MDBQueryRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MDBQueryRspBuilder*) builder { - return [[C2MDBQueryRspBuilder alloc] init]; -} -+ (C2MDBQueryRspBuilder*) builderWithPrototype:(C2MDBQueryRsp*) prototype { - return [[C2MDBQueryRsp builder] mergeFrom:prototype]; -} -- (C2MDBQueryRspBuilder*) builder { - return [C2MDBQueryRsp builder]; -} -- (C2MDBQueryRspBuilder*) toBuilder { - return [C2MDBQueryRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSeqNo) { - [output appendFormat:@"%@%@: %@\n", indent, @"seqNo", [NSNumber numberWithInteger:self.seqNo]]; - } - if (self.hasResultData) { - [output appendFormat:@"%@%@: %@\n", indent, @"resultData", self.resultData]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MDBQueryRsp class]]) { - return NO; - } - C2MDBQueryRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSeqNo == otherMessage.hasSeqNo && - (!self.hasSeqNo || self.seqNo == otherMessage.seqNo) && - self.hasResultData == otherMessage.hasResultData && - (!self.hasResultData || [self.resultData isEqual:otherMessage.resultData]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSeqNo) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.seqNo] hash]; - } - if (self.hasResultData) { - hashCode = hashCode * 31 + [self.resultData hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MDBQueryRspBuilder() -@property (strong) C2MDBQueryRsp* result; -@end - -@implementation C2MDBQueryRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MDBQueryRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MDBQueryRspBuilder*) clear { - self.result = [[C2MDBQueryRsp alloc] init]; - return self; -} -- (C2MDBQueryRspBuilder*) clone { - return [C2MDBQueryRsp builderWithPrototype:result]; -} -- (C2MDBQueryRsp*) defaultInstance { - return [C2MDBQueryRsp defaultInstance]; -} -- (C2MDBQueryRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MDBQueryRsp*) buildPartial { - C2MDBQueryRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MDBQueryRspBuilder*) mergeFrom:(C2MDBQueryRsp*) other { - if (other == [C2MDBQueryRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSeqNo) { - [self setSeqNo:other.seqNo]; - } - if (other.hasResultData) { - [self setResultData:other.resultData]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MDBQueryRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MDBQueryRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setSeqNo:[input readUInt32]]; - break; - } - case 26: { - [self setResultData:[input readData]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MDBQueryRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MDBQueryRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 31; - return self; -} -- (BOOL) hasSeqNo { - return result.hasSeqNo; -} -- (UInt32) seqNo { - return result.seqNo; -} -- (C2MDBQueryRspBuilder*) setSeqNo:(UInt32) value { - result.hasSeqNo = YES; - result.seqNo = value; - return self; -} -- (C2MDBQueryRspBuilder*) clearSeqNo { - result.hasSeqNo = NO; - result.seqNo = 0; - return self; -} -- (BOOL) hasResultData { - return result.hasResultData; -} -- (NSData*) resultData { - return result.resultData; -} -- (C2MDBQueryRspBuilder*) setResultData:(NSData*) value { - result.hasResultData = YES; - result.resultData = value; - return self; -} -- (C2MDBQueryRspBuilder*) clearResultData { - result.hasResultData = NO; - result.resultData = [NSData data]; - return self; -} -@end - -@interface C2MRemoveSessionReq () -@property SInt32 cmdId; -@property SessionType sessionType; -@property (strong) NSString* sessionId; -@end - -@implementation C2MRemoveSessionReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasSessionType { - return !!hasSessionType_; -} -- (void) setHasSessionType:(BOOL) value_ { - hasSessionType_ = !!value_; -} -@synthesize sessionType; -- (BOOL) hasSessionId { - return !!hasSessionId_; -} -- (void) setHasSessionId:(BOOL) value_ { - hasSessionId_ = !!value_; -} -@synthesize sessionId; -- (void) dealloc { - self.sessionId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 32; - self.sessionType = SessionTypeSessionTypeSingle; - self.sessionId = @""; - } - return self; -} -static C2MRemoveSessionReq* defaultC2MRemoveSessionReqInstance = nil; -+ (void) initialize { - if (self == [C2MRemoveSessionReq class]) { - defaultC2MRemoveSessionReqInstance = [[C2MRemoveSessionReq alloc] init]; - } -} -+ (C2MRemoveSessionReq*) defaultInstance { - return defaultC2MRemoveSessionReqInstance; -} -- (C2MRemoveSessionReq*) defaultInstance { - return defaultC2MRemoveSessionReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasSessionType) { - return NO; - } - if (!self.hasSessionId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasSessionType) { - [output writeEnum:2 value:self.sessionType]; - } - if (self.hasSessionId) { - [output writeString:3 value:self.sessionId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasSessionType) { - size_ += computeEnumSize(2, self.sessionType); - } - if (self.hasSessionId) { - size_ += computeStringSize(3, self.sessionId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MRemoveSessionReq*) parseFromData:(NSData*) data { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromData:data] build]; -} -+ (C2MRemoveSessionReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromInputStream:input] build]; -} -+ (C2MRemoveSessionReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MRemoveSessionReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionReq*)[[[C2MRemoveSessionReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionReqBuilder*) builder { - return [[C2MRemoveSessionReqBuilder alloc] init]; -} -+ (C2MRemoveSessionReqBuilder*) builderWithPrototype:(C2MRemoveSessionReq*) prototype { - return [[C2MRemoveSessionReq builder] mergeFrom:prototype]; -} -- (C2MRemoveSessionReqBuilder*) builder { - return [C2MRemoveSessionReq builder]; -} -- (C2MRemoveSessionReqBuilder*) toBuilder { - return [C2MRemoveSessionReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasSessionType) { - [output appendFormat:@"%@%@: %d\n", indent, @"sessionType", self.sessionType]; - } - if (self.hasSessionId) { - [output appendFormat:@"%@%@: %@\n", indent, @"sessionId", self.sessionId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MRemoveSessionReq class]]) { - return NO; - } - C2MRemoveSessionReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasSessionType == otherMessage.hasSessionType && - (!self.hasSessionType || self.sessionType == otherMessage.sessionType) && - self.hasSessionId == otherMessage.hasSessionId && - (!self.hasSessionId || [self.sessionId isEqual:otherMessage.sessionId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasSessionType) { - hashCode = hashCode * 31 + self.sessionType; - } - if (self.hasSessionId) { - hashCode = hashCode * 31 + [self.sessionId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MRemoveSessionReqBuilder() -@property (strong) C2MRemoveSessionReq* result; -@end - -@implementation C2MRemoveSessionReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MRemoveSessionReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MRemoveSessionReqBuilder*) clear { - self.result = [[C2MRemoveSessionReq alloc] init]; - return self; -} -- (C2MRemoveSessionReqBuilder*) clone { - return [C2MRemoveSessionReq builderWithPrototype:result]; -} -- (C2MRemoveSessionReq*) defaultInstance { - return [C2MRemoveSessionReq defaultInstance]; -} -- (C2MRemoveSessionReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MRemoveSessionReq*) buildPartial { - C2MRemoveSessionReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MRemoveSessionReqBuilder*) mergeFrom:(C2MRemoveSessionReq*) other { - if (other == [C2MRemoveSessionReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasSessionType) { - [self setSessionType:other.sessionType]; - } - if (other.hasSessionId) { - [self setSessionId:other.sessionId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MRemoveSessionReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MRemoveSessionReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - SessionType value = (SessionType)[input readEnum]; - if (SessionTypeIsValidValue(value)) { - [self setSessionType:value]; - } else { - [unknownFields mergeVarintField:2 value:value]; - } - break; - } - case 26: { - [self setSessionId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MRemoveSessionReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MRemoveSessionReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 32; - return self; -} -- (BOOL) hasSessionType { - return result.hasSessionType; -} -- (SessionType) sessionType { - return result.sessionType; -} -- (C2MRemoveSessionReqBuilder*) setSessionType:(SessionType) value { - result.hasSessionType = YES; - result.sessionType = value; - return self; -} -- (C2MRemoveSessionReqBuilder*) clearSessionType { - result.hasSessionType = NO; - result.sessionType = SessionTypeSessionTypeSingle; - return self; -} -- (BOOL) hasSessionId { - return result.hasSessionId; -} -- (NSString*) sessionId { - return result.sessionId; -} -- (C2MRemoveSessionReqBuilder*) setSessionId:(NSString*) value { - result.hasSessionId = YES; - result.sessionId = value; - return self; -} -- (C2MRemoveSessionReqBuilder*) clearSessionId { - result.hasSessionId = NO; - result.sessionId = @""; - return self; -} -@end - -@interface C2MRemoveSessionRsp () -@property SInt32 cmdId; -@property UInt32 results; -@property SessionType sessionType; -@property (strong) NSString* sessionId; -@end - -@implementation C2MRemoveSessionRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (BOOL) hasSessionType { - return !!hasSessionType_; -} -- (void) setHasSessionType:(BOOL) value_ { - hasSessionType_ = !!value_; -} -@synthesize sessionType; -- (BOOL) hasSessionId { - return !!hasSessionId_; -} -- (void) setHasSessionId:(BOOL) value_ { - hasSessionId_ = !!value_; -} -@synthesize sessionId; -- (void) dealloc { - self.sessionId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 33; - self.results = 0; - self.sessionType = SessionTypeSessionTypeSingle; - self.sessionId = @""; - } - return self; -} -static C2MRemoveSessionRsp* defaultC2MRemoveSessionRspInstance = nil; -+ (void) initialize { - if (self == [C2MRemoveSessionRsp class]) { - defaultC2MRemoveSessionRspInstance = [[C2MRemoveSessionRsp alloc] init]; - } -} -+ (C2MRemoveSessionRsp*) defaultInstance { - return defaultC2MRemoveSessionRspInstance; -} -- (C2MRemoveSessionRsp*) defaultInstance { - return defaultC2MRemoveSessionRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - if (!self.hasSessionType) { - return NO; - } - if (!self.hasSessionId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeUInt32:2 value:self.results]; - } - if (self.hasSessionType) { - [output writeEnum:3 value:self.sessionType]; - } - if (self.hasSessionId) { - [output writeString:4 value:self.sessionId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeUInt32Size(2, self.results); - } - if (self.hasSessionType) { - size_ += computeEnumSize(3, self.sessionType); - } - if (self.hasSessionId) { - size_ += computeStringSize(4, self.sessionId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MRemoveSessionRsp*) parseFromData:(NSData*) data { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromData:data] build]; -} -+ (C2MRemoveSessionRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MRemoveSessionRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MRemoveSessionRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MRemoveSessionRsp*)[[[C2MRemoveSessionRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MRemoveSessionRspBuilder*) builder { - return [[C2MRemoveSessionRspBuilder alloc] init]; -} -+ (C2MRemoveSessionRspBuilder*) builderWithPrototype:(C2MRemoveSessionRsp*) prototype { - return [[C2MRemoveSessionRsp builder] mergeFrom:prototype]; -} -- (C2MRemoveSessionRspBuilder*) builder { - return [C2MRemoveSessionRsp builder]; -} -- (C2MRemoveSessionRspBuilder*) toBuilder { - return [C2MRemoveSessionRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %@\n", indent, @"results", [NSNumber numberWithInteger:self.results]]; - } - if (self.hasSessionType) { - [output appendFormat:@"%@%@: %d\n", indent, @"sessionType", self.sessionType]; - } - if (self.hasSessionId) { - [output appendFormat:@"%@%@: %@\n", indent, @"sessionId", self.sessionId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MRemoveSessionRsp class]]) { - return NO; - } - C2MRemoveSessionRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - self.hasSessionType == otherMessage.hasSessionType && - (!self.hasSessionType || self.sessionType == otherMessage.sessionType) && - self.hasSessionId == otherMessage.hasSessionId && - (!self.hasSessionId || [self.sessionId isEqual:otherMessage.sessionId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.results] hash]; - } - if (self.hasSessionType) { - hashCode = hashCode * 31 + self.sessionType; - } - if (self.hasSessionId) { - hashCode = hashCode * 31 + [self.sessionId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MRemoveSessionRspBuilder() -@property (strong) C2MRemoveSessionRsp* result; -@end - -@implementation C2MRemoveSessionRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MRemoveSessionRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MRemoveSessionRspBuilder*) clear { - self.result = [[C2MRemoveSessionRsp alloc] init]; - return self; -} -- (C2MRemoveSessionRspBuilder*) clone { - return [C2MRemoveSessionRsp builderWithPrototype:result]; -} -- (C2MRemoveSessionRsp*) defaultInstance { - return [C2MRemoveSessionRsp defaultInstance]; -} -- (C2MRemoveSessionRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MRemoveSessionRsp*) buildPartial { - C2MRemoveSessionRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MRemoveSessionRspBuilder*) mergeFrom:(C2MRemoveSessionRsp*) other { - if (other == [C2MRemoveSessionRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.hasSessionType) { - [self setSessionType:other.sessionType]; - } - if (other.hasSessionId) { - [self setSessionId:other.sessionId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MRemoveSessionRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MRemoveSessionRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setResults:[input readUInt32]]; - break; - } - case 24: { - SessionType value = (SessionType)[input readEnum]; - if (SessionTypeIsValidValue(value)) { - [self setSessionType:value]; - } else { - [unknownFields mergeVarintField:3 value:value]; - } - break; - } - case 34: { - [self setSessionId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MRemoveSessionRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MRemoveSessionRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 33; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (UInt32) results { - return result.results; -} -- (C2MRemoveSessionRspBuilder*) setResults:(UInt32) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2MRemoveSessionRspBuilder*) clearResults { - result.hasResults = NO; - result.results = 0; - return self; -} -- (BOOL) hasSessionType { - return result.hasSessionType; -} -- (SessionType) sessionType { - return result.sessionType; -} -- (C2MRemoveSessionRspBuilder*) setSessionType:(SessionType) value { - result.hasSessionType = YES; - result.sessionType = value; - return self; -} -- (C2MRemoveSessionRspBuilder*) clearSessionType { - result.hasSessionType = NO; - result.sessionType = SessionTypeSessionTypeSingle; - return self; -} -- (BOOL) hasSessionId { - return result.hasSessionId; -} -- (NSString*) sessionId { - return result.sessionId; -} -- (C2MRemoveSessionRspBuilder*) setSessionId:(NSString*) value { - result.hasSessionId = YES; - result.sessionId = value; - return self; -} -- (C2MRemoveSessionRspBuilder*) clearSessionId { - result.hasSessionId = NO; - result.sessionId = @""; - return self; -} -@end - -@interface C2MServiceSetting () -@property SInt32 cmdId; -@property UInt32 key; -@property UInt32 value; -@end - -@implementation C2MServiceSetting - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasKey { - return !!hasKey_; -} -- (void) setHasKey:(BOOL) value_ { - hasKey_ = !!value_; -} -@synthesize key; -- (BOOL) hasValue { - return !!hasValue_; -} -- (void) setHasValue:(BOOL) value_ { - hasValue_ = !!value_; -} -@synthesize value; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 34; - self.key = 0; - self.value = 0; - } - return self; -} -static C2MServiceSetting* defaultC2MServiceSettingInstance = nil; -+ (void) initialize { - if (self == [C2MServiceSetting class]) { - defaultC2MServiceSettingInstance = [[C2MServiceSetting alloc] init]; - } -} -+ (C2MServiceSetting*) defaultInstance { - return defaultC2MServiceSettingInstance; -} -- (C2MServiceSetting*) defaultInstance { - return defaultC2MServiceSettingInstance; -} -- (BOOL) isInitialized { - if (!self.hasKey) { - return NO; - } - if (!self.hasValue) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasKey) { - [output writeUInt32:2 value:self.key]; - } - if (self.hasValue) { - [output writeUInt32:3 value:self.value]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasKey) { - size_ += computeUInt32Size(2, self.key); - } - if (self.hasValue) { - size_ += computeUInt32Size(3, self.value); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MServiceSetting*) parseFromData:(NSData*) data { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromData:data] build]; -} -+ (C2MServiceSetting*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MServiceSetting*) parseFromInputStream:(NSInputStream*) input { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromInputStream:input] build]; -} -+ (C2MServiceSetting*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MServiceSetting*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MServiceSetting*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MServiceSetting*)[[[C2MServiceSetting builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MServiceSettingBuilder*) builder { - return [[C2MServiceSettingBuilder alloc] init]; -} -+ (C2MServiceSettingBuilder*) builderWithPrototype:(C2MServiceSetting*) prototype { - return [[C2MServiceSetting builder] mergeFrom:prototype]; -} -- (C2MServiceSettingBuilder*) builder { - return [C2MServiceSetting builder]; -} -- (C2MServiceSettingBuilder*) toBuilder { - return [C2MServiceSetting builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasKey) { - [output appendFormat:@"%@%@: %@\n", indent, @"key", [NSNumber numberWithInteger:self.key]]; - } - if (self.hasValue) { - [output appendFormat:@"%@%@: %@\n", indent, @"value", [NSNumber numberWithInteger:self.value]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MServiceSetting class]]) { - return NO; - } - C2MServiceSetting *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasKey == otherMessage.hasKey && - (!self.hasKey || self.key == otherMessage.key) && - self.hasValue == otherMessage.hasValue && - (!self.hasValue || self.value == otherMessage.value) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasKey) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.key] hash]; - } - if (self.hasValue) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.value] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MServiceSettingBuilder() -@property (strong) C2MServiceSetting* result; -@end - -@implementation C2MServiceSettingBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MServiceSetting alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MServiceSettingBuilder*) clear { - self.result = [[C2MServiceSetting alloc] init]; - return self; -} -- (C2MServiceSettingBuilder*) clone { - return [C2MServiceSetting builderWithPrototype:result]; -} -- (C2MServiceSetting*) defaultInstance { - return [C2MServiceSetting defaultInstance]; -} -- (C2MServiceSetting*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MServiceSetting*) buildPartial { - C2MServiceSetting* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MServiceSettingBuilder*) mergeFrom:(C2MServiceSetting*) other { - if (other == [C2MServiceSetting defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasKey) { - [self setKey:other.key]; - } - if (other.hasValue) { - [self setValue:other.value]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MServiceSettingBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MServiceSettingBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setKey:[input readUInt32]]; - break; - } - case 24: { - [self setValue:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MServiceSettingBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MServiceSettingBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 34; - return self; -} -- (BOOL) hasKey { - return result.hasKey; -} -- (UInt32) key { - return result.key; -} -- (C2MServiceSettingBuilder*) setKey:(UInt32) value { - result.hasKey = YES; - result.key = value; - return self; -} -- (C2MServiceSettingBuilder*) clearKey { - result.hasKey = NO; - result.key = 0; - return self; -} -- (BOOL) hasValue { - return result.hasValue; -} -- (UInt32) value { - return result.value; -} -- (C2MServiceSettingBuilder*) setValue:(UInt32) value { - result.hasValue = YES; - result.value = value; - return self; -} -- (C2MServiceSettingBuilder*) clearValue { - result.hasValue = NO; - result.value = 0; - return self; -} -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.h b/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.h deleted file mode 100644 index bd06977..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.h +++ /dev/null @@ -1,1352 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "ProtocolBuffers.h" - -#import "IMBaseDefine.pb.h" -// @@protoc_insertion_point(imports) - -@class C2FFileData; -@class C2FFileDataBuilder; -@class C2FFileGetOfflineReq; -@class C2FFileGetOfflineReqBuilder; -@class C2FFileLoginReq; -@class C2FFileLoginReqBuilder; -@class C2FFileLoginRsp; -@class C2FFileLoginRspBuilder; -@class C2FFileUploadFinish; -@class C2FFileUploadFinishBuilder; -@class C2FHeartBeatReq; -@class C2FHeartBeatReqBuilder; -@class C2FHeartBeatRsp; -@class C2FHeartBeatRspBuilder; -@class C2MFileAbort; -@class C2MFileAbortBuilder; -@class C2MFileAddOfflineReq; -@class C2MFileAddOfflineReqBuilder; -@class C2MFileDelOfflineReq; -@class C2MFileDelOfflineReqBuilder; -@class C2MFileDownloadOfflineNotify; -@class C2MFileDownloadOfflineNotifyBuilder; -@class C2MFileHasOfflineReq; -@class C2MFileHasOfflineReqBuilder; -@class C2MFileHasOfflineRsp; -@class C2MFileHasOfflineRspBuilder; -@class C2MFileRecvReady; -@class C2MFileRecvReadyBuilder; -@class C2MFileReq; -@class C2MFileReqBuilder; -@class C2MFileRsp; -@class C2MFileRspBuilder; -@class C2MFileUploadOfflineNotify; -@class C2MFileUploadOfflineNotifyBuilder; -@class ClientGroupInfo; -@class ClientGroupInfoBuilder; -@class ClientGroupMsg; -@class ClientGroupMsgBuilder; -@class ClientGroupUnReadCnt; -@class ClientGroupUnReadCntBuilder; -@class ClientMsgInfo; -@class ClientMsgInfoBuilder; -@class ClientOfflineFileInfo; -@class ClientOfflineFileInfoBuilder; -@class ClientUnReadInfo; -@class ClientUnReadInfoBuilder; -@class ClientUserInfo; -@class ClientUserInfoBuilder; -@class ClientUserStat; -@class ClientUserStatBuilder; -@class IpAddr; -@class IpAddrBuilder; -@class ServerGroupInfo; -@class ServerGroupInfoBuilder; -@class ServerGroupMsg; -@class ServerGroupMsgBuilder; -@class ServerGroupUnReadCnt; -@class ServerGroupUnReadCntBuilder; -@class ServerMsgInfo; -@class ServerMsgInfoBuilder; -@class ServerOfflineFileInfo; -@class ServerOfflineFileInfoBuilder; -@class ServerUnReadInfo; -@class ServerUnReadInfoBuilder; -@class ServerUserInfo; -@class ServerUserInfoBuilder; -@class ServerUserStat; -@class ServerUserStatBuilder; -#ifndef __has_feature - #define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif // __has_feature - -#ifndef NS_RETURNS_NOT_RETAINED - #if __has_feature(attribute_ns_returns_not_retained) - #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) - #else - #define NS_RETURNS_NOT_RETAINED - #endif -#endif - - -@interface Imclient2ServFileRoot : NSObject { -} -+ (PBExtensionRegistry*) extensionRegistry; -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry; -@end - -@interface C2FHeartBeatReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2FHeartBeatReq*) defaultInstance; -- (C2FHeartBeatReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FHeartBeatReqBuilder*) builder; -+ (C2FHeartBeatReqBuilder*) builder; -+ (C2FHeartBeatReqBuilder*) builderWithPrototype:(C2FHeartBeatReq*) prototype; -- (C2FHeartBeatReqBuilder*) toBuilder; - -+ (C2FHeartBeatReq*) parseFromData:(NSData*) data; -+ (C2FHeartBeatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FHeartBeatReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2FHeartBeatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FHeartBeatReqBuilder : PBGeneratedMessageBuilder { -@private - C2FHeartBeatReq* result; -} - -- (C2FHeartBeatReq*) defaultInstance; - -- (C2FHeartBeatReqBuilder*) clear; -- (C2FHeartBeatReqBuilder*) clone; - -- (C2FHeartBeatReq*) build; -- (C2FHeartBeatReq*) buildPartial; - -- (C2FHeartBeatReqBuilder*) mergeFrom:(C2FHeartBeatReq*) other; -- (C2FHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FHeartBeatReqBuilder*) setCmdId:(SInt32) value; -- (C2FHeartBeatReqBuilder*) clearCmdId; -@end - -@interface C2FHeartBeatRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2FHeartBeatRsp*) defaultInstance; -- (C2FHeartBeatRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FHeartBeatRspBuilder*) builder; -+ (C2FHeartBeatRspBuilder*) builder; -+ (C2FHeartBeatRspBuilder*) builderWithPrototype:(C2FHeartBeatRsp*) prototype; -- (C2FHeartBeatRspBuilder*) toBuilder; - -+ (C2FHeartBeatRsp*) parseFromData:(NSData*) data; -+ (C2FHeartBeatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2FHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FHeartBeatRspBuilder : PBGeneratedMessageBuilder { -@private - C2FHeartBeatRsp* result; -} - -- (C2FHeartBeatRsp*) defaultInstance; - -- (C2FHeartBeatRspBuilder*) clear; -- (C2FHeartBeatRspBuilder*) clone; - -- (C2FHeartBeatRsp*) build; -- (C2FHeartBeatRsp*) buildPartial; - -- (C2FHeartBeatRspBuilder*) mergeFrom:(C2FHeartBeatRsp*) other; -- (C2FHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FHeartBeatRspBuilder*) setCmdId:(SInt32) value; -- (C2FHeartBeatRspBuilder*) clearCmdId; -@end - -@interface C2FFileLoginReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasUserId_:1; - BOOL hasToken_:1; - SInt32 cmdId; - NSString* userId; - NSString* token; -} -- (BOOL) hasCmdId; -- (BOOL) hasUserId; -- (BOOL) hasToken; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* userId; -@property (readonly, strong) NSString* token; - -+ (C2FFileLoginReq*) defaultInstance; -- (C2FFileLoginReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FFileLoginReqBuilder*) builder; -+ (C2FFileLoginReqBuilder*) builder; -+ (C2FFileLoginReqBuilder*) builderWithPrototype:(C2FFileLoginReq*) prototype; -- (C2FFileLoginReqBuilder*) toBuilder; - -+ (C2FFileLoginReq*) parseFromData:(NSData*) data; -+ (C2FFileLoginReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileLoginReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2FFileLoginReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FFileLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FFileLoginReqBuilder : PBGeneratedMessageBuilder { -@private - C2FFileLoginReq* result; -} - -- (C2FFileLoginReq*) defaultInstance; - -- (C2FFileLoginReqBuilder*) clear; -- (C2FFileLoginReqBuilder*) clone; - -- (C2FFileLoginReq*) build; -- (C2FFileLoginReq*) buildPartial; - -- (C2FFileLoginReqBuilder*) mergeFrom:(C2FFileLoginReq*) other; -- (C2FFileLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FFileLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FFileLoginReqBuilder*) setCmdId:(SInt32) value; -- (C2FFileLoginReqBuilder*) clearCmdId; - -- (BOOL) hasUserId; -- (NSString*) userId; -- (C2FFileLoginReqBuilder*) setUserId:(NSString*) value; -- (C2FFileLoginReqBuilder*) clearUserId; - -- (BOOL) hasToken; -- (NSString*) token; -- (C2FFileLoginReqBuilder*) setToken:(NSString*) value; -- (C2FFileLoginReqBuilder*) clearToken; -@end - -@interface C2FFileLoginRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasResults_:1; - SInt32 cmdId; - UInt32 results; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 results; - -+ (C2FFileLoginRsp*) defaultInstance; -- (C2FFileLoginRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FFileLoginRspBuilder*) builder; -+ (C2FFileLoginRspBuilder*) builder; -+ (C2FFileLoginRspBuilder*) builderWithPrototype:(C2FFileLoginRsp*) prototype; -- (C2FFileLoginRspBuilder*) toBuilder; - -+ (C2FFileLoginRsp*) parseFromData:(NSData*) data; -+ (C2FFileLoginRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileLoginRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2FFileLoginRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FFileLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FFileLoginRspBuilder : PBGeneratedMessageBuilder { -@private - C2FFileLoginRsp* result; -} - -- (C2FFileLoginRsp*) defaultInstance; - -- (C2FFileLoginRspBuilder*) clear; -- (C2FFileLoginRspBuilder*) clone; - -- (C2FFileLoginRsp*) build; -- (C2FFileLoginRsp*) buildPartial; - -- (C2FFileLoginRspBuilder*) mergeFrom:(C2FFileLoginRsp*) other; -- (C2FFileLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FFileLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FFileLoginRspBuilder*) setCmdId:(SInt32) value; -- (C2FFileLoginRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (UInt32) results; -- (C2FFileLoginRspBuilder*) setResults:(UInt32) value; -- (C2FFileLoginRspBuilder*) clearResults; -@end - -@interface C2FFileData : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFileName_:1; - BOOL hasFileData_:1; - BOOL hasFileSize_:1; - BOOL hasFileOffset_:1; - BOOL hasFileType_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* fileName; - NSData* fileData; - UInt32 fileSize; - UInt32 fileOffset; - UInt32 fileType; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFileName; -- (BOOL) hasFileSize; -- (BOOL) hasFileOffset; -- (BOOL) hasFileType; -- (BOOL) hasFileData; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* fileName; -@property (readonly) UInt32 fileSize; -@property (readonly) UInt32 fileOffset; -@property (readonly) UInt32 fileType; -@property (readonly, strong) NSData* fileData; - -+ (C2FFileData*) defaultInstance; -- (C2FFileData*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FFileDataBuilder*) builder; -+ (C2FFileDataBuilder*) builder; -+ (C2FFileDataBuilder*) builderWithPrototype:(C2FFileData*) prototype; -- (C2FFileDataBuilder*) toBuilder; - -+ (C2FFileData*) parseFromData:(NSData*) data; -+ (C2FFileData*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileData*) parseFromInputStream:(NSInputStream*) input; -+ (C2FFileData*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileData*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FFileData*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FFileDataBuilder : PBGeneratedMessageBuilder { -@private - C2FFileData* result; -} - -- (C2FFileData*) defaultInstance; - -- (C2FFileDataBuilder*) clear; -- (C2FFileDataBuilder*) clone; - -- (C2FFileData*) build; -- (C2FFileData*) buildPartial; - -- (C2FFileDataBuilder*) mergeFrom:(C2FFileData*) other; -- (C2FFileDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FFileDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FFileDataBuilder*) setCmdId:(SInt32) value; -- (C2FFileDataBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2FFileDataBuilder*) setFromUserId:(NSString*) value; -- (C2FFileDataBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2FFileDataBuilder*) setToUserId:(NSString*) value; -- (C2FFileDataBuilder*) clearToUserId; - -- (BOOL) hasFileName; -- (NSString*) fileName; -- (C2FFileDataBuilder*) setFileName:(NSString*) value; -- (C2FFileDataBuilder*) clearFileName; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (C2FFileDataBuilder*) setFileSize:(UInt32) value; -- (C2FFileDataBuilder*) clearFileSize; - -- (BOOL) hasFileOffset; -- (UInt32) fileOffset; -- (C2FFileDataBuilder*) setFileOffset:(UInt32) value; -- (C2FFileDataBuilder*) clearFileOffset; - -- (BOOL) hasFileType; -- (UInt32) fileType; -- (C2FFileDataBuilder*) setFileType:(UInt32) value; -- (C2FFileDataBuilder*) clearFileType; - -- (BOOL) hasFileData; -- (NSData*) fileData; -- (C2FFileDataBuilder*) setFileData:(NSData*) value; -- (C2FFileDataBuilder*) clearFileData; -@end - -@interface C2FFileGetOfflineReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasFilePath_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* filePath; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasFilePath; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* filePath; - -+ (C2FFileGetOfflineReq*) defaultInstance; -- (C2FFileGetOfflineReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FFileGetOfflineReqBuilder*) builder; -+ (C2FFileGetOfflineReqBuilder*) builder; -+ (C2FFileGetOfflineReqBuilder*) builderWithPrototype:(C2FFileGetOfflineReq*) prototype; -- (C2FFileGetOfflineReqBuilder*) toBuilder; - -+ (C2FFileGetOfflineReq*) parseFromData:(NSData*) data; -+ (C2FFileGetOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileGetOfflineReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2FFileGetOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileGetOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FFileGetOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FFileGetOfflineReqBuilder : PBGeneratedMessageBuilder { -@private - C2FFileGetOfflineReq* result; -} - -- (C2FFileGetOfflineReq*) defaultInstance; - -- (C2FFileGetOfflineReqBuilder*) clear; -- (C2FFileGetOfflineReqBuilder*) clone; - -- (C2FFileGetOfflineReq*) build; -- (C2FFileGetOfflineReq*) buildPartial; - -- (C2FFileGetOfflineReqBuilder*) mergeFrom:(C2FFileGetOfflineReq*) other; -- (C2FFileGetOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FFileGetOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FFileGetOfflineReqBuilder*) setCmdId:(SInt32) value; -- (C2FFileGetOfflineReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2FFileGetOfflineReqBuilder*) setFromUserId:(NSString*) value; -- (C2FFileGetOfflineReqBuilder*) clearFromUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2FFileGetOfflineReqBuilder*) setFilePath:(NSString*) value; -- (C2FFileGetOfflineReqBuilder*) clearFilePath; -@end - -@interface C2FFileUploadFinish : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFilePath_:1; - BOOL hasSaveFilePath_:1; - BOOL hasFileSize_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* filePath; - NSString* saveFilePath; - UInt32 fileSize; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFilePath; -- (BOOL) hasSaveFilePath; -- (BOOL) hasFileSize; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* filePath; -@property (readonly, strong) NSString* saveFilePath; -@property (readonly) UInt32 fileSize; - -+ (C2FFileUploadFinish*) defaultInstance; -- (C2FFileUploadFinish*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2FFileUploadFinishBuilder*) builder; -+ (C2FFileUploadFinishBuilder*) builder; -+ (C2FFileUploadFinishBuilder*) builderWithPrototype:(C2FFileUploadFinish*) prototype; -- (C2FFileUploadFinishBuilder*) toBuilder; - -+ (C2FFileUploadFinish*) parseFromData:(NSData*) data; -+ (C2FFileUploadFinish*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileUploadFinish*) parseFromInputStream:(NSInputStream*) input; -+ (C2FFileUploadFinish*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2FFileUploadFinish*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2FFileUploadFinish*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2FFileUploadFinishBuilder : PBGeneratedMessageBuilder { -@private - C2FFileUploadFinish* result; -} - -- (C2FFileUploadFinish*) defaultInstance; - -- (C2FFileUploadFinishBuilder*) clear; -- (C2FFileUploadFinishBuilder*) clone; - -- (C2FFileUploadFinish*) build; -- (C2FFileUploadFinish*) buildPartial; - -- (C2FFileUploadFinishBuilder*) mergeFrom:(C2FFileUploadFinish*) other; -- (C2FFileUploadFinishBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2FFileUploadFinishBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2FFileUploadFinishBuilder*) setCmdId:(SInt32) value; -- (C2FFileUploadFinishBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2FFileUploadFinishBuilder*) setFromUserId:(NSString*) value; -- (C2FFileUploadFinishBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2FFileUploadFinishBuilder*) setToUserId:(NSString*) value; -- (C2FFileUploadFinishBuilder*) clearToUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2FFileUploadFinishBuilder*) setFilePath:(NSString*) value; -- (C2FFileUploadFinishBuilder*) clearFilePath; - -- (BOOL) hasSaveFilePath; -- (NSString*) saveFilePath; -- (C2FFileUploadFinishBuilder*) setSaveFilePath:(NSString*) value; -- (C2FFileUploadFinishBuilder*) clearSaveFilePath; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (C2FFileUploadFinishBuilder*) setFileSize:(UInt32) value; -- (C2FFileUploadFinishBuilder*) clearFileSize; -@end - -@interface C2MFileReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFileName_:1; - BOOL hasFileSize_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* fileName; - UInt32 fileSize; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFileName; -- (BOOL) hasFileSize; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* fileName; -@property (readonly) UInt32 fileSize; - -+ (C2MFileReq*) defaultInstance; -- (C2MFileReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileReqBuilder*) builder; -+ (C2MFileReqBuilder*) builder; -+ (C2MFileReqBuilder*) builderWithPrototype:(C2MFileReq*) prototype; -- (C2MFileReqBuilder*) toBuilder; - -+ (C2MFileReq*) parseFromData:(NSData*) data; -+ (C2MFileReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileReqBuilder : PBGeneratedMessageBuilder { -@private - C2MFileReq* result; -} - -- (C2MFileReq*) defaultInstance; - -- (C2MFileReqBuilder*) clear; -- (C2MFileReqBuilder*) clone; - -- (C2MFileReq*) build; -- (C2MFileReq*) buildPartial; - -- (C2MFileReqBuilder*) mergeFrom:(C2MFileReq*) other; -- (C2MFileReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileReqBuilder*) setCmdId:(SInt32) value; -- (C2MFileReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileReqBuilder*) setFromUserId:(NSString*) value; -- (C2MFileReqBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileReqBuilder*) setToUserId:(NSString*) value; -- (C2MFileReqBuilder*) clearToUserId; - -- (BOOL) hasFileName; -- (NSString*) fileName; -- (C2MFileReqBuilder*) setFileName:(NSString*) value; -- (C2MFileReqBuilder*) clearFileName; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (C2MFileReqBuilder*) setFileSize:(UInt32) value; -- (C2MFileReqBuilder*) clearFileSize; -@end - -@interface C2MFileRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFileName_:1; - BOOL hasListenIp_:1; - BOOL hasAcceptFlag_:1; - BOOL hasListenPort_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* fileName; - NSString* listenIp; - UInt32 acceptFlag; - UInt32 listenPort; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFileName; -- (BOOL) hasAcceptFlag; -- (BOOL) hasListenIp; -- (BOOL) hasListenPort; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* fileName; -@property (readonly) UInt32 acceptFlag; -@property (readonly, strong) NSString* listenIp; -@property (readonly) UInt32 listenPort; - -+ (C2MFileRsp*) defaultInstance; -- (C2MFileRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileRspBuilder*) builder; -+ (C2MFileRspBuilder*) builder; -+ (C2MFileRspBuilder*) builderWithPrototype:(C2MFileRsp*) prototype; -- (C2MFileRspBuilder*) toBuilder; - -+ (C2MFileRsp*) parseFromData:(NSData*) data; -+ (C2MFileRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileRspBuilder : PBGeneratedMessageBuilder { -@private - C2MFileRsp* result; -} - -- (C2MFileRsp*) defaultInstance; - -- (C2MFileRspBuilder*) clear; -- (C2MFileRspBuilder*) clone; - -- (C2MFileRsp*) build; -- (C2MFileRsp*) buildPartial; - -- (C2MFileRspBuilder*) mergeFrom:(C2MFileRsp*) other; -- (C2MFileRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileRspBuilder*) setCmdId:(SInt32) value; -- (C2MFileRspBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileRspBuilder*) setFromUserId:(NSString*) value; -- (C2MFileRspBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileRspBuilder*) setToUserId:(NSString*) value; -- (C2MFileRspBuilder*) clearToUserId; - -- (BOOL) hasFileName; -- (NSString*) fileName; -- (C2MFileRspBuilder*) setFileName:(NSString*) value; -- (C2MFileRspBuilder*) clearFileName; - -- (BOOL) hasAcceptFlag; -- (UInt32) acceptFlag; -- (C2MFileRspBuilder*) setAcceptFlag:(UInt32) value; -- (C2MFileRspBuilder*) clearAcceptFlag; - -- (BOOL) hasListenIp; -- (NSString*) listenIp; -- (C2MFileRspBuilder*) setListenIp:(NSString*) value; -- (C2MFileRspBuilder*) clearListenIp; - -- (BOOL) hasListenPort; -- (UInt32) listenPort; -- (C2MFileRspBuilder*) setListenPort:(UInt32) value; -- (C2MFileRspBuilder*) clearListenPort; -@end - -@interface C2MFileRecvReady : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; - -+ (C2MFileRecvReady*) defaultInstance; -- (C2MFileRecvReady*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileRecvReadyBuilder*) builder; -+ (C2MFileRecvReadyBuilder*) builder; -+ (C2MFileRecvReadyBuilder*) builderWithPrototype:(C2MFileRecvReady*) prototype; -- (C2MFileRecvReadyBuilder*) toBuilder; - -+ (C2MFileRecvReady*) parseFromData:(NSData*) data; -+ (C2MFileRecvReady*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileRecvReady*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileRecvReady*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileRecvReady*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileRecvReady*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileRecvReadyBuilder : PBGeneratedMessageBuilder { -@private - C2MFileRecvReady* result; -} - -- (C2MFileRecvReady*) defaultInstance; - -- (C2MFileRecvReadyBuilder*) clear; -- (C2MFileRecvReadyBuilder*) clone; - -- (C2MFileRecvReady*) build; -- (C2MFileRecvReady*) buildPartial; - -- (C2MFileRecvReadyBuilder*) mergeFrom:(C2MFileRecvReady*) other; -- (C2MFileRecvReadyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileRecvReadyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileRecvReadyBuilder*) setCmdId:(SInt32) value; -- (C2MFileRecvReadyBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileRecvReadyBuilder*) setFromUserId:(NSString*) value; -- (C2MFileRecvReadyBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileRecvReadyBuilder*) setToUserId:(NSString*) value; -- (C2MFileRecvReadyBuilder*) clearToUserId; -@end - -@interface C2MFileAbort : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFilePath_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* filePath; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFilePath; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* filePath; - -+ (C2MFileAbort*) defaultInstance; -- (C2MFileAbort*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileAbortBuilder*) builder; -+ (C2MFileAbortBuilder*) builder; -+ (C2MFileAbortBuilder*) builderWithPrototype:(C2MFileAbort*) prototype; -- (C2MFileAbortBuilder*) toBuilder; - -+ (C2MFileAbort*) parseFromData:(NSData*) data; -+ (C2MFileAbort*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileAbort*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileAbort*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileAbort*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileAbort*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileAbortBuilder : PBGeneratedMessageBuilder { -@private - C2MFileAbort* result; -} - -- (C2MFileAbort*) defaultInstance; - -- (C2MFileAbortBuilder*) clear; -- (C2MFileAbortBuilder*) clone; - -- (C2MFileAbort*) build; -- (C2MFileAbort*) buildPartial; - -- (C2MFileAbortBuilder*) mergeFrom:(C2MFileAbort*) other; -- (C2MFileAbortBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileAbortBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileAbortBuilder*) setCmdId:(SInt32) value; -- (C2MFileAbortBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileAbortBuilder*) setFromUserId:(NSString*) value; -- (C2MFileAbortBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileAbortBuilder*) setToUserId:(NSString*) value; -- (C2MFileAbortBuilder*) clearToUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2MFileAbortBuilder*) setFilePath:(NSString*) value; -- (C2MFileAbortBuilder*) clearFilePath; -@end - -@interface C2MFileDownloadOfflineNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFilePath_:1; - BOOL hasSavePath_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* filePath; - NSString* savePath; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFilePath; -- (BOOL) hasSavePath; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* filePath; -@property (readonly, strong) NSString* savePath; - -+ (C2MFileDownloadOfflineNotify*) defaultInstance; -- (C2MFileDownloadOfflineNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileDownloadOfflineNotifyBuilder*) builder; -+ (C2MFileDownloadOfflineNotifyBuilder*) builder; -+ (C2MFileDownloadOfflineNotifyBuilder*) builderWithPrototype:(C2MFileDownloadOfflineNotify*) prototype; -- (C2MFileDownloadOfflineNotifyBuilder*) toBuilder; - -+ (C2MFileDownloadOfflineNotify*) parseFromData:(NSData*) data; -+ (C2MFileDownloadOfflineNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileDownloadOfflineNotify*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileDownloadOfflineNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileDownloadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileDownloadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileDownloadOfflineNotifyBuilder : PBGeneratedMessageBuilder { -@private - C2MFileDownloadOfflineNotify* result; -} - -- (C2MFileDownloadOfflineNotify*) defaultInstance; - -- (C2MFileDownloadOfflineNotifyBuilder*) clear; -- (C2MFileDownloadOfflineNotifyBuilder*) clone; - -- (C2MFileDownloadOfflineNotify*) build; -- (C2MFileDownloadOfflineNotify*) buildPartial; - -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFrom:(C2MFileDownloadOfflineNotify*) other; -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileDownloadOfflineNotifyBuilder*) setCmdId:(SInt32) value; -- (C2MFileDownloadOfflineNotifyBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileDownloadOfflineNotifyBuilder*) setFromUserId:(NSString*) value; -- (C2MFileDownloadOfflineNotifyBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileDownloadOfflineNotifyBuilder*) setToUserId:(NSString*) value; -- (C2MFileDownloadOfflineNotifyBuilder*) clearToUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2MFileDownloadOfflineNotifyBuilder*) setFilePath:(NSString*) value; -- (C2MFileDownloadOfflineNotifyBuilder*) clearFilePath; - -- (BOOL) hasSavePath; -- (NSString*) savePath; -- (C2MFileDownloadOfflineNotifyBuilder*) setSavePath:(NSString*) value; -- (C2MFileDownloadOfflineNotifyBuilder*) clearSavePath; -@end - -@interface C2MFileUploadOfflineNotify : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFilePath_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* filePath; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFilePath; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* filePath; - -+ (C2MFileUploadOfflineNotify*) defaultInstance; -- (C2MFileUploadOfflineNotify*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileUploadOfflineNotifyBuilder*) builder; -+ (C2MFileUploadOfflineNotifyBuilder*) builder; -+ (C2MFileUploadOfflineNotifyBuilder*) builderWithPrototype:(C2MFileUploadOfflineNotify*) prototype; -- (C2MFileUploadOfflineNotifyBuilder*) toBuilder; - -+ (C2MFileUploadOfflineNotify*) parseFromData:(NSData*) data; -+ (C2MFileUploadOfflineNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileUploadOfflineNotify*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileUploadOfflineNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileUploadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileUploadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileUploadOfflineNotifyBuilder : PBGeneratedMessageBuilder { -@private - C2MFileUploadOfflineNotify* result; -} - -- (C2MFileUploadOfflineNotify*) defaultInstance; - -- (C2MFileUploadOfflineNotifyBuilder*) clear; -- (C2MFileUploadOfflineNotifyBuilder*) clone; - -- (C2MFileUploadOfflineNotify*) build; -- (C2MFileUploadOfflineNotify*) buildPartial; - -- (C2MFileUploadOfflineNotifyBuilder*) mergeFrom:(C2MFileUploadOfflineNotify*) other; -- (C2MFileUploadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileUploadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileUploadOfflineNotifyBuilder*) setCmdId:(SInt32) value; -- (C2MFileUploadOfflineNotifyBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileUploadOfflineNotifyBuilder*) setFromUserId:(NSString*) value; -- (C2MFileUploadOfflineNotifyBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileUploadOfflineNotifyBuilder*) setToUserId:(NSString*) value; -- (C2MFileUploadOfflineNotifyBuilder*) clearToUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2MFileUploadOfflineNotifyBuilder*) setFilePath:(NSString*) value; -- (C2MFileUploadOfflineNotifyBuilder*) clearFilePath; -@end - -@interface C2MFileHasOfflineReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MFileHasOfflineReq*) defaultInstance; -- (C2MFileHasOfflineReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileHasOfflineReqBuilder*) builder; -+ (C2MFileHasOfflineReqBuilder*) builder; -+ (C2MFileHasOfflineReqBuilder*) builderWithPrototype:(C2MFileHasOfflineReq*) prototype; -- (C2MFileHasOfflineReqBuilder*) toBuilder; - -+ (C2MFileHasOfflineReq*) parseFromData:(NSData*) data; -+ (C2MFileHasOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileHasOfflineReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileHasOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileHasOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileHasOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileHasOfflineReqBuilder : PBGeneratedMessageBuilder { -@private - C2MFileHasOfflineReq* result; -} - -- (C2MFileHasOfflineReq*) defaultInstance; - -- (C2MFileHasOfflineReqBuilder*) clear; -- (C2MFileHasOfflineReqBuilder*) clone; - -- (C2MFileHasOfflineReq*) build; -- (C2MFileHasOfflineReq*) buildPartial; - -- (C2MFileHasOfflineReqBuilder*) mergeFrom:(C2MFileHasOfflineReq*) other; -- (C2MFileHasOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileHasOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileHasOfflineReqBuilder*) setCmdId:(SInt32) value; -- (C2MFileHasOfflineReqBuilder*) clearCmdId; -@end - -@interface C2MFileHasOfflineRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * offlineFileInfoListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * offlineFileInfoList; -- (ClientOfflineFileInfo*)offlineFileInfoListAtIndex:(NSUInteger)index; - -+ (C2MFileHasOfflineRsp*) defaultInstance; -- (C2MFileHasOfflineRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileHasOfflineRspBuilder*) builder; -+ (C2MFileHasOfflineRspBuilder*) builder; -+ (C2MFileHasOfflineRspBuilder*) builderWithPrototype:(C2MFileHasOfflineRsp*) prototype; -- (C2MFileHasOfflineRspBuilder*) toBuilder; - -+ (C2MFileHasOfflineRsp*) parseFromData:(NSData*) data; -+ (C2MFileHasOfflineRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileHasOfflineRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileHasOfflineRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileHasOfflineRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileHasOfflineRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileHasOfflineRspBuilder : PBGeneratedMessageBuilder { -@private - C2MFileHasOfflineRsp* result; -} - -- (C2MFileHasOfflineRsp*) defaultInstance; - -- (C2MFileHasOfflineRspBuilder*) clear; -- (C2MFileHasOfflineRspBuilder*) clone; - -- (C2MFileHasOfflineRsp*) build; -- (C2MFileHasOfflineRsp*) buildPartial; - -- (C2MFileHasOfflineRspBuilder*) mergeFrom:(C2MFileHasOfflineRsp*) other; -- (C2MFileHasOfflineRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileHasOfflineRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileHasOfflineRspBuilder*) setCmdId:(SInt32) value; -- (C2MFileHasOfflineRspBuilder*) clearCmdId; - -- (NSMutableArray *)offlineFileInfoList; -- (ClientOfflineFileInfo*)offlineFileInfoListAtIndex:(NSUInteger)index; -- (C2MFileHasOfflineRspBuilder *)addOfflineFileInfoList:(ClientOfflineFileInfo*)value; -- (C2MFileHasOfflineRspBuilder *)setOfflineFileInfoListArray:(NSArray *)array; -- (C2MFileHasOfflineRspBuilder *)clearOfflineFileInfoList; -@end - -@interface C2MFileAddOfflineReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFilePath_:1; - BOOL hasFileSize_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - NSString* filePath; - UInt32 fileSize; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFilePath; -- (BOOL) hasFileSize; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly, strong) NSString* filePath; -@property (readonly) UInt32 fileSize; - -+ (C2MFileAddOfflineReq*) defaultInstance; -- (C2MFileAddOfflineReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileAddOfflineReqBuilder*) builder; -+ (C2MFileAddOfflineReqBuilder*) builder; -+ (C2MFileAddOfflineReqBuilder*) builderWithPrototype:(C2MFileAddOfflineReq*) prototype; -- (C2MFileAddOfflineReqBuilder*) toBuilder; - -+ (C2MFileAddOfflineReq*) parseFromData:(NSData*) data; -+ (C2MFileAddOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileAddOfflineReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileAddOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileAddOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileAddOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileAddOfflineReqBuilder : PBGeneratedMessageBuilder { -@private - C2MFileAddOfflineReq* result; -} - -- (C2MFileAddOfflineReq*) defaultInstance; - -- (C2MFileAddOfflineReqBuilder*) clear; -- (C2MFileAddOfflineReqBuilder*) clone; - -- (C2MFileAddOfflineReq*) build; -- (C2MFileAddOfflineReq*) buildPartial; - -- (C2MFileAddOfflineReqBuilder*) mergeFrom:(C2MFileAddOfflineReq*) other; -- (C2MFileAddOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileAddOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileAddOfflineReqBuilder*) setCmdId:(SInt32) value; -- (C2MFileAddOfflineReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileAddOfflineReqBuilder*) setFromUserId:(NSString*) value; -- (C2MFileAddOfflineReqBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileAddOfflineReqBuilder*) setToUserId:(NSString*) value; -- (C2MFileAddOfflineReqBuilder*) clearToUserId; - -- (BOOL) hasFilePath; -- (NSString*) filePath; -- (C2MFileAddOfflineReqBuilder*) setFilePath:(NSString*) value; -- (C2MFileAddOfflineReqBuilder*) clearFilePath; - -- (BOOL) hasFileSize; -- (UInt32) fileSize; -- (C2MFileAddOfflineReqBuilder*) setFileSize:(UInt32) value; -- (C2MFileAddOfflineReqBuilder*) clearFileSize; -@end - -@interface C2MFileDelOfflineReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasFromUserId_:1; - BOOL hasToUserId_:1; - BOOL hasFileId_:1; - SInt32 cmdId; - NSString* fromUserId; - NSString* toUserId; - UInt32 fileId; -} -- (BOOL) hasCmdId; -- (BOOL) hasFromUserId; -- (BOOL) hasToUserId; -- (BOOL) hasFileId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* fromUserId; -@property (readonly, strong) NSString* toUserId; -@property (readonly) UInt32 fileId; - -+ (C2MFileDelOfflineReq*) defaultInstance; -- (C2MFileDelOfflineReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MFileDelOfflineReqBuilder*) builder; -+ (C2MFileDelOfflineReqBuilder*) builder; -+ (C2MFileDelOfflineReqBuilder*) builderWithPrototype:(C2MFileDelOfflineReq*) prototype; -- (C2MFileDelOfflineReqBuilder*) toBuilder; - -+ (C2MFileDelOfflineReq*) parseFromData:(NSData*) data; -+ (C2MFileDelOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileDelOfflineReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MFileDelOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MFileDelOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MFileDelOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MFileDelOfflineReqBuilder : PBGeneratedMessageBuilder { -@private - C2MFileDelOfflineReq* result; -} - -- (C2MFileDelOfflineReq*) defaultInstance; - -- (C2MFileDelOfflineReqBuilder*) clear; -- (C2MFileDelOfflineReqBuilder*) clone; - -- (C2MFileDelOfflineReq*) build; -- (C2MFileDelOfflineReq*) buildPartial; - -- (C2MFileDelOfflineReqBuilder*) mergeFrom:(C2MFileDelOfflineReq*) other; -- (C2MFileDelOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MFileDelOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MFileDelOfflineReqBuilder*) setCmdId:(SInt32) value; -- (C2MFileDelOfflineReqBuilder*) clearCmdId; - -- (BOOL) hasFromUserId; -- (NSString*) fromUserId; -- (C2MFileDelOfflineReqBuilder*) setFromUserId:(NSString*) value; -- (C2MFileDelOfflineReqBuilder*) clearFromUserId; - -- (BOOL) hasToUserId; -- (NSString*) toUserId; -- (C2MFileDelOfflineReqBuilder*) setToUserId:(NSString*) value; -- (C2MFileDelOfflineReqBuilder*) clearToUserId; - -- (BOOL) hasFileId; -- (UInt32) fileId; -- (C2MFileDelOfflineReqBuilder*) setFileId:(UInt32) value; -- (C2MFileDelOfflineReqBuilder*) clearFileId; -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.m b/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.m deleted file mode 100644 index e6703a2..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServFile.pb.m +++ /dev/null @@ -1,5868 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "IMClient2ServFile.pb.h" -// @@protoc_insertion_point(imports) - -@implementation Imclient2ServFileRoot -static PBExtensionRegistry* extensionRegistry = nil; -+ (PBExtensionRegistry*) extensionRegistry { - return extensionRegistry; -} - -+ (void) initialize { - if (self == [Imclient2ServFileRoot class]) { - PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry]; - [self registerAllExtensions:registry]; - [ImbaseDefineRoot registerAllExtensions:registry]; - extensionRegistry = registry; - } -} -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry { -} -@end - -@interface C2FHeartBeatReq () -@property SInt32 cmdId; -@end - -@implementation C2FHeartBeatReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 513; - } - return self; -} -static C2FHeartBeatReq* defaultC2FHeartBeatReqInstance = nil; -+ (void) initialize { - if (self == [C2FHeartBeatReq class]) { - defaultC2FHeartBeatReqInstance = [[C2FHeartBeatReq alloc] init]; - } -} -+ (C2FHeartBeatReq*) defaultInstance { - return defaultC2FHeartBeatReqInstance; -} -- (C2FHeartBeatReq*) defaultInstance { - return defaultC2FHeartBeatReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FHeartBeatReq*) parseFromData:(NSData*) data { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromData:data] build]; -} -+ (C2FHeartBeatReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatReq*) parseFromInputStream:(NSInputStream*) input { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromInputStream:input] build]; -} -+ (C2FHeartBeatReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FHeartBeatReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatReq*)[[[C2FHeartBeatReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatReqBuilder*) builder { - return [[C2FHeartBeatReqBuilder alloc] init]; -} -+ (C2FHeartBeatReqBuilder*) builderWithPrototype:(C2FHeartBeatReq*) prototype { - return [[C2FHeartBeatReq builder] mergeFrom:prototype]; -} -- (C2FHeartBeatReqBuilder*) builder { - return [C2FHeartBeatReq builder]; -} -- (C2FHeartBeatReqBuilder*) toBuilder { - return [C2FHeartBeatReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FHeartBeatReq class]]) { - return NO; - } - C2FHeartBeatReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FHeartBeatReqBuilder() -@property (strong) C2FHeartBeatReq* result; -@end - -@implementation C2FHeartBeatReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FHeartBeatReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FHeartBeatReqBuilder*) clear { - self.result = [[C2FHeartBeatReq alloc] init]; - return self; -} -- (C2FHeartBeatReqBuilder*) clone { - return [C2FHeartBeatReq builderWithPrototype:result]; -} -- (C2FHeartBeatReq*) defaultInstance { - return [C2FHeartBeatReq defaultInstance]; -} -- (C2FHeartBeatReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FHeartBeatReq*) buildPartial { - C2FHeartBeatReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FHeartBeatReqBuilder*) mergeFrom:(C2FHeartBeatReq*) other { - if (other == [C2FHeartBeatReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FHeartBeatReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FHeartBeatReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FHeartBeatReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 513; - return self; -} -@end - -@interface C2FHeartBeatRsp () -@property SInt32 cmdId; -@end - -@implementation C2FHeartBeatRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 514; - } - return self; -} -static C2FHeartBeatRsp* defaultC2FHeartBeatRspInstance = nil; -+ (void) initialize { - if (self == [C2FHeartBeatRsp class]) { - defaultC2FHeartBeatRspInstance = [[C2FHeartBeatRsp alloc] init]; - } -} -+ (C2FHeartBeatRsp*) defaultInstance { - return defaultC2FHeartBeatRspInstance; -} -- (C2FHeartBeatRsp*) defaultInstance { - return defaultC2FHeartBeatRspInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FHeartBeatRsp*) parseFromData:(NSData*) data { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromData:data] build]; -} -+ (C2FHeartBeatRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromInputStream:input] build]; -} -+ (C2FHeartBeatRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FHeartBeatRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FHeartBeatRsp*)[[[C2FHeartBeatRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FHeartBeatRspBuilder*) builder { - return [[C2FHeartBeatRspBuilder alloc] init]; -} -+ (C2FHeartBeatRspBuilder*) builderWithPrototype:(C2FHeartBeatRsp*) prototype { - return [[C2FHeartBeatRsp builder] mergeFrom:prototype]; -} -- (C2FHeartBeatRspBuilder*) builder { - return [C2FHeartBeatRsp builder]; -} -- (C2FHeartBeatRspBuilder*) toBuilder { - return [C2FHeartBeatRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FHeartBeatRsp class]]) { - return NO; - } - C2FHeartBeatRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FHeartBeatRspBuilder() -@property (strong) C2FHeartBeatRsp* result; -@end - -@implementation C2FHeartBeatRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FHeartBeatRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FHeartBeatRspBuilder*) clear { - self.result = [[C2FHeartBeatRsp alloc] init]; - return self; -} -- (C2FHeartBeatRspBuilder*) clone { - return [C2FHeartBeatRsp builderWithPrototype:result]; -} -- (C2FHeartBeatRsp*) defaultInstance { - return [C2FHeartBeatRsp defaultInstance]; -} -- (C2FHeartBeatRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FHeartBeatRsp*) buildPartial { - C2FHeartBeatRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FHeartBeatRspBuilder*) mergeFrom:(C2FHeartBeatRsp*) other { - if (other == [C2FHeartBeatRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FHeartBeatRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FHeartBeatRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FHeartBeatRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 514; - return self; -} -@end - -@interface C2FFileLoginReq () -@property SInt32 cmdId; -@property (strong) NSString* userId; -@property (strong) NSString* token; -@end - -@implementation C2FFileLoginReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasUserId { - return !!hasUserId_; -} -- (void) setHasUserId:(BOOL) value_ { - hasUserId_ = !!value_; -} -@synthesize userId; -- (BOOL) hasToken { - return !!hasToken_; -} -- (void) setHasToken:(BOOL) value_ { - hasToken_ = !!value_; -} -@synthesize token; -- (void) dealloc { - self.userId = nil; - self.token = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 515; - self.userId = @""; - self.token = @""; - } - return self; -} -static C2FFileLoginReq* defaultC2FFileLoginReqInstance = nil; -+ (void) initialize { - if (self == [C2FFileLoginReq class]) { - defaultC2FFileLoginReqInstance = [[C2FFileLoginReq alloc] init]; - } -} -+ (C2FFileLoginReq*) defaultInstance { - return defaultC2FFileLoginReqInstance; -} -- (C2FFileLoginReq*) defaultInstance { - return defaultC2FFileLoginReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasUserId) { - return NO; - } - if (!self.hasToken) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasUserId) { - [output writeString:2 value:self.userId]; - } - if (self.hasToken) { - [output writeString:3 value:self.token]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasUserId) { - size_ += computeStringSize(2, self.userId); - } - if (self.hasToken) { - size_ += computeStringSize(3, self.token); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FFileLoginReq*) parseFromData:(NSData*) data { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromData:data] build]; -} -+ (C2FFileLoginReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginReq*) parseFromInputStream:(NSInputStream*) input { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromInputStream:input] build]; -} -+ (C2FFileLoginReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FFileLoginReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginReq*)[[[C2FFileLoginReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginReqBuilder*) builder { - return [[C2FFileLoginReqBuilder alloc] init]; -} -+ (C2FFileLoginReqBuilder*) builderWithPrototype:(C2FFileLoginReq*) prototype { - return [[C2FFileLoginReq builder] mergeFrom:prototype]; -} -- (C2FFileLoginReqBuilder*) builder { - return [C2FFileLoginReq builder]; -} -- (C2FFileLoginReqBuilder*) toBuilder { - return [C2FFileLoginReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"userId", self.userId]; - } - if (self.hasToken) { - [output appendFormat:@"%@%@: %@\n", indent, @"token", self.token]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FFileLoginReq class]]) { - return NO; - } - C2FFileLoginReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasUserId == otherMessage.hasUserId && - (!self.hasUserId || [self.userId isEqual:otherMessage.userId]) && - self.hasToken == otherMessage.hasToken && - (!self.hasToken || [self.token isEqual:otherMessage.token]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasUserId) { - hashCode = hashCode * 31 + [self.userId hash]; - } - if (self.hasToken) { - hashCode = hashCode * 31 + [self.token hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FFileLoginReqBuilder() -@property (strong) C2FFileLoginReq* result; -@end - -@implementation C2FFileLoginReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FFileLoginReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FFileLoginReqBuilder*) clear { - self.result = [[C2FFileLoginReq alloc] init]; - return self; -} -- (C2FFileLoginReqBuilder*) clone { - return [C2FFileLoginReq builderWithPrototype:result]; -} -- (C2FFileLoginReq*) defaultInstance { - return [C2FFileLoginReq defaultInstance]; -} -- (C2FFileLoginReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FFileLoginReq*) buildPartial { - C2FFileLoginReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FFileLoginReqBuilder*) mergeFrom:(C2FFileLoginReq*) other { - if (other == [C2FFileLoginReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasUserId) { - [self setUserId:other.userId]; - } - if (other.hasToken) { - [self setToken:other.token]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FFileLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FFileLoginReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setUserId:[input readString]]; - break; - } - case 26: { - [self setToken:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FFileLoginReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FFileLoginReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 515; - return self; -} -- (BOOL) hasUserId { - return result.hasUserId; -} -- (NSString*) userId { - return result.userId; -} -- (C2FFileLoginReqBuilder*) setUserId:(NSString*) value { - result.hasUserId = YES; - result.userId = value; - return self; -} -- (C2FFileLoginReqBuilder*) clearUserId { - result.hasUserId = NO; - result.userId = @""; - return self; -} -- (BOOL) hasToken { - return result.hasToken; -} -- (NSString*) token { - return result.token; -} -- (C2FFileLoginReqBuilder*) setToken:(NSString*) value { - result.hasToken = YES; - result.token = value; - return self; -} -- (C2FFileLoginReqBuilder*) clearToken { - result.hasToken = NO; - result.token = @""; - return self; -} -@end - -@interface C2FFileLoginRsp () -@property SInt32 cmdId; -@property UInt32 results; -@end - -@implementation C2FFileLoginRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 516; - self.results = 0; - } - return self; -} -static C2FFileLoginRsp* defaultC2FFileLoginRspInstance = nil; -+ (void) initialize { - if (self == [C2FFileLoginRsp class]) { - defaultC2FFileLoginRspInstance = [[C2FFileLoginRsp alloc] init]; - } -} -+ (C2FFileLoginRsp*) defaultInstance { - return defaultC2FFileLoginRspInstance; -} -- (C2FFileLoginRsp*) defaultInstance { - return defaultC2FFileLoginRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeUInt32:2 value:self.results]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeUInt32Size(2, self.results); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FFileLoginRsp*) parseFromData:(NSData*) data { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromData:data] build]; -} -+ (C2FFileLoginRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromInputStream:input] build]; -} -+ (C2FFileLoginRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FFileLoginRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileLoginRsp*)[[[C2FFileLoginRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileLoginRspBuilder*) builder { - return [[C2FFileLoginRspBuilder alloc] init]; -} -+ (C2FFileLoginRspBuilder*) builderWithPrototype:(C2FFileLoginRsp*) prototype { - return [[C2FFileLoginRsp builder] mergeFrom:prototype]; -} -- (C2FFileLoginRspBuilder*) builder { - return [C2FFileLoginRsp builder]; -} -- (C2FFileLoginRspBuilder*) toBuilder { - return [C2FFileLoginRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %@\n", indent, @"results", [NSNumber numberWithInteger:self.results]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FFileLoginRsp class]]) { - return NO; - } - C2FFileLoginRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.results] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FFileLoginRspBuilder() -@property (strong) C2FFileLoginRsp* result; -@end - -@implementation C2FFileLoginRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FFileLoginRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FFileLoginRspBuilder*) clear { - self.result = [[C2FFileLoginRsp alloc] init]; - return self; -} -- (C2FFileLoginRspBuilder*) clone { - return [C2FFileLoginRsp builderWithPrototype:result]; -} -- (C2FFileLoginRsp*) defaultInstance { - return [C2FFileLoginRsp defaultInstance]; -} -- (C2FFileLoginRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FFileLoginRsp*) buildPartial { - C2FFileLoginRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FFileLoginRspBuilder*) mergeFrom:(C2FFileLoginRsp*) other { - if (other == [C2FFileLoginRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FFileLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FFileLoginRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setResults:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FFileLoginRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FFileLoginRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 516; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (UInt32) results { - return result.results; -} -- (C2FFileLoginRspBuilder*) setResults:(UInt32) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2FFileLoginRspBuilder*) clearResults { - result.hasResults = NO; - result.results = 0; - return self; -} -@end - -@interface C2FFileData () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* fileName; -@property UInt32 fileSize; -@property UInt32 fileOffset; -@property UInt32 fileType; -@property (strong) NSData* fileData; -@end - -@implementation C2FFileData - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFileName { - return !!hasFileName_; -} -- (void) setHasFileName:(BOOL) value_ { - hasFileName_ = !!value_; -} -@synthesize fileName; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (BOOL) hasFileOffset { - return !!hasFileOffset_; -} -- (void) setHasFileOffset:(BOOL) value_ { - hasFileOffset_ = !!value_; -} -@synthesize fileOffset; -- (BOOL) hasFileType { - return !!hasFileType_; -} -- (void) setHasFileType:(BOOL) value_ { - hasFileType_ = !!value_; -} -@synthesize fileType; -- (BOOL) hasFileData { - return !!hasFileData_; -} -- (void) setHasFileData:(BOOL) value_ { - hasFileData_ = !!value_; -} -@synthesize fileData; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.fileName = nil; - self.fileData = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 517; - self.fromUserId = @""; - self.toUserId = @""; - self.fileName = @""; - self.fileSize = 0; - self.fileOffset = 0; - self.fileType = 0; - self.fileData = [NSData data]; - } - return self; -} -static C2FFileData* defaultC2FFileDataInstance = nil; -+ (void) initialize { - if (self == [C2FFileData class]) { - defaultC2FFileDataInstance = [[C2FFileData alloc] init]; - } -} -+ (C2FFileData*) defaultInstance { - return defaultC2FFileDataInstance; -} -- (C2FFileData*) defaultInstance { - return defaultC2FFileDataInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFileName) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - if (!self.hasFileOffset) { - return NO; - } - if (!self.hasFileType) { - return NO; - } - if (!self.hasFileData) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFileName) { - [output writeString:4 value:self.fileName]; - } - if (self.hasFileSize) { - [output writeUInt32:5 value:self.fileSize]; - } - if (self.hasFileOffset) { - [output writeUInt32:6 value:self.fileOffset]; - } - if (self.hasFileType) { - [output writeUInt32:7 value:self.fileType]; - } - if (self.hasFileData) { - [output writeData:8 value:self.fileData]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFileName) { - size_ += computeStringSize(4, self.fileName); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(5, self.fileSize); - } - if (self.hasFileOffset) { - size_ += computeUInt32Size(6, self.fileOffset); - } - if (self.hasFileType) { - size_ += computeUInt32Size(7, self.fileType); - } - if (self.hasFileData) { - size_ += computeDataSize(8, self.fileData); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FFileData*) parseFromData:(NSData*) data { - return (C2FFileData*)[[[C2FFileData builder] mergeFromData:data] build]; -} -+ (C2FFileData*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileData*)[[[C2FFileData builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileData*) parseFromInputStream:(NSInputStream*) input { - return (C2FFileData*)[[[C2FFileData builder] mergeFromInputStream:input] build]; -} -+ (C2FFileData*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileData*)[[[C2FFileData builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileData*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FFileData*)[[[C2FFileData builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FFileData*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileData*)[[[C2FFileData builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileDataBuilder*) builder { - return [[C2FFileDataBuilder alloc] init]; -} -+ (C2FFileDataBuilder*) builderWithPrototype:(C2FFileData*) prototype { - return [[C2FFileData builder] mergeFrom:prototype]; -} -- (C2FFileDataBuilder*) builder { - return [C2FFileData builder]; -} -- (C2FFileDataBuilder*) toBuilder { - return [C2FFileData builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFileName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileName", self.fileName]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - if (self.hasFileOffset) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileOffset", [NSNumber numberWithInteger:self.fileOffset]]; - } - if (self.hasFileType) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileType", [NSNumber numberWithInteger:self.fileType]]; - } - if (self.hasFileData) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileData", self.fileData]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FFileData class]]) { - return NO; - } - C2FFileData *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFileName == otherMessage.hasFileName && - (!self.hasFileName || [self.fileName isEqual:otherMessage.fileName]) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - self.hasFileOffset == otherMessage.hasFileOffset && - (!self.hasFileOffset || self.fileOffset == otherMessage.fileOffset) && - self.hasFileType == otherMessage.hasFileType && - (!self.hasFileType || self.fileType == otherMessage.fileType) && - self.hasFileData == otherMessage.hasFileData && - (!self.hasFileData || [self.fileData isEqual:otherMessage.fileData]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFileName) { - hashCode = hashCode * 31 + [self.fileName hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - if (self.hasFileOffset) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileOffset] hash]; - } - if (self.hasFileType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileType] hash]; - } - if (self.hasFileData) { - hashCode = hashCode * 31 + [self.fileData hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FFileDataBuilder() -@property (strong) C2FFileData* result; -@end - -@implementation C2FFileDataBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FFileData alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FFileDataBuilder*) clear { - self.result = [[C2FFileData alloc] init]; - return self; -} -- (C2FFileDataBuilder*) clone { - return [C2FFileData builderWithPrototype:result]; -} -- (C2FFileData*) defaultInstance { - return [C2FFileData defaultInstance]; -} -- (C2FFileData*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FFileData*) buildPartial { - C2FFileData* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FFileDataBuilder*) mergeFrom:(C2FFileData*) other { - if (other == [C2FFileData defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFileName) { - [self setFileName:other.fileName]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - if (other.hasFileOffset) { - [self setFileOffset:other.fileOffset]; - } - if (other.hasFileType) { - [self setFileType:other.fileType]; - } - if (other.hasFileData) { - [self setFileData:other.fileData]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FFileDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FFileDataBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFileName:[input readString]]; - break; - } - case 40: { - [self setFileSize:[input readUInt32]]; - break; - } - case 48: { - [self setFileOffset:[input readUInt32]]; - break; - } - case 56: { - [self setFileType:[input readUInt32]]; - break; - } - case 66: { - [self setFileData:[input readData]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FFileDataBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FFileDataBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 517; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2FFileDataBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2FFileDataBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2FFileDataBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2FFileDataBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFileName { - return result.hasFileName; -} -- (NSString*) fileName { - return result.fileName; -} -- (C2FFileDataBuilder*) setFileName:(NSString*) value { - result.hasFileName = YES; - result.fileName = value; - return self; -} -- (C2FFileDataBuilder*) clearFileName { - result.hasFileName = NO; - result.fileName = @""; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (C2FFileDataBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (C2FFileDataBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -- (BOOL) hasFileOffset { - return result.hasFileOffset; -} -- (UInt32) fileOffset { - return result.fileOffset; -} -- (C2FFileDataBuilder*) setFileOffset:(UInt32) value { - result.hasFileOffset = YES; - result.fileOffset = value; - return self; -} -- (C2FFileDataBuilder*) clearFileOffset { - result.hasFileOffset = NO; - result.fileOffset = 0; - return self; -} -- (BOOL) hasFileType { - return result.hasFileType; -} -- (UInt32) fileType { - return result.fileType; -} -- (C2FFileDataBuilder*) setFileType:(UInt32) value { - result.hasFileType = YES; - result.fileType = value; - return self; -} -- (C2FFileDataBuilder*) clearFileType { - result.hasFileType = NO; - result.fileType = 0; - return self; -} -- (BOOL) hasFileData { - return result.hasFileData; -} -- (NSData*) fileData { - return result.fileData; -} -- (C2FFileDataBuilder*) setFileData:(NSData*) value { - result.hasFileData = YES; - result.fileData = value; - return self; -} -- (C2FFileDataBuilder*) clearFileData { - result.hasFileData = NO; - result.fileData = [NSData data]; - return self; -} -@end - -@interface C2FFileGetOfflineReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* filePath; -@end - -@implementation C2FFileGetOfflineReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (void) dealloc { - self.fromUserId = nil; - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 518; - self.fromUserId = @""; - self.filePath = @""; - } - return self; -} -static C2FFileGetOfflineReq* defaultC2FFileGetOfflineReqInstance = nil; -+ (void) initialize { - if (self == [C2FFileGetOfflineReq class]) { - defaultC2FFileGetOfflineReqInstance = [[C2FFileGetOfflineReq alloc] init]; - } -} -+ (C2FFileGetOfflineReq*) defaultInstance { - return defaultC2FFileGetOfflineReqInstance; -} -- (C2FFileGetOfflineReq*) defaultInstance { - return defaultC2FFileGetOfflineReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasFilePath) { - [output writeString:3 value:self.filePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(3, self.filePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FFileGetOfflineReq*) parseFromData:(NSData*) data { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromData:data] build]; -} -+ (C2FFileGetOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileGetOfflineReq*) parseFromInputStream:(NSInputStream*) input { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromInputStream:input] build]; -} -+ (C2FFileGetOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileGetOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FFileGetOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileGetOfflineReq*)[[[C2FFileGetOfflineReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileGetOfflineReqBuilder*) builder { - return [[C2FFileGetOfflineReqBuilder alloc] init]; -} -+ (C2FFileGetOfflineReqBuilder*) builderWithPrototype:(C2FFileGetOfflineReq*) prototype { - return [[C2FFileGetOfflineReq builder] mergeFrom:prototype]; -} -- (C2FFileGetOfflineReqBuilder*) builder { - return [C2FFileGetOfflineReq builder]; -} -- (C2FFileGetOfflineReqBuilder*) toBuilder { - return [C2FFileGetOfflineReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FFileGetOfflineReq class]]) { - return NO; - } - C2FFileGetOfflineReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FFileGetOfflineReqBuilder() -@property (strong) C2FFileGetOfflineReq* result; -@end - -@implementation C2FFileGetOfflineReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FFileGetOfflineReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FFileGetOfflineReqBuilder*) clear { - self.result = [[C2FFileGetOfflineReq alloc] init]; - return self; -} -- (C2FFileGetOfflineReqBuilder*) clone { - return [C2FFileGetOfflineReq builderWithPrototype:result]; -} -- (C2FFileGetOfflineReq*) defaultInstance { - return [C2FFileGetOfflineReq defaultInstance]; -} -- (C2FFileGetOfflineReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FFileGetOfflineReq*) buildPartial { - C2FFileGetOfflineReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FFileGetOfflineReqBuilder*) mergeFrom:(C2FFileGetOfflineReq*) other { - if (other == [C2FFileGetOfflineReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FFileGetOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FFileGetOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setFilePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FFileGetOfflineReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FFileGetOfflineReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 518; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2FFileGetOfflineReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2FFileGetOfflineReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2FFileGetOfflineReqBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2FFileGetOfflineReqBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -@end - -@interface C2FFileUploadFinish () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* filePath; -@property (strong) NSString* saveFilePath; -@property UInt32 fileSize; -@end - -@implementation C2FFileUploadFinish - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (BOOL) hasSaveFilePath { - return !!hasSaveFilePath_; -} -- (void) setHasSaveFilePath:(BOOL) value_ { - hasSaveFilePath_ = !!value_; -} -@synthesize saveFilePath; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.filePath = nil; - self.saveFilePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 519; - self.fromUserId = @""; - self.toUserId = @""; - self.filePath = @""; - self.saveFilePath = @""; - self.fileSize = 0; - } - return self; -} -static C2FFileUploadFinish* defaultC2FFileUploadFinishInstance = nil; -+ (void) initialize { - if (self == [C2FFileUploadFinish class]) { - defaultC2FFileUploadFinishInstance = [[C2FFileUploadFinish alloc] init]; - } -} -+ (C2FFileUploadFinish*) defaultInstance { - return defaultC2FFileUploadFinishInstance; -} -- (C2FFileUploadFinish*) defaultInstance { - return defaultC2FFileUploadFinishInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - if (!self.hasSaveFilePath) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - if (self.hasSaveFilePath) { - [output writeString:5 value:self.saveFilePath]; - } - if (self.hasFileSize) { - [output writeUInt32:6 value:self.fileSize]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - if (self.hasSaveFilePath) { - size_ += computeStringSize(5, self.saveFilePath); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(6, self.fileSize); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2FFileUploadFinish*) parseFromData:(NSData*) data { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromData:data] build]; -} -+ (C2FFileUploadFinish*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileUploadFinish*) parseFromInputStream:(NSInputStream*) input { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromInputStream:input] build]; -} -+ (C2FFileUploadFinish*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileUploadFinish*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromCodedInputStream:input] build]; -} -+ (C2FFileUploadFinish*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2FFileUploadFinish*)[[[C2FFileUploadFinish builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2FFileUploadFinishBuilder*) builder { - return [[C2FFileUploadFinishBuilder alloc] init]; -} -+ (C2FFileUploadFinishBuilder*) builderWithPrototype:(C2FFileUploadFinish*) prototype { - return [[C2FFileUploadFinish builder] mergeFrom:prototype]; -} -- (C2FFileUploadFinishBuilder*) builder { - return [C2FFileUploadFinish builder]; -} -- (C2FFileUploadFinishBuilder*) toBuilder { - return [C2FFileUploadFinish builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - if (self.hasSaveFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"saveFilePath", self.saveFilePath]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2FFileUploadFinish class]]) { - return NO; - } - C2FFileUploadFinish *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - self.hasSaveFilePath == otherMessage.hasSaveFilePath && - (!self.hasSaveFilePath || [self.saveFilePath isEqual:otherMessage.saveFilePath]) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - if (self.hasSaveFilePath) { - hashCode = hashCode * 31 + [self.saveFilePath hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2FFileUploadFinishBuilder() -@property (strong) C2FFileUploadFinish* result; -@end - -@implementation C2FFileUploadFinishBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2FFileUploadFinish alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2FFileUploadFinishBuilder*) clear { - self.result = [[C2FFileUploadFinish alloc] init]; - return self; -} -- (C2FFileUploadFinishBuilder*) clone { - return [C2FFileUploadFinish builderWithPrototype:result]; -} -- (C2FFileUploadFinish*) defaultInstance { - return [C2FFileUploadFinish defaultInstance]; -} -- (C2FFileUploadFinish*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2FFileUploadFinish*) buildPartial { - C2FFileUploadFinish* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2FFileUploadFinishBuilder*) mergeFrom:(C2FFileUploadFinish*) other { - if (other == [C2FFileUploadFinish defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - if (other.hasSaveFilePath) { - [self setSaveFilePath:other.saveFilePath]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2FFileUploadFinishBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2FFileUploadFinishBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - case 42: { - [self setSaveFilePath:[input readString]]; - break; - } - case 48: { - [self setFileSize:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2FFileUploadFinishBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 519; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2FFileUploadFinishBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2FFileUploadFinishBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2FFileUploadFinishBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -- (BOOL) hasSaveFilePath { - return result.hasSaveFilePath; -} -- (NSString*) saveFilePath { - return result.saveFilePath; -} -- (C2FFileUploadFinishBuilder*) setSaveFilePath:(NSString*) value { - result.hasSaveFilePath = YES; - result.saveFilePath = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearSaveFilePath { - result.hasSaveFilePath = NO; - result.saveFilePath = @""; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (C2FFileUploadFinishBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (C2FFileUploadFinishBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -@end - -@interface C2MFileReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* fileName; -@property UInt32 fileSize; -@end - -@implementation C2MFileReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFileName { - return !!hasFileName_; -} -- (void) setHasFileName:(BOOL) value_ { - hasFileName_ = !!value_; -} -@synthesize fileName; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.fileName = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 520; - self.fromUserId = @""; - self.toUserId = @""; - self.fileName = @""; - self.fileSize = 0; - } - return self; -} -static C2MFileReq* defaultC2MFileReqInstance = nil; -+ (void) initialize { - if (self == [C2MFileReq class]) { - defaultC2MFileReqInstance = [[C2MFileReq alloc] init]; - } -} -+ (C2MFileReq*) defaultInstance { - return defaultC2MFileReqInstance; -} -- (C2MFileReq*) defaultInstance { - return defaultC2MFileReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFileName) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFileName) { - [output writeString:4 value:self.fileName]; - } - if (self.hasFileSize) { - [output writeUInt32:5 value:self.fileSize]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFileName) { - size_ += computeStringSize(4, self.fileName); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(5, self.fileSize); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileReq*) parseFromData:(NSData*) data { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromData:data] build]; -} -+ (C2MFileReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromInputStream:input] build]; -} -+ (C2MFileReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileReq*)[[[C2MFileReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileReqBuilder*) builder { - return [[C2MFileReqBuilder alloc] init]; -} -+ (C2MFileReqBuilder*) builderWithPrototype:(C2MFileReq*) prototype { - return [[C2MFileReq builder] mergeFrom:prototype]; -} -- (C2MFileReqBuilder*) builder { - return [C2MFileReq builder]; -} -- (C2MFileReqBuilder*) toBuilder { - return [C2MFileReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFileName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileName", self.fileName]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileReq class]]) { - return NO; - } - C2MFileReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFileName == otherMessage.hasFileName && - (!self.hasFileName || [self.fileName isEqual:otherMessage.fileName]) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFileName) { - hashCode = hashCode * 31 + [self.fileName hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileReqBuilder() -@property (strong) C2MFileReq* result; -@end - -@implementation C2MFileReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileReqBuilder*) clear { - self.result = [[C2MFileReq alloc] init]; - return self; -} -- (C2MFileReqBuilder*) clone { - return [C2MFileReq builderWithPrototype:result]; -} -- (C2MFileReq*) defaultInstance { - return [C2MFileReq defaultInstance]; -} -- (C2MFileReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileReq*) buildPartial { - C2MFileReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileReqBuilder*) mergeFrom:(C2MFileReq*) other { - if (other == [C2MFileReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFileName) { - [self setFileName:other.fileName]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFileName:[input readString]]; - break; - } - case 40: { - [self setFileSize:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 520; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileReqBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileReqBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFileName { - return result.hasFileName; -} -- (NSString*) fileName { - return result.fileName; -} -- (C2MFileReqBuilder*) setFileName:(NSString*) value { - result.hasFileName = YES; - result.fileName = value; - return self; -} -- (C2MFileReqBuilder*) clearFileName { - result.hasFileName = NO; - result.fileName = @""; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (C2MFileReqBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (C2MFileReqBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -@end - -@interface C2MFileRsp () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* fileName; -@property UInt32 acceptFlag; -@property (strong) NSString* listenIp; -@property UInt32 listenPort; -@end - -@implementation C2MFileRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFileName { - return !!hasFileName_; -} -- (void) setHasFileName:(BOOL) value_ { - hasFileName_ = !!value_; -} -@synthesize fileName; -- (BOOL) hasAcceptFlag { - return !!hasAcceptFlag_; -} -- (void) setHasAcceptFlag:(BOOL) value_ { - hasAcceptFlag_ = !!value_; -} -@synthesize acceptFlag; -- (BOOL) hasListenIp { - return !!hasListenIp_; -} -- (void) setHasListenIp:(BOOL) value_ { - hasListenIp_ = !!value_; -} -@synthesize listenIp; -- (BOOL) hasListenPort { - return !!hasListenPort_; -} -- (void) setHasListenPort:(BOOL) value_ { - hasListenPort_ = !!value_; -} -@synthesize listenPort; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.fileName = nil; - self.listenIp = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 521; - self.fromUserId = @""; - self.toUserId = @""; - self.fileName = @""; - self.acceptFlag = 0; - self.listenIp = @""; - self.listenPort = 0; - } - return self; -} -static C2MFileRsp* defaultC2MFileRspInstance = nil; -+ (void) initialize { - if (self == [C2MFileRsp class]) { - defaultC2MFileRspInstance = [[C2MFileRsp alloc] init]; - } -} -+ (C2MFileRsp*) defaultInstance { - return defaultC2MFileRspInstance; -} -- (C2MFileRsp*) defaultInstance { - return defaultC2MFileRspInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFileName) { - return NO; - } - if (!self.hasAcceptFlag) { - return NO; - } - if (!self.hasListenIp) { - return NO; - } - if (!self.hasListenPort) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFileName) { - [output writeString:4 value:self.fileName]; - } - if (self.hasAcceptFlag) { - [output writeUInt32:5 value:self.acceptFlag]; - } - if (self.hasListenIp) { - [output writeString:6 value:self.listenIp]; - } - if (self.hasListenPort) { - [output writeUInt32:7 value:self.listenPort]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFileName) { - size_ += computeStringSize(4, self.fileName); - } - if (self.hasAcceptFlag) { - size_ += computeUInt32Size(5, self.acceptFlag); - } - if (self.hasListenIp) { - size_ += computeStringSize(6, self.listenIp); - } - if (self.hasListenPort) { - size_ += computeUInt32Size(7, self.listenPort); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileRsp*) parseFromData:(NSData*) data { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromData:data] build]; -} -+ (C2MFileRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MFileRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRsp*)[[[C2MFileRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRspBuilder*) builder { - return [[C2MFileRspBuilder alloc] init]; -} -+ (C2MFileRspBuilder*) builderWithPrototype:(C2MFileRsp*) prototype { - return [[C2MFileRsp builder] mergeFrom:prototype]; -} -- (C2MFileRspBuilder*) builder { - return [C2MFileRsp builder]; -} -- (C2MFileRspBuilder*) toBuilder { - return [C2MFileRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFileName) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileName", self.fileName]; - } - if (self.hasAcceptFlag) { - [output appendFormat:@"%@%@: %@\n", indent, @"acceptFlag", [NSNumber numberWithInteger:self.acceptFlag]]; - } - if (self.hasListenIp) { - [output appendFormat:@"%@%@: %@\n", indent, @"listenIp", self.listenIp]; - } - if (self.hasListenPort) { - [output appendFormat:@"%@%@: %@\n", indent, @"listenPort", [NSNumber numberWithInteger:self.listenPort]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileRsp class]]) { - return NO; - } - C2MFileRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFileName == otherMessage.hasFileName && - (!self.hasFileName || [self.fileName isEqual:otherMessage.fileName]) && - self.hasAcceptFlag == otherMessage.hasAcceptFlag && - (!self.hasAcceptFlag || self.acceptFlag == otherMessage.acceptFlag) && - self.hasListenIp == otherMessage.hasListenIp && - (!self.hasListenIp || [self.listenIp isEqual:otherMessage.listenIp]) && - self.hasListenPort == otherMessage.hasListenPort && - (!self.hasListenPort || self.listenPort == otherMessage.listenPort) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFileName) { - hashCode = hashCode * 31 + [self.fileName hash]; - } - if (self.hasAcceptFlag) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.acceptFlag] hash]; - } - if (self.hasListenIp) { - hashCode = hashCode * 31 + [self.listenIp hash]; - } - if (self.hasListenPort) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.listenPort] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileRspBuilder() -@property (strong) C2MFileRsp* result; -@end - -@implementation C2MFileRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileRspBuilder*) clear { - self.result = [[C2MFileRsp alloc] init]; - return self; -} -- (C2MFileRspBuilder*) clone { - return [C2MFileRsp builderWithPrototype:result]; -} -- (C2MFileRsp*) defaultInstance { - return [C2MFileRsp defaultInstance]; -} -- (C2MFileRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileRsp*) buildPartial { - C2MFileRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileRspBuilder*) mergeFrom:(C2MFileRsp*) other { - if (other == [C2MFileRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFileName) { - [self setFileName:other.fileName]; - } - if (other.hasAcceptFlag) { - [self setAcceptFlag:other.acceptFlag]; - } - if (other.hasListenIp) { - [self setListenIp:other.listenIp]; - } - if (other.hasListenPort) { - [self setListenPort:other.listenPort]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFileName:[input readString]]; - break; - } - case 40: { - [self setAcceptFlag:[input readUInt32]]; - break; - } - case 50: { - [self setListenIp:[input readString]]; - break; - } - case 56: { - [self setListenPort:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 521; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileRspBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileRspBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileRspBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileRspBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFileName { - return result.hasFileName; -} -- (NSString*) fileName { - return result.fileName; -} -- (C2MFileRspBuilder*) setFileName:(NSString*) value { - result.hasFileName = YES; - result.fileName = value; - return self; -} -- (C2MFileRspBuilder*) clearFileName { - result.hasFileName = NO; - result.fileName = @""; - return self; -} -- (BOOL) hasAcceptFlag { - return result.hasAcceptFlag; -} -- (UInt32) acceptFlag { - return result.acceptFlag; -} -- (C2MFileRspBuilder*) setAcceptFlag:(UInt32) value { - result.hasAcceptFlag = YES; - result.acceptFlag = value; - return self; -} -- (C2MFileRspBuilder*) clearAcceptFlag { - result.hasAcceptFlag = NO; - result.acceptFlag = 0; - return self; -} -- (BOOL) hasListenIp { - return result.hasListenIp; -} -- (NSString*) listenIp { - return result.listenIp; -} -- (C2MFileRspBuilder*) setListenIp:(NSString*) value { - result.hasListenIp = YES; - result.listenIp = value; - return self; -} -- (C2MFileRspBuilder*) clearListenIp { - result.hasListenIp = NO; - result.listenIp = @""; - return self; -} -- (BOOL) hasListenPort { - return result.hasListenPort; -} -- (UInt32) listenPort { - return result.listenPort; -} -- (C2MFileRspBuilder*) setListenPort:(UInt32) value { - result.hasListenPort = YES; - result.listenPort = value; - return self; -} -- (C2MFileRspBuilder*) clearListenPort { - result.hasListenPort = NO; - result.listenPort = 0; - return self; -} -@end - -@interface C2MFileRecvReady () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@end - -@implementation C2MFileRecvReady - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 522; - self.fromUserId = @""; - self.toUserId = @""; - } - return self; -} -static C2MFileRecvReady* defaultC2MFileRecvReadyInstance = nil; -+ (void) initialize { - if (self == [C2MFileRecvReady class]) { - defaultC2MFileRecvReadyInstance = [[C2MFileRecvReady alloc] init]; - } -} -+ (C2MFileRecvReady*) defaultInstance { - return defaultC2MFileRecvReadyInstance; -} -- (C2MFileRecvReady*) defaultInstance { - return defaultC2MFileRecvReadyInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileRecvReady*) parseFromData:(NSData*) data { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromData:data] build]; -} -+ (C2MFileRecvReady*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRecvReady*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromInputStream:input] build]; -} -+ (C2MFileRecvReady*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRecvReady*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileRecvReady*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileRecvReady*)[[[C2MFileRecvReady builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileRecvReadyBuilder*) builder { - return [[C2MFileRecvReadyBuilder alloc] init]; -} -+ (C2MFileRecvReadyBuilder*) builderWithPrototype:(C2MFileRecvReady*) prototype { - return [[C2MFileRecvReady builder] mergeFrom:prototype]; -} -- (C2MFileRecvReadyBuilder*) builder { - return [C2MFileRecvReady builder]; -} -- (C2MFileRecvReadyBuilder*) toBuilder { - return [C2MFileRecvReady builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileRecvReady class]]) { - return NO; - } - C2MFileRecvReady *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileRecvReadyBuilder() -@property (strong) C2MFileRecvReady* result; -@end - -@implementation C2MFileRecvReadyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileRecvReady alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileRecvReadyBuilder*) clear { - self.result = [[C2MFileRecvReady alloc] init]; - return self; -} -- (C2MFileRecvReadyBuilder*) clone { - return [C2MFileRecvReady builderWithPrototype:result]; -} -- (C2MFileRecvReady*) defaultInstance { - return [C2MFileRecvReady defaultInstance]; -} -- (C2MFileRecvReady*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileRecvReady*) buildPartial { - C2MFileRecvReady* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileRecvReadyBuilder*) mergeFrom:(C2MFileRecvReady*) other { - if (other == [C2MFileRecvReady defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileRecvReadyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileRecvReadyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileRecvReadyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileRecvReadyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 522; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileRecvReadyBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileRecvReadyBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileRecvReadyBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileRecvReadyBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -@end - -@interface C2MFileAbort () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* filePath; -@end - -@implementation C2MFileAbort - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 523; - self.fromUserId = @""; - self.toUserId = @""; - self.filePath = @""; - } - return self; -} -static C2MFileAbort* defaultC2MFileAbortInstance = nil; -+ (void) initialize { - if (self == [C2MFileAbort class]) { - defaultC2MFileAbortInstance = [[C2MFileAbort alloc] init]; - } -} -+ (C2MFileAbort*) defaultInstance { - return defaultC2MFileAbortInstance; -} -- (C2MFileAbort*) defaultInstance { - return defaultC2MFileAbortInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileAbort*) parseFromData:(NSData*) data { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromData:data] build]; -} -+ (C2MFileAbort*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAbort*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromInputStream:input] build]; -} -+ (C2MFileAbort*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAbort*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileAbort*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAbort*)[[[C2MFileAbort builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAbortBuilder*) builder { - return [[C2MFileAbortBuilder alloc] init]; -} -+ (C2MFileAbortBuilder*) builderWithPrototype:(C2MFileAbort*) prototype { - return [[C2MFileAbort builder] mergeFrom:prototype]; -} -- (C2MFileAbortBuilder*) builder { - return [C2MFileAbort builder]; -} -- (C2MFileAbortBuilder*) toBuilder { - return [C2MFileAbort builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileAbort class]]) { - return NO; - } - C2MFileAbort *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileAbortBuilder() -@property (strong) C2MFileAbort* result; -@end - -@implementation C2MFileAbortBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileAbort alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileAbortBuilder*) clear { - self.result = [[C2MFileAbort alloc] init]; - return self; -} -- (C2MFileAbortBuilder*) clone { - return [C2MFileAbort builderWithPrototype:result]; -} -- (C2MFileAbort*) defaultInstance { - return [C2MFileAbort defaultInstance]; -} -- (C2MFileAbort*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileAbort*) buildPartial { - C2MFileAbort* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileAbortBuilder*) mergeFrom:(C2MFileAbort*) other { - if (other == [C2MFileAbort defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileAbortBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileAbortBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileAbortBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileAbortBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 523; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileAbortBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileAbortBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileAbortBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileAbortBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2MFileAbortBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2MFileAbortBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -@end - -@interface C2MFileDownloadOfflineNotify () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* filePath; -@property (strong) NSString* savePath; -@end - -@implementation C2MFileDownloadOfflineNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (BOOL) hasSavePath { - return !!hasSavePath_; -} -- (void) setHasSavePath:(BOOL) value_ { - hasSavePath_ = !!value_; -} -@synthesize savePath; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.filePath = nil; - self.savePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 524; - self.fromUserId = @""; - self.toUserId = @""; - self.filePath = @""; - self.savePath = @""; - } - return self; -} -static C2MFileDownloadOfflineNotify* defaultC2MFileDownloadOfflineNotifyInstance = nil; -+ (void) initialize { - if (self == [C2MFileDownloadOfflineNotify class]) { - defaultC2MFileDownloadOfflineNotifyInstance = [[C2MFileDownloadOfflineNotify alloc] init]; - } -} -+ (C2MFileDownloadOfflineNotify*) defaultInstance { - return defaultC2MFileDownloadOfflineNotifyInstance; -} -- (C2MFileDownloadOfflineNotify*) defaultInstance { - return defaultC2MFileDownloadOfflineNotifyInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - if (!self.hasSavePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - if (self.hasSavePath) { - [output writeString:5 value:self.savePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - if (self.hasSavePath) { - size_ += computeStringSize(5, self.savePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileDownloadOfflineNotify*) parseFromData:(NSData*) data { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromData:data] build]; -} -+ (C2MFileDownloadOfflineNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDownloadOfflineNotify*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromInputStream:input] build]; -} -+ (C2MFileDownloadOfflineNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDownloadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileDownloadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDownloadOfflineNotify*)[[[C2MFileDownloadOfflineNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDownloadOfflineNotifyBuilder*) builder { - return [[C2MFileDownloadOfflineNotifyBuilder alloc] init]; -} -+ (C2MFileDownloadOfflineNotifyBuilder*) builderWithPrototype:(C2MFileDownloadOfflineNotify*) prototype { - return [[C2MFileDownloadOfflineNotify builder] mergeFrom:prototype]; -} -- (C2MFileDownloadOfflineNotifyBuilder*) builder { - return [C2MFileDownloadOfflineNotify builder]; -} -- (C2MFileDownloadOfflineNotifyBuilder*) toBuilder { - return [C2MFileDownloadOfflineNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - if (self.hasSavePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"savePath", self.savePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileDownloadOfflineNotify class]]) { - return NO; - } - C2MFileDownloadOfflineNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - self.hasSavePath == otherMessage.hasSavePath && - (!self.hasSavePath || [self.savePath isEqual:otherMessage.savePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - if (self.hasSavePath) { - hashCode = hashCode * 31 + [self.savePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileDownloadOfflineNotifyBuilder() -@property (strong) C2MFileDownloadOfflineNotify* result; -@end - -@implementation C2MFileDownloadOfflineNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileDownloadOfflineNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clear { - self.result = [[C2MFileDownloadOfflineNotify alloc] init]; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clone { - return [C2MFileDownloadOfflineNotify builderWithPrototype:result]; -} -- (C2MFileDownloadOfflineNotify*) defaultInstance { - return [C2MFileDownloadOfflineNotify defaultInstance]; -} -- (C2MFileDownloadOfflineNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileDownloadOfflineNotify*) buildPartial { - C2MFileDownloadOfflineNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFrom:(C2MFileDownloadOfflineNotify*) other { - if (other == [C2MFileDownloadOfflineNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - if (other.hasSavePath) { - [self setSavePath:other.savePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileDownloadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - case 42: { - [self setSavePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileDownloadOfflineNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 524; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileDownloadOfflineNotifyBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileDownloadOfflineNotifyBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2MFileDownloadOfflineNotifyBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -- (BOOL) hasSavePath { - return result.hasSavePath; -} -- (NSString*) savePath { - return result.savePath; -} -- (C2MFileDownloadOfflineNotifyBuilder*) setSavePath:(NSString*) value { - result.hasSavePath = YES; - result.savePath = value; - return self; -} -- (C2MFileDownloadOfflineNotifyBuilder*) clearSavePath { - result.hasSavePath = NO; - result.savePath = @""; - return self; -} -@end - -@interface C2MFileUploadOfflineNotify () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* filePath; -@end - -@implementation C2MFileUploadOfflineNotify - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 525; - self.fromUserId = @""; - self.toUserId = @""; - self.filePath = @""; - } - return self; -} -static C2MFileUploadOfflineNotify* defaultC2MFileUploadOfflineNotifyInstance = nil; -+ (void) initialize { - if (self == [C2MFileUploadOfflineNotify class]) { - defaultC2MFileUploadOfflineNotifyInstance = [[C2MFileUploadOfflineNotify alloc] init]; - } -} -+ (C2MFileUploadOfflineNotify*) defaultInstance { - return defaultC2MFileUploadOfflineNotifyInstance; -} -- (C2MFileUploadOfflineNotify*) defaultInstance { - return defaultC2MFileUploadOfflineNotifyInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileUploadOfflineNotify*) parseFromData:(NSData*) data { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromData:data] build]; -} -+ (C2MFileUploadOfflineNotify*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileUploadOfflineNotify*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromInputStream:input] build]; -} -+ (C2MFileUploadOfflineNotify*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileUploadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileUploadOfflineNotify*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileUploadOfflineNotify*)[[[C2MFileUploadOfflineNotify builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileUploadOfflineNotifyBuilder*) builder { - return [[C2MFileUploadOfflineNotifyBuilder alloc] init]; -} -+ (C2MFileUploadOfflineNotifyBuilder*) builderWithPrototype:(C2MFileUploadOfflineNotify*) prototype { - return [[C2MFileUploadOfflineNotify builder] mergeFrom:prototype]; -} -- (C2MFileUploadOfflineNotifyBuilder*) builder { - return [C2MFileUploadOfflineNotify builder]; -} -- (C2MFileUploadOfflineNotifyBuilder*) toBuilder { - return [C2MFileUploadOfflineNotify builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileUploadOfflineNotify class]]) { - return NO; - } - C2MFileUploadOfflineNotify *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileUploadOfflineNotifyBuilder() -@property (strong) C2MFileUploadOfflineNotify* result; -@end - -@implementation C2MFileUploadOfflineNotifyBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileUploadOfflineNotify alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileUploadOfflineNotifyBuilder*) clear { - self.result = [[C2MFileUploadOfflineNotify alloc] init]; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) clone { - return [C2MFileUploadOfflineNotify builderWithPrototype:result]; -} -- (C2MFileUploadOfflineNotify*) defaultInstance { - return [C2MFileUploadOfflineNotify defaultInstance]; -} -- (C2MFileUploadOfflineNotify*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileUploadOfflineNotify*) buildPartial { - C2MFileUploadOfflineNotify* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileUploadOfflineNotifyBuilder*) mergeFrom:(C2MFileUploadOfflineNotify*) other { - if (other == [C2MFileUploadOfflineNotify defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileUploadOfflineNotifyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileUploadOfflineNotifyBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 525; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileUploadOfflineNotifyBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileUploadOfflineNotifyBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2MFileUploadOfflineNotifyBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2MFileUploadOfflineNotifyBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -@end - -@interface C2MFileHasOfflineReq () -@property SInt32 cmdId; -@end - -@implementation C2MFileHasOfflineReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 526; - } - return self; -} -static C2MFileHasOfflineReq* defaultC2MFileHasOfflineReqInstance = nil; -+ (void) initialize { - if (self == [C2MFileHasOfflineReq class]) { - defaultC2MFileHasOfflineReqInstance = [[C2MFileHasOfflineReq alloc] init]; - } -} -+ (C2MFileHasOfflineReq*) defaultInstance { - return defaultC2MFileHasOfflineReqInstance; -} -- (C2MFileHasOfflineReq*) defaultInstance { - return defaultC2MFileHasOfflineReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileHasOfflineReq*) parseFromData:(NSData*) data { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromData:data] build]; -} -+ (C2MFileHasOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromInputStream:input] build]; -} -+ (C2MFileHasOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileHasOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineReq*)[[[C2MFileHasOfflineReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineReqBuilder*) builder { - return [[C2MFileHasOfflineReqBuilder alloc] init]; -} -+ (C2MFileHasOfflineReqBuilder*) builderWithPrototype:(C2MFileHasOfflineReq*) prototype { - return [[C2MFileHasOfflineReq builder] mergeFrom:prototype]; -} -- (C2MFileHasOfflineReqBuilder*) builder { - return [C2MFileHasOfflineReq builder]; -} -- (C2MFileHasOfflineReqBuilder*) toBuilder { - return [C2MFileHasOfflineReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileHasOfflineReq class]]) { - return NO; - } - C2MFileHasOfflineReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileHasOfflineReqBuilder() -@property (strong) C2MFileHasOfflineReq* result; -@end - -@implementation C2MFileHasOfflineReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileHasOfflineReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileHasOfflineReqBuilder*) clear { - self.result = [[C2MFileHasOfflineReq alloc] init]; - return self; -} -- (C2MFileHasOfflineReqBuilder*) clone { - return [C2MFileHasOfflineReq builderWithPrototype:result]; -} -- (C2MFileHasOfflineReq*) defaultInstance { - return [C2MFileHasOfflineReq defaultInstance]; -} -- (C2MFileHasOfflineReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileHasOfflineReq*) buildPartial { - C2MFileHasOfflineReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileHasOfflineReqBuilder*) mergeFrom:(C2MFileHasOfflineReq*) other { - if (other == [C2MFileHasOfflineReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileHasOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileHasOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileHasOfflineReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileHasOfflineReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 526; - return self; -} -@end - -@interface C2MFileHasOfflineRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * offlineFileInfoListArray; -@end - -@implementation C2MFileHasOfflineRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize offlineFileInfoListArray; -@dynamic offlineFileInfoList; -- (void) dealloc { - self.offlineFileInfoListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 527; - } - return self; -} -static C2MFileHasOfflineRsp* defaultC2MFileHasOfflineRspInstance = nil; -+ (void) initialize { - if (self == [C2MFileHasOfflineRsp class]) { - defaultC2MFileHasOfflineRspInstance = [[C2MFileHasOfflineRsp alloc] init]; - } -} -+ (C2MFileHasOfflineRsp*) defaultInstance { - return defaultC2MFileHasOfflineRspInstance; -} -- (C2MFileHasOfflineRsp*) defaultInstance { - return defaultC2MFileHasOfflineRspInstance; -} -- (NSArray *)offlineFileInfoList { - return offlineFileInfoListArray; -} -- (ClientOfflineFileInfo*)offlineFileInfoListAtIndex:(NSUInteger)index { - return [offlineFileInfoListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInitofflineFileInfoList = YES; - [self.offlineFileInfoList enumerateObjectsUsingBlock:^(ClientOfflineFileInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitofflineFileInfoList = NO; - *stop = YES; - } - }]; - if (!isInitofflineFileInfoList) return isInitofflineFileInfoList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.offlineFileInfoListArray enumerateObjectsUsingBlock:^(ClientOfflineFileInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.offlineFileInfoListArray enumerateObjectsUsingBlock:^(ClientOfflineFileInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileHasOfflineRsp*) parseFromData:(NSData*) data { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromData:data] build]; -} -+ (C2MFileHasOfflineRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MFileHasOfflineRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileHasOfflineRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileHasOfflineRsp*)[[[C2MFileHasOfflineRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileHasOfflineRspBuilder*) builder { - return [[C2MFileHasOfflineRspBuilder alloc] init]; -} -+ (C2MFileHasOfflineRspBuilder*) builderWithPrototype:(C2MFileHasOfflineRsp*) prototype { - return [[C2MFileHasOfflineRsp builder] mergeFrom:prototype]; -} -- (C2MFileHasOfflineRspBuilder*) builder { - return [C2MFileHasOfflineRsp builder]; -} -- (C2MFileHasOfflineRspBuilder*) toBuilder { - return [C2MFileHasOfflineRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.offlineFileInfoListArray enumerateObjectsUsingBlock:^(ClientOfflineFileInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"offlineFileInfoList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileHasOfflineRsp class]]) { - return NO; - } - C2MFileHasOfflineRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.offlineFileInfoListArray isEqualToArray:otherMessage.offlineFileInfoListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.offlineFileInfoListArray enumerateObjectsUsingBlock:^(ClientOfflineFileInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileHasOfflineRspBuilder() -@property (strong) C2MFileHasOfflineRsp* result; -@end - -@implementation C2MFileHasOfflineRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileHasOfflineRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileHasOfflineRspBuilder*) clear { - self.result = [[C2MFileHasOfflineRsp alloc] init]; - return self; -} -- (C2MFileHasOfflineRspBuilder*) clone { - return [C2MFileHasOfflineRsp builderWithPrototype:result]; -} -- (C2MFileHasOfflineRsp*) defaultInstance { - return [C2MFileHasOfflineRsp defaultInstance]; -} -- (C2MFileHasOfflineRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileHasOfflineRsp*) buildPartial { - C2MFileHasOfflineRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileHasOfflineRspBuilder*) mergeFrom:(C2MFileHasOfflineRsp*) other { - if (other == [C2MFileHasOfflineRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.offlineFileInfoListArray.count > 0) { - if (result.offlineFileInfoListArray == nil) { - result.offlineFileInfoListArray = [[NSMutableArray alloc] initWithArray:other.offlineFileInfoListArray]; - } else { - [result.offlineFileInfoListArray addObjectsFromArray:other.offlineFileInfoListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileHasOfflineRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileHasOfflineRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientOfflineFileInfoBuilder* subBuilder = [ClientOfflineFileInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addOfflineFileInfoList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileHasOfflineRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileHasOfflineRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 527; - return self; -} -- (NSMutableArray *)offlineFileInfoList { - return result.offlineFileInfoListArray; -} -- (ClientOfflineFileInfo*)offlineFileInfoListAtIndex:(NSUInteger)index { - return [result offlineFileInfoListAtIndex:index]; -} -- (C2MFileHasOfflineRspBuilder *)addOfflineFileInfoList:(ClientOfflineFileInfo*)value { - if (result.offlineFileInfoListArray == nil) { - result.offlineFileInfoListArray = [[NSMutableArray alloc]init]; - } - [result.offlineFileInfoListArray addObject:value]; - return self; -} -- (C2MFileHasOfflineRspBuilder *)setOfflineFileInfoListArray:(NSArray *)array { - result.offlineFileInfoListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MFileHasOfflineRspBuilder *)clearOfflineFileInfoList { - result.offlineFileInfoListArray = nil; - return self; -} -@end - -@interface C2MFileAddOfflineReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property (strong) NSString* filePath; -@property UInt32 fileSize; -@end - -@implementation C2MFileAddOfflineReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFilePath { - return !!hasFilePath_; -} -- (void) setHasFilePath:(BOOL) value_ { - hasFilePath_ = !!value_; -} -@synthesize filePath; -- (BOOL) hasFileSize { - return !!hasFileSize_; -} -- (void) setHasFileSize:(BOOL) value_ { - hasFileSize_ = !!value_; -} -@synthesize fileSize; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; - self.filePath = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 528; - self.fromUserId = @""; - self.toUserId = @""; - self.filePath = @""; - self.fileSize = 0; - } - return self; -} -static C2MFileAddOfflineReq* defaultC2MFileAddOfflineReqInstance = nil; -+ (void) initialize { - if (self == [C2MFileAddOfflineReq class]) { - defaultC2MFileAddOfflineReqInstance = [[C2MFileAddOfflineReq alloc] init]; - } -} -+ (C2MFileAddOfflineReq*) defaultInstance { - return defaultC2MFileAddOfflineReqInstance; -} -- (C2MFileAddOfflineReq*) defaultInstance { - return defaultC2MFileAddOfflineReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFilePath) { - return NO; - } - if (!self.hasFileSize) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFilePath) { - [output writeString:4 value:self.filePath]; - } - if (self.hasFileSize) { - [output writeUInt32:5 value:self.fileSize]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFilePath) { - size_ += computeStringSize(4, self.filePath); - } - if (self.hasFileSize) { - size_ += computeUInt32Size(5, self.fileSize); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileAddOfflineReq*) parseFromData:(NSData*) data { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromData:data] build]; -} -+ (C2MFileAddOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAddOfflineReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromInputStream:input] build]; -} -+ (C2MFileAddOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAddOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileAddOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileAddOfflineReq*)[[[C2MFileAddOfflineReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileAddOfflineReqBuilder*) builder { - return [[C2MFileAddOfflineReqBuilder alloc] init]; -} -+ (C2MFileAddOfflineReqBuilder*) builderWithPrototype:(C2MFileAddOfflineReq*) prototype { - return [[C2MFileAddOfflineReq builder] mergeFrom:prototype]; -} -- (C2MFileAddOfflineReqBuilder*) builder { - return [C2MFileAddOfflineReq builder]; -} -- (C2MFileAddOfflineReqBuilder*) toBuilder { - return [C2MFileAddOfflineReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFilePath) { - [output appendFormat:@"%@%@: %@\n", indent, @"filePath", self.filePath]; - } - if (self.hasFileSize) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileSize", [NSNumber numberWithInteger:self.fileSize]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileAddOfflineReq class]]) { - return NO; - } - C2MFileAddOfflineReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFilePath == otherMessage.hasFilePath && - (!self.hasFilePath || [self.filePath isEqual:otherMessage.filePath]) && - self.hasFileSize == otherMessage.hasFileSize && - (!self.hasFileSize || self.fileSize == otherMessage.fileSize) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFilePath) { - hashCode = hashCode * 31 + [self.filePath hash]; - } - if (self.hasFileSize) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileSize] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileAddOfflineReqBuilder() -@property (strong) C2MFileAddOfflineReq* result; -@end - -@implementation C2MFileAddOfflineReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileAddOfflineReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileAddOfflineReqBuilder*) clear { - self.result = [[C2MFileAddOfflineReq alloc] init]; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clone { - return [C2MFileAddOfflineReq builderWithPrototype:result]; -} -- (C2MFileAddOfflineReq*) defaultInstance { - return [C2MFileAddOfflineReq defaultInstance]; -} -- (C2MFileAddOfflineReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileAddOfflineReq*) buildPartial { - C2MFileAddOfflineReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileAddOfflineReqBuilder*) mergeFrom:(C2MFileAddOfflineReq*) other { - if (other == [C2MFileAddOfflineReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFilePath) { - [self setFilePath:other.filePath]; - } - if (other.hasFileSize) { - [self setFileSize:other.fileSize]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileAddOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileAddOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 34: { - [self setFilePath:[input readString]]; - break; - } - case 40: { - [self setFileSize:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileAddOfflineReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 528; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileAddOfflineReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileAddOfflineReqBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFilePath { - return result.hasFilePath; -} -- (NSString*) filePath { - return result.filePath; -} -- (C2MFileAddOfflineReqBuilder*) setFilePath:(NSString*) value { - result.hasFilePath = YES; - result.filePath = value; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clearFilePath { - result.hasFilePath = NO; - result.filePath = @""; - return self; -} -- (BOOL) hasFileSize { - return result.hasFileSize; -} -- (UInt32) fileSize { - return result.fileSize; -} -- (C2MFileAddOfflineReqBuilder*) setFileSize:(UInt32) value { - result.hasFileSize = YES; - result.fileSize = value; - return self; -} -- (C2MFileAddOfflineReqBuilder*) clearFileSize { - result.hasFileSize = NO; - result.fileSize = 0; - return self; -} -@end - -@interface C2MFileDelOfflineReq () -@property SInt32 cmdId; -@property (strong) NSString* fromUserId; -@property (strong) NSString* toUserId; -@property UInt32 fileId; -@end - -@implementation C2MFileDelOfflineReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasFromUserId { - return !!hasFromUserId_; -} -- (void) setHasFromUserId:(BOOL) value_ { - hasFromUserId_ = !!value_; -} -@synthesize fromUserId; -- (BOOL) hasToUserId { - return !!hasToUserId_; -} -- (void) setHasToUserId:(BOOL) value_ { - hasToUserId_ = !!value_; -} -@synthesize toUserId; -- (BOOL) hasFileId { - return !!hasFileId_; -} -- (void) setHasFileId:(BOOL) value_ { - hasFileId_ = !!value_; -} -@synthesize fileId; -- (void) dealloc { - self.fromUserId = nil; - self.toUserId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 529; - self.fromUserId = @""; - self.toUserId = @""; - self.fileId = 0; - } - return self; -} -static C2MFileDelOfflineReq* defaultC2MFileDelOfflineReqInstance = nil; -+ (void) initialize { - if (self == [C2MFileDelOfflineReq class]) { - defaultC2MFileDelOfflineReqInstance = [[C2MFileDelOfflineReq alloc] init]; - } -} -+ (C2MFileDelOfflineReq*) defaultInstance { - return defaultC2MFileDelOfflineReqInstance; -} -- (C2MFileDelOfflineReq*) defaultInstance { - return defaultC2MFileDelOfflineReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasFromUserId) { - return NO; - } - if (!self.hasToUserId) { - return NO; - } - if (!self.hasFileId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasFromUserId) { - [output writeString:2 value:self.fromUserId]; - } - if (self.hasToUserId) { - [output writeString:3 value:self.toUserId]; - } - if (self.hasFileId) { - [output writeUInt32:4 value:self.fileId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasFromUserId) { - size_ += computeStringSize(2, self.fromUserId); - } - if (self.hasToUserId) { - size_ += computeStringSize(3, self.toUserId); - } - if (self.hasFileId) { - size_ += computeUInt32Size(4, self.fileId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MFileDelOfflineReq*) parseFromData:(NSData*) data { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromData:data] build]; -} -+ (C2MFileDelOfflineReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDelOfflineReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromInputStream:input] build]; -} -+ (C2MFileDelOfflineReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDelOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MFileDelOfflineReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MFileDelOfflineReq*)[[[C2MFileDelOfflineReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MFileDelOfflineReqBuilder*) builder { - return [[C2MFileDelOfflineReqBuilder alloc] init]; -} -+ (C2MFileDelOfflineReqBuilder*) builderWithPrototype:(C2MFileDelOfflineReq*) prototype { - return [[C2MFileDelOfflineReq builder] mergeFrom:prototype]; -} -- (C2MFileDelOfflineReqBuilder*) builder { - return [C2MFileDelOfflineReq builder]; -} -- (C2MFileDelOfflineReqBuilder*) toBuilder { - return [C2MFileDelOfflineReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasFromUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fromUserId", self.fromUserId]; - } - if (self.hasToUserId) { - [output appendFormat:@"%@%@: %@\n", indent, @"toUserId", self.toUserId]; - } - if (self.hasFileId) { - [output appendFormat:@"%@%@: %@\n", indent, @"fileId", [NSNumber numberWithInteger:self.fileId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MFileDelOfflineReq class]]) { - return NO; - } - C2MFileDelOfflineReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasFromUserId == otherMessage.hasFromUserId && - (!self.hasFromUserId || [self.fromUserId isEqual:otherMessage.fromUserId]) && - self.hasToUserId == otherMessage.hasToUserId && - (!self.hasToUserId || [self.toUserId isEqual:otherMessage.toUserId]) && - self.hasFileId == otherMessage.hasFileId && - (!self.hasFileId || self.fileId == otherMessage.fileId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasFromUserId) { - hashCode = hashCode * 31 + [self.fromUserId hash]; - } - if (self.hasToUserId) { - hashCode = hashCode * 31 + [self.toUserId hash]; - } - if (self.hasFileId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.fileId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MFileDelOfflineReqBuilder() -@property (strong) C2MFileDelOfflineReq* result; -@end - -@implementation C2MFileDelOfflineReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MFileDelOfflineReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MFileDelOfflineReqBuilder*) clear { - self.result = [[C2MFileDelOfflineReq alloc] init]; - return self; -} -- (C2MFileDelOfflineReqBuilder*) clone { - return [C2MFileDelOfflineReq builderWithPrototype:result]; -} -- (C2MFileDelOfflineReq*) defaultInstance { - return [C2MFileDelOfflineReq defaultInstance]; -} -- (C2MFileDelOfflineReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MFileDelOfflineReq*) buildPartial { - C2MFileDelOfflineReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MFileDelOfflineReqBuilder*) mergeFrom:(C2MFileDelOfflineReq*) other { - if (other == [C2MFileDelOfflineReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasFromUserId) { - [self setFromUserId:other.fromUserId]; - } - if (other.hasToUserId) { - [self setToUserId:other.toUserId]; - } - if (other.hasFileId) { - [self setFileId:other.fileId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MFileDelOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MFileDelOfflineReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setFromUserId:[input readString]]; - break; - } - case 26: { - [self setToUserId:[input readString]]; - break; - } - case 32: { - [self setFileId:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MFileDelOfflineReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MFileDelOfflineReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 529; - return self; -} -- (BOOL) hasFromUserId { - return result.hasFromUserId; -} -- (NSString*) fromUserId { - return result.fromUserId; -} -- (C2MFileDelOfflineReqBuilder*) setFromUserId:(NSString*) value { - result.hasFromUserId = YES; - result.fromUserId = value; - return self; -} -- (C2MFileDelOfflineReqBuilder*) clearFromUserId { - result.hasFromUserId = NO; - result.fromUserId = @""; - return self; -} -- (BOOL) hasToUserId { - return result.hasToUserId; -} -- (NSString*) toUserId { - return result.toUserId; -} -- (C2MFileDelOfflineReqBuilder*) setToUserId:(NSString*) value { - result.hasToUserId = YES; - result.toUserId = value; - return self; -} -- (C2MFileDelOfflineReqBuilder*) clearToUserId { - result.hasToUserId = NO; - result.toUserId = @""; - return self; -} -- (BOOL) hasFileId { - return result.hasFileId; -} -- (UInt32) fileId { - return result.fileId; -} -- (C2MFileDelOfflineReqBuilder*) setFileId:(UInt32) value { - result.hasFileId = YES; - result.fileId = value; - return self; -} -- (C2MFileDelOfflineReqBuilder*) clearFileId { - result.hasFileId = NO; - result.fileId = 0; - return self; -} -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.h b/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.h deleted file mode 100644 index b08ceaa..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.h +++ /dev/null @@ -1,1055 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "ProtocolBuffers.h" - -#import "IMBaseDefine.pb.h" -// @@protoc_insertion_point(imports) - -@class C2MGroupChangeMemberReq; -@class C2MGroupChangeMemberReqBuilder; -@class C2MGroupChangeMemberRsp; -@class C2MGroupChangeMemberRspBuilder; -@class C2MGroupCreateTmpGroupReq; -@class C2MGroupCreateTmpGroupReqBuilder; -@class C2MGroupCreateTmpGroupRsp; -@class C2MGroupCreateTmpGroupRspBuilder; -@class C2MGroupHistoryMsgReq; -@class C2MGroupHistoryMsgReqBuilder; -@class C2MGroupListReq; -@class C2MGroupListReqBuilder; -@class C2MGroupListRsp; -@class C2MGroupListRspBuilder; -@class C2MGroupMsgListRsp; -@class C2MGroupMsgListRspBuilder; -@class C2MGroupMsgReadAck; -@class C2MGroupMsgReadAckBuilder; -@class C2MGroupUnReadMsgCntReq; -@class C2MGroupUnReadMsgCntReqBuilder; -@class C2MGroupUnReadMsgCntRsp; -@class C2MGroupUnReadMsgCntRspBuilder; -@class C2MGroupUnReadMsgReq; -@class C2MGroupUnReadMsgReqBuilder; -@class C2MGroupUserListReq; -@class C2MGroupUserListReqBuilder; -@class C2MGroupUserListRsp; -@class C2MGroupUserListRspBuilder; -@class ClientGroupInfo; -@class ClientGroupInfoBuilder; -@class ClientGroupMsg; -@class ClientGroupMsgBuilder; -@class ClientGroupUnReadCnt; -@class ClientGroupUnReadCntBuilder; -@class ClientMsgInfo; -@class ClientMsgInfoBuilder; -@class ClientOfflineFileInfo; -@class ClientOfflineFileInfoBuilder; -@class ClientUnReadInfo; -@class ClientUnReadInfoBuilder; -@class ClientUserInfo; -@class ClientUserInfoBuilder; -@class ClientUserStat; -@class ClientUserStatBuilder; -@class IpAddr; -@class IpAddrBuilder; -@class ServerGroupInfo; -@class ServerGroupInfoBuilder; -@class ServerGroupMsg; -@class ServerGroupMsgBuilder; -@class ServerGroupUnReadCnt; -@class ServerGroupUnReadCntBuilder; -@class ServerMsgInfo; -@class ServerMsgInfoBuilder; -@class ServerOfflineFileInfo; -@class ServerOfflineFileInfoBuilder; -@class ServerUnReadInfo; -@class ServerUnReadInfoBuilder; -@class ServerUserInfo; -@class ServerUserInfoBuilder; -@class ServerUserStat; -@class ServerUserStatBuilder; -#ifndef __has_feature - #define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif // __has_feature - -#ifndef NS_RETURNS_NOT_RETAINED - #if __has_feature(attribute_ns_returns_not_retained) - #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) - #else - #define NS_RETURNS_NOT_RETAINED - #endif -#endif - - -@interface Imclient2ServGroupRoot : NSObject { -} -+ (PBExtensionRegistry*) extensionRegistry; -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry; -@end - -@interface C2MGroupListReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MGroupListReq*) defaultInstance; -- (C2MGroupListReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupListReqBuilder*) builder; -+ (C2MGroupListReqBuilder*) builder; -+ (C2MGroupListReqBuilder*) builderWithPrototype:(C2MGroupListReq*) prototype; -- (C2MGroupListReqBuilder*) toBuilder; - -+ (C2MGroupListReq*) parseFromData:(NSData*) data; -+ (C2MGroupListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupListReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupListReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupListReq* result; -} - -- (C2MGroupListReq*) defaultInstance; - -- (C2MGroupListReqBuilder*) clear; -- (C2MGroupListReqBuilder*) clone; - -- (C2MGroupListReq*) build; -- (C2MGroupListReq*) buildPartial; - -- (C2MGroupListReqBuilder*) mergeFrom:(C2MGroupListReq*) other; -- (C2MGroupListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupListReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupListReqBuilder*) clearCmdId; -@end - -@interface C2MGroupListRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * groupInfoListArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * groupInfoList; -- (ClientGroupInfo*)groupInfoListAtIndex:(NSUInteger)index; - -+ (C2MGroupListRsp*) defaultInstance; -- (C2MGroupListRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupListRspBuilder*) builder; -+ (C2MGroupListRspBuilder*) builder; -+ (C2MGroupListRspBuilder*) builderWithPrototype:(C2MGroupListRsp*) prototype; -- (C2MGroupListRspBuilder*) toBuilder; - -+ (C2MGroupListRsp*) parseFromData:(NSData*) data; -+ (C2MGroupListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupListRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupListRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupListRsp* result; -} - -- (C2MGroupListRsp*) defaultInstance; - -- (C2MGroupListRspBuilder*) clear; -- (C2MGroupListRspBuilder*) clone; - -- (C2MGroupListRsp*) build; -- (C2MGroupListRsp*) buildPartial; - -- (C2MGroupListRspBuilder*) mergeFrom:(C2MGroupListRsp*) other; -- (C2MGroupListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupListRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupListRspBuilder*) clearCmdId; - -- (NSMutableArray *)groupInfoList; -- (ClientGroupInfo*)groupInfoListAtIndex:(NSUInteger)index; -- (C2MGroupListRspBuilder *)addGroupInfoList:(ClientGroupInfo*)value; -- (C2MGroupListRspBuilder *)setGroupInfoListArray:(NSArray *)array; -- (C2MGroupListRspBuilder *)clearGroupInfoList; -@end - -@interface C2MGroupUserListReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - SInt32 cmdId; - NSString* groupId; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupId; - -+ (C2MGroupUserListReq*) defaultInstance; -- (C2MGroupUserListReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupUserListReqBuilder*) builder; -+ (C2MGroupUserListReqBuilder*) builder; -+ (C2MGroupUserListReqBuilder*) builderWithPrototype:(C2MGroupUserListReq*) prototype; -- (C2MGroupUserListReqBuilder*) toBuilder; - -+ (C2MGroupUserListReq*) parseFromData:(NSData*) data; -+ (C2MGroupUserListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUserListReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupUserListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUserListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupUserListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupUserListReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupUserListReq* result; -} - -- (C2MGroupUserListReq*) defaultInstance; - -- (C2MGroupUserListReqBuilder*) clear; -- (C2MGroupUserListReqBuilder*) clone; - -- (C2MGroupUserListReq*) build; -- (C2MGroupUserListReq*) buildPartial; - -- (C2MGroupUserListReqBuilder*) mergeFrom:(C2MGroupUserListReq*) other; -- (C2MGroupUserListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupUserListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupUserListReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupUserListReqBuilder*) clearCmdId; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupUserListReqBuilder*) setGroupId:(NSString*) value; -- (C2MGroupUserListReqBuilder*) clearGroupId; -@end - -@interface C2MGroupUserListRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - BOOL hasGroupName_:1; - BOOL hasGroupAvatar_:1; - BOOL hasGroupCreatorId_:1; - BOOL hasResults_:1; - BOOL hasGroupType_:1; - SInt32 cmdId; - NSString* groupId; - NSString* groupName; - NSString* groupAvatar; - NSString* groupCreatorId; - UInt32 results; - GroupType groupType; - NSMutableArray * groupMemberListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -- (BOOL) hasGroupId; -- (BOOL) hasGroupName; -- (BOOL) hasGroupAvatar; -- (BOOL) hasGroupCreatorId; -- (BOOL) hasGroupType; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 results; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) NSString* groupName; -@property (readonly, strong) NSString* groupAvatar; -@property (readonly, strong) NSString* groupCreatorId; -@property (readonly) GroupType groupType; -@property (readonly, strong) PBArray * groupMemberList; -- (NSString*)groupMemberListAtIndex:(NSUInteger)index; - -+ (C2MGroupUserListRsp*) defaultInstance; -- (C2MGroupUserListRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupUserListRspBuilder*) builder; -+ (C2MGroupUserListRspBuilder*) builder; -+ (C2MGroupUserListRspBuilder*) builderWithPrototype:(C2MGroupUserListRsp*) prototype; -- (C2MGroupUserListRspBuilder*) toBuilder; - -+ (C2MGroupUserListRsp*) parseFromData:(NSData*) data; -+ (C2MGroupUserListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUserListRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupUserListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUserListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupUserListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupUserListRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupUserListRsp* result; -} - -- (C2MGroupUserListRsp*) defaultInstance; - -- (C2MGroupUserListRspBuilder*) clear; -- (C2MGroupUserListRspBuilder*) clone; - -- (C2MGroupUserListRsp*) build; -- (C2MGroupUserListRsp*) buildPartial; - -- (C2MGroupUserListRspBuilder*) mergeFrom:(C2MGroupUserListRsp*) other; -- (C2MGroupUserListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupUserListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupUserListRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupUserListRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (UInt32) results; -- (C2MGroupUserListRspBuilder*) setResults:(UInt32) value; -- (C2MGroupUserListRspBuilder*) clearResults; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupUserListRspBuilder*) setGroupId:(NSString*) value; -- (C2MGroupUserListRspBuilder*) clearGroupId; - -- (BOOL) hasGroupName; -- (NSString*) groupName; -- (C2MGroupUserListRspBuilder*) setGroupName:(NSString*) value; -- (C2MGroupUserListRspBuilder*) clearGroupName; - -- (BOOL) hasGroupAvatar; -- (NSString*) groupAvatar; -- (C2MGroupUserListRspBuilder*) setGroupAvatar:(NSString*) value; -- (C2MGroupUserListRspBuilder*) clearGroupAvatar; - -- (BOOL) hasGroupCreatorId; -- (NSString*) groupCreatorId; -- (C2MGroupUserListRspBuilder*) setGroupCreatorId:(NSString*) value; -- (C2MGroupUserListRspBuilder*) clearGroupCreatorId; - -- (BOOL) hasGroupType; -- (GroupType) groupType; -- (C2MGroupUserListRspBuilder*) setGroupType:(GroupType) value; -- (C2MGroupUserListRspBuilder*) clearGroupType; - -- (NSMutableArray *)groupMemberList; -- (NSString*)groupMemberListAtIndex:(NSUInteger)index; -- (C2MGroupUserListRspBuilder *)addGroupMemberList:(NSString*)value; -- (C2MGroupUserListRspBuilder *)setGroupMemberListArray:(NSArray *)array; -- (C2MGroupUserListRspBuilder *)clearGroupMemberList; -@end - -@interface C2MGroupUnReadMsgCntReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; - -+ (C2MGroupUnReadMsgCntReq*) defaultInstance; -- (C2MGroupUnReadMsgCntReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupUnReadMsgCntReqBuilder*) builder; -+ (C2MGroupUnReadMsgCntReqBuilder*) builder; -+ (C2MGroupUnReadMsgCntReqBuilder*) builderWithPrototype:(C2MGroupUnReadMsgCntReq*) prototype; -- (C2MGroupUnReadMsgCntReqBuilder*) toBuilder; - -+ (C2MGroupUnReadMsgCntReq*) parseFromData:(NSData*) data; -+ (C2MGroupUnReadMsgCntReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupUnReadMsgCntReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupUnReadMsgCntReq* result; -} - -- (C2MGroupUnReadMsgCntReq*) defaultInstance; - -- (C2MGroupUnReadMsgCntReqBuilder*) clear; -- (C2MGroupUnReadMsgCntReqBuilder*) clone; - -- (C2MGroupUnReadMsgCntReq*) build; -- (C2MGroupUnReadMsgCntReq*) buildPartial; - -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFrom:(C2MGroupUnReadMsgCntReq*) other; -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupUnReadMsgCntReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupUnReadMsgCntReqBuilder*) clearCmdId; -@end - -@interface C2MGroupUnReadMsgCntRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - SInt32 cmdId; - NSMutableArray * groupUnreadMsgCntArray; -} -- (BOOL) hasCmdId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSArray * groupUnreadMsgCnt; -- (ClientGroupUnReadCnt*)groupUnreadMsgCntAtIndex:(NSUInteger)index; - -+ (C2MGroupUnReadMsgCntRsp*) defaultInstance; -- (C2MGroupUnReadMsgCntRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupUnReadMsgCntRspBuilder*) builder; -+ (C2MGroupUnReadMsgCntRspBuilder*) builder; -+ (C2MGroupUnReadMsgCntRspBuilder*) builderWithPrototype:(C2MGroupUnReadMsgCntRsp*) prototype; -- (C2MGroupUnReadMsgCntRspBuilder*) toBuilder; - -+ (C2MGroupUnReadMsgCntRsp*) parseFromData:(NSData*) data; -+ (C2MGroupUnReadMsgCntRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupUnReadMsgCntRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupUnReadMsgCntRsp* result; -} - -- (C2MGroupUnReadMsgCntRsp*) defaultInstance; - -- (C2MGroupUnReadMsgCntRspBuilder*) clear; -- (C2MGroupUnReadMsgCntRspBuilder*) clone; - -- (C2MGroupUnReadMsgCntRsp*) build; -- (C2MGroupUnReadMsgCntRsp*) buildPartial; - -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFrom:(C2MGroupUnReadMsgCntRsp*) other; -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupUnReadMsgCntRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupUnReadMsgCntRspBuilder*) clearCmdId; - -- (NSMutableArray *)groupUnreadMsgCnt; -- (ClientGroupUnReadCnt*)groupUnreadMsgCntAtIndex:(NSUInteger)index; -- (C2MGroupUnReadMsgCntRspBuilder *)addGroupUnreadMsgCnt:(ClientGroupUnReadCnt*)value; -- (C2MGroupUnReadMsgCntRspBuilder *)setGroupUnreadMsgCntArray:(NSArray *)array; -- (C2MGroupUnReadMsgCntRspBuilder *)clearGroupUnreadMsgCnt; -@end - -@interface C2MGroupUnReadMsgReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - SInt32 cmdId; - NSString* groupId; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupId; - -+ (C2MGroupUnReadMsgReq*) defaultInstance; -- (C2MGroupUnReadMsgReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupUnReadMsgReqBuilder*) builder; -+ (C2MGroupUnReadMsgReqBuilder*) builder; -+ (C2MGroupUnReadMsgReqBuilder*) builderWithPrototype:(C2MGroupUnReadMsgReq*) prototype; -- (C2MGroupUnReadMsgReqBuilder*) toBuilder; - -+ (C2MGroupUnReadMsgReq*) parseFromData:(NSData*) data; -+ (C2MGroupUnReadMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupUnReadMsgReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupUnReadMsgReq* result; -} - -- (C2MGroupUnReadMsgReq*) defaultInstance; - -- (C2MGroupUnReadMsgReqBuilder*) clear; -- (C2MGroupUnReadMsgReqBuilder*) clone; - -- (C2MGroupUnReadMsgReq*) build; -- (C2MGroupUnReadMsgReq*) buildPartial; - -- (C2MGroupUnReadMsgReqBuilder*) mergeFrom:(C2MGroupUnReadMsgReq*) other; -- (C2MGroupUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupUnReadMsgReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupUnReadMsgReqBuilder*) clearCmdId; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupUnReadMsgReqBuilder*) setGroupId:(NSString*) value; -- (C2MGroupUnReadMsgReqBuilder*) clearGroupId; -@end - -@interface C2MGroupHistoryMsgReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - BOOL hasMsgOffset_:1; - BOOL hasMsgCount_:1; - SInt32 cmdId; - NSString* groupId; - UInt32 msgOffset; - UInt32 msgCount; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupId; -- (BOOL) hasMsgOffset; -- (BOOL) hasMsgCount; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupId; -@property (readonly) UInt32 msgOffset; -@property (readonly) UInt32 msgCount; - -+ (C2MGroupHistoryMsgReq*) defaultInstance; -- (C2MGroupHistoryMsgReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupHistoryMsgReqBuilder*) builder; -+ (C2MGroupHistoryMsgReqBuilder*) builder; -+ (C2MGroupHistoryMsgReqBuilder*) builderWithPrototype:(C2MGroupHistoryMsgReq*) prototype; -- (C2MGroupHistoryMsgReqBuilder*) toBuilder; - -+ (C2MGroupHistoryMsgReq*) parseFromData:(NSData*) data; -+ (C2MGroupHistoryMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupHistoryMsgReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupHistoryMsgReq* result; -} - -- (C2MGroupHistoryMsgReq*) defaultInstance; - -- (C2MGroupHistoryMsgReqBuilder*) clear; -- (C2MGroupHistoryMsgReqBuilder*) clone; - -- (C2MGroupHistoryMsgReq*) build; -- (C2MGroupHistoryMsgReq*) buildPartial; - -- (C2MGroupHistoryMsgReqBuilder*) mergeFrom:(C2MGroupHistoryMsgReq*) other; -- (C2MGroupHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupHistoryMsgReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupHistoryMsgReqBuilder*) clearCmdId; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupHistoryMsgReqBuilder*) setGroupId:(NSString*) value; -- (C2MGroupHistoryMsgReqBuilder*) clearGroupId; - -- (BOOL) hasMsgOffset; -- (UInt32) msgOffset; -- (C2MGroupHistoryMsgReqBuilder*) setMsgOffset:(UInt32) value; -- (C2MGroupHistoryMsgReqBuilder*) clearMsgOffset; - -- (BOOL) hasMsgCount; -- (UInt32) msgCount; -- (C2MGroupHistoryMsgReqBuilder*) setMsgCount:(UInt32) value; -- (C2MGroupHistoryMsgReqBuilder*) clearMsgCount; -@end - -@interface C2MGroupMsgListRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - SInt32 cmdId; - NSString* groupId; - NSMutableArray * groupMsgListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) NSArray * groupMsgList; -- (ClientGroupMsg*)groupMsgListAtIndex:(NSUInteger)index; - -+ (C2MGroupMsgListRsp*) defaultInstance; -- (C2MGroupMsgListRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupMsgListRspBuilder*) builder; -+ (C2MGroupMsgListRspBuilder*) builder; -+ (C2MGroupMsgListRspBuilder*) builderWithPrototype:(C2MGroupMsgListRsp*) prototype; -- (C2MGroupMsgListRspBuilder*) toBuilder; - -+ (C2MGroupMsgListRsp*) parseFromData:(NSData*) data; -+ (C2MGroupMsgListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupMsgListRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupMsgListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupMsgListRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupMsgListRsp* result; -} - -- (C2MGroupMsgListRsp*) defaultInstance; - -- (C2MGroupMsgListRspBuilder*) clear; -- (C2MGroupMsgListRspBuilder*) clone; - -- (C2MGroupMsgListRsp*) build; -- (C2MGroupMsgListRsp*) buildPartial; - -- (C2MGroupMsgListRspBuilder*) mergeFrom:(C2MGroupMsgListRsp*) other; -- (C2MGroupMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupMsgListRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupMsgListRspBuilder*) clearCmdId; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupMsgListRspBuilder*) setGroupId:(NSString*) value; -- (C2MGroupMsgListRspBuilder*) clearGroupId; - -- (NSMutableArray *)groupMsgList; -- (ClientGroupMsg*)groupMsgListAtIndex:(NSUInteger)index; -- (C2MGroupMsgListRspBuilder *)addGroupMsgList:(ClientGroupMsg*)value; -- (C2MGroupMsgListRspBuilder *)setGroupMsgListArray:(NSArray *)array; -- (C2MGroupMsgListRspBuilder *)clearGroupMsgList; -@end - -@interface C2MGroupMsgReadAck : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - SInt32 cmdId; - NSString* groupId; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupId; - -+ (C2MGroupMsgReadAck*) defaultInstance; -- (C2MGroupMsgReadAck*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupMsgReadAckBuilder*) builder; -+ (C2MGroupMsgReadAckBuilder*) builder; -+ (C2MGroupMsgReadAckBuilder*) builderWithPrototype:(C2MGroupMsgReadAck*) prototype; -- (C2MGroupMsgReadAckBuilder*) toBuilder; - -+ (C2MGroupMsgReadAck*) parseFromData:(NSData*) data; -+ (C2MGroupMsgReadAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupMsgReadAck*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupMsgReadAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupMsgReadAckBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupMsgReadAck* result; -} - -- (C2MGroupMsgReadAck*) defaultInstance; - -- (C2MGroupMsgReadAckBuilder*) clear; -- (C2MGroupMsgReadAckBuilder*) clone; - -- (C2MGroupMsgReadAck*) build; -- (C2MGroupMsgReadAck*) buildPartial; - -- (C2MGroupMsgReadAckBuilder*) mergeFrom:(C2MGroupMsgReadAck*) other; -- (C2MGroupMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupMsgReadAckBuilder*) setCmdId:(SInt32) value; -- (C2MGroupMsgReadAckBuilder*) clearCmdId; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupMsgReadAckBuilder*) setGroupId:(NSString*) value; -- (C2MGroupMsgReadAckBuilder*) clearGroupId; -@end - -@interface C2MGroupCreateTmpGroupReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupName_:1; - BOOL hasGroupAvatar_:1; - SInt32 cmdId; - NSString* groupName; - NSString* groupAvatar; - NSMutableArray * userIdListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasGroupName; -- (BOOL) hasGroupAvatar; -@property (readonly) SInt32 cmdId; -@property (readonly, strong) NSString* groupName; -@property (readonly, strong) NSString* groupAvatar; -@property (readonly, strong) PBArray * userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; - -+ (C2MGroupCreateTmpGroupReq*) defaultInstance; -- (C2MGroupCreateTmpGroupReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupCreateTmpGroupReqBuilder*) builder; -+ (C2MGroupCreateTmpGroupReqBuilder*) builder; -+ (C2MGroupCreateTmpGroupReqBuilder*) builderWithPrototype:(C2MGroupCreateTmpGroupReq*) prototype; -- (C2MGroupCreateTmpGroupReqBuilder*) toBuilder; - -+ (C2MGroupCreateTmpGroupReq*) parseFromData:(NSData*) data; -+ (C2MGroupCreateTmpGroupReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupCreateTmpGroupReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupCreateTmpGroupReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupCreateTmpGroupReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupCreateTmpGroupReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupCreateTmpGroupReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupCreateTmpGroupReq* result; -} - -- (C2MGroupCreateTmpGroupReq*) defaultInstance; - -- (C2MGroupCreateTmpGroupReqBuilder*) clear; -- (C2MGroupCreateTmpGroupReqBuilder*) clone; - -- (C2MGroupCreateTmpGroupReq*) build; -- (C2MGroupCreateTmpGroupReq*) buildPartial; - -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFrom:(C2MGroupCreateTmpGroupReq*) other; -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupCreateTmpGroupReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupCreateTmpGroupReqBuilder*) clearCmdId; - -- (BOOL) hasGroupName; -- (NSString*) groupName; -- (C2MGroupCreateTmpGroupReqBuilder*) setGroupName:(NSString*) value; -- (C2MGroupCreateTmpGroupReqBuilder*) clearGroupName; - -- (BOOL) hasGroupAvatar; -- (NSString*) groupAvatar; -- (C2MGroupCreateTmpGroupReqBuilder*) setGroupAvatar:(NSString*) value; -- (C2MGroupCreateTmpGroupReqBuilder*) clearGroupAvatar; - -- (NSMutableArray *)userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; -- (C2MGroupCreateTmpGroupReqBuilder *)addUserIdList:(NSString*)value; -- (C2MGroupCreateTmpGroupReqBuilder *)setUserIdListArray:(NSArray *)array; -- (C2MGroupCreateTmpGroupReqBuilder *)clearUserIdList; -@end - -@interface C2MGroupCreateTmpGroupRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - BOOL hasGroupName_:1; - BOOL hasResults_:1; - SInt32 cmdId; - NSString* groupId; - NSString* groupName; - UInt32 results; - NSMutableArray * userIdListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -- (BOOL) hasGroupId; -- (BOOL) hasGroupName; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 results; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) NSString* groupName; -@property (readonly, strong) PBArray * userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; - -+ (C2MGroupCreateTmpGroupRsp*) defaultInstance; -- (C2MGroupCreateTmpGroupRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupCreateTmpGroupRspBuilder*) builder; -+ (C2MGroupCreateTmpGroupRspBuilder*) builder; -+ (C2MGroupCreateTmpGroupRspBuilder*) builderWithPrototype:(C2MGroupCreateTmpGroupRsp*) prototype; -- (C2MGroupCreateTmpGroupRspBuilder*) toBuilder; - -+ (C2MGroupCreateTmpGroupRsp*) parseFromData:(NSData*) data; -+ (C2MGroupCreateTmpGroupRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupCreateTmpGroupRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupCreateTmpGroupRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupCreateTmpGroupRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupCreateTmpGroupRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupCreateTmpGroupRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupCreateTmpGroupRsp* result; -} - -- (C2MGroupCreateTmpGroupRsp*) defaultInstance; - -- (C2MGroupCreateTmpGroupRspBuilder*) clear; -- (C2MGroupCreateTmpGroupRspBuilder*) clone; - -- (C2MGroupCreateTmpGroupRsp*) build; -- (C2MGroupCreateTmpGroupRsp*) buildPartial; - -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFrom:(C2MGroupCreateTmpGroupRsp*) other; -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupCreateTmpGroupRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupCreateTmpGroupRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (UInt32) results; -- (C2MGroupCreateTmpGroupRspBuilder*) setResults:(UInt32) value; -- (C2MGroupCreateTmpGroupRspBuilder*) clearResults; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupCreateTmpGroupRspBuilder*) setGroupId:(NSString*) value; -- (C2MGroupCreateTmpGroupRspBuilder*) clearGroupId; - -- (BOOL) hasGroupName; -- (NSString*) groupName; -- (C2MGroupCreateTmpGroupRspBuilder*) setGroupName:(NSString*) value; -- (C2MGroupCreateTmpGroupRspBuilder*) clearGroupName; - -- (NSMutableArray *)userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; -- (C2MGroupCreateTmpGroupRspBuilder *)addUserIdList:(NSString*)value; -- (C2MGroupCreateTmpGroupRspBuilder *)setUserIdListArray:(NSArray *)array; -- (C2MGroupCreateTmpGroupRspBuilder *)clearUserIdList; -@end - -@interface C2MGroupChangeMemberReq : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - BOOL hasChangeType_:1; - SInt32 cmdId; - NSString* groupId; - UInt32 changeType; - NSMutableArray * userIdListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasChangeType; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 changeType; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) PBArray * userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; - -+ (C2MGroupChangeMemberReq*) defaultInstance; -- (C2MGroupChangeMemberReq*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupChangeMemberReqBuilder*) builder; -+ (C2MGroupChangeMemberReqBuilder*) builder; -+ (C2MGroupChangeMemberReqBuilder*) builderWithPrototype:(C2MGroupChangeMemberReq*) prototype; -- (C2MGroupChangeMemberReqBuilder*) toBuilder; - -+ (C2MGroupChangeMemberReq*) parseFromData:(NSData*) data; -+ (C2MGroupChangeMemberReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupChangeMemberReq*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupChangeMemberReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupChangeMemberReq*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupChangeMemberReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupChangeMemberReqBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupChangeMemberReq* result; -} - -- (C2MGroupChangeMemberReq*) defaultInstance; - -- (C2MGroupChangeMemberReqBuilder*) clear; -- (C2MGroupChangeMemberReqBuilder*) clone; - -- (C2MGroupChangeMemberReq*) build; -- (C2MGroupChangeMemberReq*) buildPartial; - -- (C2MGroupChangeMemberReqBuilder*) mergeFrom:(C2MGroupChangeMemberReq*) other; -- (C2MGroupChangeMemberReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupChangeMemberReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupChangeMemberReqBuilder*) setCmdId:(SInt32) value; -- (C2MGroupChangeMemberReqBuilder*) clearCmdId; - -- (BOOL) hasChangeType; -- (UInt32) changeType; -- (C2MGroupChangeMemberReqBuilder*) setChangeType:(UInt32) value; -- (C2MGroupChangeMemberReqBuilder*) clearChangeType; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupChangeMemberReqBuilder*) setGroupId:(NSString*) value; -- (C2MGroupChangeMemberReqBuilder*) clearGroupId; - -- (NSMutableArray *)userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; -- (C2MGroupChangeMemberReqBuilder *)addUserIdList:(NSString*)value; -- (C2MGroupChangeMemberReqBuilder *)setUserIdListArray:(NSArray *)array; -- (C2MGroupChangeMemberReqBuilder *)clearUserIdList; -@end - -@interface C2MGroupChangeMemberRsp : PBGeneratedMessage { -@private - BOOL hasCmdId_:1; - BOOL hasGroupId_:1; - BOOL hasResults_:1; - BOOL hasChangeType_:1; - SInt32 cmdId; - NSString* groupId; - UInt32 results; - UInt32 changeType; - NSMutableArray * userIdListArray; -} -- (BOOL) hasCmdId; -- (BOOL) hasResults; -- (BOOL) hasChangeType; -- (BOOL) hasGroupId; -@property (readonly) SInt32 cmdId; -@property (readonly) UInt32 results; -@property (readonly) UInt32 changeType; -@property (readonly, strong) NSString* groupId; -@property (readonly, strong) PBArray * userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; - -+ (C2MGroupChangeMemberRsp*) defaultInstance; -- (C2MGroupChangeMemberRsp*) defaultInstance; - -- (BOOL) isInitialized; -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; -- (C2MGroupChangeMemberRspBuilder*) builder; -+ (C2MGroupChangeMemberRspBuilder*) builder; -+ (C2MGroupChangeMemberRspBuilder*) builderWithPrototype:(C2MGroupChangeMemberRsp*) prototype; -- (C2MGroupChangeMemberRspBuilder*) toBuilder; - -+ (C2MGroupChangeMemberRsp*) parseFromData:(NSData*) data; -+ (C2MGroupChangeMemberRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupChangeMemberRsp*) parseFromInputStream:(NSInputStream*) input; -+ (C2MGroupChangeMemberRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -+ (C2MGroupChangeMemberRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input; -+ (C2MGroupChangeMemberRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; -@end - -@interface C2MGroupChangeMemberRspBuilder : PBGeneratedMessageBuilder { -@private - C2MGroupChangeMemberRsp* result; -} - -- (C2MGroupChangeMemberRsp*) defaultInstance; - -- (C2MGroupChangeMemberRspBuilder*) clear; -- (C2MGroupChangeMemberRspBuilder*) clone; - -- (C2MGroupChangeMemberRsp*) build; -- (C2MGroupChangeMemberRsp*) buildPartial; - -- (C2MGroupChangeMemberRspBuilder*) mergeFrom:(C2MGroupChangeMemberRsp*) other; -- (C2MGroupChangeMemberRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; -- (C2MGroupChangeMemberRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; - -- (BOOL) hasCmdId; -- (SInt32) cmdId; -- (C2MGroupChangeMemberRspBuilder*) setCmdId:(SInt32) value; -- (C2MGroupChangeMemberRspBuilder*) clearCmdId; - -- (BOOL) hasResults; -- (UInt32) results; -- (C2MGroupChangeMemberRspBuilder*) setResults:(UInt32) value; -- (C2MGroupChangeMemberRspBuilder*) clearResults; - -- (BOOL) hasChangeType; -- (UInt32) changeType; -- (C2MGroupChangeMemberRspBuilder*) setChangeType:(UInt32) value; -- (C2MGroupChangeMemberRspBuilder*) clearChangeType; - -- (BOOL) hasGroupId; -- (NSString*) groupId; -- (C2MGroupChangeMemberRspBuilder*) setGroupId:(NSString*) value; -- (C2MGroupChangeMemberRspBuilder*) clearGroupId; - -- (NSMutableArray *)userIdList; -- (NSString*)userIdListAtIndex:(NSUInteger)index; -- (C2MGroupChangeMemberRspBuilder *)addUserIdList:(NSString*)value; -- (C2MGroupChangeMemberRspBuilder *)setUserIdListArray:(NSArray *)array; -- (C2MGroupChangeMemberRspBuilder *)clearUserIdList; -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.m b/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.m deleted file mode 100644 index c036d28..0000000 --- a/TeamTalk/IOSDuoduo/IMClient2ServGroup.pb.m +++ /dev/null @@ -1,4551 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! - -#import "IMClient2ServGroup.pb.h" -// @@protoc_insertion_point(imports) - -@implementation Imclient2ServGroupRoot -static PBExtensionRegistry* extensionRegistry = nil; -+ (PBExtensionRegistry*) extensionRegistry { - return extensionRegistry; -} - -+ (void) initialize { - if (self == [Imclient2ServGroupRoot class]) { - PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry]; - [self registerAllExtensions:registry]; - [ImbaseDefineRoot registerAllExtensions:registry]; - extensionRegistry = registry; - } -} -+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry { -} -@end - -@interface C2MGroupListReq () -@property SInt32 cmdId; -@end - -@implementation C2MGroupListReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 256; - } - return self; -} -static C2MGroupListReq* defaultC2MGroupListReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupListReq class]) { - defaultC2MGroupListReqInstance = [[C2MGroupListReq alloc] init]; - } -} -+ (C2MGroupListReq*) defaultInstance { - return defaultC2MGroupListReqInstance; -} -- (C2MGroupListReq*) defaultInstance { - return defaultC2MGroupListReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupListReq*) parseFromData:(NSData*) data { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromData:data] build]; -} -+ (C2MGroupListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListReq*)[[[C2MGroupListReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListReqBuilder*) builder { - return [[C2MGroupListReqBuilder alloc] init]; -} -+ (C2MGroupListReqBuilder*) builderWithPrototype:(C2MGroupListReq*) prototype { - return [[C2MGroupListReq builder] mergeFrom:prototype]; -} -- (C2MGroupListReqBuilder*) builder { - return [C2MGroupListReq builder]; -} -- (C2MGroupListReqBuilder*) toBuilder { - return [C2MGroupListReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupListReq class]]) { - return NO; - } - C2MGroupListReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupListReqBuilder() -@property (strong) C2MGroupListReq* result; -@end - -@implementation C2MGroupListReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupListReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupListReqBuilder*) clear { - self.result = [[C2MGroupListReq alloc] init]; - return self; -} -- (C2MGroupListReqBuilder*) clone { - return [C2MGroupListReq builderWithPrototype:result]; -} -- (C2MGroupListReq*) defaultInstance { - return [C2MGroupListReq defaultInstance]; -} -- (C2MGroupListReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupListReq*) buildPartial { - C2MGroupListReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupListReqBuilder*) mergeFrom:(C2MGroupListReq*) other { - if (other == [C2MGroupListReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupListReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupListReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 256; - return self; -} -@end - -@interface C2MGroupListRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * groupInfoListArray; -@end - -@implementation C2MGroupListRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize groupInfoListArray; -@dynamic groupInfoList; -- (void) dealloc { - self.groupInfoListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 257; - } - return self; -} -static C2MGroupListRsp* defaultC2MGroupListRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupListRsp class]) { - defaultC2MGroupListRspInstance = [[C2MGroupListRsp alloc] init]; - } -} -+ (C2MGroupListRsp*) defaultInstance { - return defaultC2MGroupListRspInstance; -} -- (C2MGroupListRsp*) defaultInstance { - return defaultC2MGroupListRspInstance; -} -- (NSArray *)groupInfoList { - return groupInfoListArray; -} -- (ClientGroupInfo*)groupInfoListAtIndex:(NSUInteger)index { - return [groupInfoListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInitgroupInfoList = YES; - [self.groupInfoList enumerateObjectsUsingBlock:^(ClientGroupInfo *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitgroupInfoList = NO; - *stop = YES; - } - }]; - if (!isInitgroupInfoList) return isInitgroupInfoList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.groupInfoListArray enumerateObjectsUsingBlock:^(ClientGroupInfo *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.groupInfoListArray enumerateObjectsUsingBlock:^(ClientGroupInfo *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupListRsp*) parseFromData:(NSData*) data { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupListRsp*)[[[C2MGroupListRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupListRspBuilder*) builder { - return [[C2MGroupListRspBuilder alloc] init]; -} -+ (C2MGroupListRspBuilder*) builderWithPrototype:(C2MGroupListRsp*) prototype { - return [[C2MGroupListRsp builder] mergeFrom:prototype]; -} -- (C2MGroupListRspBuilder*) builder { - return [C2MGroupListRsp builder]; -} -- (C2MGroupListRspBuilder*) toBuilder { - return [C2MGroupListRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.groupInfoListArray enumerateObjectsUsingBlock:^(ClientGroupInfo *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"groupInfoList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupListRsp class]]) { - return NO; - } - C2MGroupListRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.groupInfoListArray isEqualToArray:otherMessage.groupInfoListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.groupInfoListArray enumerateObjectsUsingBlock:^(ClientGroupInfo *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupListRspBuilder() -@property (strong) C2MGroupListRsp* result; -@end - -@implementation C2MGroupListRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupListRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupListRspBuilder*) clear { - self.result = [[C2MGroupListRsp alloc] init]; - return self; -} -- (C2MGroupListRspBuilder*) clone { - return [C2MGroupListRsp builderWithPrototype:result]; -} -- (C2MGroupListRsp*) defaultInstance { - return [C2MGroupListRsp defaultInstance]; -} -- (C2MGroupListRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupListRsp*) buildPartial { - C2MGroupListRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupListRspBuilder*) mergeFrom:(C2MGroupListRsp*) other { - if (other == [C2MGroupListRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.groupInfoListArray.count > 0) { - if (result.groupInfoListArray == nil) { - result.groupInfoListArray = [[NSMutableArray alloc] initWithArray:other.groupInfoListArray]; - } else { - [result.groupInfoListArray addObjectsFromArray:other.groupInfoListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientGroupInfoBuilder* subBuilder = [ClientGroupInfo builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addGroupInfoList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupListRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupListRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 257; - return self; -} -- (NSMutableArray *)groupInfoList { - return result.groupInfoListArray; -} -- (ClientGroupInfo*)groupInfoListAtIndex:(NSUInteger)index { - return [result groupInfoListAtIndex:index]; -} -- (C2MGroupListRspBuilder *)addGroupInfoList:(ClientGroupInfo*)value { - if (result.groupInfoListArray == nil) { - result.groupInfoListArray = [[NSMutableArray alloc]init]; - } - [result.groupInfoListArray addObject:value]; - return self; -} -- (C2MGroupListRspBuilder *)setGroupInfoListArray:(NSArray *)array { - result.groupInfoListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MGroupListRspBuilder *)clearGroupInfoList { - result.groupInfoListArray = nil; - return self; -} -@end - -@interface C2MGroupUserListReq () -@property SInt32 cmdId; -@property (strong) NSString* groupId; -@end - -@implementation C2MGroupUserListReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (void) dealloc { - self.groupId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 258; - self.groupId = @""; - } - return self; -} -static C2MGroupUserListReq* defaultC2MGroupUserListReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupUserListReq class]) { - defaultC2MGroupUserListReqInstance = [[C2MGroupUserListReq alloc] init]; - } -} -+ (C2MGroupUserListReq*) defaultInstance { - return defaultC2MGroupUserListReqInstance; -} -- (C2MGroupUserListReq*) defaultInstance { - return defaultC2MGroupUserListReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupId) { - [output writeString:2 value:self.groupId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupId) { - size_ += computeStringSize(2, self.groupId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupUserListReq*) parseFromData:(NSData*) data { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromData:data] build]; -} -+ (C2MGroupUserListReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupUserListReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupUserListReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListReq*)[[[C2MGroupUserListReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListReqBuilder*) builder { - return [[C2MGroupUserListReqBuilder alloc] init]; -} -+ (C2MGroupUserListReqBuilder*) builderWithPrototype:(C2MGroupUserListReq*) prototype { - return [[C2MGroupUserListReq builder] mergeFrom:prototype]; -} -- (C2MGroupUserListReqBuilder*) builder { - return [C2MGroupUserListReq builder]; -} -- (C2MGroupUserListReqBuilder*) toBuilder { - return [C2MGroupUserListReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupUserListReq class]]) { - return NO; - } - C2MGroupUserListReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupUserListReqBuilder() -@property (strong) C2MGroupUserListReq* result; -@end - -@implementation C2MGroupUserListReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupUserListReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupUserListReqBuilder*) clear { - self.result = [[C2MGroupUserListReq alloc] init]; - return self; -} -- (C2MGroupUserListReqBuilder*) clone { - return [C2MGroupUserListReq builderWithPrototype:result]; -} -- (C2MGroupUserListReq*) defaultInstance { - return [C2MGroupUserListReq defaultInstance]; -} -- (C2MGroupUserListReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupUserListReq*) buildPartial { - C2MGroupUserListReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupUserListReqBuilder*) mergeFrom:(C2MGroupUserListReq*) other { - if (other == [C2MGroupUserListReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupUserListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupUserListReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupUserListReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupUserListReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 258; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupUserListReqBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupUserListReqBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -@end - -@interface C2MGroupUserListRsp () -@property SInt32 cmdId; -@property UInt32 results; -@property (strong) NSString* groupId; -@property (strong) NSString* groupName; -@property (strong) NSString* groupAvatar; -@property (strong) NSString* groupCreatorId; -@property GroupType groupType; -@property (strong) NSMutableArray * groupMemberListArray; -@end - -@implementation C2MGroupUserListRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasGroupName { - return !!hasGroupName_; -} -- (void) setHasGroupName:(BOOL) value_ { - hasGroupName_ = !!value_; -} -@synthesize groupName; -- (BOOL) hasGroupAvatar { - return !!hasGroupAvatar_; -} -- (void) setHasGroupAvatar:(BOOL) value_ { - hasGroupAvatar_ = !!value_; -} -@synthesize groupAvatar; -- (BOOL) hasGroupCreatorId { - return !!hasGroupCreatorId_; -} -- (void) setHasGroupCreatorId:(BOOL) value_ { - hasGroupCreatorId_ = !!value_; -} -@synthesize groupCreatorId; -- (BOOL) hasGroupType { - return !!hasGroupType_; -} -- (void) setHasGroupType:(BOOL) value_ { - hasGroupType_ = !!value_; -} -@synthesize groupType; -@synthesize groupMemberListArray; -@dynamic groupMemberList; -- (void) dealloc { - self.groupId = nil; - self.groupName = nil; - self.groupAvatar = nil; - self.groupCreatorId = nil; - self.groupMemberListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 259; - self.results = 0; - self.groupId = @""; - self.groupName = @""; - self.groupAvatar = @""; - self.groupCreatorId = @""; - self.groupType = GroupTypeNormalGroup; - } - return self; -} -static C2MGroupUserListRsp* defaultC2MGroupUserListRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupUserListRsp class]) { - defaultC2MGroupUserListRspInstance = [[C2MGroupUserListRsp alloc] init]; - } -} -+ (C2MGroupUserListRsp*) defaultInstance { - return defaultC2MGroupUserListRspInstance; -} -- (C2MGroupUserListRsp*) defaultInstance { - return defaultC2MGroupUserListRspInstance; -} -- (NSArray *)groupMemberList { - return groupMemberListArray; -} -- (NSString*)groupMemberListAtIndex:(NSUInteger)index { - return [groupMemberListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - if (!self.hasGroupId) { - return NO; - } - if (!self.hasGroupName) { - return NO; - } - if (!self.hasGroupAvatar) { - return NO; - } - if (!self.hasGroupCreatorId) { - return NO; - } - if (!self.hasGroupType) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeUInt32:2 value:self.results]; - } - if (self.hasGroupId) { - [output writeString:3 value:self.groupId]; - } - if (self.hasGroupName) { - [output writeString:4 value:self.groupName]; - } - if (self.hasGroupAvatar) { - [output writeString:5 value:self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output writeString:6 value:self.groupCreatorId]; - } - if (self.hasGroupType) { - [output writeEnum:7 value:self.groupType]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:8 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeUInt32Size(2, self.results); - } - if (self.hasGroupId) { - size_ += computeStringSize(3, self.groupId); - } - if (self.hasGroupName) { - size_ += computeStringSize(4, self.groupName); - } - if (self.hasGroupAvatar) { - size_ += computeStringSize(5, self.groupAvatar); - } - if (self.hasGroupCreatorId) { - size_ += computeStringSize(6, self.groupCreatorId); - } - if (self.hasGroupType) { - size_ += computeEnumSize(7, self.groupType); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.groupMemberListArray.count; - [self.groupMemberListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupUserListRsp*) parseFromData:(NSData*) data { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupUserListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupUserListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupUserListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUserListRsp*)[[[C2MGroupUserListRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUserListRspBuilder*) builder { - return [[C2MGroupUserListRspBuilder alloc] init]; -} -+ (C2MGroupUserListRspBuilder*) builderWithPrototype:(C2MGroupUserListRsp*) prototype { - return [[C2MGroupUserListRsp builder] mergeFrom:prototype]; -} -- (C2MGroupUserListRspBuilder*) builder { - return [C2MGroupUserListRsp builder]; -} -- (C2MGroupUserListRspBuilder*) toBuilder { - return [C2MGroupUserListRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %@\n", indent, @"results", [NSNumber numberWithInteger:self.results]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - if (self.hasGroupName) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupName", self.groupName]; - } - if (self.hasGroupAvatar) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupAvatar", self.groupAvatar]; - } - if (self.hasGroupCreatorId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupCreatorId", self.groupCreatorId]; - } - if (self.hasGroupType) { - [output appendFormat:@"%@%@: %d\n", indent, @"groupType", self.groupType]; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupMemberList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupUserListRsp class]]) { - return NO; - } - C2MGroupUserListRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - self.hasGroupName == otherMessage.hasGroupName && - (!self.hasGroupName || [self.groupName isEqual:otherMessage.groupName]) && - self.hasGroupAvatar == otherMessage.hasGroupAvatar && - (!self.hasGroupAvatar || [self.groupAvatar isEqual:otherMessage.groupAvatar]) && - self.hasGroupCreatorId == otherMessage.hasGroupCreatorId && - (!self.hasGroupCreatorId || [self.groupCreatorId isEqual:otherMessage.groupCreatorId]) && - self.hasGroupType == otherMessage.hasGroupType && - (!self.hasGroupType || self.groupType == otherMessage.groupType) && - [self.groupMemberListArray isEqualToArray:otherMessage.groupMemberListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.results] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - if (self.hasGroupName) { - hashCode = hashCode * 31 + [self.groupName hash]; - } - if (self.hasGroupAvatar) { - hashCode = hashCode * 31 + [self.groupAvatar hash]; - } - if (self.hasGroupCreatorId) { - hashCode = hashCode * 31 + [self.groupCreatorId hash]; - } - if (self.hasGroupType) { - hashCode = hashCode * 31 + self.groupType; - } - [self.groupMemberListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupUserListRspBuilder() -@property (strong) C2MGroupUserListRsp* result; -@end - -@implementation C2MGroupUserListRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupUserListRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupUserListRspBuilder*) clear { - self.result = [[C2MGroupUserListRsp alloc] init]; - return self; -} -- (C2MGroupUserListRspBuilder*) clone { - return [C2MGroupUserListRsp builderWithPrototype:result]; -} -- (C2MGroupUserListRsp*) defaultInstance { - return [C2MGroupUserListRsp defaultInstance]; -} -- (C2MGroupUserListRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupUserListRsp*) buildPartial { - C2MGroupUserListRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupUserListRspBuilder*) mergeFrom:(C2MGroupUserListRsp*) other { - if (other == [C2MGroupUserListRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasGroupName) { - [self setGroupName:other.groupName]; - } - if (other.hasGroupAvatar) { - [self setGroupAvatar:other.groupAvatar]; - } - if (other.hasGroupCreatorId) { - [self setGroupCreatorId:other.groupCreatorId]; - } - if (other.hasGroupType) { - [self setGroupType:other.groupType]; - } - if (other.groupMemberListArray.count > 0) { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [[NSMutableArray alloc] initWithArray:other.groupMemberListArray]; - } else { - [result.groupMemberListArray addObjectsFromArray:other.groupMemberListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupUserListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupUserListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setResults:[input readUInt32]]; - break; - } - case 26: { - [self setGroupId:[input readString]]; - break; - } - case 34: { - [self setGroupName:[input readString]]; - break; - } - case 42: { - [self setGroupAvatar:[input readString]]; - break; - } - case 50: { - [self setGroupCreatorId:[input readString]]; - break; - } - case 56: { - GroupType value = (GroupType)[input readEnum]; - if (GroupTypeIsValidValue(value)) { - [self setGroupType:value]; - } else { - [unknownFields mergeVarintField:7 value:value]; - } - break; - } - case 66: { - [self addGroupMemberList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupUserListRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 259; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (UInt32) results { - return result.results; -} -- (C2MGroupUserListRspBuilder*) setResults:(UInt32) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearResults { - result.hasResults = NO; - result.results = 0; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupUserListRspBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (BOOL) hasGroupName { - return result.hasGroupName; -} -- (NSString*) groupName { - return result.groupName; -} -- (C2MGroupUserListRspBuilder*) setGroupName:(NSString*) value { - result.hasGroupName = YES; - result.groupName = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearGroupName { - result.hasGroupName = NO; - result.groupName = @""; - return self; -} -- (BOOL) hasGroupAvatar { - return result.hasGroupAvatar; -} -- (NSString*) groupAvatar { - return result.groupAvatar; -} -- (C2MGroupUserListRspBuilder*) setGroupAvatar:(NSString*) value { - result.hasGroupAvatar = YES; - result.groupAvatar = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearGroupAvatar { - result.hasGroupAvatar = NO; - result.groupAvatar = @""; - return self; -} -- (BOOL) hasGroupCreatorId { - return result.hasGroupCreatorId; -} -- (NSString*) groupCreatorId { - return result.groupCreatorId; -} -- (C2MGroupUserListRspBuilder*) setGroupCreatorId:(NSString*) value { - result.hasGroupCreatorId = YES; - result.groupCreatorId = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearGroupCreatorId { - result.hasGroupCreatorId = NO; - result.groupCreatorId = @""; - return self; -} -- (BOOL) hasGroupType { - return result.hasGroupType; -} -- (GroupType) groupType { - return result.groupType; -} -- (C2MGroupUserListRspBuilder*) setGroupType:(GroupType) value { - result.hasGroupType = YES; - result.groupType = value; - return self; -} -- (C2MGroupUserListRspBuilder*) clearGroupType { - result.hasGroupType = NO; - result.groupType = GroupTypeNormalGroup; - return self; -} -- (NSMutableArray *)groupMemberList { - return result.groupMemberListArray; -} -- (NSString*)groupMemberListAtIndex:(NSUInteger)index { - return [result groupMemberListAtIndex:index]; -} -- (C2MGroupUserListRspBuilder *)addGroupMemberList:(NSString*)value { - if (result.groupMemberListArray == nil) { - result.groupMemberListArray = [[NSMutableArray alloc]init]; - } - [result.groupMemberListArray addObject:value]; - return self; -} -- (C2MGroupUserListRspBuilder *)setGroupMemberListArray:(NSArray *)array { - result.groupMemberListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MGroupUserListRspBuilder *)clearGroupMemberList { - result.groupMemberListArray = nil; - return self; -} -@end - -@interface C2MGroupUnReadMsgCntReq () -@property SInt32 cmdId; -@end - -@implementation C2MGroupUnReadMsgCntReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (void) dealloc { -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 260; - } - return self; -} -static C2MGroupUnReadMsgCntReq* defaultC2MGroupUnReadMsgCntReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupUnReadMsgCntReq class]) { - defaultC2MGroupUnReadMsgCntReqInstance = [[C2MGroupUnReadMsgCntReq alloc] init]; - } -} -+ (C2MGroupUnReadMsgCntReq*) defaultInstance { - return defaultC2MGroupUnReadMsgCntReqInstance; -} -- (C2MGroupUnReadMsgCntReq*) defaultInstance { - return defaultC2MGroupUnReadMsgCntReqInstance; -} -- (BOOL) isInitialized { - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromData:(NSData*) data { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromData:data] build]; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupUnReadMsgCntReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntReq*)[[[C2MGroupUnReadMsgCntReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntReqBuilder*) builder { - return [[C2MGroupUnReadMsgCntReqBuilder alloc] init]; -} -+ (C2MGroupUnReadMsgCntReqBuilder*) builderWithPrototype:(C2MGroupUnReadMsgCntReq*) prototype { - return [[C2MGroupUnReadMsgCntReq builder] mergeFrom:prototype]; -} -- (C2MGroupUnReadMsgCntReqBuilder*) builder { - return [C2MGroupUnReadMsgCntReq builder]; -} -- (C2MGroupUnReadMsgCntReqBuilder*) toBuilder { - return [C2MGroupUnReadMsgCntReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupUnReadMsgCntReq class]]) { - return NO; - } - C2MGroupUnReadMsgCntReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupUnReadMsgCntReqBuilder() -@property (strong) C2MGroupUnReadMsgCntReq* result; -@end - -@implementation C2MGroupUnReadMsgCntReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupUnReadMsgCntReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupUnReadMsgCntReqBuilder*) clear { - self.result = [[C2MGroupUnReadMsgCntReq alloc] init]; - return self; -} -- (C2MGroupUnReadMsgCntReqBuilder*) clone { - return [C2MGroupUnReadMsgCntReq builderWithPrototype:result]; -} -- (C2MGroupUnReadMsgCntReq*) defaultInstance { - return [C2MGroupUnReadMsgCntReq defaultInstance]; -} -- (C2MGroupUnReadMsgCntReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupUnReadMsgCntReq*) buildPartial { - C2MGroupUnReadMsgCntReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFrom:(C2MGroupUnReadMsgCntReq*) other { - if (other == [C2MGroupUnReadMsgCntReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupUnReadMsgCntReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupUnReadMsgCntReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupUnReadMsgCntReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 260; - return self; -} -@end - -@interface C2MGroupUnReadMsgCntRsp () -@property SInt32 cmdId; -@property (strong) NSMutableArray * groupUnreadMsgCntArray; -@end - -@implementation C2MGroupUnReadMsgCntRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -@synthesize groupUnreadMsgCntArray; -@dynamic groupUnreadMsgCnt; -- (void) dealloc { - self.groupUnreadMsgCntArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 261; - } - return self; -} -static C2MGroupUnReadMsgCntRsp* defaultC2MGroupUnReadMsgCntRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupUnReadMsgCntRsp class]) { - defaultC2MGroupUnReadMsgCntRspInstance = [[C2MGroupUnReadMsgCntRsp alloc] init]; - } -} -+ (C2MGroupUnReadMsgCntRsp*) defaultInstance { - return defaultC2MGroupUnReadMsgCntRspInstance; -} -- (C2MGroupUnReadMsgCntRsp*) defaultInstance { - return defaultC2MGroupUnReadMsgCntRspInstance; -} -- (NSArray *)groupUnreadMsgCnt { - return groupUnreadMsgCntArray; -} -- (ClientGroupUnReadCnt*)groupUnreadMsgCntAtIndex:(NSUInteger)index { - return [groupUnreadMsgCntArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - __block BOOL isInitgroupUnreadMsgCnt = YES; - [self.groupUnreadMsgCnt enumerateObjectsUsingBlock:^(ClientGroupUnReadCnt *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitgroupUnreadMsgCnt = NO; - *stop = YES; - } - }]; - if (!isInitgroupUnreadMsgCnt) return isInitgroupUnreadMsgCnt; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - [self.groupUnreadMsgCntArray enumerateObjectsUsingBlock:^(ClientGroupUnReadCnt *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:2 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - [self.groupUnreadMsgCntArray enumerateObjectsUsingBlock:^(ClientGroupUnReadCnt *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(2, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromData:(NSData*) data { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupUnReadMsgCntRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgCntRsp*)[[[C2MGroupUnReadMsgCntRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgCntRspBuilder*) builder { - return [[C2MGroupUnReadMsgCntRspBuilder alloc] init]; -} -+ (C2MGroupUnReadMsgCntRspBuilder*) builderWithPrototype:(C2MGroupUnReadMsgCntRsp*) prototype { - return [[C2MGroupUnReadMsgCntRsp builder] mergeFrom:prototype]; -} -- (C2MGroupUnReadMsgCntRspBuilder*) builder { - return [C2MGroupUnReadMsgCntRsp builder]; -} -- (C2MGroupUnReadMsgCntRspBuilder*) toBuilder { - return [C2MGroupUnReadMsgCntRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - [self.groupUnreadMsgCntArray enumerateObjectsUsingBlock:^(ClientGroupUnReadCnt *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"groupUnreadMsgCnt"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupUnReadMsgCntRsp class]]) { - return NO; - } - C2MGroupUnReadMsgCntRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - [self.groupUnreadMsgCntArray isEqualToArray:otherMessage.groupUnreadMsgCntArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - [self.groupUnreadMsgCntArray enumerateObjectsUsingBlock:^(ClientGroupUnReadCnt *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupUnReadMsgCntRspBuilder() -@property (strong) C2MGroupUnReadMsgCntRsp* result; -@end - -@implementation C2MGroupUnReadMsgCntRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupUnReadMsgCntRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupUnReadMsgCntRspBuilder*) clear { - self.result = [[C2MGroupUnReadMsgCntRsp alloc] init]; - return self; -} -- (C2MGroupUnReadMsgCntRspBuilder*) clone { - return [C2MGroupUnReadMsgCntRsp builderWithPrototype:result]; -} -- (C2MGroupUnReadMsgCntRsp*) defaultInstance { - return [C2MGroupUnReadMsgCntRsp defaultInstance]; -} -- (C2MGroupUnReadMsgCntRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupUnReadMsgCntRsp*) buildPartial { - C2MGroupUnReadMsgCntRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFrom:(C2MGroupUnReadMsgCntRsp*) other { - if (other == [C2MGroupUnReadMsgCntRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.groupUnreadMsgCntArray.count > 0) { - if (result.groupUnreadMsgCntArray == nil) { - result.groupUnreadMsgCntArray = [[NSMutableArray alloc] initWithArray:other.groupUnreadMsgCntArray]; - } else { - [result.groupUnreadMsgCntArray addObjectsFromArray:other.groupUnreadMsgCntArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupUnReadMsgCntRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - ClientGroupUnReadCntBuilder* subBuilder = [ClientGroupUnReadCnt builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addGroupUnreadMsgCnt:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupUnReadMsgCntRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupUnReadMsgCntRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 261; - return self; -} -- (NSMutableArray *)groupUnreadMsgCnt { - return result.groupUnreadMsgCntArray; -} -- (ClientGroupUnReadCnt*)groupUnreadMsgCntAtIndex:(NSUInteger)index { - return [result groupUnreadMsgCntAtIndex:index]; -} -- (C2MGroupUnReadMsgCntRspBuilder *)addGroupUnreadMsgCnt:(ClientGroupUnReadCnt*)value { - if (result.groupUnreadMsgCntArray == nil) { - result.groupUnreadMsgCntArray = [[NSMutableArray alloc]init]; - } - [result.groupUnreadMsgCntArray addObject:value]; - return self; -} -- (C2MGroupUnReadMsgCntRspBuilder *)setGroupUnreadMsgCntArray:(NSArray *)array { - result.groupUnreadMsgCntArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MGroupUnReadMsgCntRspBuilder *)clearGroupUnreadMsgCnt { - result.groupUnreadMsgCntArray = nil; - return self; -} -@end - -@interface C2MGroupUnReadMsgReq () -@property SInt32 cmdId; -@property (strong) NSString* groupId; -@end - -@implementation C2MGroupUnReadMsgReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (void) dealloc { - self.groupId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 262; - self.groupId = @""; - } - return self; -} -static C2MGroupUnReadMsgReq* defaultC2MGroupUnReadMsgReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupUnReadMsgReq class]) { - defaultC2MGroupUnReadMsgReqInstance = [[C2MGroupUnReadMsgReq alloc] init]; - } -} -+ (C2MGroupUnReadMsgReq*) defaultInstance { - return defaultC2MGroupUnReadMsgReqInstance; -} -- (C2MGroupUnReadMsgReq*) defaultInstance { - return defaultC2MGroupUnReadMsgReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupId) { - [output writeString:2 value:self.groupId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupId) { - size_ += computeStringSize(2, self.groupId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupUnReadMsgReq*) parseFromData:(NSData*) data { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromData:data] build]; -} -+ (C2MGroupUnReadMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupUnReadMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupUnReadMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupUnReadMsgReq*)[[[C2MGroupUnReadMsgReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupUnReadMsgReqBuilder*) builder { - return [[C2MGroupUnReadMsgReqBuilder alloc] init]; -} -+ (C2MGroupUnReadMsgReqBuilder*) builderWithPrototype:(C2MGroupUnReadMsgReq*) prototype { - return [[C2MGroupUnReadMsgReq builder] mergeFrom:prototype]; -} -- (C2MGroupUnReadMsgReqBuilder*) builder { - return [C2MGroupUnReadMsgReq builder]; -} -- (C2MGroupUnReadMsgReqBuilder*) toBuilder { - return [C2MGroupUnReadMsgReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupUnReadMsgReq class]]) { - return NO; - } - C2MGroupUnReadMsgReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupUnReadMsgReqBuilder() -@property (strong) C2MGroupUnReadMsgReq* result; -@end - -@implementation C2MGroupUnReadMsgReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupUnReadMsgReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupUnReadMsgReqBuilder*) clear { - self.result = [[C2MGroupUnReadMsgReq alloc] init]; - return self; -} -- (C2MGroupUnReadMsgReqBuilder*) clone { - return [C2MGroupUnReadMsgReq builderWithPrototype:result]; -} -- (C2MGroupUnReadMsgReq*) defaultInstance { - return [C2MGroupUnReadMsgReq defaultInstance]; -} -- (C2MGroupUnReadMsgReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupUnReadMsgReq*) buildPartial { - C2MGroupUnReadMsgReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupUnReadMsgReqBuilder*) mergeFrom:(C2MGroupUnReadMsgReq*) other { - if (other == [C2MGroupUnReadMsgReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupUnReadMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupUnReadMsgReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupUnReadMsgReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 262; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupUnReadMsgReqBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupUnReadMsgReqBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -@end - -@interface C2MGroupHistoryMsgReq () -@property SInt32 cmdId; -@property (strong) NSString* groupId; -@property UInt32 msgOffset; -@property UInt32 msgCount; -@end - -@implementation C2MGroupHistoryMsgReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasMsgOffset { - return !!hasMsgOffset_; -} -- (void) setHasMsgOffset:(BOOL) value_ { - hasMsgOffset_ = !!value_; -} -@synthesize msgOffset; -- (BOOL) hasMsgCount { - return !!hasMsgCount_; -} -- (void) setHasMsgCount:(BOOL) value_ { - hasMsgCount_ = !!value_; -} -@synthesize msgCount; -- (void) dealloc { - self.groupId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 263; - self.groupId = @""; - self.msgOffset = 0; - self.msgCount = 0; - } - return self; -} -static C2MGroupHistoryMsgReq* defaultC2MGroupHistoryMsgReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupHistoryMsgReq class]) { - defaultC2MGroupHistoryMsgReqInstance = [[C2MGroupHistoryMsgReq alloc] init]; - } -} -+ (C2MGroupHistoryMsgReq*) defaultInstance { - return defaultC2MGroupHistoryMsgReqInstance; -} -- (C2MGroupHistoryMsgReq*) defaultInstance { - return defaultC2MGroupHistoryMsgReqInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - if (!self.hasMsgOffset) { - return NO; - } - if (!self.hasMsgCount) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupId) { - [output writeString:2 value:self.groupId]; - } - if (self.hasMsgOffset) { - [output writeUInt32:3 value:self.msgOffset]; - } - if (self.hasMsgCount) { - [output writeUInt32:4 value:self.msgCount]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupId) { - size_ += computeStringSize(2, self.groupId); - } - if (self.hasMsgOffset) { - size_ += computeUInt32Size(3, self.msgOffset); - } - if (self.hasMsgCount) { - size_ += computeUInt32Size(4, self.msgCount); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupHistoryMsgReq*) parseFromData:(NSData*) data { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromData:data] build]; -} -+ (C2MGroupHistoryMsgReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupHistoryMsgReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupHistoryMsgReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupHistoryMsgReq*)[[[C2MGroupHistoryMsgReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupHistoryMsgReqBuilder*) builder { - return [[C2MGroupHistoryMsgReqBuilder alloc] init]; -} -+ (C2MGroupHistoryMsgReqBuilder*) builderWithPrototype:(C2MGroupHistoryMsgReq*) prototype { - return [[C2MGroupHistoryMsgReq builder] mergeFrom:prototype]; -} -- (C2MGroupHistoryMsgReqBuilder*) builder { - return [C2MGroupHistoryMsgReq builder]; -} -- (C2MGroupHistoryMsgReqBuilder*) toBuilder { - return [C2MGroupHistoryMsgReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - if (self.hasMsgOffset) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgOffset", [NSNumber numberWithInteger:self.msgOffset]]; - } - if (self.hasMsgCount) { - [output appendFormat:@"%@%@: %@\n", indent, @"msgCount", [NSNumber numberWithInteger:self.msgCount]]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupHistoryMsgReq class]]) { - return NO; - } - C2MGroupHistoryMsgReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - self.hasMsgOffset == otherMessage.hasMsgOffset && - (!self.hasMsgOffset || self.msgOffset == otherMessage.msgOffset) && - self.hasMsgCount == otherMessage.hasMsgCount && - (!self.hasMsgCount || self.msgCount == otherMessage.msgCount) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - if (self.hasMsgOffset) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgOffset] hash]; - } - if (self.hasMsgCount) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.msgCount] hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupHistoryMsgReqBuilder() -@property (strong) C2MGroupHistoryMsgReq* result; -@end - -@implementation C2MGroupHistoryMsgReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupHistoryMsgReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupHistoryMsgReqBuilder*) clear { - self.result = [[C2MGroupHistoryMsgReq alloc] init]; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) clone { - return [C2MGroupHistoryMsgReq builderWithPrototype:result]; -} -- (C2MGroupHistoryMsgReq*) defaultInstance { - return [C2MGroupHistoryMsgReq defaultInstance]; -} -- (C2MGroupHistoryMsgReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupHistoryMsgReq*) buildPartial { - C2MGroupHistoryMsgReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupHistoryMsgReqBuilder*) mergeFrom:(C2MGroupHistoryMsgReq*) other { - if (other == [C2MGroupHistoryMsgReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasMsgOffset) { - [self setMsgOffset:other.msgOffset]; - } - if (other.hasMsgCount) { - [self setMsgCount:other.msgCount]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupHistoryMsgReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupId:[input readString]]; - break; - } - case 24: { - [self setMsgOffset:[input readUInt32]]; - break; - } - case 32: { - [self setMsgCount:[input readUInt32]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupHistoryMsgReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 263; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupHistoryMsgReqBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (BOOL) hasMsgOffset { - return result.hasMsgOffset; -} -- (UInt32) msgOffset { - return result.msgOffset; -} -- (C2MGroupHistoryMsgReqBuilder*) setMsgOffset:(UInt32) value { - result.hasMsgOffset = YES; - result.msgOffset = value; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) clearMsgOffset { - result.hasMsgOffset = NO; - result.msgOffset = 0; - return self; -} -- (BOOL) hasMsgCount { - return result.hasMsgCount; -} -- (UInt32) msgCount { - return result.msgCount; -} -- (C2MGroupHistoryMsgReqBuilder*) setMsgCount:(UInt32) value { - result.hasMsgCount = YES; - result.msgCount = value; - return self; -} -- (C2MGroupHistoryMsgReqBuilder*) clearMsgCount { - result.hasMsgCount = NO; - result.msgCount = 0; - return self; -} -@end - -@interface C2MGroupMsgListRsp () -@property SInt32 cmdId; -@property (strong) NSString* groupId; -@property (strong) NSMutableArray * groupMsgListArray; -@end - -@implementation C2MGroupMsgListRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -@synthesize groupMsgListArray; -@dynamic groupMsgList; -- (void) dealloc { - self.groupId = nil; - self.groupMsgListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 264; - self.groupId = @""; - } - return self; -} -static C2MGroupMsgListRsp* defaultC2MGroupMsgListRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupMsgListRsp class]) { - defaultC2MGroupMsgListRspInstance = [[C2MGroupMsgListRsp alloc] init]; - } -} -+ (C2MGroupMsgListRsp*) defaultInstance { - return defaultC2MGroupMsgListRspInstance; -} -- (C2MGroupMsgListRsp*) defaultInstance { - return defaultC2MGroupMsgListRspInstance; -} -- (NSArray *)groupMsgList { - return groupMsgListArray; -} -- (ClientGroupMsg*)groupMsgListAtIndex:(NSUInteger)index { - return [groupMsgListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - __block BOOL isInitgroupMsgList = YES; - [self.groupMsgList enumerateObjectsUsingBlock:^(ClientGroupMsg *element, NSUInteger idx, BOOL *stop) { - if (!element.isInitialized) { - isInitgroupMsgList = NO; - *stop = YES; - } - }]; - if (!isInitgroupMsgList) return isInitgroupMsgList; - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupId) { - [output writeString:2 value:self.groupId]; - } - [self.groupMsgListArray enumerateObjectsUsingBlock:^(ClientGroupMsg *element, NSUInteger idx, BOOL *stop) { - [output writeMessage:3 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupId) { - size_ += computeStringSize(2, self.groupId); - } - [self.groupMsgListArray enumerateObjectsUsingBlock:^(ClientGroupMsg *element, NSUInteger idx, BOOL *stop) { - size_ += computeMessageSize(3, element); - }]; - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupMsgListRsp*) parseFromData:(NSData*) data { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupMsgListRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgListRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupMsgListRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupMsgListRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgListRsp*)[[[C2MGroupMsgListRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgListRspBuilder*) builder { - return [[C2MGroupMsgListRspBuilder alloc] init]; -} -+ (C2MGroupMsgListRspBuilder*) builderWithPrototype:(C2MGroupMsgListRsp*) prototype { - return [[C2MGroupMsgListRsp builder] mergeFrom:prototype]; -} -- (C2MGroupMsgListRspBuilder*) builder { - return [C2MGroupMsgListRsp builder]; -} -- (C2MGroupMsgListRspBuilder*) toBuilder { - return [C2MGroupMsgListRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.groupMsgListArray enumerateObjectsUsingBlock:^(ClientGroupMsg *element, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@ {\n", indent, @"groupMsgList"]; - [element writeDescriptionTo:output - withIndent:[NSString stringWithFormat:@"%@ ", indent]]; - [output appendFormat:@"%@}\n", indent]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupMsgListRsp class]]) { - return NO; - } - C2MGroupMsgListRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - [self.groupMsgListArray isEqualToArray:otherMessage.groupMsgListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - [self.groupMsgListArray enumerateObjectsUsingBlock:^(ClientGroupMsg *element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupMsgListRspBuilder() -@property (strong) C2MGroupMsgListRsp* result; -@end - -@implementation C2MGroupMsgListRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupMsgListRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupMsgListRspBuilder*) clear { - self.result = [[C2MGroupMsgListRsp alloc] init]; - return self; -} -- (C2MGroupMsgListRspBuilder*) clone { - return [C2MGroupMsgListRsp builderWithPrototype:result]; -} -- (C2MGroupMsgListRsp*) defaultInstance { - return [C2MGroupMsgListRsp defaultInstance]; -} -- (C2MGroupMsgListRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupMsgListRsp*) buildPartial { - C2MGroupMsgListRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupMsgListRspBuilder*) mergeFrom:(C2MGroupMsgListRsp*) other { - if (other == [C2MGroupMsgListRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.groupMsgListArray.count > 0) { - if (result.groupMsgListArray == nil) { - result.groupMsgListArray = [[NSMutableArray alloc] initWithArray:other.groupMsgListArray]; - } else { - [result.groupMsgListArray addObjectsFromArray:other.groupMsgListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupMsgListRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupId:[input readString]]; - break; - } - case 26: { - ClientGroupMsgBuilder* subBuilder = [ClientGroupMsg builder]; - [input readMessage:subBuilder extensionRegistry:extensionRegistry]; - [self addGroupMsgList:[subBuilder buildPartial]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupMsgListRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupMsgListRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 264; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupMsgListRspBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupMsgListRspBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (NSMutableArray *)groupMsgList { - return result.groupMsgListArray; -} -- (ClientGroupMsg*)groupMsgListAtIndex:(NSUInteger)index { - return [result groupMsgListAtIndex:index]; -} -- (C2MGroupMsgListRspBuilder *)addGroupMsgList:(ClientGroupMsg*)value { - if (result.groupMsgListArray == nil) { - result.groupMsgListArray = [[NSMutableArray alloc]init]; - } - [result.groupMsgListArray addObject:value]; - return self; -} -- (C2MGroupMsgListRspBuilder *)setGroupMsgListArray:(NSArray *)array { - result.groupMsgListArray = [[NSMutableArray alloc]initWithArray:array]; - return self; -} -- (C2MGroupMsgListRspBuilder *)clearGroupMsgList { - result.groupMsgListArray = nil; - return self; -} -@end - -@interface C2MGroupMsgReadAck () -@property SInt32 cmdId; -@property (strong) NSString* groupId; -@end - -@implementation C2MGroupMsgReadAck - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (void) dealloc { - self.groupId = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 265; - self.groupId = @""; - } - return self; -} -static C2MGroupMsgReadAck* defaultC2MGroupMsgReadAckInstance = nil; -+ (void) initialize { - if (self == [C2MGroupMsgReadAck class]) { - defaultC2MGroupMsgReadAckInstance = [[C2MGroupMsgReadAck alloc] init]; - } -} -+ (C2MGroupMsgReadAck*) defaultInstance { - return defaultC2MGroupMsgReadAckInstance; -} -- (C2MGroupMsgReadAck*) defaultInstance { - return defaultC2MGroupMsgReadAckInstance; -} -- (BOOL) isInitialized { - if (!self.hasGroupId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupId) { - [output writeString:2 value:self.groupId]; - } - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupId) { - size_ += computeStringSize(2, self.groupId); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupMsgReadAck*) parseFromData:(NSData*) data { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromData:data] build]; -} -+ (C2MGroupMsgReadAck*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgReadAck*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupMsgReadAck*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupMsgReadAck*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupMsgReadAck*)[[[C2MGroupMsgReadAck builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupMsgReadAckBuilder*) builder { - return [[C2MGroupMsgReadAckBuilder alloc] init]; -} -+ (C2MGroupMsgReadAckBuilder*) builderWithPrototype:(C2MGroupMsgReadAck*) prototype { - return [[C2MGroupMsgReadAck builder] mergeFrom:prototype]; -} -- (C2MGroupMsgReadAckBuilder*) builder { - return [C2MGroupMsgReadAck builder]; -} -- (C2MGroupMsgReadAckBuilder*) toBuilder { - return [C2MGroupMsgReadAck builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupMsgReadAck class]]) { - return NO; - } - C2MGroupMsgReadAck *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupMsgReadAckBuilder() -@property (strong) C2MGroupMsgReadAck* result; -@end - -@implementation C2MGroupMsgReadAckBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupMsgReadAck alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupMsgReadAckBuilder*) clear { - self.result = [[C2MGroupMsgReadAck alloc] init]; - return self; -} -- (C2MGroupMsgReadAckBuilder*) clone { - return [C2MGroupMsgReadAck builderWithPrototype:result]; -} -- (C2MGroupMsgReadAck*) defaultInstance { - return [C2MGroupMsgReadAck defaultInstance]; -} -- (C2MGroupMsgReadAck*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupMsgReadAck*) buildPartial { - C2MGroupMsgReadAck* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupMsgReadAckBuilder*) mergeFrom:(C2MGroupMsgReadAck*) other { - if (other == [C2MGroupMsgReadAck defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupMsgReadAckBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupId:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupMsgReadAckBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupMsgReadAckBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 265; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupMsgReadAckBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupMsgReadAckBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -@end - -@interface C2MGroupCreateTmpGroupReq () -@property SInt32 cmdId; -@property (strong) NSString* groupName; -@property (strong) NSString* groupAvatar; -@property (strong) NSMutableArray * userIdListArray; -@end - -@implementation C2MGroupCreateTmpGroupReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasGroupName { - return !!hasGroupName_; -} -- (void) setHasGroupName:(BOOL) value_ { - hasGroupName_ = !!value_; -} -@synthesize groupName; -- (BOOL) hasGroupAvatar { - return !!hasGroupAvatar_; -} -- (void) setHasGroupAvatar:(BOOL) value_ { - hasGroupAvatar_ = !!value_; -} -@synthesize groupAvatar; -@synthesize userIdListArray; -@dynamic userIdList; -- (void) dealloc { - self.groupName = nil; - self.groupAvatar = nil; - self.userIdListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 266; - self.groupName = @""; - self.groupAvatar = @""; - } - return self; -} -static C2MGroupCreateTmpGroupReq* defaultC2MGroupCreateTmpGroupReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupCreateTmpGroupReq class]) { - defaultC2MGroupCreateTmpGroupReqInstance = [[C2MGroupCreateTmpGroupReq alloc] init]; - } -} -+ (C2MGroupCreateTmpGroupReq*) defaultInstance { - return defaultC2MGroupCreateTmpGroupReqInstance; -} -- (C2MGroupCreateTmpGroupReq*) defaultInstance { - return defaultC2MGroupCreateTmpGroupReqInstance; -} -- (NSArray *)userIdList { - return userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [userIdListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasGroupName) { - return NO; - } - if (!self.hasGroupAvatar) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasGroupName) { - [output writeString:2 value:self.groupName]; - } - if (self.hasGroupAvatar) { - [output writeString:3 value:self.groupAvatar]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:4 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasGroupName) { - size_ += computeStringSize(2, self.groupName); - } - if (self.hasGroupAvatar) { - size_ += computeStringSize(3, self.groupAvatar); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userIdListArray.count; - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromData:(NSData*) data { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromData:data] build]; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupCreateTmpGroupReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupReq*)[[[C2MGroupCreateTmpGroupReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupReqBuilder*) builder { - return [[C2MGroupCreateTmpGroupReqBuilder alloc] init]; -} -+ (C2MGroupCreateTmpGroupReqBuilder*) builderWithPrototype:(C2MGroupCreateTmpGroupReq*) prototype { - return [[C2MGroupCreateTmpGroupReq builder] mergeFrom:prototype]; -} -- (C2MGroupCreateTmpGroupReqBuilder*) builder { - return [C2MGroupCreateTmpGroupReq builder]; -} -- (C2MGroupCreateTmpGroupReqBuilder*) toBuilder { - return [C2MGroupCreateTmpGroupReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasGroupName) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupName", self.groupName]; - } - if (self.hasGroupAvatar) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupAvatar", self.groupAvatar]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userIdList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupCreateTmpGroupReq class]]) { - return NO; - } - C2MGroupCreateTmpGroupReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasGroupName == otherMessage.hasGroupName && - (!self.hasGroupName || [self.groupName isEqual:otherMessage.groupName]) && - self.hasGroupAvatar == otherMessage.hasGroupAvatar && - (!self.hasGroupAvatar || [self.groupAvatar isEqual:otherMessage.groupAvatar]) && - [self.userIdListArray isEqualToArray:otherMessage.userIdListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasGroupName) { - hashCode = hashCode * 31 + [self.groupName hash]; - } - if (self.hasGroupAvatar) { - hashCode = hashCode * 31 + [self.groupAvatar hash]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupCreateTmpGroupReqBuilder() -@property (strong) C2MGroupCreateTmpGroupReq* result; -@end - -@implementation C2MGroupCreateTmpGroupReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupCreateTmpGroupReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupCreateTmpGroupReqBuilder*) clear { - self.result = [[C2MGroupCreateTmpGroupReq alloc] init]; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder*) clone { - return [C2MGroupCreateTmpGroupReq builderWithPrototype:result]; -} -- (C2MGroupCreateTmpGroupReq*) defaultInstance { - return [C2MGroupCreateTmpGroupReq defaultInstance]; -} -- (C2MGroupCreateTmpGroupReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupCreateTmpGroupReq*) buildPartial { - C2MGroupCreateTmpGroupReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFrom:(C2MGroupCreateTmpGroupReq*) other { - if (other == [C2MGroupCreateTmpGroupReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasGroupName) { - [self setGroupName:other.groupName]; - } - if (other.hasGroupAvatar) { - [self setGroupAvatar:other.groupAvatar]; - } - if (other.userIdListArray.count > 0) { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:other.userIdListArray]; - } else { - [result.userIdListArray addObjectsFromArray:other.userIdListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupCreateTmpGroupReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 18: { - [self setGroupName:[input readString]]; - break; - } - case 26: { - [self setGroupAvatar:[input readString]]; - break; - } - case 34: { - [self addUserIdList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupCreateTmpGroupReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 266; - return self; -} -- (BOOL) hasGroupName { - return result.hasGroupName; -} -- (NSString*) groupName { - return result.groupName; -} -- (C2MGroupCreateTmpGroupReqBuilder*) setGroupName:(NSString*) value { - result.hasGroupName = YES; - result.groupName = value; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder*) clearGroupName { - result.hasGroupName = NO; - result.groupName = @""; - return self; -} -- (BOOL) hasGroupAvatar { - return result.hasGroupAvatar; -} -- (NSString*) groupAvatar { - return result.groupAvatar; -} -- (C2MGroupCreateTmpGroupReqBuilder*) setGroupAvatar:(NSString*) value { - result.hasGroupAvatar = YES; - result.groupAvatar = value; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder*) clearGroupAvatar { - result.hasGroupAvatar = NO; - result.groupAvatar = @""; - return self; -} -- (NSMutableArray *)userIdList { - return result.userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [result userIdListAtIndex:index]; -} -- (C2MGroupCreateTmpGroupReqBuilder *)addUserIdList:(NSString*)value { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc]init]; - } - [result.userIdListArray addObject:value]; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder *)setUserIdListArray:(NSArray *)array { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MGroupCreateTmpGroupReqBuilder *)clearUserIdList { - result.userIdListArray = nil; - return self; -} -@end - -@interface C2MGroupCreateTmpGroupRsp () -@property SInt32 cmdId; -@property UInt32 results; -@property (strong) NSString* groupId; -@property (strong) NSString* groupName; -@property (strong) NSMutableArray * userIdListArray; -@end - -@implementation C2MGroupCreateTmpGroupRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -- (BOOL) hasGroupName { - return !!hasGroupName_; -} -- (void) setHasGroupName:(BOOL) value_ { - hasGroupName_ = !!value_; -} -@synthesize groupName; -@synthesize userIdListArray; -@dynamic userIdList; -- (void) dealloc { - self.groupId = nil; - self.groupName = nil; - self.userIdListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 267; - self.results = 0; - self.groupId = @""; - self.groupName = @""; - } - return self; -} -static C2MGroupCreateTmpGroupRsp* defaultC2MGroupCreateTmpGroupRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupCreateTmpGroupRsp class]) { - defaultC2MGroupCreateTmpGroupRspInstance = [[C2MGroupCreateTmpGroupRsp alloc] init]; - } -} -+ (C2MGroupCreateTmpGroupRsp*) defaultInstance { - return defaultC2MGroupCreateTmpGroupRspInstance; -} -- (C2MGroupCreateTmpGroupRsp*) defaultInstance { - return defaultC2MGroupCreateTmpGroupRspInstance; -} -- (NSArray *)userIdList { - return userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [userIdListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - if (!self.hasGroupId) { - return NO; - } - if (!self.hasGroupName) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeUInt32:2 value:self.results]; - } - if (self.hasGroupId) { - [output writeString:3 value:self.groupId]; - } - if (self.hasGroupName) { - [output writeString:4 value:self.groupName]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:5 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeUInt32Size(2, self.results); - } - if (self.hasGroupId) { - size_ += computeStringSize(3, self.groupId); - } - if (self.hasGroupName) { - size_ += computeStringSize(4, self.groupName); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userIdListArray.count; - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromData:(NSData*) data { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupCreateTmpGroupRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupCreateTmpGroupRsp*)[[[C2MGroupCreateTmpGroupRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupCreateTmpGroupRspBuilder*) builder { - return [[C2MGroupCreateTmpGroupRspBuilder alloc] init]; -} -+ (C2MGroupCreateTmpGroupRspBuilder*) builderWithPrototype:(C2MGroupCreateTmpGroupRsp*) prototype { - return [[C2MGroupCreateTmpGroupRsp builder] mergeFrom:prototype]; -} -- (C2MGroupCreateTmpGroupRspBuilder*) builder { - return [C2MGroupCreateTmpGroupRsp builder]; -} -- (C2MGroupCreateTmpGroupRspBuilder*) toBuilder { - return [C2MGroupCreateTmpGroupRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %@\n", indent, @"results", [NSNumber numberWithInteger:self.results]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - if (self.hasGroupName) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupName", self.groupName]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userIdList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupCreateTmpGroupRsp class]]) { - return NO; - } - C2MGroupCreateTmpGroupRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - self.hasGroupName == otherMessage.hasGroupName && - (!self.hasGroupName || [self.groupName isEqual:otherMessage.groupName]) && - [self.userIdListArray isEqualToArray:otherMessage.userIdListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.results] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - if (self.hasGroupName) { - hashCode = hashCode * 31 + [self.groupName hash]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupCreateTmpGroupRspBuilder() -@property (strong) C2MGroupCreateTmpGroupRsp* result; -@end - -@implementation C2MGroupCreateTmpGroupRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupCreateTmpGroupRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clear { - self.result = [[C2MGroupCreateTmpGroupRsp alloc] init]; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clone { - return [C2MGroupCreateTmpGroupRsp builderWithPrototype:result]; -} -- (C2MGroupCreateTmpGroupRsp*) defaultInstance { - return [C2MGroupCreateTmpGroupRsp defaultInstance]; -} -- (C2MGroupCreateTmpGroupRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupCreateTmpGroupRsp*) buildPartial { - C2MGroupCreateTmpGroupRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFrom:(C2MGroupCreateTmpGroupRsp*) other { - if (other == [C2MGroupCreateTmpGroupRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.hasGroupName) { - [self setGroupName:other.groupName]; - } - if (other.userIdListArray.count > 0) { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:other.userIdListArray]; - } else { - [result.userIdListArray addObjectsFromArray:other.userIdListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupCreateTmpGroupRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setResults:[input readUInt32]]; - break; - } - case 26: { - [self setGroupId:[input readString]]; - break; - } - case 34: { - [self setGroupName:[input readString]]; - break; - } - case 42: { - [self addUserIdList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupCreateTmpGroupRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 267; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (UInt32) results { - return result.results; -} -- (C2MGroupCreateTmpGroupRspBuilder*) setResults:(UInt32) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clearResults { - result.hasResults = NO; - result.results = 0; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupCreateTmpGroupRspBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (BOOL) hasGroupName { - return result.hasGroupName; -} -- (NSString*) groupName { - return result.groupName; -} -- (C2MGroupCreateTmpGroupRspBuilder*) setGroupName:(NSString*) value { - result.hasGroupName = YES; - result.groupName = value; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder*) clearGroupName { - result.hasGroupName = NO; - result.groupName = @""; - return self; -} -- (NSMutableArray *)userIdList { - return result.userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [result userIdListAtIndex:index]; -} -- (C2MGroupCreateTmpGroupRspBuilder *)addUserIdList:(NSString*)value { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc]init]; - } - [result.userIdListArray addObject:value]; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder *)setUserIdListArray:(NSArray *)array { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MGroupCreateTmpGroupRspBuilder *)clearUserIdList { - result.userIdListArray = nil; - return self; -} -@end - -@interface C2MGroupChangeMemberReq () -@property SInt32 cmdId; -@property UInt32 changeType; -@property (strong) NSString* groupId; -@property (strong) NSMutableArray * userIdListArray; -@end - -@implementation C2MGroupChangeMemberReq - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasChangeType { - return !!hasChangeType_; -} -- (void) setHasChangeType:(BOOL) value_ { - hasChangeType_ = !!value_; -} -@synthesize changeType; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -@synthesize userIdListArray; -@dynamic userIdList; -- (void) dealloc { - self.groupId = nil; - self.userIdListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 268; - self.changeType = 0; - self.groupId = @""; - } - return self; -} -static C2MGroupChangeMemberReq* defaultC2MGroupChangeMemberReqInstance = nil; -+ (void) initialize { - if (self == [C2MGroupChangeMemberReq class]) { - defaultC2MGroupChangeMemberReqInstance = [[C2MGroupChangeMemberReq alloc] init]; - } -} -+ (C2MGroupChangeMemberReq*) defaultInstance { - return defaultC2MGroupChangeMemberReqInstance; -} -- (C2MGroupChangeMemberReq*) defaultInstance { - return defaultC2MGroupChangeMemberReqInstance; -} -- (NSArray *)userIdList { - return userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [userIdListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasChangeType) { - return NO; - } - if (!self.hasGroupId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasChangeType) { - [output writeUInt32:2 value:self.changeType]; - } - if (self.hasGroupId) { - [output writeString:3 value:self.groupId]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:4 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasChangeType) { - size_ += computeUInt32Size(2, self.changeType); - } - if (self.hasGroupId) { - size_ += computeStringSize(3, self.groupId); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userIdListArray.count; - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupChangeMemberReq*) parseFromData:(NSData*) data { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromData:data] build]; -} -+ (C2MGroupChangeMemberReq*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberReq*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupChangeMemberReq*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberReq*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupChangeMemberReq*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberReq*)[[[C2MGroupChangeMemberReq builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberReqBuilder*) builder { - return [[C2MGroupChangeMemberReqBuilder alloc] init]; -} -+ (C2MGroupChangeMemberReqBuilder*) builderWithPrototype:(C2MGroupChangeMemberReq*) prototype { - return [[C2MGroupChangeMemberReq builder] mergeFrom:prototype]; -} -- (C2MGroupChangeMemberReqBuilder*) builder { - return [C2MGroupChangeMemberReq builder]; -} -- (C2MGroupChangeMemberReqBuilder*) toBuilder { - return [C2MGroupChangeMemberReq builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasChangeType) { - [output appendFormat:@"%@%@: %@\n", indent, @"changeType", [NSNumber numberWithInteger:self.changeType]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userIdList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupChangeMemberReq class]]) { - return NO; - } - C2MGroupChangeMemberReq *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasChangeType == otherMessage.hasChangeType && - (!self.hasChangeType || self.changeType == otherMessage.changeType) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - [self.userIdListArray isEqualToArray:otherMessage.userIdListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasChangeType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.changeType] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupChangeMemberReqBuilder() -@property (strong) C2MGroupChangeMemberReq* result; -@end - -@implementation C2MGroupChangeMemberReqBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupChangeMemberReq alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupChangeMemberReqBuilder*) clear { - self.result = [[C2MGroupChangeMemberReq alloc] init]; - return self; -} -- (C2MGroupChangeMemberReqBuilder*) clone { - return [C2MGroupChangeMemberReq builderWithPrototype:result]; -} -- (C2MGroupChangeMemberReq*) defaultInstance { - return [C2MGroupChangeMemberReq defaultInstance]; -} -- (C2MGroupChangeMemberReq*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupChangeMemberReq*) buildPartial { - C2MGroupChangeMemberReq* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupChangeMemberReqBuilder*) mergeFrom:(C2MGroupChangeMemberReq*) other { - if (other == [C2MGroupChangeMemberReq defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasChangeType) { - [self setChangeType:other.changeType]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.userIdListArray.count > 0) { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:other.userIdListArray]; - } else { - [result.userIdListArray addObjectsFromArray:other.userIdListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupChangeMemberReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupChangeMemberReqBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setChangeType:[input readUInt32]]; - break; - } - case 26: { - [self setGroupId:[input readString]]; - break; - } - case 34: { - [self addUserIdList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupChangeMemberReqBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupChangeMemberReqBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 268; - return self; -} -- (BOOL) hasChangeType { - return result.hasChangeType; -} -- (UInt32) changeType { - return result.changeType; -} -- (C2MGroupChangeMemberReqBuilder*) setChangeType:(UInt32) value { - result.hasChangeType = YES; - result.changeType = value; - return self; -} -- (C2MGroupChangeMemberReqBuilder*) clearChangeType { - result.hasChangeType = NO; - result.changeType = 0; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupChangeMemberReqBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupChangeMemberReqBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (NSMutableArray *)userIdList { - return result.userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [result userIdListAtIndex:index]; -} -- (C2MGroupChangeMemberReqBuilder *)addUserIdList:(NSString*)value { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc]init]; - } - [result.userIdListArray addObject:value]; - return self; -} -- (C2MGroupChangeMemberReqBuilder *)setUserIdListArray:(NSArray *)array { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MGroupChangeMemberReqBuilder *)clearUserIdList { - result.userIdListArray = nil; - return self; -} -@end - -@interface C2MGroupChangeMemberRsp () -@property SInt32 cmdId; -@property UInt32 results; -@property UInt32 changeType; -@property (strong) NSString* groupId; -@property (strong) NSMutableArray * userIdListArray; -@end - -@implementation C2MGroupChangeMemberRsp - -- (BOOL) hasCmdId { - return !!hasCmdId_; -} -- (void) setHasCmdId:(BOOL) value_ { - hasCmdId_ = !!value_; -} -@synthesize cmdId; -- (BOOL) hasResults { - return !!hasResults_; -} -- (void) setHasResults:(BOOL) value_ { - hasResults_ = !!value_; -} -@synthesize results; -- (BOOL) hasChangeType { - return !!hasChangeType_; -} -- (void) setHasChangeType:(BOOL) value_ { - hasChangeType_ = !!value_; -} -@synthesize changeType; -- (BOOL) hasGroupId { - return !!hasGroupId_; -} -- (void) setHasGroupId:(BOOL) value_ { - hasGroupId_ = !!value_; -} -@synthesize groupId; -@synthesize userIdListArray; -@dynamic userIdList; -- (void) dealloc { - self.groupId = nil; - self.userIdListArray = nil; -} -- (id) init { - if ((self = [super init])) { - self.cmdId = 269; - self.results = 0; - self.changeType = 0; - self.groupId = @""; - } - return self; -} -static C2MGroupChangeMemberRsp* defaultC2MGroupChangeMemberRspInstance = nil; -+ (void) initialize { - if (self == [C2MGroupChangeMemberRsp class]) { - defaultC2MGroupChangeMemberRspInstance = [[C2MGroupChangeMemberRsp alloc] init]; - } -} -+ (C2MGroupChangeMemberRsp*) defaultInstance { - return defaultC2MGroupChangeMemberRspInstance; -} -- (C2MGroupChangeMemberRsp*) defaultInstance { - return defaultC2MGroupChangeMemberRspInstance; -} -- (NSArray *)userIdList { - return userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [userIdListArray objectAtIndex:index]; -} -- (BOOL) isInitialized { - if (!self.hasResults) { - return NO; - } - if (!self.hasChangeType) { - return NO; - } - if (!self.hasGroupId) { - return NO; - } - return YES; -} -- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { - if (self.hasCmdId) { - [output writeInt32:1 value:self.cmdId]; - } - if (self.hasResults) { - [output writeUInt32:2 value:self.results]; - } - if (self.hasChangeType) { - [output writeUInt32:3 value:self.changeType]; - } - if (self.hasGroupId) { - [output writeString:4 value:self.groupId]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - [output writeString:5 value:element]; - }]; - [self.unknownFields writeToCodedOutputStream:output]; -} -- (SInt32) serializedSize { - __block SInt32 size_ = memoizedSerializedSize; - if (size_ != -1) { - return size_; - } - - size_ = 0; - if (self.hasCmdId) { - size_ += computeInt32Size(1, self.cmdId); - } - if (self.hasResults) { - size_ += computeUInt32Size(2, self.results); - } - if (self.hasChangeType) { - size_ += computeUInt32Size(3, self.changeType); - } - if (self.hasGroupId) { - size_ += computeStringSize(4, self.groupId); - } - { - __block SInt32 dataSize = 0; - const NSUInteger count = self.userIdListArray.count; - [self.userIdListArray enumerateObjectsUsingBlock:^(NSString *element, NSUInteger idx, BOOL *stop) { - dataSize += computeStringSizeNoTag(element); - }]; - size_ += dataSize; - size_ += (SInt32)(1 * count); - } - size_ += self.unknownFields.serializedSize; - memoizedSerializedSize = size_; - return size_; -} -+ (C2MGroupChangeMemberRsp*) parseFromData:(NSData*) data { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromData:data] build]; -} -+ (C2MGroupChangeMemberRsp*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberRsp*) parseFromInputStream:(NSInputStream*) input { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromInputStream:input] build]; -} -+ (C2MGroupChangeMemberRsp*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromCodedInputStream:input] build]; -} -+ (C2MGroupChangeMemberRsp*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - return (C2MGroupChangeMemberRsp*)[[[C2MGroupChangeMemberRsp builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; -} -+ (C2MGroupChangeMemberRspBuilder*) builder { - return [[C2MGroupChangeMemberRspBuilder alloc] init]; -} -+ (C2MGroupChangeMemberRspBuilder*) builderWithPrototype:(C2MGroupChangeMemberRsp*) prototype { - return [[C2MGroupChangeMemberRsp builder] mergeFrom:prototype]; -} -- (C2MGroupChangeMemberRspBuilder*) builder { - return [C2MGroupChangeMemberRsp builder]; -} -- (C2MGroupChangeMemberRspBuilder*) toBuilder { - return [C2MGroupChangeMemberRsp builderWithPrototype:self]; -} -- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { - if (self.hasCmdId) { - [output appendFormat:@"%@%@: %@\n", indent, @"cmdId", [NSNumber numberWithInteger:self.cmdId]]; - } - if (self.hasResults) { - [output appendFormat:@"%@%@: %@\n", indent, @"results", [NSNumber numberWithInteger:self.results]]; - } - if (self.hasChangeType) { - [output appendFormat:@"%@%@: %@\n", indent, @"changeType", [NSNumber numberWithInteger:self.changeType]]; - } - if (self.hasGroupId) { - [output appendFormat:@"%@%@: %@\n", indent, @"groupId", self.groupId]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [output appendFormat:@"%@%@: %@\n", indent, @"userIdList", obj]; - }]; - [self.unknownFields writeDescriptionTo:output withIndent:indent]; -} -- (BOOL) isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[C2MGroupChangeMemberRsp class]]) { - return NO; - } - C2MGroupChangeMemberRsp *otherMessage = other; - return - self.hasCmdId == otherMessage.hasCmdId && - (!self.hasCmdId || self.cmdId == otherMessage.cmdId) && - self.hasResults == otherMessage.hasResults && - (!self.hasResults || self.results == otherMessage.results) && - self.hasChangeType == otherMessage.hasChangeType && - (!self.hasChangeType || self.changeType == otherMessage.changeType) && - self.hasGroupId == otherMessage.hasGroupId && - (!self.hasGroupId || [self.groupId isEqual:otherMessage.groupId]) && - [self.userIdListArray isEqualToArray:otherMessage.userIdListArray] && - (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); -} -- (NSUInteger) hash { - __block NSUInteger hashCode = 7; - if (self.hasCmdId) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.cmdId] hash]; - } - if (self.hasResults) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.results] hash]; - } - if (self.hasChangeType) { - hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.changeType] hash]; - } - if (self.hasGroupId) { - hashCode = hashCode * 31 + [self.groupId hash]; - } - [self.userIdListArray enumerateObjectsUsingBlock:^(id element, NSUInteger idx, BOOL *stop) { - hashCode = hashCode * 31 + [element hash]; - }]; - hashCode = hashCode * 31 + [self.unknownFields hash]; - return hashCode; -} -@end - -@interface C2MGroupChangeMemberRspBuilder() -@property (strong) C2MGroupChangeMemberRsp* result; -@end - -@implementation C2MGroupChangeMemberRspBuilder -@synthesize result; -- (void) dealloc { - self.result = nil; -} -- (id) init { - if ((self = [super init])) { - self.result = [[C2MGroupChangeMemberRsp alloc] init]; - } - return self; -} -- (PBGeneratedMessage*) internalGetResult { - return result; -} -- (C2MGroupChangeMemberRspBuilder*) clear { - self.result = [[C2MGroupChangeMemberRsp alloc] init]; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) clone { - return [C2MGroupChangeMemberRsp builderWithPrototype:result]; -} -- (C2MGroupChangeMemberRsp*) defaultInstance { - return [C2MGroupChangeMemberRsp defaultInstance]; -} -- (C2MGroupChangeMemberRsp*) build { - [self checkInitialized]; - return [self buildPartial]; -} -- (C2MGroupChangeMemberRsp*) buildPartial { - C2MGroupChangeMemberRsp* returnMe = result; - self.result = nil; - return returnMe; -} -- (C2MGroupChangeMemberRspBuilder*) mergeFrom:(C2MGroupChangeMemberRsp*) other { - if (other == [C2MGroupChangeMemberRsp defaultInstance]) { - return self; - } - if (other.hasCmdId) { - [self setCmdId:other.cmdId]; - } - if (other.hasResults) { - [self setResults:other.results]; - } - if (other.hasChangeType) { - [self setChangeType:other.changeType]; - } - if (other.hasGroupId) { - [self setGroupId:other.groupId]; - } - if (other.userIdListArray.count > 0) { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:other.userIdListArray]; - } else { - [result.userIdListArray addObjectsFromArray:other.userIdListArray]; - } - } - [self mergeUnknownFields:other.unknownFields]; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { - return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; -} -- (C2MGroupChangeMemberRspBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { - PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; - while (YES) { - SInt32 tag = [input readTag]; - switch (tag) { - case 0: - [self setUnknownFields:[unknownFields build]]; - return self; - default: { - if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { - [self setUnknownFields:[unknownFields build]]; - return self; - } - break; - } - case 8: { - [self setCmdId:[input readInt32]]; - break; - } - case 16: { - [self setResults:[input readUInt32]]; - break; - } - case 24: { - [self setChangeType:[input readUInt32]]; - break; - } - case 34: { - [self setGroupId:[input readString]]; - break; - } - case 42: { - [self addUserIdList:[input readString]]; - break; - } - } - } -} -- (BOOL) hasCmdId { - return result.hasCmdId; -} -- (SInt32) cmdId { - return result.cmdId; -} -- (C2MGroupChangeMemberRspBuilder*) setCmdId:(SInt32) value { - result.hasCmdId = YES; - result.cmdId = value; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) clearCmdId { - result.hasCmdId = NO; - result.cmdId = 269; - return self; -} -- (BOOL) hasResults { - return result.hasResults; -} -- (UInt32) results { - return result.results; -} -- (C2MGroupChangeMemberRspBuilder*) setResults:(UInt32) value { - result.hasResults = YES; - result.results = value; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) clearResults { - result.hasResults = NO; - result.results = 0; - return self; -} -- (BOOL) hasChangeType { - return result.hasChangeType; -} -- (UInt32) changeType { - return result.changeType; -} -- (C2MGroupChangeMemberRspBuilder*) setChangeType:(UInt32) value { - result.hasChangeType = YES; - result.changeType = value; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) clearChangeType { - result.hasChangeType = NO; - result.changeType = 0; - return self; -} -- (BOOL) hasGroupId { - return result.hasGroupId; -} -- (NSString*) groupId { - return result.groupId; -} -- (C2MGroupChangeMemberRspBuilder*) setGroupId:(NSString*) value { - result.hasGroupId = YES; - result.groupId = value; - return self; -} -- (C2MGroupChangeMemberRspBuilder*) clearGroupId { - result.hasGroupId = NO; - result.groupId = @""; - return self; -} -- (NSMutableArray *)userIdList { - return result.userIdListArray; -} -- (NSString*)userIdListAtIndex:(NSUInteger)index { - return [result userIdListAtIndex:index]; -} -- (C2MGroupChangeMemberRspBuilder *)addUserIdList:(NSString*)value { - if (result.userIdListArray == nil) { - result.userIdListArray = [[NSMutableArray alloc]init]; - } - [result.userIdListArray addObject:value]; - return self; -} -- (C2MGroupChangeMemberRspBuilder *)setUserIdListArray:(NSArray *)array { - result.userIdListArray = [[NSMutableArray alloc] initWithArray:array]; - return self; -} -- (C2MGroupChangeMemberRspBuilder *)clearUserIdList { - result.userIdListArray = nil; - return self; -} -@end - - -// @@protoc_insertion_point(global_scope) diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@1x.png b/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@1x.png deleted file mode 100644 index ee0cb4c444d480edf2952804c2d2f855b4fb0683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2461 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/29px@2x.png deleted file mode 100644 index 3c926d58037dc645da328afe4dec653a52222b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4280 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 ZqJ~$6`(}&7yTAYV!8HwGmFo8Q{|8$eT_^wm diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/57px@1x.png b/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/57px@1x.png deleted file mode 100644 index 5e77ab4fdc5d8753d927e9a7dc9326ea4b7a6492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4083 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/60px@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/60px@2x.png deleted file mode 100644 index a2e1d33b35e35db443f75618a40dc0a347c458b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7450 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9f58f99..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "images" : [ - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "29px@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "29px@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "40px@2x.png", - "scale" : "2x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "57px@1x.png", - "scale" : "1x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "57px@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "60px@2x.png", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/Contents.json deleted file mode 100644 index 7a8f494..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "logo.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "logo@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo.png b/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo.png deleted file mode 100644 index 9dd16a76fa0bc2bc61e884c7ce85173862a3d33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2144 zcmaJ?dpuNm8=nnrcoi)w>D@8PCCtp33p0~ZGiF$q!E0QGP-7fSnaj=`j7wSVl8nno zSeLanY9+QL$~Cm5W!)A_QekVcmM+SzOuO%yqWAs7XV2$z&iOshdA`r{eQuv~#>34~ zOT$0|fk0?Eea7&F-@BCemd)_<&P)n^h zJ3(6nLM5E<#eq01R|-!gKy#HgXqi9^qY(((gEBFfcN~O}!C)9)NJTwwYDFRWAykwv zk%eW6?ZI&VXR#8H9qZ=Bi#^UGhoBDHA#G(8*nt3qxJa2GLMWxksHk^-DezgT#-Nbz zOrYab)O%7KmIu;aBmt2`G|`HO1qetRG8!NP1QKA0#9;wE28+i4cq;%$!ICKe5xI7u z;AoPNP>LtRVJ#LcQBmO#B&J|6(b3W9XgpdZ3Bv$nG8u!#VQ@Gr*uqL0BZRmzE1}eQ z-2(%Z@+5pQ#1{#XN{`%NQ6xk~!A#$$AP}=y9~=v%YlVVKhLLf_7yymM2n5Q!-dRf_ zPw;;!q8089dn zY|n5Y(MWV6oruL*f518kr4U!h1J~p7;kav9;y+?3_7ac_i6mYkQN;QLc!Y}}ku+Q+ zM%uH9XaLFL^7ulfM%keE`7%HWKMD+Skcb4xcNM1aH()@tApuyxh5$35ZOr~XHe`dU ztznhyH^yRMG8pA}{NK2&tKb<_9zP5}EPPlWPzdjg1YVA!`g8DNs%AJbXkN0>3qGvy z0B>Ep>6YbCT((Qg*B5RxtbZ@A=$GNPbJ_AY@WAB6}@rz&I>)6eWP%=ZQA; z37vDQdl$wXRSAiGiPMR@lFw?G@Y=NB_LVGYqoOQaT2+=u#%=1n+8Pi^2?iFIeyW<9 zyw5M=>8Ay`e)?-dB$_#i}1`(Ot9^Mv*;3>jS@L~zSli6) z11e*IS}XUfIdO8=bX|j@2IrC(T)NYu!ED}(h?M5*RrxLAFrZ`T%6G|86K2VE=Y5+K z6ajNnpJ*Y+tV16XhYv@DF+WaGT>99#3^7(QXls#EMsLy5;kwYK6Z*|F=fuyRJ#{mC zR{rcp#;ZG?fs-SFY6s^z1;vfjRK~#EAJXxkYG0k-cj|=h=CZ9CS#KE-D6FJrtmOHr zr*{bU=w6w>fPQoLrdrJW)|w#Fe6i|lt*pf_ZLr?emfC+Bxz}2R<~tTN{NR4_UQXAm z?cyE~>h-B9nrJDF-`uq~Z>t`DTi&6eAZ%xR;N51g?$@KWZLcbFtv4yopoV>WR~J@x z=6gpzdJsrXJeRe9I#Gq0ZX~au#F7_%^ns<_tWNyphQ-mPj^-4dswYp1(_MVq!>o8` z12(ZQ#J-Gwye)p%+2nA=1-%w6N2BOc!q?M7jLx zZYXK4?7rpNTy6R-_x1hcruOZf9sH~sc8AB`L+#-?7Ai>r{Yx56K^FdEeZ!IM<*tR9 zc_Th`BQ~FOL_FY}d-ch7*!S?o9nrZnCQDfyq-&%Rk=&GUZ;U&K>1Gxh} z*vvwGn<_KN9wXHb zjQ27Z+RMW1 zqIq`uC5sa0{mn3+uQqiJC=A5)fp0rgY39-i@0OcYPI3ExW?$_sOo|}}XwKaHG%p;& wm1HmbT1KYD`?X$0zf{M!9(%ar_{B$vriIr-9VaUXmH&JvrW@l5{phLx0(et;AOHXW diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/Find/openSource.imageset/logo@2x.png deleted file mode 100644 index 3ba127d8978deac7060506746daa91540078534c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3412 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 Z==#q?m}nb$gYEwuYjb-{t*LL^zX9GO=I#Ih diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/Contents.json deleted file mode 100644 index 69e488c..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "wifi.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "wifi@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/wifi.png b/TeamTalk/IOSDuoduo/Images.xcassets/Find/wifi.imageset/wifi.png deleted file mode 100644 index b8e2ec23b38ac9ca1a7879f783837cdeba0790e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2201 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage-2.launchimage/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage-2.launchimage/Contents.json deleted file mode 100644 index 0b4b945..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage-2.launchimage/Contents.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "scale" : "1x", - "orientation" : "portrait" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "orientation" : "portrait" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6d94ab9..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "filename" : "Default-1.png", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "filename" : "Default.png", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "filename" : "Default@2x-1.png", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "filename" : "Default-568h@2x-1.png", - "subtype" : "retina4", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-1.png b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-1.png deleted file mode 100644 index 667711429272824d23461ddbf83834b99d59f714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304403 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�LSbD$L?HR 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 z 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%0DAJBGgzpS;J2%ik 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png deleted file mode 100644 index e75e0243b5a80f50f941d75413d3b488e3c81b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092383 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 z 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�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

Fk2$zt>t*C zahxDZ4gr^=jHAJ9E-h<&jdK68NAg5wwgLYRZfZJ4^9uy#*;;gN4tRQec{?G*Kggve)H;$Yd2u~@Scw!KYsM!;ll?H z?tgi2aDI*zt~Z+9ZjV5QL#r{&8O3Ykm=g=8^<|Swu_jDbeI>pr%_S6=W!e*VJmtJH zA{9kQtP;g@>aALjiMkCb zHI#w_hWD)1cx(oN)w8*nBi((ljOIP$qeuVpI_+)vPTAc+sj;U zWr?aNNA?K!3sc(a%`MsxtL9uCf$O$-PvAReor$bDrXu81=AS)elN+4 zgy#Ib!6uGy9?t^ftL6koww%XQ0mD|D4hC@SZ9vs#-Djuea6CARhbR3;&~G(i3kaST z2r00<(;%KT8~waM#6Qj(crMF_kDiXnyXp3~`t24YnDG=~iw&dLw-mf`R-C|CNyM)b zSI`;6;?%QJ#FHw!Xm_bPE;mr!ni{Y0eDPa}i`ZbOFB2~hiWdXEDAmb;vUC8pHCFB# zsi88W73WMvLe8$~wa|!?`CD7kPKdp)mV&;2_pZ{vVz5yXTcGOC{K}uh3qJbMhr4?R zf9T)7`r7N?`QFd}ysTH|Heq-q_ zZ6VxjquGGz0E`rCht^Y4*?yym6UWve(v-4kF=7#YN>J{1XR}zxb$!}Bds|?W)M$wawHO-CQqSY&+1lB=`o^^vUwZNC z^=rMI&3da*X8GeM%vyZ#!TZl1KgHrMlR0ACZgw^jz@N zX0s`2B^){)L(mIlP)l>AWIr(aS$Q2QHQ}r}<))>i@EXL7Mjz^`V?` zP-}B@N`+a%klUs~iE;!niA4sX%7i%Es#uFj!}h3$E#TJ>^0qY2VNn!Sz^V3Fr+hEW zB~BZ5PR)qP*nyC6YR6ib8>QMz!l=_C`NqiR2(kVFp>SO(1etP4Y}uT;a{jK^R#ny& z)q^R?6w+#y^xj%nKCNV?{iN3o++?0kFCwo|BNt_( z-|Eg6i1YB&Qb1}(AOvd5dBQlXx6z9l4eXM^biA0yI0_s6u4lQB+<0_#U&5O5wak0P z%g~hD#WAiX135^6n+i~>6rwFr#YP$>(xPcLS{)2ZHBV==&~k=&t8e_&PxUu808IuL z7w`S>hdNF2B|>a)+ZDZxwoqh^MIxB{Dh^oCR?bExPeHdt&{m;$P#?Emc*IlJtWt|dUnC#Z@d^s`~2bp zzFak9@v6c{Mt11%P~~4c9IjmZ z);5PtOD-uQtcBJM{G`YcYU4ca9USCjGKc}uTD>karR>E4hMQ|>P0}ww8$eM$0b-ju z#V~+9fCI)hPLl;$E|#bZFT;q0RUkiG z&}TCzJd0_pjin*5##(m$rPP6%C|#-YiH?(UdWOzRDLfJK_Swe~mA@%!&*L|8lptySu-Cc;)8J7jE6U4bvPa zi;MZ>?t=$k-oO9&!GqJ2li`r`-1Vr&NIm3?^OC|iV+8kby^-hV)H%$Z)ldxwqe!I1 zgg%wVhod2Lp&Xe4;%qf2+wLTmk+ZJ%LgI;`33MfSsV*V0%ZpPN-@z=H1$Q(Tg!6;L z!UfDsr4b+|O(GBHzeeR^DME!j%myy})pX%49QSLN|EaGaP{i~<*diE0>(gR1ixkSp5^JwLI2Z}#1= z7&cVcrx&Z-P?8ZnV{b^iEm{mJloV;JQvdhojPGwBN=&^dU?B5UpVFQ#SyIDMz1?fqr!7)%{q)9VxQ?Ewl+i3x(A+X zxViL859ie>T&dnxl1GAuJlfQjXvqR#P2dQzizd^FGDG5VWHd}Slm^!HTiWiG&rq_b zlIvO6B;Nl1J~aV{IC^tDX#DD1-~P79%kcH5f9aS0(LeYHAH4ToMTc22Ez7{!Y&wO8 z6fdgO`W3!P)ivd@Bxr_p{R@BbFX6xA(dgOJC%^Ege(}fr{jdDlKmX*>qtlaP6AjEY zdO&Vh>$(tjQ7OvUY-4w=+b#Sj8d{|ZJxlo8^dJc+Hnz8{@rH9d%5`-*bP{v6gHZZ~ zjE_{#$+QCU`a&moA6Qgrz;NWu2)QH_rU87ZGGO`fo>86skMm^=Gz$F3=J44RM%5C? zxp=l2Ypwb9=GNRrh4`X;E@MZkM`A~Fz#*p-7?9+o=qG)`)cTYA-7Y-HaC|`!9EMzl zge>$2m%2F#pBKZ6b0B;?2^ay_?7(6=!)Dvw-iEgt4hB!3Jxz`tpPij|KWn!-oflqs z0e0ZZ<;z!LVEg?`moJ~5o}8VYz!!Y}`DcUSu*rM^s{;u~QW&&E0SCiuv?l0N88$LH zgdQ#>o|Ba?BGoRLm`9T#)&aQ6cRf>T3E8OZAYuXHVRe=z1CQ1$hpT97l#YQLYz~&Z z+wI{goSvTIpLOOxI3x|PPl||T<~x4F)ZXx~*=&S8->3tPY-F$%vniD)I%e8Lxu-dS zEJ+p2$;yZzZEt^%O@q@3KNTL_^HX*)r8xs2`UUO}hrPs2<~7+;3~LH^h4a~1a=-^b z3(FMv^=D6?Ax^WbI-Z{oi2geuKCm{(1&WfHM&YPK*0HF%0DgZHDPbr;--BfB!Oddx#Ec!Glo-9u#kC>ShPDzca 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

XC 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�^^io+QnZO zqC%-icJcV(W1K(X1A8{?`b2boa(5%jVzhjOATyUczc}j+1`egFH8Sm1i_K6@@}I)t zRr*yH{qi!!%MfLZ7h>44G|WR7aR06nZJ2Z!5R69(q-26`@Q3GTXGXrd(Q2iX-e+lX zDLFf9|MZiOFD}mBym^I5O~@vYblIEfOvFb>9Bwli^&0l>pids;^#{l~NZ%N7=FIf( z%U)tdrjyYp=K1|TavClpjb;Mtycibm!#f)!%k^*4X%JZ?BntDjTK(euf(tG#F7VJ` zaPWfQnyDGQvydu`CN|dB$rbsoU)6aHoscOi)2)~sfJohRadvhNYz1QCK8%Gbh370* zR<+mE%k;W^lSuK?kT+pCEL46nE`&zHCodwUaHCRF$83@K11A-odFmo7md4Eqm$%k6 zJbV7!&I1-h;@t=PAW#_|gPZfTcH7o?f5MJ^0wVs#x$|Wi05=l^(+sH#1 z9Veb#wwrF#!uf0$03?;4Az|lu|L)zv{sBYjR*?^aH@7zWFjAk@?gIMph_Bwh;ekCW z%VCz8Q7*y`C0Em06;=eVKrrS57>v|+1pJfw2iwaFze3&$?$NDRQMFRN1YVF85fc&D zC?i==fEWmeRQ4oqz*Dy$MA2n_rr-ehxG;v#cO48SKEW;sJn zZupRmuoY%@esPZ7`T_y%9**;M-s{cl*A+EaF3eDan+%C==XEs4~uh=I=WcsLL(*SGhSeo*w? ztk{xYLY1^v`b4a=S^;-Hdqz_6#3^S()pD_575r*RU#F#$r(Tx;c60`IxU^w zCL4}MttzDe_+YJJ-WRD0MjnU8^GiM5MT%dVGHKI}A69K?vxQ(*iYa9^MDa!d-jrok z>oQQduU%Zh&5hw~;lpIiqKZM_%;&j+shKr`eK;R(P%f5~(PaqcmONV}nePgPPD^B6 zirQ<#lRKP_wjKvCqAc5JIEp1?G>6f)t5K`nUM`iH+!bkOub!Nrd3^qma=GvBe$WFE zoAN7Ir&W$jX{S8gf;D1_@4y>Eq%%Gaq6H=Mn#{PVw~}*A(K_7z=%Z)g$Wn#GFV7m` z?MNH=I_ts|v}csrs?%*boeq`s6Kmm@FJHcV|Ngxp&6U_8^d@qwXb#S?Ub|J=g~S6} zt)eck8xPFmd@_jv0MqSXeELaAdrVobVO^-A%_QE+Q>v7Bw^Ztql!667C;{t*!!m!y zqnVN`6HrM)SZQY4XE>A+Et8Fb%Ed!nUjrFyOokTAiLhd~>sGl2i?*3xUr9QP4MjyL zExWVxo^K_S^W)=_I6EE*Z|m`SO^^^NnCY3h*|~bd=q}(ZhlV{MnOqndiQnA`y*R1q z-u}VfhrLdxr-kLC0VQlpNtNJ&%qpMMt4Y8H~s&MTN|b)f6<(Lp|&yDQw8qkfeq z%9=7!)i4(yYj$;*xvi}&rk{T$$>4Qx*0a;IxZ1q*kL7)Ow8_6>f4YkmHWGM1NT=P3 zM=*`T0mUfNuBvgpBNF0r@{d*Vj>_KPW7xah4rb9;7=g+1Em6c20cK%dm7w13+4Nl8 zT*U42Bt#E<)-L2Kl7lk83@i7N*ooIu_9)^y3yB~tMG)Z#J`G$_DOU}@CYid{8AvXR zCjyq5bGu}6j;CcV#u8)rFARonU0tM1T5t3?3!+bKGi_AK**Sg7fH|%P8So^Hc0)*j zv3t9nnZolL2*N7>#JM2z%TwWSxfjX3lrP3&V`D<##S+2`kSH7+9%OEAi^A0<=YRQJ zjv!-wV=B5HlsIJSQJEJ(|Mhq}3uVJ$(dI5_ooYL?V#8+w`fxL)X_LQJff)eqSxo zs4|{piqd_DAHBRH-m4(Aq*g>zqIgWXd?rPH$Hxm+sx?z3$Hzqxd2|%8Xd3pUYDUi& z%}%mWf-@MOf090ynOPp5SHndd92{PppXCb$r^7WW9jMZx%7{IE`Ye$cX?NP`n>3(= zTTf3-vrdbpGLbVF3g`1&IX$!tL6+58c_4ev$+flB*_r84EtKUg_CD;td-q17ey10X zghc8=BMLp43m#a&q6)_G%F4-8Hi-ehWT^v^d>)VV=1S3!5aK_6{3w}B z8Z4_SSjj*jsMl|s#*)p=4bszISJ=Ymq+|HkUE*LU$ebFAQ&N|ZtiFMkQpUD6H+g+? zvY>7!Sglr?t%hMoVH^!FHyDDo)>r?D#Tq_EA(d>m%F-9=QGFBvK+ND*Uwwsp)Q-IB zucbYDmTW4(`Iup})yli7IZ5Qf_V)G$z2Um5s2Q(i#z)|OFvz+y=*=9ZnYCtQlJ)2} zNXn~sl%Dv_%}t;-SKyka3j?>q%ED|!o}6q~HF1XkM?tv0$`${^ci%}dTENd}-==R^ zBfKQ>1+yMcj1Kz)a$*9>!dx=o^$`+qHS=>x;Ator%)WzAQTMo3Pj(16)}_p zqiIrACkct{r3DC<9sHYVSXJ#3t5Ty2ofNLn?U9Be#tQr4f`$@G&Ue(`npT2@p6<)$ zXtgpmIfY;1!winp7+Hn;MH?>wXI&|2dUF51&2E$4h@ii(6%Z~5|C42% zgs^A#%As8gv*l5EVIEP`*P9Jh-fj8(UUQnu%?$kK;e{Vu|6nEHnoKSy3KBuFZye3? z(z4s_Iyl&`R%$#$Z`ijEEv6PAipx z1t^VUSzBBG?6c3Ol(*>c@Te)|d=8R~i}Mt5dVF$%*hZXV$O!ffy*UdpR0BMf!4u4} zD5cn~p@3|`vA~3-vRV!J1K2^MA#xPsW1`q)`09w$e3zsa56ByBY;2K#vj$$ie1(@0 z8f=%#X0`Bha%zh8gZF1j76AC~imi}}ot>VM{n%a3we=O! z1K!l2R8rx%HrE4;IzmSvJoPg(GlpqFG@?ZZRHPL6a5|H=IUI34rPjX2sF9Om4QJA6 zo&nQ0{f=X!W0;B51o{H^?%j`sBP6VMdMe!RiZa^Bh=6g%t)k94dz^z=O?bK?7dAui}VSaIbd1b}t^+^GbM0xQ()05NDXk=w&`HL^V?6lga zCnr3ZDXKK}eb;)x0ZuZT`Rz`J2pWw$e~-npr1c7>oJwl_GFfs?U%5?mls@R8ft|Y zx!VJofoz5r+od#$+?iF+91(!0CnhnsTD>vs_Ug52v0MqoW68PsUVo6jxgrKLK|+Xc z5yGBEvsTC#u?nU@S{w_!?wtrA&I{we&0%M9ST9%ttI3FGb0gNN>de2sdxjh zxS*OALOqemuyQ|o{+zr|xU?!2-i~(%bN}$e53FM5Ye{r0B3g1$74~?MJdU+mO{Msd zq|}i4Fb+6Lkiq-+yCOH4T$q}eCN&zBvxm`zrKO2+q5src(EtX6iys}6LuE|etZuPS zr<2GHM&|(}q6Y$4^>tc`A6X`D-Pbj`nf%0k@%6NtD4C@ZH8&^RW-}STs&Vw1gjEkB zdq6#vmHh1S@$f!PM{Dqpu#JNNh}(>yjkDaB~KX1mn{S1Q;YBOfK*Bp7?OAw`>I z!eOnwU@pexqISH64S~RQ`OfK2Z&Gikj2AEPRm09DaSJ(g%Bk>M|B6Bne zJ@ciNecebTYDUj|o{`Pmtlo}1d0J9};}DH>I`nQT^A0>Ey>d@?iXikqHd3U_yQF0WET#zy+!hWB@!lK{3dk<1b#1mRiaSP^U zsz`7rC#Faa8RF+3J)cj`m&--s*0064q69o@+QZFGBQEm(ed&%TQD7~ZiVR*@3jaz) z07NJp;^7Egcy`j4kQULI@;^Sq5SxtxA$lZ#ve^gyUj8muDBh8dY^-gpZ)`X{?z>#J zcvobRvGfUk%B|>N-3rr_{uve1X$d+`&xv0#P7Ba9`uU?rldV*iO-QAZ$n+xE!Q~)i><_Qyo2k8$7O0$qoX;zWssuu1~eLG|3~&A^^c)N zGk-)8$n948-!@U7^c|#+Gm?Ba8h&u^z9^tI0wT0ycfFK{k``}G@eQ7rM@Im*w>)Q0y%8M|YAW@bTc1}{rFW$U)!;)tDKKb;M zshJt3@7>N0sDYGO+T|@)qqxx5gD%pejm^ym5AO5bCr_W?mD8UC5 zAqMs~ecS1F?h1FWU%o7sN=wU&m^vXmB_}?%oOX|}a6bCzBmRO{GK4mUR+HPAmBozk z`u|yDVM@|csY~%MqoXUUD_)NeS2eCmh=+%wa9EVenq2xeQ?J!|#fkB8*+9OyxRgHE zJ6`aMuf9&sCp{k70OO?ybwXegl5Ff?Z|@KP{%_20tx^ky1JkoJLJk)U@SJioS}B_v zI_8Ms!Z3_Rx)^0B#I*8|{Hrl|Be%@5l3KQ0PTH~)qYRg+buxA1S#35We&bK1N3q*w zITIVW{=(cmQ^iF9j(uSg7UEcL!C&TPXMh5%K2Sd61BL)|OijsrvZygd)hV%>3QDQx z=t_#h;70`^HFzpvffx=+1Pfa4Gf??Rto-c!oMmOU8I8ydOMt)gM&^r>FbH9%q@GWn zJmH$e13t;?le8Qi9beyw-Y6LeE_ZBfT-%*ntX5vxl&zUvZbOh@GH)r%*Yv=z<&&l= z9v_bLHxv`9^ibhje3-|}WwY2rSmmhsyo&b-wVzpBW=-+fliH;z)auDO@s@Un&+Es3 z&dtslGkd=yJKKiCE3ZvO4A-Rc-;sEj-eR&WJa(~A6oS@PQ&bBR@x_Hj1DeT*1j~q~ znN&LxCLOx@+g7F^E$k;VA$#;2g)5IwD$4`D0MBHep<0*XR^7N2_B8Shd>Ss=P{86b zM3=(t=08=>H`Q!4O%0GzdWcSgwAC~k{A>!(QXQM;lMIVpb7JWYIXMM)Zg1cF;`7hJ z&06YJ7G|!oQTy`z0_j~;$s)!WtoeDH7A2Z&V`h39FQ!6ovc^O*u2xn4?ilxxlHidz zkDbY8n)-()nw9SL5FuGMWP(8;wp7yl<;0ud)KCgBleUXmpDHFb>%5YmmE-aGI-RZ@ z9LJ)rzaP@@d*Ppo3dfVlrx|)ZgA}qu<5-ob!p?Z@?d=);H9f$UmM`+%PFFT+_$R{i zt!@QKTdi{a7{w=}pKQq789u9JI6WoQhPZFlqUePpk+IQ)oGUn-phhXA(n7eyg9C7P zQTOGV&G!5E?|=UJmrlF8zP^?erR0(E@zEJPNGN=AdiLtgtD_T5Wt7SatI6i>e){nz zzQvOelQ2G07-e=lt;&q85J8$KKt+4|A4pty_*SR=?)?rHOV&zeypWs&HuApZN|{h} zxVI1BlD_-#@x`UZwe|JcnOUF%ugQu9QvB_2fBoBc-(lT6$@s)%M0%_}(wNxqlO@Q$ zQ@x(LyvFuf!$Kbs42>iJh;e3t&k$5V2@Ds5EKHfbUh4Xa+meTQd{Us;((*!~U2QhY zDrClJn^FM$l(AH))4sXE(GV>#WmD~m2l@W{AO7^mKeB#ErwFcE9$$-wBWtUx{$N0} z$ulB1(=AOwi;EU1CbAoI23o&p4m`YLGi}5n#!KUd2;3y?m zl0(Z;XuVP;>G}3IzxnNNf2%rxWo*lA!{!V5xTuJietGViF+ntsp94hbYJaDj75r zS}GM}U!>O~L&5@C#R0$HZnff?c?OkykTN1wFcY>oDaDf0uAuCQ%*`##&toAxwuB$q ztCMVj=OKjfUeXZnZ~#z9F6;Fw;c9eLI2T{Od?_*G;_8=|ayn-CNld>Dw_|2a8-ii} z;WvybGniKmuI1%rq9@+|{QOKcwcH!hVGdeQHeA#Rc&D|@W1jF2GVIhd&LMaCfLK?o*V}damoGcDvqvgS2v_9Zl|lvx*Lk< z+2+Q^)2B~YmY0p-O{r8I8Hoe;`K}yGNoE`nraUS7YZ``Q*2t_#K}(fDRcYp=8YC7s z>5$>8(M@t0jX)r@wz4)eJJ;)qd$II~K5&OQFRNB}c6S(O!u-n0(pO)7X`1ItIxSL7ek~aC&SpWi9nHJ6U zfo8I=Fg2kakh{EaUrQK>H*T*FD=!ztgY!~)0-ZX+#T4&){hsu9B}Ty|JG;9%rN%Yw z*M{3gc+JT60@B!O)$$OV-Lby0$pDI@5%$YGqXfKTv~kl-Njw^cBLXlup(Sk3o<7C8 z2mn&{b#ra z!tXC4QxbB7un@yAT_0w1k74Zgd!b;M**{cLo2iM(U`Xiyg(Xpaipi)%AUTy1p|olR z1O^-t@`RHU3{}QqFuWETn@b!Zsqk-p^P8EOX;Wp2b2AL&zzEsd)^rwZ=lA=%-5w#3 zeB%Ct2Snd{+xHm!H*eoy)l<{cbMy0cIn5c)&dwP|3)U$nJ)#UsSJ&4}dbLpn1BzLhUl!(B>cZ#svhIR`kP4tS&Xm^Fgd&#eo>p`dl^;HQ zC`UHe*CK4EXBpBLAS}3X^6!sdJRhGJJ2_#6eqeQgtgq7PMynw@bbjA#GC4IVY%KtV z4GdyqBNmMlgnaVW-F-3jVjK@>9g-|pbp=)`HB1-0{ovmHM~@%J;xQ8GOj;~zE}4wW zd2`L|+|-mrDXZ)#{N$MpG-1KAnv}Z0ViH_TNOm=~Qo&}oRmv4UlhISvMLn!BoNIhi zRHp_5(KFSgM=K8oeAvh?NkdL3Xt*Z$%-eVGNPl@9L%~RbKAISe{M% zMm9opu{%T*9Ea)BGky>Z?|?Tj47euqzPz{~O?P`dM$6npWpn(=qT{B_5g*>(-d{E3Ot)#s zHjKh7U)@5m8j3^47Wb?BUVYOU#lH#vV`%A@AN*&12K=fO`>&`<10oSbC7~157cQI*U|#aqV^{1& zWrl-325GjDfIB(SiWRDIyVGH@S?#lvW6f5}YO#cM-4;tlB}{P@RN+hXP=`Yiuzd6g zUyr-g)7)%VsfA26w)W@P4IQ1S+9#zmz22tUTWBz)y+=0FXOpw$tU^e!8x4kx7b8|B zlell|>G>&$#vFnYNN`NYN2l-Jy}!-eS`{4|rpEu=dm&;O$02()ss}91Jb!0zF`!I} z2x>K!J#G}UW0<7RUF9OUj>#&RGp#$9eEQSRK6~=$k=lED)4}+KEZaV2B$9h7-SeFdkbO$ik)pnwu(~%95R| zuB}9(;ghq|>zgYgL_86<%ARLEm(3G#tMwX?U`3ihMnFHAe2!lVn`kV&u&|h%ms00K zK7XZX0RQEeR^16x%w?K8E43;U#AtwL-|xJ`;~NeT(F%1qlgYV}XcS+-Bmo}rwuc9Y zxw|69Va}v6$LYyQhF876l)ad}9YeG$-nm>NdtO*v&@k4hXjO>pyjd)L)uwd2owb_m z#Ysc(^78%r_jp3)pP9i($gSPN@_mWzk>gBEOs=hpP`ODjm`aw}z-EHzD6TZ@YG&5e=s62Z#J$<>wB zcr3=+0EIYg4yNq#>N1}dYCY4n$t>5UI-yQ_33i;Bot0iVp;VJ*D(On>n9_8yb7cUv zrc|HA9L!@7dY)IG7#n}_(TjWc?hz8CXj5tNo!Yd(Vj*q%;fEi95n!VcJ?j#lre?!z z{P4a;E6^eX+t-JW^*cRj{<*%!!OhOj0F`)1K#$AeWZW;WuB=*ZU_{V(JgHH3I#@Di zr)Pj&!|%b@xu)1&JdXc0_riFX>z$pQ@4x?^H@$!V0oUPa&3>uN>4-%o`TLiD`IppX ziV+y-afUJ^*kt2M$-j7Hd{$ig$^uG@*s4@Yf>TAWsjs@6Z4Wtw*C$dOHp`1=AAR=O zr}$p}u*#}R{^Rul7s9M6U@H-2C{_AnJcDTw!Nb%%6E-3C3<03hK+;|+qH_K)fE0@J|Io8+7_J4=l}0t{(Nzf!l6#j&h!U; zk`3Lv_O7n3W836Uj0P}sBpSndwdzndfdc-(y!KQ0WS|D^W~&2WQ6hRQP|HE)$3@sc zI5z+vpM3HOZjcaV%A1KsZKZAniE@#9+xJbOqB$OxN`<8*yB@KDJAsIRP9;}p^S(qB zu5WbV7%MUmmVl|@FbyDlU3QgoIUWGW#mJijCIBTFyz17-bK+xvty_%80d_o$>9^ss zyf`b1{{*jak*~l0W@U95bbNkxc7AcrQj$#AnicQvurVxIl-ac~9B z@-neKL|EZN<|M$>QVGHD#3YM{B$Z5MX?dy9kWn_-B;$zDGgS;F!;#fLS|c!!Y9skG zv9=~vGcK3g?DklO{Z^w{u2xIss?BDZUr4U4t$BnzT@VddCWP=j;}hdPkKgO@1%qL; zOKcfhq=Qhl&Z7?=h&DL4W^J&l|1-Qvy>7jhz7mfqaucF?A{{tkDV-lPTc7}?>-3FH z`>8F$OIIdfc)dQYwr>rFeWD%iW_M?owLL4l$AYX$Ygi0IZ8|x%xG?XuJ93$<1mJGh z|beYbqC1R04H_&EY3!|mAXkYP*U7DBNU`j*;ntGJcFF?(W6IL4rU|4I~X7@yMOj%qeDvb;%itphHQo&DID`P+m>ABP~iC=qHAi6vF|5nWKJxn9towWa{@EE+>$H zMQEBnd%dpTFQr%q2m2?-N4);>;xaH_7_tHZCJ0+KyS~RqN58y$DaYY1r*J`tta8ch zqT^}_JiM>+GmnnhP+QX~SvC;qfyZ^Sm zwWU>{d&DHG#mcZS^1@@~^UX|6fAiJX;2SW^-rhbQ@bu&~b$-$9baBnkpFd~zP4kJY zpn$hpDZStQP^${BP`z0jSS=0d_+)H_AD>*`VY5ZTv5xRsU*qQZ-_@n;aLgoU#>OQ& zx`h`rIX*hp(-w0=@7S1-ND!rN6c((m;vYP>w^EWrDoMaomf#?!RjG)e0v_KG^9k#j zlG5zf-DNyIZ)U{IdNLl(t5GWadg8+C(L34xfmOx*Z5Nj$%F z*+sJitCC5#TDrY1_Cts@XV`qes$IEQi0R5B!YyenbVXxKFcQS$b=qA+=VbPxxD@_Y z#IrM*W~UieZ*kM)9q@s~Gm z-khGCSo*`M*(n?;&+qs78Du%x)y5|lyYL>%9;ckGDs&KOZQL&b{SChlXUQf@DCG6pL#>d7%{}|-)$+2!Jx!c_~vvYNQLsasIg7}Vy zPab)^o>HZzCpgj(zP`2&9Nl@p)2P*iJh<1pmIBoZ%QG>S2rHo`OABX}oSoU)zBjKs zf{Y9c)08FmB;v|+@X0xmV4AMi8kt;{m*T@h*BA+7Gps4?vb!LVvkFLvd3dFU49rf; zXNc;;23l`QpAMJr zamUDraXKu^x!Jj))p~W4KGl-|)4Bs{0KE!lg7%eSqo&W@q<2gq(QbTP_EBTeI6+hu zJSrq7g@O>QG#a%|R~UV9ulO>S>-(LZ@4ow{*;&TwYl*@hP9r znp-e`L~Cpa%V2h8CrXL8@c05bHKi~co>fWU;<}@2HkV4u!y~{An4?4%$1G8)Zj`nw zp^0gC+Ba7>JMW|qiXjsk?n?RQT9VFCDCpDb;il%|WJorvWpjJ$$>S%iv|oOC4dAmY zgBlK;NFNG?$0x_VD*0ki4^VMoVTtd)d-u+ip)D>hnBZ+%KDe^!`N2D{tqYeuMsRT{ zeN&{uJ>^M%`t+H{>*e9QJz3j;#M6`GVZX;BytlQrker{G7{{>+QNHG#`6A{aTl9n( zZQ~m=^q;J~NI0Akz<519HHC*YJ?8vUn8GHfnSG)u3$j*~5`2Cijf8R2#6OTGE(z0Q zNnmqkBaU!ILL(&XQX5-iig695<}e(NJbn5k;P)OJ9S}=M^_Vr&62n*t_ou2R+@{mV z2Zv(o=jQ}MIW`Fe<#29Rda+m-(v){~!`Q0Mnw^vmM2wpOGi7u6VpY_-7)g^~VjIc} z7H&2h6O-e(AyZ=_(bwn4FB2&lkbEvLw65jK?Qz;+p?se5#M55s2 zgqSlrHpa*hj7iY|IxSUg^QgG@%pcwh;D4qp`5fVFM4fnw{Hhu0>c7p&{X2;48~ZOD|r0%n~4* zbU5tQTD4rOcA9MwqV~Av7w0$D*B7KXG0>>jc!i14ap~g{q2Ed@97?p($AxIfiGAYM z0a@gcA)gQePfSe`XiZNM*TD;&o}OZ;c)3v(#}QqGlhdwBA8L*etT+*}} zgKlN3&u;g5ys8&0T#wR?YPCrBZ6s7Fm+o>oGRt)OrY$`kZr%D$@bEm|_uqYgCNCmo zng!9$DVTE*Q&)U-eT_kW`st^miP6+WiWrGO>Z1OY_CaYEi$GE%kY`uw6>&QOY5K>B znNvkR2K>4b&VSh?;IXwL_qwaBPy7>;j=k|T9On(uHXpkaB@_ypeqU2b_x}C6o%ioMEva}Y2{WY>(vq0srWmD{ zuU>gw?oU4X6xT)i&NG+*j9nRdVBV#0cPEPJqoX8FtPU0($+2k)HHU-P7*?^fv#Vtv zqXxvAGAW{|v=!8a!%-w{>a~Nz1KEagI5D9~-AppY;X^$P(sTEg3V$^nPSGs3uP!Z^ z+9kdw;%2(laC&x1k|bNN-7Ys~D7o3?_2u#LG0)1N5U^9Ja|W7$n46o$cdxH+V3cN$ zk#LsF<}pD+FF5+UzkSa|q>n{wHRTWl(5PGa>6_c5lM^M;5}udUwKc}&=;X+>zA?29 zmxDP9hr-~I%}wcM<24u#IV4ur5~a<$vnk`jj0z%|9V#ZCTiC2vp~q~>l|;_MrF3+` zJMn0@hHQ+G#xq;3L*>eEuP9-%L&yZuIb~F^^refG5ty2q#I~8&tWaBbddk9jZ)=;! zBe}V~%{T~4#nQ#axz=<{s+hTu;W0tN6FC^TJs$G-|NDnO93C7@PEI`k=sC}WS(uey z5Pk+J${2_oy%YoZw>JuVd$C%hQXj6vYVZnU5E z{5-{~leT)hHKG-j_^Dtp#CrHu6gHP5&r6I*eSv0RA}dMuIW{&~Yqm0lLQPAkhE_|b z)e*k9yBs4)0)gEyo7rp*v;q19*n%4fkbrj(0fBkYm$ojJw-G313=@eFpJ;pJ&M(fD z0IzOZ+O?&)WOQ4zs(;>;(j?h45Vn?^8=UvO?QN#)Z-4#k|Nj5}_x|2~R|rrg?^#?} zAhYSz8<9YmiT<#^f1uox%)TM(HuT`!h;*&h?kFk2Me5>$e-ge=Ayg5eh@<1<{SP17 z%~m87W-zbQ*Gw_))$0-O5YWCI9$U#nNUFSAp-?g>HHqPTX2xi6?dNMVVT>qG;1GE~`1J225(Zy1Mzc6lUU>O(&8!n{M8d;g zF5czu>>9a^zK&t&l*&G<)f_1bsen~l+&kSi^8)%zr7rP5x7pj#vBcxYPiK?KUVlL1 zGqm9iiXZkrq%+x;QnEPQ5=TpwDie*Fb^ASx9J?I|gMDvwTpGFnfcuC0B6oIrW(et6 z2SiO?CzH+Mmw>k3ZH5S^MjAtQ*y=#fw6OGO^ER&PYZ;pxfg z>8WW|NW1cQT-)1QV`JktH`hmpM>opjj*=G8D_Qrx%Nw_E`ghL>O{zE*g!iJix86diJ`q_cN43I6jHffA#WJUh3|gya`c< ziRbFYVnMVnD`hQM6`E6Dz&|-YVM-GxrzRKX=li{WrBc;́~`8?<67YxnX+SXxa{2oq}jD!^Nax7KL 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 z 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%0AcD^V^M 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

4ms&5d=KS^;0M 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index e75e0243b5a80f50f941d75413d3b488e3c81b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092383 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 z 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�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

Fk2$zt>t*C zahxDZ4gr^=jHAJ9E-h<&jdK68NAg5wwgLYRZfZJ4^9uy#*;;gN4tRQec{?G*Kggve)H;$Yd2u~@Scw!KYsM!;ll?H z?tgi2aDI*zt~Z+9ZjV5QL#r{&8O3Ykm=g=8^<|Swu_jDbeI>pr%_S6=W!e*VJmtJH zA{9kQtP;g@>aALjiMkCb zHI#w_hWD)1cx(oN)w8*nBi((ljOIP$qeuVpI_+)vPTAc+sj;U zWr?aNNA?K!3sc(a%`MsxtL9uCf$O$-PvAReor$bDrXu81=AS)elN+4 zgy#Ib!6uGy9?t^ftL6koww%XQ0mD|D4hC@SZ9vs#-Djuea6CARhbR3;&~G(i3kaST z2r00<(;%KT8~waM#6Qj(crMF_kDiXnyXp3~`t24YnDG=~iw&dLw-mf`R-C|CNyM)b zSI`;6;?%QJ#FHw!Xm_bPE;mr!ni{Y0eDPa}i`ZbOFB2~hiWdXEDAmb;vUC8pHCFB# zsi88W73WMvLe8$~wa|!?`CD7kPKdp)mV&;2_pZ{vVz5yXTcGOC{K}uh3qJbMhr4?R zf9T)7`r7N?`QFd}ysTH|Heq-q_ zZ6VxjquGGz0E`rCht^Y4*?yym6UWve(v-4kF=7#YN>J{1XR}zxb$!}Bds|?W)M$wawHO-CQqSY&+1lB=`o^^vUwZNC z^=rMI&3da*X8GeM%vyZ#!TZl1KgHrMlR0ACZgw^jz@N zX0s`2B^){)L(mIlP)l>AWIr(aS$Q2QHQ}r}<))>i@EXL7Mjz^`V?` zP-}B@N`+a%klUs~iE;!niA4sX%7i%Es#uFj!}h3$E#TJ>^0qY2VNn!Sz^V3Fr+hEW zB~BZ5PR)qP*nyC6YR6ib8>QMz!l=_C`NqiR2(kVFp>SO(1etP4Y}uT;a{jK^R#ny& z)q^R?6w+#y^xj%nKCNV?{iN3o++?0kFCwo|BNt_( z-|Eg6i1YB&Qb1}(AOvd5dBQlXx6z9l4eXM^biA0yI0_s6u4lQB+<0_#U&5O5wak0P z%g~hD#WAiX135^6n+i~>6rwFr#YP$>(xPcLS{)2ZHBV==&~k=&t8e_&PxUu808IuL z7w`S>hdNF2B|>a)+ZDZxwoqh^MIxB{Dh^oCR?bExPeHdt&{m;$P#?Emc*IlJtWt|dUnC#Z@d^s`~2bp zzFak9@v6c{Mt11%P~~4c9IjmZ z);5PtOD-uQtcBJM{G`YcYU4ca9USCjGKc}uTD>karR>E4hMQ|>P0}ww8$eM$0b-ju z#V~+9fCI)hPLl;$E|#bZFT;q0RUkiG z&}TCzJd0_pjin*5##(m$rPP6%C|#-YiH?(UdWOzRDLfJK_Swe~mA@%!&*L|8lptySu-Cc;)8J7jE6U4bvPa zi;MZ>?t=$k-oO9&!GqJ2li`r`-1Vr&NIm3?^OC|iV+8kby^-hV)H%$Z)ldxwqe!I1 zgg%wVhod2Lp&Xe4;%qf2+wLTmk+ZJ%LgI;`33MfSsV*V0%ZpPN-@z=H1$Q(Tg!6;L z!UfDsr4b+|O(GBHzeeR^DME!j%myy})pX%49QSLN|EaGaP{i~<*diE0>(gR1ixkSp5^JwLI2Z}#1= z7&cVcrx&Z-P?8ZnV{b^iEm{mJloV;JQvdhojPGwBN=&^dU?B5UpVFQ#SyIDMz1?fqr!7)%{q)9VxQ?Ewl+i3x(A+X zxViL859ie>T&dnxl1GAuJlfQjXvqR#P2dQzizd^FGDG5VWHd}Slm^!HTiWiG&rq_b zlIvO6B;Nl1J~aV{IC^tDX#DD1-~P79%kcH5f9aS0(LeYHAH4ToMTc22Ez7{!Y&wO8 z6fdgO`W3!P)ivd@Bxr_p{R@BbFX6xA(dgOJC%^Ege(}fr{jdDlKmX*>qtlaP6AjEY zdO&Vh>$(tjQ7OvUY-4w=+b#Sj8d{|ZJxlo8^dJc+Hnz8{@rH9d%5`-*bP{v6gHZZ~ zjE_{#$+QCU`a&moA6Qgrz;NWu2)QH_rU87ZGGO`fo>86skMm^=Gz$F3=J44RM%5C? zxp=l2Ypwb9=GNRrh4`X;E@MZkM`A~Fz#*p-7?9+o=qG)`)cTYA-7Y-HaC|`!9EMzl zge>$2m%2F#pBKZ6b0B;?2^ay_?7(6=!)Dvw-iEgt4hB!3Jxz`tpPij|KWn!-oflqs z0e0ZZ<;z!LVEg?`moJ~5o}8VYz!!Y}`DcUSu*rM^s{;u~QW&&E0SCiuv?l0N88$LH zgdQ#>o|Ba?BGoRLm`9T#)&aQ6cRf>T3E8OZAYuXHVRe=z1CQ1$hpT97l#YQLYz~&Z z+wI{goSvTIpLOOxI3x|PPl||T<~x4F)ZXx~*=&S8->3tPY-F$%vniD)I%e8Lxu-dS zEJ+p2$;yZzZEt^%O@q@3KNTL_^HX*)r8xs2`UUO}hrPs2<~7+;3~LH^h4a~1a=-^b z3(FMv^=D6?Ax^WbI-Z{oi2geuKCm{(1&WfHM&YPK*0HF%0DgZHDPbr;--BfB!Oddx#Ec!Glo-9u#kC>ShPDzca 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

XC zYS!z7{#spixLorkT*%?&)g?57qz#R7xr7IUstz*sK{5lOZ>$wcMfjDo*%a3gXU+_@ z(`mC4@k%CZ{g4$h4;S*o(I6mg5jtRwk6l|!N8?e4)9#>4YlSX{9N=yU(ztmlQNtFDzEAT5EGc%#(l>N+u8{ zQem}P`Fswpu)Y(k#ZAMdLNozu!A?Kv4uk20E+ec}JSwJvX+i9&BI+4t@>g37R<)y% zC`V|$G8y;=nSU-#v*;j3|()xKgYu*2!}D&e$7LM-a@Ztd>kS)c{7+1$m&IS0gTHXH>6 z6}G(5Y(N0QgrnQbq}Q+vcpED#DR}keN~P1R2VBN#)R{>-oaT;sF@TMn4topBz_3l0 zqv@bEEnip0J-7=CdUw94Ga9jm-B!0@TP%$kn<^%=<#4>P88(*-{?o8Kn79MUsm1^7 zxOkoKxP5V#HvrwaFwG*-AiPEn%KL+@PVeK#pFlE6J8!k)3hU%O%nU4tg8pl!;q>J6 zz4zYJ!83@tu*r67jY_#xhLg=n;(G17AAAR@96E}yS!NU5EX2weS69a;C;j0d5DYL;c#Pf>zyxu<=(?bf7A+o@cw&sxu=jEoqN&7OzoNAD5_yhBniBnFNpCJ zi+%NLKlX2a{p+~7|5|#aaYx>G^Ua$#Z^8YVj7GR<3Cmd0->eKq8BXdz=0uYr#(A6!R06Ab%;fq}*Cbs-XydU;uU7}OzNrxlCBF~UQI z82e5U6k#`@V+Hw)*@;ZBjAv8mDQG%8Sy>9{c4<;*RR`Ta z{DadA4s}6S_XdMpi7di!198DP+AJ{^mfMrzS13Wafz3KAKrWZ3)9%$O2P12Kh{L}NDS6-wod-I?~FYhuEUiB-N4KYFkYt;rZgg!ao0`KL~n#E~~v>sWcnS;bg4Y zY$kz866_J2dfQ^QP%ub^Gu8aITlg8t{AIUCq@E9vtqFoTr+ZDN_4Ilo5@mP3$r1^2 zcv^rb6~q_;YB_tIg*%CxgHKQf(@-P=PombS4@NKH+B0iJKGL!rJd1X-4Y`EF(yG;6 zPR`D93dQAwsKEkB`^KQ#?K2(i4>aoaA+Z!-+nDWPdd;%HHCU!n>{03sn)Sx{=?S4@ zNOF?sc3a2Cg{#YRoI9j>GJ&>*II>(F4ESyIyUfWr;hWx%D?*8-VFK{1Td-Py+W#xB%_xC>f z-iLZ2v0bn(;ZO*c4~N2}Vy_nr1>gAG=b{O64ps$3zTNHmg8{DqpTWk@>N8yVL_8|g zzd5*K!cUNdd26>@u-~J>Fjp$Tak#O+54&=Bbkynelxz-R!~@TsAKoqjA$6afHKO_tL(R z+KBsC7t5aAXLm)ywouSyx0x)%#n700U5jbhgb3F_D2B~lOh&UkxrOhz zJMXk6p5}ToMc%z~$N@6n?hx9-9>``0_Fba3P5zyBZnN09J$f9p5C_rZra)1coU3WU5) zPh(o0;%*3`B#yP1FIXWnsT5+E5OHIS$B#cjj0nB==(X4SxQ)ZUC*WP*+Au8U>+BVx z7+=7H7|&t19^5>DM|*U11dXq)4A^;uR#z9iM`1qS#I3A>2kZ^L7rZoPsh_P3virra)-x9j9ddjDF;m9D8tP#3@cQhK-Z6J^~zvKKq_Gy z>3LTPB0Zoyry#QbXYz#&)+Wm0o@8^KT;x>JHfL&!#vFjEl|g zw58Wpzw(tYJ$v%>d*A!s(Q;yZ{?Y5rR;S1j()M6DlFlFlrl`$)Y(r>PyOSx4*u<(v zG|eExfaqi8gVC61N2LmI~_88%-zdzQ$7B9`|@O zg8SL;4y^e1r3rU_HMKJA4YW-c{siRm^5POvX0ye9$d;5481p5Q5HbiH6dBwIXcM?s znorX)29Bs&EUW1>A~xm^gfLjU?-uiUI+22^s~&nrb=s9jum>1`R# zgy_UAh^&H>nR)W$$%h|)s4a5j z@TxVYblEwsJsxx3H=R!76NsL3aT$(;u@BhZi_42K>6pyIxjVq6#r`wU?)TwL%$G}# z&%?^ofB{*()r9{J)evI+Y@`(B@L2BNxeFH!zAEhQ*S_|(hYuf;|GZYq=Ca3Ur5H`X)z`v+T_+q22|>61@NMK%?lpPfO-@!{~7 zM}yk-iuDVRc5iR4I+i{2sP1!2?aq;5nT`jYR;@puIAdWpZ<`F8BN{aYJj>Z+*sj9j zPfb&o!v~G$vN~}sao-VtI(^>ma9pl-Y|fZJke)3)xNQj9eSUX;+-s7~YcU$ns+DS| zOG4ryb6QiXDQb_2R>ujvD$vga_9H@a8XnwaG3z7fpUvaR1bm}-EYX&%4Aut63TEQg z?OO=+5t*Hzo4zwnC(H}CxaLV5HAkl;^1hyK1V z^2Nqtx9{GsmCKL6_YuNhR^_Ty2pBX^2##!{i8}(P0f7ND1IudD87_#@>ta<89z0mj zte;(6Kv(SV?LqHB`9iSS+T-`bqHk?%?(OapS{e5w9ELub!nzJerp3Yu2ggYmwQ{j& zCXKXXE_V>Z#x_ifYj1TWjpLAu-<9Ob3Sw}t&pThtOVT1YBifxO5{_mvtD$f}Xj&~= z+Dyda8=ITB7f+u&Vcpm6SP1tWM^T{0Q^~|?%4#POE&c~f&%P6hdZ)k=yIhK}38D+mCxa1W2#F_F5tlyQG?`PbZ^VwF0@bSq-m` zL{bYA0oysXE@gEN{wlaD}Xkdj#5gPI(91Yk)=$=Q9-dJ5tcgX?9 zI*at}8jJZdkx1_C?eFaDVh;y{VXfXk2<~v$Gnw_>-F=yi%HasMw|CgCe{rFR6xuF> zZ&_Pg!;;_z5ewR4!BgXNvRT%`bx$s{*KA1ik=i+*&qIC^39{C*Wm>52amP||*e@?E zoyX-wv|6dwn!_pQ7iSWWld^Q-5a1y;WZ^?s*U|_qSdn%*W9-!;wI>Hp$CD{sLctd2 zm~SWuYk}(wlMszW6+DXrlQOl2e}(e17=#QQ4Vev2rB@8A1;Mdays=yuFwHfELjmPn z)M6?&x=0K>L)nFU{jSw+1cLr8>t>w&gzJmNyimv?&M=!z(8y$Zuh$`STU*=RUKiFS z$Vwz<34$EAh?h#m7l$vF#C}-9eU3%romNlqxPyqf5w{^ATbLIL`0Vu)c6HG2g@Yl^ z7u9M((*o{Qu~fXcx(tRQzF<(%m2m?NHlf;<@;26k9ZrwaIhOV==qY>xY?bs7M$|mO zyIfyegQ>PVSmD;eLFh!{*jcR;03u-Rc6D)yn{2h)l>b05DF<*n=H!4` z2$s`yZ7qX~E$A%{VXxz`tQKS7h$(@cv_V24cNa@iRU;Nx3}=B0?y8pxAIq>9jcRq! zA8H#KVkRL=H!n>~7&f>X0rE*jv68d1vu}U<+ocjy*^qk##PGL%>o?zpT-~^FM_^sq z#&SiVBJ#e$aTfHn76~g`Z9Fo8tUMn0V!7*FF<(@!Dwz3lt@fR7e`hWo8SJ_zg~Oy= zE;S_aPWMsx8*pR-RqxZh1tJ@KCJmB=Ww6k9Zr#QfwOS4MbBcrq;|<}lSWWOCAPJGlO5qE!H4?@BeV+!@5iZq^2y^tZ+Q3i?al4&R=*2Pid{N6 zJ^lE5AFXe0tR#}~hwN;s2>#5^{e|yq^WOVszmNUIO~GdhY7#*L@TKu+9RJ1FF+DR2 zAZ)mM|KYFw+kfXzARPSvxQ{xW|LQ;g`!EGR`}M!HvYP&Z=?=Z#zwv8-`{4GS|Li~c zk6VIZ4;}jOjn^Rq&z?V{(@%c0MWIxN)f~@q(>cRCAIzZFNA_;028RPi?pxpb7VH+H zB6z^?OZIjk8;NqIEHJkLj^36@Nlx+@RyTaqz_Y1gHa>mv0t#e*e?Jrnudc3!Vv!O; zRY7jYw#QDZi+}`AEbQcOKlw zu`cIxHf&4xhQjsIphV zXDU}J(3!(w-|KZDx@$J;kSv=o<|fldP?!@qo1&IjvV#SWko^6}|ws zbQ2E*=cEqPOVaUL?eXKsSO(18?%pnkxJKjm-g^&rmnRhtVPS3|hKEmvIA<~%rIRc0 zbtaR6@#dq~n3}LzH727^$BbEDjUpC@(DvTF`?!tlzH7JH8VBk3csuYvIU>f;O?L;s zb$Se4U-kP4?ytRV#ZpNq^TOCuX-FZ^xrOk>u*|H!DX$LRiNnB63x^5If_2Yj>#-`q zwvI_7zGZCOa@sv@Mq$RI34igOmG+{BhzwWwOEx~6xt+0RM>r(6P-m<#%1gPjx?Xm4rTsT zO4Mw1fu(fukVe&7)i5mNh9W)=E5`~krjyXPu96{O8zGbemU zk}^S5$kQNQ53qj-ZWLwu6*C0lfD;x1hkjv{!m%!;Ijhs{93CF3r^4wj`10x1o40Sl z7l9iAnO1gENHC6r(N#E-y&~iHqeqVrk2;;6VzG3c=X{G@m@RtJzb`O;V^SNfrXlyz zIl&qaG~kT;<4&!lux#;3>g6ioQQ0f^8CZ%EpK{q}8a0=7smJRT@}bzK&0mqM|GBgSIz4>p_C<8?*jQJg88`P=>BU{~lMu6_Hx>+}57Y&fDpcO>kc8>7jrW6VeMUT4zpn#WV~Xfkb&#)BbZ zy7_XxoXj0A-`ub_;5E({ZeL=&aM#+4xye5_yp3Lex->z93#NUMh@OdffK`8QI1=Lj z^LpVx+`oShS71COt1D!TH4A}|ypWg!)}$+>?y-0bUeZ9ic&@Y8idfeYRNhLZ0`CfO z#*cpON8f(yEu2Lg=Dgo$*|Jt+I*p_e2=Qh=^5Z|T`~8TI>b2_ce)F3oAeX*KWfawB z+RS>!?V;m)eRUm8CV%ehKmUt=<*)h#sNqk3;o$zefB0YKve$^GuP-kk5ear1SbvC7 zr3a55og5uSV`1VygoxEy;e2pb2|X7tbLO4tXpHLy$Id3B@XRYn-#dg2`UkpB+uYV= z${)J~pBVm-U=;JJ!Y~kH#~?%!ww(w_<55wh2*Q~rz>&L3vhac6Oc6C&D%3-5UyVK+tVZ|ilqdVK%OglH~inqh?2~JNU z0r9BUNQ*)qa{<7?xeI*IMBs1jf?!Y7bcoi`(J{neD$s9siw!b{m0^&8DbK1Uc7EKzA$@w6~b z5Jzk))UK*^9q)l16%?^43^v3u5)OGKbx9fG*n36Ti(UFxZCZ0n+kzmW#}vXX7znsL zu2PwxVx;Qx`#oZQBr(~CP(ly$(+{KwoDekIYO}%Z zipSWlJQ4B-m;nM}Clc^%j}H$KL2d8uVABLPuO-mFF%|-)|3x~>EP4tsv5;>aozgZd zTs+)%lKA#|*i~hiP<^EH&C0{v9}J*Y7($UvD}>nh@aXXA)2B)d%u|3iiN{vg(l~FKWQ7aS^0Y@Uz zahjSovvj~^xYUS3=n^0uL zOn|4AB2mQo+4-0wNp>6-R3sUoWiUWnsJJI?PA9IdWfrqpxk`k7WuwC*!%Y#e?%4kR zUNV(}ntpL~cnV#3d_3gg#u1wskl0>-F<<`jzxAu%HybQiY~4bRpvq9?!g%IYL{(Z5 zulM%-*Z$&P{-uB8&;8`TOyDaJdz1IS_4}<_jmSy^f*~It9lrP8AHsEq0sTR3FrMPA zFMgp~EaGHwZLb*0Uh2r4B0sQCjrcAuX!cI83)!<8R#<3U6P>w-h~ggY?(Rmz;YOV( z6N-$%Rt$$jK`kKv9cdbmafHu*D+Z9}E3_=gu8`GQvB& zhrn=>eIkGb$Vm=QIL7ykDujH9-Nhk(YsR+(3uRmCj^f%%n}a z24@04*HIHK=HY>dWY?){GTbJGXC>Hyqk#oftAelX_DrYatE+2Wts;bNZISi|b^^z_ zzkdLkc>n$P1vStF&ED_!YLzOB6DIPOkcD?fzR60h8ua>PINjdsw8vtzHGo4X506a2 zwjkU}ItFEm_!VpW&Ue3?y}pLWgxzaAdj_#USjHzU7I`X&O&#z@j3OK8_A*izq;*85I$VLPU^fh(6lpoZCf7rme6SdZAT~!a*|l7U)hb<; zGCFJLf?N!{QeDnxb>RkZBvMIOR=0qT*=r8CO-hdemq=&)FD@=^cKSmQefawj4=wQu zp9Gw{%8M5-;LXAP+}YYv!b*5caAbnM077<68Vj`xBz~yl*X(!_oFMFcG|mwPhzC@; zx|#KAO(3019g-2@&$D0FUrO8-u@osq*A47#@&Vrb0XrlnCFv8 zx79W;mM)tu==WKSkcZ7d1)cJG1-rq9@LvDy_+&U9`2{sl(N*EJB9>L;ZFT>b!Y-$y z#yXd!_|n=vhxb64RLj-#vok?p2nxTOk4YAn6Q&lAL)Jx~ABVzP(b{TECeWHq&QDJ` zqT?p&y~R8m59}k0Z{`adZPT=J`e~ulo=*mg&%cuzEvL^vt^VP6;f7s!Qt+KN?Ec}> zHgE(zmIX0>myy_FVTM0$HCb#9AER zbvVE}9C&eg1+9bN0FHJd$wAv}K3Dp%2(RMC&6^Ov!^1;(mV*7l02dxJe5S--ZO@(Xg4SA4uWnaKL$e_Uzes%JG%qc&wF0>=mv?xmf(=U;SH- zKL$K9kxc&5U;ky|JLYrjF`Tm+ZMWH69#53xPl+GMULpwipZ}--F)jn{3z-J#_7M4y z`|DT!+AsahU;VY8|Ak-tfswPqkw5?SpZ^d4y?<95fOQZVic8V%6dwbgH%sGY)7JV1 z={G7>m>;bm>inbw3O^|%}%L3i(xMS%Rc(0h1;1@a7e$X-?I zRUCIbmCR*xh(S#Pks%X(4wEFDm0SmR77CV;Tr?I6hUYV4dUtzm#K(xX_xEq&77(V< z?$GR)i6o~po5PC#+t|$9zkeT==*96NZpu2-<8Wlj(8Gr9a5%F;+&YWEekq9|u3ma| zRoO_@iP7-)6<8QMkY$1tzo?tATr30rKw@`~nRx-RQrcrOzsVG$fd5Q!C5c8X5uif( z;(~Vs{}Owyglzc5R;#J-XE<)09X>?EOKnO}Ya$#H1lfhtKcCKYCQ9$Z&6_t7#A~iw zFkdscACEu!7^l9sw_|+%^@p{3v({+HlyFzmX!tD6L20u!?j9@%IZ|X7betK!7`Y83 z=jLM9JLjOWo6rk7O@)(&B*9K7X$BU}uB&8H9*F^gAo8=JK*15a^aCacC?&=sLKD`C z!-h;}vsuA->j`2$(NnRf+3d9;4w|GO#;Meb4!vP}@%&KG7Z>NaafV^TuU9MOip-wk z^4J`9_Q%V>Zok{r0bChf?!&23%4nTDfknJ|^VZhZ2DVg;FdLD>hN{(D6z=%e8J9zpzPq|b7WI|QtSyFhwvn z@Xg^OPNr;+5}Y;`P_aSp#4iq&wqoRI&s(^G;=2($uJ zoybWP-aE97hmd>xeE7NHP*4a?BKPmzgW4L6hMBbtf_u7Rrx!_Q@J?p^_CD@Wq21_A zx)ZC_a{KkY-P@VPWImlN`~h1EPGB$woo=y?Yz{d7j()S9yM&xI`~9|wJ@!7x`fxf4 z#Zr-2a<+7|`j(T6+LNPPqqhhk@K3~SE+=lZ_^hPa!3}-#2xffU;^_8 zc|nu>y}$dP77IC;VOV`EU}tZyCx8!WX%hTrzxTVJeDcYiyZ3NdKhP&LuC?2bU%Y^X z$m}KI%9Tl7ljpcE2!`;2V^=J2h7Gq&0h@3gaM5rp888KdYw0xn0^C^|2J*j!UVH5| z+-`{aguIQUr_0I2@V$HYcK7%3TljToODchMnqi+HX+V0RKnU7(c?n$+5{DjlIq2i? zG(11ykR6|%oIL;ZQ(`d8X9LE;bx7k&$}(as(0J4vbz!%QN?~!J(G;nsg=0;_Zpbq> zaCdiKi+YHqVL_Wsq7A|fd%V8UZ~%`Mkw&dv6Wu<>_4&dVKL7CHL;S9^DB7Zt7-B8> z{g9T`wKd^ucNx;0FEgJ+$cIp2-&D_Q@0i9F9wAY{YVnN_-M%oQDx(bcWMy>~B8_9h z?ioS{uCv03j^eRcNM=M&PEN4lySuyh?%&rIs^-g}oZq4l=sKPR9fi*kT5G44;k1f} zg{=xEAiqVHsx(=OxET;gEG!9uiWX$?E!x!tlRO|YgwuHQ;e%$odw#(T12iD66U(3S zlIik6K9AEcYA2YYRKmZ&iRP|z2+XZSgh?Sv<6sgYG_8SPK+zTzR$9LpKW7uQ)2-?Z zKT&=zJOHE(mjS|uuy`^VE0u?m>nZszG`=uC7NKkgd@zsKPugUBf|vmpj!KoO#jr?z zqx$&qW8ABLzZa#?%*G$M7fu;mSr?FAhHKJphKE&-VTF{#j*!iYCeSn)j$j_hzUL!g zA>>ao5>d?nlcX<|QcI>OWmUvF9soVkroAB)<*Kv>;K88|gzd52mtq5M8sb*T@42;- z+7n6^!8u#@du-=(Io=cNo0D{<*WioTBUstdbYX0$yf3k!0hB%WbpUuvbd=1d)Sd4u79J+3CWZ zdfaY;*N4JbDvn8$|JoBy$W^u)^RtD`1G9+Rc zO~&}4S(+G_)+1jA%yUZmmB-bIdH(*>F-F4qNzNrP%FtMka&I zfrz%<4)37buhuITr^{+{Ra?VyV^Z%fM{{>Lv7T7VxIFIk`pX_ps5U%^24RqpTeog) zZEQ@0EH)C3+_`lNvO}`A;Rp^I6lj%fsYXi3j6Xemadv*bn9ZYt#H1<@B08VVZGxcd z^LhdyGJ@=GZ<}EkpT%x{pJ;VF{>K0PkACN${&sR@Rb#b(l^1T) zfAJ6ge)jqb?%>hk5p3kajT=6{|NQ(6idfl%BLr6Q|qrCX^Q?>WI2m4AS195us;sxY^V1MZ~g=WMhf_UH}U|qN% z%Ku|AvEyU{#oO(8gcyUUf2C3`n^mNvl~f86i|>WEgu85oi#eXaw0D}V`Et=FJVOq0 zZZm9%H)=BAKNd8xrU1o2l_;bEU3{Nkvag&KhHZdDo96Ay=LgPpxED2x;Cs`W} zn_*8#bq4>+E}ujKkM{A$AL9yRwNtom?Y3Ex!$AT4mUf>AE-Y4vm9W3uVqGp5iu$*Z z6eC`eO^FJiX;c-gg6CszIm%(RVv*PfDD$129mVqWimx1zYz^U)5x?&4Mg*dF(y%@dTroCGX-fqwd6EynQZ)gkbqK;vNpXc(j8e^VyPVX*@i?TnSftwv)2rjy z_?&X7C}hU@N~PTI6J%Sn4xEq~4Xqs9rC4Yb=n$wmh@d*luac`$hGY*jW1m~#BgmAx6Z|EqL@-?v+*1!^+>F-@`i{PW$fePI4vH z?-7t4o;`$HCzuOGGQs$Lo`Zw^)fMIm5JD*-gwBiOr3DTw47YSD#VW`y0JaN_BuhdSdeRMpnBg;thlblaYn}cZOE) zl(Y)_cK7Z*m`#|3rXV0|45du=V4WK>Qv4-bY>ISgL5CA+yxmZM2mlPD$pa8L91+WxQRbm;= z7g#iiv=Z;+h(+%x+}@Ik6dG!?dYMdnEH-~+fB zf{tABWE4x9%Pq-SZ?jQv=)t^p$%!Efj>pWQef~fyk;1bg5l={W1=|vP-C~hrc+yck zM$C$JfG!|$n=j@=0rtWN!FPm00ZC`Qet$suv$fSxS%S)(RE#Um7w$xh(#qMREw^sd zjEJ2?XaFx!EtjX0aWauW_7(JzY`$KtM#7;xdv{>x*@09jz!#1Lpw~g%*+xEJKyInb zSJ)lw6r89M3B#4%yLS(!Kw-T}1<~*8^aR#T$9eRXcnw}m_8N>y9D=%*IZs-aj=@BlYK*Sed)I%uQjX3asWnt zA(%GPp3;#ow#^NswmDbMT71x>M~|FhhHw#1{Z6J(LZLv2udc19B@D;AWPo+x;&4%D zEQ}mjim8yZY8?Z@p&+gb@W$p_iIKHtqJB#ot=V%rnUsZl6?cn!gFF$Wf>Y5RSS62S zinv-#yai&KI$p`kQt+NY!CYuq#JATnwAtMiKs3!8^M2*Y#P9L&x270XJR`|8A$;DZgZ zkbUCX*A;Pz;5(D47D5rs^*Y^?wJJ7GaVnH9OxRGUka}{o zA^g?@0kWo~%%_uDqlP_&a@Fd!aEPz`Jg?S4~FAee?El_%-ueRClK_8a*@=kHxjfj2DmxH?H*1L4pwHfh23Em%gst{ z;Pj_@L-X0I%Y3P2y1b2U>le?SB6bK6pM;0jLd}MtVf2eHpZw^@KQ5D>c-1r=2*t2d zirU{{U5Dt2rVz{2s;vF2t*Zj3JT+Jn!$97{mNx-o*Wr%&Z0-<7AZ56D z_uY4341fN`7tfzP$90f~P6YSfX4oO3oIwhQyWe8-ZR8am#Td|5lDP~-A%f8|JIrY)=y#L&7D00j5gU>RG2SI|F zgH6yTGB{Kz&XJJ`hW+U1_1m{^SzKXb#$327n($kKyq%PzB|35iPnAAg4_p%RX6PCc zO+-K1x`YjdLLoHIW{JGSnmMxk{s1z-GZCK;clGS+=U+d4I-N}*EqFn(c&k|rq83Cv zgaMJtKXgRv%y@*CFJCfC<^ZH!5x;k~w>@4j9*1Z4lC>k&LAZZ>d<>(3-;+;iGC?~2 z{OhlwEcIH|`0&v~r^{`35Sf*aCmg}mZnuY!-D@-(m1@P#X^U_2;Ao5lpSPkUO011_B(2_T z)~J%I55Wg--RmJ{Y$nYqsP#2S?SxFx)&Lc6QLol}!oLP%q*%4sJcvk|Ksj#RNNpk3 z!xcE5JA1pE8=H6yPjE@XI1dFv?5y_r-kzKY2|N#pCxUS;b%P*=lWPcPA7GAVxMF4m<_o0`+a$ zP(~^)iCzoETO=j;L@Y!yl{h%KyS265>2@L6SU2dEGI@MMoZujsOuyT6+Bu1iL;*Q# zBA#@4T-wHh+p9P0stj8jTd6dW3d)tr*~R(u=g+Vy`*-$XlP}KUqc0S(yeLKZFd0tXqp0#2oYQ5o3PTb`-GucdTJudBt}HncpO5d#3Vky*U2{Z zZn;!O*a_26tyBy78w7|*iELIIoNcjMthNx~vpMtX;sXBJG+n`X6e=SIfF=K{BasDgo}Ak?;nFPTVB z;qY7nO68YL}k>Z;-Z=fuvZ;yo)ZRy{{0b@%*efiyYD=Fh-K$lOs}U$ZyYN)Jfz>X z634O4*{vDR*G8% z!V2yLCTl7}D||sDkbopBBSNRs97B*n zDLm|p7cZfnQy!T?pIV_XyiZEGXpuQUjGsMw{`&Q6EkMErOFbiin5I^#Vk;qXZ3%0f zE@z!#%2a(S)(Vyxu{+)cYp}huJ)O+Tr6QtbcsTrZG?`S&RYcKlVe4dVS?~e1trd0* zA6gNTd#!2dh!F7#rK+So(s2232XZ(?ypg9*pK9QRJ1O24kq$ve0->O>x3xx|m_c9g znHQIr=MY5r2CvT>j)d0MR$-JU!e=ZqFkZ+P2R+@c>+35BN>X6ig_t@*C}JK-BtxMf z{19S5VfJ+pZge(-nLar^J3M@Cu~?CfAeofTF&1^lEcUj@F4ynP8R@tXwQX*0>2aym zx`1oPh7n0a&h20w@UP~-&;kggf`P!7!6si^TngDO&(d)dZuS;B5MhjlLkKip20_Gj z`aDGWxVb4DA06fMH+q;#e$yGkVOCk;(loYG3}>WuSC^L%6FB>HHbW$R^5(iiERc@M zf_^Si$ebIu{oRQ@Rtf(S5HS+bNFHm6{H^SA8u)VZJklnaDc7nsG`k=+zvk?Vil^876R5pJdPDc zUT8WU?Dvt;HHx@2x*sb zh08rNtRwpZdubZ= zB(lgR-yoZ8Hl%i9AS!+N>c#cdbtFv0Q|K=&9r16QB>zCD2U~e`bePXyJDjfH{*V8Y z|A%g=X7lg;-M^zFPdY5C&80$6UHkJt{o&7k@*^i9+Z`^F+y5(`7~bsq;{5Z^e)^C8 z;XnB5$rF6^-Me==y)6Yv!O$BbIBwMH5US;sWf)l`Ku?}LVHrbU;IJ1EawI4xCnrPQ{BJjyrN3?adIZ&F-Lf>`d2DhzeG)lw{^=EsjX$C{E=PsqlRi}$r z>RFgV4#2s>@{sJ7W1oRsHlss{40feZJ0T>94eCSnEZkNJTHM25$5Rr$YvYnjy71s) z-9qC5>&?09$t0D^(40@nV=TL5^cH0?P&>Ny~h+i-^jvVeyb0r$}vN7l0D4 z981&@+-Z!1E5Y}}>IH+GpygSV?5H4@@(@=$r%sRG6mAObMiW^(5-DLL9y6trX#wms zo;MT@E-hz=<58nkr?*QbWF)CtE|)X{J%01{tFN9YT`|;MI4O-%rP%ARkUJ9kPi5ZF z!Fk-ag4`zV;!kzmAS9QDTf3wI!u_V6^JVmBsUpLdp)<; z!_#Q1wJ+n6YVzQ!wT7?!rVKlH+Td!|VHR50KCJ)B%G%w#2b>=mk8$PkppTotQ!D(4 zjQtsi)?4gesluK@#Mf5W^tglr;u89>>8#Bj76gcJ)z>$9r7dfBJFo~5X~IX?gk1Sd zGGndU?ccd$Hw+jf*kxfL@Mwp*oOeX`4-Q}l*;vu{7~!NOz_ zg|Q3a|J*bxo^X`I+z{!jtBd}q4}+ae#_#T~?`7k;v?m;L*rsEfZIar|`ZDQ7YcT2# zOz648F&&L93#Z|ZFKqr^e`s-7J>iJWO`r$+bYaInxZHEgY%m#3rqJUOc2Qho~;`x&=K6~={r(b^d86u}Y`lCPmTYvL!{Qdv- zzj=H7y4USs_Ypb429mNqm+NcLAgC8mL94}zx8Tus_I4rXFl0#MU>l*8*nP$Dl1*u1 z2N7VwN`C&?&yuOkFVi&r#V@?&AO8LSE+Nw_cxp(CQxJO?$IoYxSZr^15B>mJxKQ*; z2{a)FO4Wt8{Nk&x{`7}G{PN2$h5wPUrbYu;^T&@LV|fV<4~4I=u=gFZ%}m+}9U_W6 zy^6s*{5_z%QO^Qsbb;ywun^MgpQ(RqPeQkldL zBzJ_cg{6HYNf^5+lnwhE@Dn3e=XR9o6~Q*2&gFx-? zrg6+97A3`aEM}PIcs7{{zag|ua4>xq@tSR^pJ};K9|S9-M3yX%U0#&RC4~EM54e*? zyE*I+)#Ygbs!e3yG>VVM5HLlmfO%vi6$z=z+I2?nvR4i!8!I6 z0iv>WU@44$>({X7g1c9)Sv;-wk$T+TZNdV_vYE{4%5o?egkh}^$=cuvqSx1KG?6V^ zEpTrYSg3f6({eMBNSHG09i;8*>N20dipAm(7o;ge$!qPV9ee-k)hqZvD8v2x_k;@* z0oT~?XX_o?%CRj%#YzJKtF@RT|G*7Eo-)}qOfUi$b}J0}`t03a7vGO30yyPy3CC7E z90|caynXxTRwnUh^Cxk`6p6;j+at~EERAjvhE#(F z4XoG`SgopNYNrpr$~>Y!Znc@z!rdZPg0Vof`|9x3^RK^#gA`JZC94d3bOjp{zFDZ{ zG%bz@S0$_50t**Vnshu_yVn;b?;@EZ?QW+FDHJ^IWhABe{e%pR#EuwBmxpp^+7=c$ zt9Hd=5t(2i57+VWv38@hg(Q&^2ktY;P!EEy+I$T7<4!#R2d$xhljDriYr74jrV;wpkoa? zsdouw98yS#Bi4j;DYYkF-0zc(jzv%OgX() z(>t|V=HpJUQ>j>H3l|b-?EaXS?e-^?#-KAWEN0MR548sKO0y0941|MlkjR{@G7^ih z8;X-%$|d8hXTkx)c;SZAsT3@lvLQi=uo@5FeP?ND8Jj{xg86K3e;-~7ALJ4rp!KI^ zM5&o{G#0^@A>~!RGNz~3*RUs#-hYHw`htOn@BC%%qc_K|kDfonIwunG`J6`~jQeE@ zQCD8Epmm^5drCbdO|X1g@e4{fCGtObWgVD-VHwE*0YZeCkld-K zQEVAuP3Os|Mpr~hEEXYkfAG(LZ+&C){~NdR4}SmmNPY7jAL_-+mn63~YzU*h(&@T; zXAdhq7!DLN0-_E}sO>@!E%FncpY?lv6`}3zZH;@h7R|WF@5dIrJvnI$^S2`Y>adfZ ziQtJ8?_CR_6%ql}I87iRWmcOtx0HiE`us!_pu>*E*rp_2LI(w5MR5h5g-@rZ@XQl0 zNZQ(KQmCuf>e}LqR1(=Cgxqe}yfVzzXx3SJ?esJ|R3tvX-;0eSs{drvY}BDdFjg)% z(mj`SLB|ov(K0j}cBx$QFblbRr!7y7P}M#jlk!~KvS5KV1cY(prwBqm?ht>P5e<}s zzoAGNK_N11oe-(kYuI2!LRhrxd>%nI9u{xxBKjA8cl-vq4ty<^fU{4bpq5MF!V!W) z0wu3As-4%G;@0M- z@$TJy1NpnO3+g5CNP%^zlc_D@)R;G{WAF zh9i%MWeP@Z-A+Q37B>S2lS-wLnJM+RPF^DyglyyWTie?-wr;mTgZYOX;2S4m@!dPS zOQipFSikKwQJP^qdq_Gb^^mx)dOMxrnjF>ek|X`LcmuNlig*A)@&gUz!h&_bS)FXD}l+tnS5aAgisKZ5|R4%7WCanDI0IYJeh~6VzX`x`q z?y$GoEv)S~J-}0Ts^FvWXh^Sh@(03HlN(vc?(JgLm}hSg?K zv#vQMo*KI^$BOP~G$Ks(@W*5(>Gir;2R!4apM84r=I!pz&b_<$pk{G0PGa8&8XY3D z(cu=@D(E!X&_xr7*wt)`=DVG4GLpix!r55aIM#~DT!BI@+Jqc>I38)cuf*vD5yPXw zl{%zqtv&!tdhZ@+B|+Ae3A~3Aju#y*D0f2L67l3%(_xydl5muC*U>1lp;G?#= z)fuJVCry2TORulmLA#VsrAChAj@@o3Y958(W*v|UqmPGw@BK%AsrTx?_?`dUCFOm| zS?gF9<@$xpV})6~l+jGh5a2p^kXEa~uWZO%haOuhULIaX2=2uqEX8Nsuv8{S*b5lx zTrLY4P;;ri4WEMd!k$1Xv{xVci!H-7;lL2k|Ixqv7ud}^`}_ZI<>){A(?9;`qmLjY zCnqPb4iCFRERU-p_HxUBBHUgaL2D#}b)*gW&s_LN<9t5UF zpB+Y-sKVj!+S(c-6X-HVK}co!`n7qQk*rm0{XLkq`;Og8_u0uwu9? z>DHVRjAA^&Wf4H&t_TWC{CtXfR|;qr&FZWcw_CX&!vdb#tkEwRaHTMcXQ$^-)i8(q zqXJljRL9WM%xpjqF|ijgDR{lomMbI%hrb2%9`U+DKIjZ5K2b66c(+1gfpvgh z;O$769zJ~dUGu4^ykBu76|oWNobkas53GhA+k^Yo#wd7fTn_RF>D14|k_l2toJdSW zQK`ViB7#N&p=DLbv`R3n_AMKK7&vRvpku6vv$W@4r&!g3E9T`5kDb_|=O+X&DCqAY883Dy`6L9jet_dt%x;e8>Ou*>jA3OcyE zvl|wZx3aS8_xhzVd(I=q+uO+)E;gJ@r7TujmYzT;YfW!1RJi1Um#?gRS>{CTQFx}d z9L*>aY$z1eb5QYvQ&YyJ5Q0JHiF-U65Mi;!!wjDw=F8)Ed_Mnt#+*A6jx4V%BkzCu z_1AAsPIOOiL?Q0>XX2wj=5{R)? za98j$o868N#m5;^f8&vGuM2a=wz$bet6>mPPJp;Q3L1k4SG~X|a>iQDFRG0?T>jv6~m(lMvTiyEHVRHt8R+oJ?nwHDmW_{px+Cl-Z zX*GMjA(kzgjNu`B-9e|naC#Gka`(%pZ*NL%mpAC+>6$aePPYSzX2LhOx6M`)!5QLd ztR9|sEcDe_E{07E-O^A}w(0fyL(=mM!jW(?k%W+(6B}p_@4LIVclhenpZ{NfhPB!f z%-VjRZR)Uq5Q$6%IYw@Mbsc`_<*S$Fa^DyqpBOIySvJes8=9J z7KlOi*@nKiD^d$I}wZAyLS&>p;WC{g)3t+o%M&k*@A<-uw93T zhaBSgHi~PBSPxS)hlD&le*74LJ8o6m=r}Mf zL$(SRubx;38Wp!-UkXJEEDABhm4E%$fBpXb``Ut|M{jmv`m`Wz*Dio`Iuqd}(nL!) zSREJ@q&4MI2`gDD7OT|?GGauj>0AbOmZ&$vT!yP76Dn28FOLqVp&+Y!9#4S4)(b2g zR03htd}i@@e2GNdNl^GA)&*t@GOBHC(4u%e(d~BfH&-<|U~tID(@-)|0RmxR6aEQi zot)JoFS>bT?wQRsT_d`$bOv(g*#|#|FAoO&sZtnmyna_#e1kr|GaTv_!Lje2g@KuB;aWjR~M(Tro9LVf4WCC(Y z+CJjc8%Qxg0l*RH+)DX`=YM@Bb2?W5wZT0g zWA= z4CW5DAHd}HJ;Y-3ho+0x#D<{o;e-44UD;T6!|HT&haI*GMxze9=f$g+7LgXB0h5)T z1LaD0&naQkgrp*dc<|r>M5tMBI9#q^BxD+P(`JJfNaW<*zk3(r0qt%P6y1jRDtzqj z-p=(^0WlMF5PFBa6V96*q%U9oMelWaasG>+e-5EKJw21|4JW)sK7Vt1dIHft{&;+ka6yN95z1?{1pR`G!ltat+&}UMc1cX>Ya6X5>=fdUD0%-P z+Qh3cJL(#-=Pcd|!hvSPP@g~i7yl%f0*edB9XI3z#sAu@FmfX$}}Yo)NCB;I3{8Oqd{P@F?2-hgegq z%?eeKlru>D28zQ@Kg119_I!Q+``?G&;SLZXou8j_-Zw|bSt*wjG_Y|cn8FP_eDDsQ zS3w5VktpUiGFlRp%}MTS6$5J!e9+SAw4^x>xp)pXoKx?kv4R)|{A69j1LFE{FbKtQ zlX$$=Y}|4z{6TFPfdI#jyGUfqrkO@XiDaD;5idBJ#fwGRRnLUYWoiE-hzP zmsXXtRnQ8EiU0$Me-S<4$Em?EBR)o9uEuh!Nm9v|GnRGd3}g(N~I!pH%uNt7gAFg6ueXCN}*ja zJ=iL&R6G*f-QM}&(IezWM@O$O&(D#7ZfN|hExeL z3vL}25Hek_(c5X;l*i+(RElJDxJ9JnNFWf{FUKww7R;swY57Ukw{)@ExGHf>+7p4(=d?dy*)RMq(-5?0R_+gs!g zyB64&R5FQl0mfGbbJ@%D4bgO~JsD4eLbos(jS9E7aIVs}V=ScVf-j^j+uJ*hMy*&b zK`VxWr#Ku8lgUIt7}O=qWaB%zLp>fr)$D~rEb2m%E-o)jmjg?I8yk`)D2VJ9*6Z`1 zfAQI8pJOBF-y0GbUI=tUE|4Czg91NC|X@fL(r=Gn(rSC>dYA*F1+7uW~vAcq1+!?o4*mE{$< z#<_K2vi@n)xoyK?hnypbAvTDd zy&et+dh*0-cAL4r!ehnbF*07eTpJr4=El9AA%@V$eF2dQY-;WE93-QkM{4Ug3xu)6||Nq=bVkDWHl!U~a?nogT(Os(^& z+v5v_UDjD=(rv@RxP1Ya$Jg(5vGv|yWNx_1wP7f>n#dijZrod0-yBVbbIZI5`&X>+ zpvN%!f+^^d*3cObYb=U8hSf%_nZHIvKEQKv1YkHs<^(Hdvse)%C6Wo|Z2=!_WmA~o zW^;0o;4QEckVOLCItfeS_xVTT(X(gIq3m-Z-TDuH`>*R<2fWeW`P+XB%8no&pNP-J zTOh!Q{;{w~0hG-JE>Lj~*k|h`-4KEslk`)z+)@q}6RWL!a2J=CB=f0Oqf!pR8)1Kh zsLB>*yug~KMVR4z!j(B77NA>;u8Lx){mI(?%`&pjwaY^gQv#hYt{cU#;43WL-C z^gsR&(C&-#3w+NmcdvIQeC|9nm5E0+zD!BSV?=lg1EF)M#np)4d}YgN=q>68~%9-bAOMOrX{ zI$`&sR1Fzwd%dj2N>Yoh&~MlYFA*XB^$0FEe)Ib1s8X%sK^O%1ea654TmOzhD!0V? z`dTWPVD*)C7{kMpdN1zD;dJ8e-=3V{$r0l1@7>v0U4wkXY(eaxc+1NxUSR=(G{6z! zIq@;3oIq%dAbk@ajRlZlClg8S_-AjPB>0(hW^H|KI-BPU*QUc*TU|p6f*?zq-Ek3; z{w^(RuLtfMq1Kx>Z#DPDx?r^mw*`;ev%9+sYslerf-DwBqe)yCuJv?TkQ^9AA{2@X zVJ(5s7#p*f#KL1|9(6}Z0X>CHIlnk3d|DtVT~-|paA-Rg3js{-r;#8mEivBZ>ErC| z^c2>djo&uHr9vhU0|r7t#HV-=#4D>SD{cWqoJ)JK;@2aks8uQ)?~#aXD&2Yk;S|Ec z215biT7ZjMf>=v~Mjr-+?N0sx0!*j`9v|*}lYIfZh(GYu{XvhYnNd!fB1Oh(KphYE z4MXuGbYd5!rlXH$HyGT`Sh4Dg+m5e8U_50tK$e@o0cbE=@Vm`0W&fZBoHc|0( zpb`l=dcneADd2vvUmVyi6*+U^_gfc>9{I0$VvUQd+CVvp{h45MEWuPIgw%8aF~p2L z7aT=!*d5w)K#V=N+Z4hUtS4ziGbs+zEaqaYok&CBU#n~pCr1ia6{ZjoMm!nMrZc9~ z#Iq0Om>i}7fn9INncz~Tj7LLajc|cJG87_i5n&^TwA#reHi+yl#nRQ)6;Y!Fj|CSW zkUk6%$+TLlmRN-EVO0^j`Gw45iG5o^h;clgsFcd*l0^wzPMh?o#3>~7H?jwWy`O*f z*^8IY7FG^&z{$abzH@JFDQlgNkmb+Asd#2*bpZd~zx4&f-te+v_m77&n=yB~Cf3D` zb#ZGM_UEn6v|S$5E0aNQKAze=UVAKVoefEb*XieP2~p(@EtTtww-=Su%ZsPap0>Mf za`8HxsbqR@|ITPOdG-1=Vm<*EbU@3}N$Ry8Y@0$XgVo;J+zbh(F|7sxXAOj~Uq64= zWvav)&xk$hvxRVg>iJfS1B4yO$m+@}whY-RY^c}g#h$+R_(PrC``v%~kITi|8SzdR zVkO+jaTdfmPi?Gkx+L?E8DpMDu%AO57^2=xChhXLAr^?Jv0vISg+SBka>1kE<{>tl z8=Ej_0OLR$zxX&EHGw;aeOy^u`RJ4H-M{|;$;OvoehCGH7(*AJ5z_hL(a~N!6n>BF z8G@lOb4$yxd`q~2KmU^-K6&!xul(w->L?Vl&)@xL{{-PV>;pCzVqig*X1A}buI}vY z^aOuY(*};QvC8U#gky1(ZP4W;9Yx`$FrJLxd+$BCTLdl;wihp7LU(qyw(sA&Z+Dn* zPF9;i+VXf@J6*JO8BYxvgZ3$j8H^i5_wd!LXJ3B}!6pcKC`2aNm1P$8dmIryg!M0% zA@MMk*j5;1nYeT5#F1T)L~)yN+py9I5`-D4i5w661wqB@5u0k29swBwV#JoPT>@*& zqh)S=t7STnf4Skw2r^YF64=t?F`bT5xdaOdEnDAM=X_?V45ypTWC=_*7$L)PIb7LP zHWH3@dYyW!0aHfCry-P>z5281RDYCn=tf%*pI|n%)J(o=!6#voW;Gykut><)@uV;z zUwrn(o3|&>O@!;MR)^>j=`>=py7W2+0>Nx9XV^JFSPVSC7Iy0nzLvv&viyV9}}${B`Os^8c7 zydFghz5N*WPN!KQl%!2gBUsGhhVg_ps}(2*#eEv!Y<1`h6Os}l0K&0RyI0G08 z=$t6Ncyw*C1Op`RbNf8FnhdD;$D?t-H$XUE6kGzv#!$F!*TYGw09zHLTR{#^IDycV z=5?4O2qW?l4?IVTGei!drpMiKLR@H?kOL{PAi+CDw*11opsW}I(CU{n-8P~tIwGmY z3avbl+{$!=#4Q79ZjAc^I2uUy0H zBw%fQeQ$4nb$yjQB!WTe_4-no40)9E1wrGRAOo;-2F_V1-d5^WczU-qA3}KWp~%JG zynTa2p^uou!PA;rgHr+Q*owuVrO;t42!!YS{2aIH^ZB7vT1CeL;{Ly-Wn{tDYO%Vc zXo;K+o>)M+J3P9cFJKnWPEQ!*#S?>S#vmU?GSZ zLP@vB?(>?9#bh|*C{%kIO>Zr&A9Tm|uV0;>U*AfN)xEX7`Kv$pwL80a5XM0@AkxT7 z2E75K7t2B+zqz$oE!eVm9zIm;5$a(y3j1<)aS1P+$>yrn+Vkhns+F3>O5`~^@;sR+ zQ+*L2p(5gGzb~K+V2Fdmk+6ce1;e3@t?mEypZ=55%?;wVrKM%$Ua;GoE*+073kyW+ zjx=^bx@?3RowTWKoe>@I6k5P(QE264(jT(Z4R?a|Yzz3gA|Zr$+Rcuq%d1PPVTD*C zoT`*c!AN-T&R!tszq-7F4#wnbFc>xJY@LHAkj`Ewzd8Q&(@&8L z#u71IbBCbIX{+YKLKs11&RHNU72`P*3j@i7b=AAVH%bYhsQcQzMWB_dt6smaTzHUb zPAyieHo+sjzP^HvAPvBy!5|TZrdWiHl8)a2_E($#k;w#uoJ6SBDy3opE6o1T*;K)I z*>xNW;SNuwv>uS|0q6q4P-G(+>BEr5(z;T^U0q+1wG$@J>Ew(|sZ1vFP_R*NKy!6(P@la&=wg;4ei{V0)eUc7jL zXM|fbh5r#N59xx{?f3dRV21m@zT!~@E+eDBV<_)}!yvpMd{kA&rm>aqJBrrV7u-Vy z`qrUp#cRTcs>@@yY@u*_b2FdLa2=j74u?AHk(LAO9*dD7BtJTG4HdZm-~l`|sRs~{ zts<+KAwlUQGJ;#`4~AHpIjo?~fJe8<{3139VZ{fJKfp!df!IkupTXT5oGSa~@EP)i zorZBl2Du@XA7zhHzCy`AM~GbVHw8Fa*h$^031K~mTMFfaKU-a1iV94t0<)z>O7P5B zGQ@7TQm0x7=T}d%Z9iokx!zk;e&w=y8#_P5Lc4I_>kr zT*8-6rZdy!s5P3`g#wm2kxVBuX`~1UoDjtB?(X3~q)PN;vqgW%66I_@#kxQ%a48-v zVMnL4fX}Z0H`r0+VNfKZ{`UJ;%fjV!WDuGq6RaqxTRzwk;`U~@@h{nln1fl zZLvu1BdHm}|3j#RAf>11l?XE-op4=v4T60gT8CI8EJcC^m4*czjD`dvK&;(kA8%Gj zC+p4T(c$5+-zRIK*9+0HvBA{~9ndJ-%OhlXG)}k^#lq`_RYMR4d4d6uS zydEuTDVNm#-2<$WqQGx&Z|igbx7#0Z*iHP8-S4(Kp6jBttJui&5 z13`k2n6=wzwl2=ki={HeFcwX?z5YygDF!v{)>c!vu&dj(42G`DtL~ru(eqh)F-{LSQ7TaKM?e?aP5~Ajj%NrTb9sQZz z7t4$-4lK=RYK8GMUEXH9*KQ7wiAJOTdcE?KpZxUd^xU-ah>tqOp}R?cG{hRNtgSAu ztRU;e0#=9?LTUHPnJ>(?+lK90H)(gzX(ONje~EJ59lj$h+y(7w3PFT&K~y>Li~ z-taEVf};>T%VY_vI-AU3k&uL4UR*+JmY0^XADncuS|gEgtKBRVZu;H6o(-?AEa&mM zi;JIs_9=E53H{FQo+%zTA{-KVfg*<>DSv?U?e~!{?%vr&*vipLnbU&_g#qN`p2v;U z@MoWXc6Ma^PZZqMuXaFok*5J0|GH%zc<<%w(p>a7+m4VvbLN z8S^6Z@%bS!u8&t+tkwn(4}j z^El8h!tZLpkjWMYHODKftM}i1h&{r>UR+(`BaQoeyB4ec`sOBoeIr2ao!NY`yu5;( z10g)yM=cguc_`lg!2zBUb`u_&P+N8uCZ{sf2Jt$2bp#i?w1Ri8alpA;)`<>n$Yw79 zITy)S2t$@iro7U$jaxy^hkylX`@Opd(BO`s4=S1|e=7iu9SAPG|`>+Vj zW(#o};v-m9}b9BJ9AuK~)&hcREs$XE}O0=j06X%c#KB!=11wM92`H#`TANMHtuFR&7$H zlN$~Zk>HE{GKPtGz-A>Pv78xOV$nE~0M2^Or-0YH#`mU{1y5SIp7qF_?Y)+YT@VSWdJRaA0 z^vyu9^b)hM1=WJtf+>L>Qt>QSy#D0Pn@h-*+r6^990~-nQ%<`uH_Rr8gQfqeJr~|B zxLbH}q%ap3mnM0c5{hq!m%y01++JAzK#&Lj3{dO!nbulLr5=gjXFgINxDA`Jyp&tY z=AgrQey-=iz55UD-^U8TLg5S2jEo-|f(2;^*9CScnM!BV=_u!6mJpyggeFh85j~Ir z>;g9BVE+KN8#c&bD~z3HC=!`Uvy8|;8#D-?J{iMA;>ys`jjb(2&~R*(dMDy=>;!GA z2`qmQ2Ko3X|C1k`yg4eR_yoU!MYq_S?NO~c$lp{BUmc&Eyg^7X9QQ6RuV}kMBI1Ht#qDt=Qi=IueuGFEzk(fEED$q6+F_tzh1r|d8{nyYB#(-u5=lvq+0le2 zJv%#-DIg1vTzzZ@#R^nv)x69!DzZ2G6FTkvd;7kC|JC8E!^1e68%7zP{$+x5tf}guWno5eA0YraLtyGc9%28#9L^?xc=T>D0SL*bWH^-Of zL)gi%1*HK-VBOb~MqR6+5FOJR4E%;zX*@G6u;&E6M$W60_G@mVUGF{?D zOb-PpSE_3FOcUuBTPU#75Ih;kL>@B1gJ7k#H4?fbOk=C8bohL0tE+fpPvEz%^Vcvz zmf1X;$xt|_Q#fD*h4^d0=gSG+tw508l!YvTZEWmf9KvgcqtW%vO+?;(rh|h>n89TM z(owjD_YL^{M4cLsn?h^mak}6+kz=qRpUb(}<2L2VF`^K+3+vAws9tYvV||T70SmW} zoG-OT9nnT^b=m9p&aDsnTqyzqyUmIqYK%o&RoP`rpC20!A-r*{1 zYio+M1*LThr6WvAR?v=NzOHuuT;tw z>CDnI-L{bL;$HhqB9m(y8(MiL(&4wrBTkua5{f?y9v;!6($zto6l6!H_z9Ta8}y2| zw|E(L1rGpaK9fQIR;L3SxApA+95fkkgb-ty6a^alihm*fP8nXjy)C?WK_&@Yo~OdB zZ`6qZ<8~?ME3^+GNnPqZ_^r?Dh7}>@(dDH{g2jY`XRDn?lcpHqDj}a_jNK(jH*3Tc z^dNbKS$BIpBUx*~ogP$*oWg>0U0+`(uvx8IDp!$nupdWwfv{YV36oQYW<;#WmfEGSb=bt5#A3;Ga&3Jh7LPTFXFk*=o`0 zcAJ7Sp%V^R8LSTh?Rs5hzkmqAl2Rvw!S4|DaD|Z&5J4aXZpCy`MMtG_$ym%`$gXSE z+h+4BU-js)JNmQ1f;#wE|)8c9jk595P4`~FccK@V2}3Pip&rw5#~!-;vpx3CcD5*Zf$Kt z@N_5{wkw^6hUVmewvQ`B2;9hi4X7=mfBaJ07u0%B2tMzG+lB*U=}~7ll1Y-(wcDEK zAv!`-jUTbHp-31B&5-3fziBrM(mn!p@VLEK7Z=6bqVn+w4UZq*PN94SlAT3bnEe^& zPRBevc6)>lj>x`9!5`j#U|4N}xZcAK)~j`>8vIAX3IbL)sFnjYm=}n8NZCx?nJbXJ+l)X445( z?FrSc5h#(O3u9wQGhetx4uA*%i_bcuKj?4v`aBIbOf0t|pvi>X1h>=SEX*hpC8U=r9gkRa7)q@t5Yo%AC0?OU0cm8FX3wEXBW!(HIpfY zOg4+yxLjeU?|_To*xKH*S#8o*eF>w_1C05+Ua3N=-g_VU^c~?JEW!eBZfxKtNvv^t ziYsJbc zNOs%EX@ruq)9XQD5HaMhu3x`?jii=}?Xg(xwsm*jSc1*trk1HNRB!3Aj9_{&a==Cj>k0we5?VGHTk>oYlz&(AAbV%c>44y z_M(u#8BfOA4NJ=2wROI~qq2 zUk3xN%AnP4lsaRpJGQ#E`R1lIBKJ<*9gL4A^GGyUD&6$@P59JQj6=GJ*AhuGwUMsC zX3rOj;c)Qa&VD!&;Z$_F@+W`tC#^;c`;}YH^*cmgSx8y!`Z|yB5n|t{HxO~=AVrcK z=qRvO;ERDl@>T5;xHpQaBwW!CtO=zga~%KP0<3@ z*LUZpB)|EazX^{8^uMgJ&OO3qeQcT4C`}ZH*f4H`~R<4wP{No=B(KsO? zXJU(yx=G%DyR(C6bB8_iWdCWvh$)_6TL6I}IogU3%Y%z3yC0rNMg#{ip^8bu^Fq#0 zv~kZ6*R8EBA3K{muaA!ro$DcpGDRW)#j@AyHJLzlCzEcNNripZ$<%=K+@7AE($T`V zNg)%CAMy#gg%^Y)7f?(Wq!cg1ohy#Ic2l;c6A%CU0>N6P+N=m^I)^@vZ`^sC)z}tJ z7vwD+VKK+84rIkx5_h}CLPv`X7!KaFl9#}=*;4VuNOEXsy)q0c9?{0y8aXGLEiY1w zZV%6nWIE;xI9v{Lvi9M<*sVs;o(@bVYp6pyniCjYc(-fTZaEFHe{i61V=mJPNv^Pl z!6Aj|bcWCn_w)Yy?<>@$R)%%@8Q-j~5(@=x_!qx;iWh5<84d_}#hBcPB$2GkNyA~<5BzugFhf)KnXU;dmE z$IsUq~KdJ>xtJR$i2F{t_#E&mIE8cL%Z1=u@$M@`Xpw*yt-szS+J@VOKW3m z3;r8Fk_=f`gdsg}KV1QVoXe50?xprSs833#IayRJ-X0&n!CxbZ7!o#v`)$0fRJ_tm!)t(H;FwL+pT}gUoBrhPZF!Y}- z%E*=7t^mi1g1t`nrbrG>CPQKu*a#pYQiN+5P}il2({66Ifx@3HX-KVgAYI4+S_1#8?~bh?wJcP3Q};J6L=< zLmeny2izD@N@R)`4<%F|PNpf{F0ti$T?8xAQir&qjTaL|a%(dli)*tko);0)-GjUM zrD@n%FEJgZQW0J}L2A-4q!HS4eDvD7uu4h5si;Oet&Y`zO5-u5HI#&`$Z7E3fJ6&! zkIOX@TxC5yK`v4uUQHg+59AF(`_V@q!Q|Z(ZqCmykRVDOG6QX`x4LTw4}HPZ+3VNM zYVrO-?yvooj~_qS@3t!S+D$SZh1-iKQl{0YH(EreZ8wn}+7{MkbMX4;YS^EpliA61 zQ7KoEnn3DcJx4chkXj>eSh`N! zP-(jf;SArovzN;)bp(47uYh}g{OB>#uZ0K+w4he4oSmP-RzlZSS6Q-ya7SY?$RtdR zHtS9iK@P_@n-vkKOu@k|1Xq? z#~*ya(;R_qX*FAy7Z-0{AH)3=%f-S?0jtV$O{Awn*MMkD8vRH-Y8T|bn1EBtah;Fg z5;iNRs$8x>2v=(wR_lWY5Ai98zzz?O%B7NEuW~ktY~O_fj4uLcq(`{nTbWE#xJvj2 zow{KUK0?G$SWvxp@M$UUE)o?J@**J3uaTC9m!96?W5u!INw zA#x(DGhX)cC0j0vq|H`lY3YHYUu%m!B zSTUbp;}wtB3z_kFJ;)!(GTzY20S!L%5k`#XYa^BeyE0cI^hG>?Kqif4!H4ee@8h{} zDV@I6!7ZeIrBWGpsQCjYacEsPNa`#UiU>lEk6-JM2p&yGx)rWpTY&Lru>lq%!qW-=Tav4FSRAI%X5TC8rTTk#W$#nJ_j04IAp zyKd8Yoxe7nj)VREbTUQZo=n)EoKAHHf`Qd;b%alf@b{GpHtfR>KSaFDa@@rQgc#Nt zf`waWVbkkJoNg6VFuTww;)71!zJ;Y;Ute8aCz8H2-OZG(FC>S=_&7Wab_l;&7luW} zbt{(3O_>9Oz~S|fDu{(nuLfn>Pi9ys-_i)f7J0-koJbKZLR9W>nGj9kD6}TzKuh8G zSYh*e_2duYH64w49yy(tOJxM$2$vv*h<)bMxy*+f1pP^-9>4b<{32VH=B$+=(K)*~ zhtVWElK`4ypOE`vBLyPI((m;VwRk;#+$F+UQb0SM5~#Mj(pw9ql0HYnLxNAAP#28w zvaPM1Y&IiIO%a#VgRm5-fYK)jZ2+57?KT5GUL~)=7fCKTI`i)os- z#ap7B3&JX%I-AQPF21?WlUz9vgwupzBb!7Nq72Ziy(7S?)?mxBnG9Z2E|&11ro#?v z<90fw&)Gg?0i4LA@n{rs*_GLL1Z2a0Ur+R_aLF7_kHTUuvx8t+&bD9cX$8CjwnGkP zNTY^lRI$Dx-B3j#7qk_kR4g4Hy@IRIq6>*pv)OnuJ{*lhK>~;2L3CuW+4=^ylgR0Q zUp$dOs<*bb$|-icDQ77ISZf_mQpy@Q@~N=M5l($J3rE7+o13P?@%+`xh`Kgd1s69%;NOA(&=O*=849A znJha^#*1mbSZj7i*^SM3df96CcZUW15wGHbD?+6Em-$P(XSlRET(kTy54 z@l*=oBU~!-S3zuufAYyExGX|Lf&dGG??Pzl6he}meVpI*x?JuB>qaAdP%@E1I*5gV zap<(#P=r7*h!7CLBJyd3Ag^D)CbQ6FN<<;ki8vK&_437w((P@zR4I!0#ie|Hwt7+H z3?m`v&`6DM1PWV3{TsXyc1L|v+yS3S>jMtsE;4u1D z2!X;*K*R@XQ3cA4UmNlzjVT?d4c-M)Kqh-9vMo36@UdK<_|4*>wK+~%H?(Cn916(^ z4x5B*0vbpn>CxEO-dGRE;@Zd_3Weoxm(4gFD6Z9dT$#RUwMSzS#6plBJuqkrs@VDI z>Dk2v5(tS~O~L+1N29T&rQCOYSZt0!uqL2a2>B6Vg~Jice6GFS5M?L~t1F>!I-7#h zV&R6PA&hlThOZR{MZraJ5ruJ9xR16FL+fAlJOhG7bg>Rg&hSzaxhx?ZLyB5&w2@y{ z%4LCcsI%ffnOu>eZS40E84ef3>S*azIzfDJLYjFyO;fA+$nCs@U5sJTr=tn%H9{>8 z#q|4-(M_RuCStbL#)+^lXWo(VRH{|wyo83h5#GXoHrm*88RWR+`V@X4*TXN|Mtxrtba0< z#3CrfU|di+fANc7U@@^%NJ+8CxJjMjSCkLPxtNlpoBWN_>8jK^Uw!#x&?xS&Cg0u5 zq(k#T^=#0{&$|6at=;XltcGPcpH`5`PF>Mt(sX$zGix{&+Pb@g{MZ3`Yd1{C0>LVq z3~G%|uj}&pgVFS4W*`IZPZx;n{DB}I;mz9T{F#^GGkT$9=M*vzE83?Kg!RJRKI(d%=qM*%3*a)4^QF?6Tow#g3DCE>E zvX3MbnM~O}c5?C-pN?$oz4zZQSIR&7$xm=&dQ?=9Leb9FHerS4^ULe2@pOVscX`|} zDG>%gt6n;gItMEZe;2j8u6iEuNsI3+d|U&iVIW|Z&8GMsT4*G^j0`~`uYxrj(_hRKVHXZ*$XQK? zo-{jztCXpN!2T%3Edm+{J#R4(LJ(kl^uha^TRXyUTt_T`tPQMj#3)n!SD^1 zK)t@4W?2ymAR!>mWq)KdObDwc)_Czd@4RE04vrS|8Fwr9yRs|mP7o@H+*n@5N3|w# z+iP{CO84&F!)iQ#_Wb<(jHl7Wqag#c-)3(`dAi%0pfqvcbxf0L?*+ zEVWtsc-(j@m4Vxs;0l?n7Y_LL7KtWAACVRI2>zY?tTv*+$b{mIC;`a?{6w`l+)0F5$v2FE56}aY}Sm(7Rk4n;QxMu1)4X zQsSiHOTG)@umbpqb*3_;@=!cypKzWlU4gc3H=C_atJA0>+3n-9&>uvUJ&EIbVgmFG z82W&VL&@2o-(d^p{7e-| zC)bsnM=L-OMLf}Up%70d*4Ne)o`ioCtmLbTWCWd>|Bpce>j5q`mlL-vrF)x=~w98Q*7m$Hf`jr743 z`f6+t5=7dj>GbjANAJD+9z-2!t2V@)v469I5N$l36v>p{CR>0%G#m_%4iB%cF0nG{ zOvWKpIn{Cnz7Vpyx4Q?sAvp8n-JRW!KmHze6Kf0cz+OZn(IzJw8HXvN3qmO5$K`4T z0w;&^UX7dv(m_HH`~0w@rPMPIX0v2NT6RG6g zdv_zD@b%RdQ;v44Db+rnd`Y~%zP^E#)Fasco2U2ekvmJ${nC4%Syh>pmE|2ho2HvR z)4j7hyL%z5=1LIsEd&AjWD=ySH`0Bx!pxnSowj7tmLbcV^xixDB7)OwpiwMl{>?dY zBAz%W;(1IaL^L<`9CW7ofS9@p!rhv%w>I(TOoHAY@MC-6u!$1?nKDvSE8sST*CnGY zB_Wn=r2?eOfZmMO->5=}zWC(Xe2SwONQ6rggpB^k{-4h;|4MGm!eK3(oSc}*2uxzt1i%)vJ}Ce)x&}72_vqX0={jTxtsB zRFW1EzGKFPr#c#a_~>Cizj9l=<)*XA)a&*z6a;eH4={}YqYWPDiGWryOP%0IOCZDe zlgY%oSR2Z$$&>R5ybWJ5Q7I{X3i?f$N7}Dl4ojm;r7~dA_Th;XrlVC=sR=AxCF6!x zp(f1#s)EHUSY9UtJ03R^M1TiHNu^$~_)bjp-1@nd87UxWJ`%(uU@?r!i``s zy&z(Rq=G!vR0)ORv6zu+;0N~i_EK?CbLq4@*bhjxo2wg-D&7b!NKg2?ha)MrjK{R1BAFtR1B(4V>A&uE``5C2et3R*L7puY^Ikts z>6kn3-MzP?g)KMNA|lb(PFCKZsJ6Mak&sp*htuuqX%m&XUE4!9fXoZ9AfG;c$_yPH z9f1>n6)R;-F(y91FiFNE%0(lviPlL@FrbQ1O?^IEH!-Q-e)HS)^#Ul8@iZ-ABfeJE zt$?}-=~}+My#bwlc>lh5TkQAbjDd8In>M7G#G6Pa<|-Zl;%33gKHk`9I6Qu9$<7#8K|ZrBYbNYXGIkE|dF zc<6R{Y%lj(Pq}3A=&`d+ichhjjf|-SaVb?ZbX0Y7g5b^VOxFcFvC}5jp0N6bLzBS> z90LGKMB}*5Zm*AdSnc?3KlcJ`#`qdgdYekss~Ri>Df3g0sE zD7z8Q_Tt6YxJ!PoXsPFDFHeP`X^G`T_VelVL`Z4fF3E((qbEab zW5SDm4N<>lA$$hcV1kSSs1vD$#f;xEagIkm*C-U2uB{ddYg-VPmhbxm| zu_eZRfa*MonKYS-!{X~38{q5LuYWl{I<^^6g>T_D!qZ7wmk9un>x)jirUcS@o=h#I)Ad>n z1OULz>X9~U9CQXiJw7}-J3V7ft}F{8XDyD0!vwf89`|`zQ_?~yHD3y~F~x0Ff|4B| zzwgU0pOgA)ayBH-Bd?NGeRX9lP9gy8_xH5xNw&MZULNvS{vQ($037fQIqOMhFkLRi zxb5!j#B}+KvRt>PeCCx#t&SxVnfCA8!3Kr+Atn6;yz)Rd8w6Ii+qSzF3WkJ(Y#=Jg zT0R|eJDngK^5%wi3<}}sU^r1GH6_rMe28eB5=&1QJ{Ad|(bx{i7zdBr%cqDDZb8bs+?`PsS)DdtR2m|1wx3Z_4(6nZD{J4Z z``*2K#2VQiSISbU+R>9>Q)iLwcO@EgIvmTnW#A?c$pusC)XHiBH>K^09xKvhval{* zPLlh00vL95ba?vd6feXxyTAVG>D86sGE32X9&aKRH7SjS6V;@wKwA69)~qrYb)5`vWfi=B5m^4LFF^)#_s$($EmMyB9gjy` zgjp2A4J9ryti<(A!G?#tl@~Z-Bp*I}#Q#~V8dk#u70igIGCEdU3Cy}umo>wYC;-VM zjD|x-d@`R;d1{bmK$+MK37S5ve z=7yp>O@c8rQaY(Zs#XmQ=Cq5B)$Vk;?%cUUqJTpaTE@ji&@`q$nNLH~&NS3oyJ0X8 z0uBn@fzL;d%xIsVU(DwYoP#u;rA5J%Z;?hAxsvG6#S>sdi~vVql>#%N=N0uKX8Pt@ zYQZA0$an;Z!%(Zo#~;7{{(Dx7l!3TheO*Yri_!o{_r*-%o9$)Ibn{#pwo7F_djrJS z`nPQ&(ZeVm0v$FW$!GrbnHR}gZ_Kcbif8R7x{_uxC5Sv|p zC(iXK`6U^#RV12=v;%J@lqE#;^(f=Cb<|+J8b0?Wx@)~29}tyLkEh$0UNxKuFU2P} zH#V14ZQJh^6l?obvJ_J(W%h6L*w**8tAdpp@aEiwkrx=JYR%C^a&>hj9SaXSt@)(8 zk_{IYlaWBg<8u1E03|QW(BpT7W8t75q#H}eSxt^o`R3sG^!3||MsMPeuv%led?B@z z^ZG&_U)G=#Nky(Ou^*pi> z3du`t3ESEo?A)pp8&b(kQl29e$yUe3#dJPf-&iMZORBA#x3<3mQo)al9O2uymH^n2 zDd-<=2Zra94<9^u{OIx8>KY+|C28Ucl7e@-gec30Og_tseYz^tBRUy6ZmX+nL`MP) zPhw0je4a3y$|UdX-%%##sh-qIH!$D*`0*o`Qr5q*$)8~M{FChND%%W~efI1bVaB8^ z7!&OXT`=NUZn3w&?+Z#o$)pVXqKK1>C-B%9GmepmWQg<2`G5F_e<&1ISg_|87sk0{ z+MVR@P8OO>8D3e?Cp3%NtlH?vC)vKTH6cyOoEt5t`t^SWjCG{-oCp&)p0HlG1gu!eVU-!bl3&zsk;&rVOt%$D;xoMI*^ zg=t>D&w^+m6efIJUdq;-5b3tSBBB{S8I8;358&u^wah2jhs5G@XOyf=<))DF3Jf;T20SQ$q z7RQ$R<8eBdUf#SrawXoLR8DR?BTu612oF8M{?vbd+rKEzTccoi7PxJX&a1QDG(Yt$ zo?O-59$fXOiAZXrHx9r3Q2g=L`N2uO*>|OuHfApW+xH(1Kc3VZt%b#rf03Savu>8!R zY1^S&M}7#j?GAdXZaeg;sJql3xZFIsNJNB;-)5>xKAy0y*^9GtEX1vO4A!-|xy2hz zWX(3r+6n){E+XX!Q!vNNmoH1@lJu==D-O}|ROA=uBquD8PoF;Vua-WVtOCnQC=C66 zIf^3QD~7`qc`pJXZ^|r_--A~~I6)V$9FWgu#*Z6`MsTnyvgtRTVPQOFVgyc1uzxZ{ zDc;6I4F_(m!eJF39UX&&q}VXC5RJyu5oK$+mFrX@3xk(Sk0VSG%3 z&X}~hFSGB`wrT$G%Ic6CZ6$EFjdatVGU88c$xeSTBpw(`h=wB|s)_1F0%T{7Ilor~ zCR1iY0GhTYHKul~V-w%V8!ZV}iO+aZO#F?>Vvvarm2h}SVcV~v}+4psgrzr0Ma`*{3`2bTSzM*aIAf5dp0)77=LSU3#e;FV>l zm$F*q6}nMrTA=XPUw{4Wx8Jyb^YxdJSR$$nO$Om53D9ED(=$vLuv83A`4=}+yN>aff7{Q^LN>&d49x$a0{p~Gj2N`XvR4lcc?SP-O40CK3Z_BMlYiTJrvg=nQ2JiP(*>tF}348p#lhp}Mdl&ZH-5VK&W8?`E*$0J~-!qljIjV47YZK?O~17@w!5R`X#d}LfA zBPCRO^7xAvFJ3T@Bs8opJK3`G3hTpWY^@Y|q9U3BJzp0Ai9#V147Zy?Scd1pfpY!5 zz5OK-8d~i4213!-s2igecA$+7^I$l{Gyy6b7U_GpQoV z!a$*|K`dI?d-VHDx3|;Tj3i@YeVw8B_kaKQv-5MKZx!VzHNu|q0Du(8S;=GYCI;_} zIzabe82_mCs)=Bta4@w)kq}n;`t@s~(beVEU_8oYvnEPviy7C`);te0Hu!H6a+082 z$?hxn;`cxN@PlQ;j0qPMwTy*@RcUWnXv^NuU|})m^2V;oeumwF!*|=9{q*+i{imD8 zz)@)pr>=l6oESM{)w<`qS4Y1b-h4RiUsPSWwdW5W{k~Km{QF;izPRlVr{Qva{Qaws z|NiH<$7eN%HxY~^JA;0)ax46uLZOO77xp)7vLd1qZT^*uGm^U9=Z$bnA<}Z5pUbuiR;n0xU|dDuA@0sK z!K2d1q>T?Bk3S0aipRsl3srbTS{S&v?0XM{GlVr#u2%Ww<42FaeE#Le>Z;g}6yrFJ zMDzUOoVO6ll;MyoxIFG#-S0_i?Vj*6SISC|KuS~csNNyQeQPqE68hzj$KcM#Up#g= zX2NXcoQn)yZW#rvF81U_lE~ZO6NL|5HlcIa@oLw zGe~vT)>awG3+4XoblY}va7cu1i>^!r%|6+QSf@@JPGq4Gu6Lr@j} zFt*~&O<#8o2rJplg8P5_U;h^Yq{R}Exg|}F-RW!+mMvmOy;iq_Kn#m7__P>?QMkB} zO-=(BNi`$e5f#E~heMRGl#0Rjb$JsLbYuN{eO~ERmXMtih%G`f4cUtEdd6A^n@p0{ z$MCH}4yQV@SQP;{pIhd>op#qYRIPjZSJg1v=(fX4-K{;hoi6S^n@yfQ`|`nqhixV3 z!09xajfI8u{+&B(Ya1l)wrIg4J3HG1U70qOG&nmsyEvD&QIfXB%u=OXdHu_)YNZy9 zMORnzm>OvDi^pH|2K}FZ{)y#hNA8VwOC5brR-oXi+5X<0-K}lMO!n&@KlvgYj$jX7 z-Mc?KKl^lY(iM`j&RE6Qq^4Ra^lT%SNauD5w3q!2smul1Geilz7$2}=hio=yhoH8J zBqM7ymhogVMs zzvo@7w5`=_vB(#cQb$KqnaQrr-J!qz z_~!rn>#LvM6t9cDd?EkMH{ZsSk!qthn$2sC7QVC7pVjM~Mzibk_?n$|qb1@Q55IU6 z3Wg33kKVj~NBUhTtfn(5Rzy?liN=$$w39`nWCE#8u{`+Ytf0#Ah)N{vFq_9FD)2}WHMM$HnMcP~!614bZNgSZ%8N#$cghH1vc8FA z5-cc(Be%EsR$LZW;AfTkY!pkvsW+cHFt)S?Z>*Frn$jXyV|FW|lut&8 zrl&JY{MYF`-F^M#ewsmV?`#0Q$90RJ~rw{ip?l_ZY@j=7dr*I*Fv)YI}w;)!!M z=e6Sc%#0Fv1^0-*CRo|FFhSJk_g&vytD5B4${Vr&L0?em`(iDMn|$zD6Fk-fcS>vk?j4( z;(#xv0hb!n4m_Yhr`f!|xKtn`*u;oPWU_reBU-bA6D-nJ{!qDyxwSQMN)M>p#Ztug zRV&qDUsP3s{=jrH>G!%ks^Z_|YC-m7F4UBbZGSARvo5EQdrXydMgT-Ex2#Q{d&2Fd zIRR_ftz_}Pa@hoff$WmxK+N2;Cr_D=vQW^4;_0LuW;Nxg`;fSIbkuB1jxLR-@i=K8 z(@Y-57a0{ID>lmW2=BiyK)l)5*bD?htE+1SA&inyGWaHJ$(k96@KGWm{Z8|FEEb(> z$+t29L`O2~J|#>@Sp$GjnTI9G1Mq@pfn)g<>B-|s$XtkF_(Ud@F(faseP*Y&87Rk` z7!bBDyXao;uR&V4Do;-nvDg=1JjFZArn5RrUCLWRp+Jb}dvttseSO0Uv86Z^eq9H6 zMRq<@DSyCk#a3QD6kOIkvaB74Q!NYWK-w#>=eV>-rnJng=S>R@CtU3Dg&=)VQC4MEfrpa0T4}eY3|+q z>Z=!@4;?yfj64twtgWr*R#wL2o}*pLCu1U54CM0pIumCqx0%jwPdtfOdUbJmr`Vhv zUes<|vy1BZ{aN=@Z9EL5#(`9K=Hm15%p#UrY__YNQFAaEyZ!E9eC`Q#$1@g;$FG~e z(MU3t>2y2q4?ci!qy%z23P)oa+va2vtcX^l!MqQ8eL1VERxlxww$WsSd&Tva%B7)@ ze+jy0d0$>#0{j_9{3c5bZ(xhv@Aaj0mjYvuZP@+2u{H9dInHGz;EMB*gAGxrK zL;|bZ*x2B8Md|tUR5i1g9zK3V%)k<^i#J!QV0|t^0xj^CiTdGoS)@$8oS5*M>bNuN z%DJ5`pE1)rcRQ51Ne))6K}Cw2dOh1yO{jL3bqZm}!d$K5@F3@8OjM!pKfpwn?m~$g zbg!@bg+dgJg`4FQ`S9<2i#28FnP=d=e412AscBn!Oc*y{0Z4^>`lp|NV%6c3weMWS zd8|(fFro5gzOm4$#$4K(Nc`a8!Bxso+qOakCExyhYGZ!<&LQw=e|ELmDI% z+VFDO`V6J3r(R=q+XpPQ!2RNi3G2Lw?VT*=g;M+F%U5JPi;D}XwCo%Ju0nyZG5_%O z-~H})j1^Ao)vI5mBcsz*j_9b{?G)+~?Z4%DaO~VyDr&uM?W)NsU8U11fw&a2Y-zf5 zVTi6T>$ z0e;izaFS38C{zhE>{1ByheDi5HW1d61`(fcG$P>`qsV;!diam!-P~T2J1S|rgEcR- zR&KXP#FdvGKYqfDP9`(I-$yu~Ip&R4^V6qKXTqGhmX@;D(kJRC^a_QZsPt5V_}gVs$z~m{q*wW(+M^thsv`V#+^*2P$Lf{PM!{kjvQyrq!sk7_d5%++bDww?F*}2f@#Jyxn>G<_%Bs@ZrN% zCAhaeE@spEmxkKRW<_T%;cr^UKFg)j$B)u$^pC&$$AA5of5BzHd-qPIpWGAKS`;B+ zQj_2R{`Wiv;w0ZmzB|q-X+E8665~sGRR&GZA%a{k~L$$&rdbu(rPb z^>2Rzq9ZeAnnb}S;0L=pM}z&sLMEMR^+%0%ztU_?UEXj1>0kfhcmLY#3@FCH)ysy>CDoDhmSLh zS+@#Pb~-IlA{bAy+2!rsU5`(8`xEhGG!k2s;;bA_&aDE~$wV>`412vEevBt#!V%aM zRfFMZj19|rtVlEcU^HBi)P50f%e=5)Uwr*yeQmv|g(~)EwXnLiO#&f)4gUcAsyFIj zuiyXk?-^37<-wb?WH4hXRM8sy!=s~~Zrn+|&aJ4)3Zc!(NjNMDkGG`~*C96o(eCf< zW3KgDwcqL4cJ5f^v>AM&niN_;dc^p1Q|TfLO6&j8;SsNpA@|qZt5hyqg@0Td!;EcF zYOh$m%geF2oNh4VtXw=M>AQ5+jmUbv^Z6{GW#OhVrwp%C>t+<#apw-Jm>V%rUZ)$+ z$8>|+9Lkogd+bpb?|7m+qPpW{B4fP1l+LC^DuBD+zjvQe!c_*sA<)U=M~_@mjaZ6C zV*$UP1ncPd*y(U#-oOIl6c1pMg~l4o+u_7^wzeEj$J=*rSvYt_mc#nmno7amo}Qht ze5_%b=jWBNRqm+q$xYJhDX>?X|lt6)OaQ_C^Ca@X9Z*0Fj-d zCy~o8#bb%Ekh&;?Z>iLhd_#JH?%uu2k~i8&Osl6QJ6D%iBq~Pd$D-q@2!wb=>q>}= zqZWNM*=>qO@v&O8CEICyfaibs=;7AZrqvL{#jvBcp{*QY9%c|5&==fg890+n^d`UWYlVm)q@8Q_!dLK^P9KfGk{d^5I2%u|3q3kIek8Iai-?Z z-MiVPrG&b#upaLUF3&8mzVJw_Dc%>4xv{?P-riWl;jXW)k|B-9lT<26*y?n2{@E5|C9cY28!AR9B6O&4h?WR4x)B$Q>RW0_dy@3dp~;vB@(@ z5qw>E{CPO+@5dj1ytuq{d%b$1RuWqLUN5Rz3m5@&=9teTp-3ztJJ&`5?KE$#0oab~ zYynvDq4lc>&5Blyv+`BkFs2NARjYZE;(pmF8f&kZG<_0;agNG`Br2ZQs>oy%Ievfe z(HBp@{oS`q*+ndaH#)z#=yZEi;8>^Q^0@BayGI5&!`+8M>4gR9*a!w9v1m&wo=$4j zDy#JH_=sGMs5w(AaGaOY@ek%sm-ViNguyW{Wo4S}iM$NcFS-ul)zyL&1PzC^nw)5A zpe^?MJ!9Lpb4Nz_FMs(9cETtTQ`O?=n}wI~wuDmHZ0ta(H}v za(cqD4+aBRj-A<%3t~KyVMoG15NQL6M6is3+8%v+g;Gs6udtkmT>?*U@m4SM(bfGLyRg>N9t2rEke|y zvT>2HvZPHcorV4J(?>fFz*ezs#-CJ-2LMn%d-4>F^2a~^@#gXxyh<`n0Iq5ehMfdk z*_uNTUXq7lA_#BGxg3N4@%Up}p*p_@0^@Whb62Z3X%5DN>8v{(^#&97%+sh;i`N&< z>2Nk1UYvfM4hK7H8~5()=Cf(XuygX^efi>~kW26F6)KgBAAbCP56T?lODXv#s9BJeOHPL;>NVlOW* zunL#c<@Nf={(0sr{Uch)fdD~HBpu^%9AZyZYgngD;t?;XB6o~uBp#E}s@vji>GtCK zs@-Z~-n;vIBpBd0{4$V;7{D^YUDWFJVyPq|5S{i?E=$@+Y(6>jm)00!&*Z$rf-o`d0rI1B+z5&yvvXs{eM~7D8EU9k6wUT*Zv&}}c zs+798A}e3Db3~~^T3Fy=c$d*&By{B3N}fy!4?|9Am4v9dR0M)|^$1GXk+igm|MRc5 zAG@FcNBDVSF;)Z%%vyTzQ9-|-?1?mnC&8@uc6J{>e3Z-Pg1GDP1Pm0^2?83FmKt@%o)m;wfRO{WCN28>WQh&EwIX6YKJd;i{IQSXcHrMvqzF_cx ze+(eQd8$N&S43qdEY;^^#A2Wc*>XKecajsjWU`2C!Vv-43YyY{I zp;#<7lt4+VPUjrRdMji#t#EM;-Iq-sS8i$YDGQppfL`R2`=pMU-t zci~eX)e;6HA(p^qzWVA*_lxIG@7=r49A92uF^(ki*we3#?fu~ZUpbym7e$af*zNU$ zVR5Ov4|cY(xsg$6JjdK&JgBTsp4;q(<@EN=TO&5ZxCeuwROk8wR#VPA@g_W+ZB+?3 z`gmlysY~guV!HFgtb@?gsU$xSl=j*(MH>hS|0*@ZU!@jCD|namk8NmhcNPo=LCRCB z%jP!Vps-pXPGD*T;Pdk{OPU#Q2F5nbm1w4JOowucE|O;74E+0*CGpJQ8$Oj{XSjNU!J zvJwu7xILi$?Be3;;vycCoqXNdnrf|6$g+Rys^rnG@PHXCh|t1j zSZa=qmmF1u_s7fivz(jp^9^2Y^b)50xhS|Y`$hbS)3XM7Wl37Z-o zRZAW^ebw=nUNm*4a%L6|Ib{trS>6m6xYb%9gl=X&b9>wdu8FuJ5*iATRGpolVU8?j zlW{CwlT}{Tt2Lj;i;c3*FHTipCmO}@h2queWE8v}&v-EMx;^ABa@=xx#clriU;YKV zBFOPZCRoH{^HTUw>#Q^C*I&&B+h|ICcmj7o=so!Gf%VgDHE)!}!-#+Jl~|ofL-yoo zKbc4@Ei780rfdc}odA@*{XMtWV+~-o`(g|OWC`4q=qo9dmUS?00#jC2_$wD54@c!{ zV(>$Cp9h{PN`Br|gDxuF&< zUd!p6v({ZgpPo}y0BKLqBU>TEk(@Z0GGGmE!`NQDc=7bf6THLO=@}OXRWLpW+AeQU zTPO>r)76c2Op*9{TP%(wdWZxFxDop}&%MN4O8 z1OLt)%oYDi&|=JEiRf>B``hf|BJtku^#udMVph`WARD#ai?MEOGT@9nGnGnb);2b< zy3$Q?tWCf|^<1f7X4Y2AlCggJx$?;~eT4AWZ(g5+sPu$In=*#B!OMFsYI7%dyOuV2;Hr=ZJ$LmS8HgDhn64)e)4sjkRz%0;u|Y z%rqV!931@e>Xi^2f@S;tsxsf<&91I4tCbqx4v!~Z#vd#dUW%%DsXb+fHf}7Z5>Nvg2D-IInh~?DnrGK4;y^p3dgLsdA+p*S=mmC+3ap7S(!Pw$l=Ezn1PwyXJDvBZWKSZ>MBOt)?b~ ziK?oAV+o5=!yo=TnSs=~@B!&!SXvUPb)_+oYPI8!*eaL+^kz0GbiQtv=`fP!HJdHM z%Kdu}67d9Cb){TAJ3H5gwD8i>g0*qmweZ-nE$)R$v6y@Bix6D{{nCI^}ja2~EBFu%I#Pj*} z^>ry1YBW|?S06uq%+)WiE-}Y}vdUSL%vWE11zH3E;h}gPE{oqY0zaF<&qrdVlC09K z$W#CM&wnOkFkB*~6JFm`|B!&1AF#~UOYjT>G%5xjJR67Lq4|*Hpj|I+;6UL zSoX{>@5Og8GXek;VOu>+tMw#U0Rh&B*=U9bFcL-=X(8}>!?NaO&zY~VJT?@k<06g2 z);N{yfJV;n$|Z0{P#aQZr7cK1tgSRTv{QjXzNk!a1y$RHlk zZ-B9PijLRx=JIAV8mzA5(uruh(U{H0yIZ>tA3S!t-S0nqc>De}9xW0}=JTtvLD~YX z)tyfN*2eDI>PD;8s{)xDO{qj{G^b;rdiHnU{%(D3>-hNOrX*$9t!C}x>CyYc_vh!A zj+tx#o@oz>@=oNH!fCQ3H3w^vsO&8P3gzsn-#h+z%pfqxxZR60p%K9S`Sp;GuP~?B z8|zWrjoY0_CXH7zp?wof88A*3RHLqZ=3cCq91aU%l&r;H1cN1i9e_Xqa4kK*H}x${ zk@+GN`UAm4Dozr@8X-lV>7FF1-r3oy@~ewH3^C*B)2Ga-Y2c(XDIx??R`C1D z`v?7j38Wguo-GjL(zlIbZiltlnFu3nMHP6tPai)qdUNL-qiQ#$N0jVYN&?k{?AVg5 zk(nZe<*msDKd0}*q4;5*N+~$f3mG!*Xe12oA#eUwc90vf==5z`;b_FOeCaucsv~&VGhoXal?vArSif; z8Y^XJN2;Yr!XxJknM_zXLh7(KwERcf{d5c<=!1!1LgB@s|9n9l+hY ze^(_b-6YUpDbafWJ8%)H3>6Dd8O*8lUSsy*@XAUdKpsDpLSoF9uw^`MTu=yBl{gc# z0elzL|43)AXcV|ehTUtcE5@`eOd{p7oS0TBB1hGf0(~heQ-~xiT$P$bH}XJ0TH8!I zGCe&#J3c<*uO1`i(4%i0>+Nk(n@NHmw^y0c9GEXSj-df4VGtk@sf_RU`Rn%f&f_Ov zY^i32)yR1yhzhBN?50Me80-7@?;Hv=^ays!0wB-6mCEgw^@Q>Yn2+@ zA8!+1xq-99lR0FdZtR3j0wmRzwq|$TShs*T6q5D^W}VAz;dIx zv%8B!4=4k>s;sz11CW`JMP&2ghhNH>FnJZeX)UV4|foO1b zb0-pwV-fR-XFl=G#sQxv>6`~E#csVe91q5`$*kAu6ve_t;;(osq%!fO5L5dDuI`|9 zQ@rVQ1c}#c4WVKBBvKRMpj7AaI=ncJwIQdcWgJ{05od*rg<^HgYhu0g*=I1ytOE5O zK78=(`E!|kuUGjrl5K5`#Rf#|%kRgvJ$wF)&&vUdQZevYm1>z}MVWT+)FseXIE+X3 zSt$*kH>NaxCL6%iN5T=X&SG{!LvlsbQ0B8rNm#*~78*y~U5|tf zQ>m-f&d$$t18-a`N+T~90WVIKTFYuhEeK`v%kg9a4|#=$JUqC(x|+^sBOsFKr}?Eg zWinYQ6u{IU4n9m~(o#WW#e}xDx8ll$ZtU?h>EG*F+kHekm$KQM9eK#I4F=_SNROrY z{r2`&zOW3AwB|SIN(u&f@z0$3?GBN^O0KN*No+tBi}AhIDT?XZ*0fV=!a=>88czD! z!X(E>;}I`n*|S$g7eo|NJAkjRuJMWtf(Zy(M~rm=37yMiBBiamX@U0@3e3;-^L1&4 z6ve<9fskN~Z_MSF@v(f|seDTHs&KGq+i{rpI@Jzcr45MRzkeSKG&&J0Lz5kHQk|K@ z?e=PAsyq^I;qdU_?Cio0E0d{=Filk}*ncz@F$r2zQ?*O+3eTQB!!~$e-i60Yr!!zy zOfH)ve-LyIEEy?ritUzRAsHc_n;7*y4{X(EOpOt8fk)lZaGr@D5tb5J z4D#-syDS53;1Q+^2GsHimb9o;9vu=hmNHBCA3P*ZN5fH!h|tS05xIJuuF>sU|0U}x zznoiI;A!Q*nPX-tpwI8!*w|cMEeJ`hR5%Z#;SjeYOcK*Kw0`W<$B(kru0?~AU8OTB zIpD(io_zX*o8Tt0spy!?S(KJUnE;uJPD~gLi~~F7KhuAeA|RDnBrVI4VlQP03Cqj5 zu~yHMjS)Y@Mmrq_dSi2QIlltX#yauo+VfCn)|qkw*6R8yV+E@52Lxvr!P|n8V26TX zx63KI^jg}0B}oP5`FW{W^0+-aJG<${g|ZIO`ugVX-u`SlKR!NecUqYEaz0Cv@%q)9 zM!hLp-{D{+B4QYtM!Wjj>14gRN;u~Ml<*s}6H;DW{L#^&lO)wG>`ufa5Moce_^~`t zU0X5+;_`)29Ivmf3l)G87hsOhpFb-U@}TeQn`_dKXgJpGbw8b+bd(Pvktj1_0vaz-ijfUM07nzOF@aOZgPbkd$(y=F}@)K#B7BYoILJD>crCY|%m|Gp` zjqdh)ydn?t>eVY|3g9n^f?|KnBbAmSGpTl|RpW{H=Ef!i+HN(wovx71H=DevI8!-s z8w3Br)S*D|(Zh!Y-+c4cS6})8`|Xw_XP=cqx>H3ne8IRr z1cSSIE!o%?)ntH(w5mIYqNOvO%zUyGUBh%Vm|MuEQ;V+IywxD~SMe7_zW#W|T#@_- zLcRx&?mT|>aPDv)AD^{5-Gy{!t+4C!#Xu%rZ^-KlRI2r6qc)j>M2r1iZ)LSmDOLXO z|Lgy`yu3&ylAGIG;drRot}lMf6A zA?d(bjKyO^Z4w9SU0q+}Lx==>d;8m4TUh_ckH;q`AFGuT>pGKOc>4VL!r}r!hzDSn zzj*QmtAlUpLDf`BBFZI_IgxA`j|;1X_4N(XS8FR5ozPyd-4)&RMzeuEV~{I(k=cj@ zLl~GysVb42wi3-52SP|J5t9a+$>j3tlE@_*N8+_)w^k(WRtk)XY;pSp!+szRe>fOP zdx%Stk$!Kg^~oWC3$Umpe)!qbC;!8L{?B{6d$novm@fbUII$T|$45|)>(sWm^ z*2@(kD#uG_b2(#K5eYk7gx@D+S-NK?wb>$mAciXZ|FIY_eRXY>f3-6;iMV6o!?7xy zi5e$fT4^B5!V(n-V(W|9ENgi_b%1;~H#e=n2w$y*7t1WGO1bRRia!!ehT5_b>ngPU zTbATh_+b(rr@Pf@F^SBSN%fEiUY?&jWPf{hTe`(iu}?k#Mi(YWtxP5n=dz40`Oo5F z#?B2{)Ql@BkOB)*m!a_9ODu@vsL2V51=UjZ;`-tgU#FT{1pZhYKU4Ys`|s^^KdkkA z*np%xD|tS{5|hROkwtJ5Dc06;Wux=cb7`OBsl3un!{fz-&OL6mO2U`0x~eCo3+_kv z?-4bHlTV!mCeCf|?BD(N+iwY1gW>4%;!2p12YsAUxmav8nqUMTWegTmFZu0nfAhto z$H9Qt&9pn_LBDTtA?e_N)U$wC9h&K*u^lMvmZYgH$dBXKfL z9IJ3Olq*2v*<5<_C)1%@>*j;Oz;b>$ES*>#@s%@C4+YQRM{aI!NQ{z6a>o^NcV!fD zYnhQ#*zYyI1?kwQ*5qs7*H?b$8#rgRe z$Po{vr*9!(+|~6}O!imv@o0qAf;WpsLJR3MKJWFb*R@(@b8CYkGeE#{oiY3fjgZjVz`UTKIPgqXyT&ymT5Nl>_V@(=uHE(EZEut0HYui!$?!CLx zgYOUA-rf*0Q)wZjyt*xRdVOwzIoF#lkR2<3dv|vsyL4MD9e(`SXtr$M#_RQW#TyCP zX(AeTJDlB4=l15h+iCJr>+6MFJ{t-Kq=<1e#vX*ks?}OwU*o2JkKgb1E-frhMicCc zj6}<258J(NDw7rxZ0#N+yb1SVF1xX{$tn=ef$@;+d^VeFPe>R)IP4D=7Z+BtIiH-_ z)GZ$cTSep2KDe{94Q^V>EW~3`@Jzi)wvpHs&WDWdcKD1c&x*@> z+P4#z=6ctwH?L35Pq%iqzkKnfo4gQkt*3Frp|Azi>n&}77TFnGkCL=FwzhYKCr^0_ z3;Fz_a5eN8CCo4455yzktE*Fwb6&`=MxqH!j<9%sb#``n>GJrOmsiHq`N84A$;nYL z=-uDn#cfqf^-sqi9nSgQ_U`@rcY8w2auSaET+Z?3)$z^ES*P2;s-ux;Hn&6+`H%0u zo6JVUGityUkc8w((E@{QIxJ{)&)Ru2kN=dw(L;d`^}LV|ay)UR?w1 z7t#ysWRptLJDp9pw}k}bTFX_0#;4W(bb9*!!w0V5AYKX+Kt>~$@TK4`8dEi7ceeA(c{xGv_T5@}03hJ8LDTqRvK|)d=Eiy~7UgP; zw;e8|R0&3SB86RHQWNFVsuoyutp9?%UZm7-Zd*de)baU(z+&d;_FBO7U_9a(!lJy= z`T6BbLWRf)gKpZgIV2pkghaQOhXgq_s&x_joI8R(KR8KFQhkB!!s6=k%IZoX9*yEg zt}ZU60w^55)j#+>P$sU@r5dKr*_=R?P9#_J`0zZJBA>$v2K>Hez2R~=mKIqK<3YEt zYEHdkS$I!bu%p3{go`|c_aZQp%7c4|sl`(H^{(DF}t|9v?zqh#Tz^fITA>k zZxzCPDQ zd5_m8l<#L}@7}$$qhI57AN2dGaXyvVoI5-QD~F@J3LqXH9^sm>XOci^kW)=u5ZK=S zz7=&_8H)5`kn{Y{|I`1-l!z>Y+bv~&ZZ|=q-RO{PVZ?9Wye;0|fWPL`sc=ar6MkP{ z{JFwYn&1apX8{gqwKr;;X&AJ+e2q*C}=XuKCH?X;~Dc z1;Ca>o2(2{E0%}~U0fcsh`CfMwPve5n}N>!XVU(EikAq7$^V2^k*G{^$=b%{@tbHY z%D-Z5(nIZXYwkZFB{c@uUSEz4Qkm3rHfGjEFtXj62t|vicC)ZS8@Sd|seE>RsU%@N zuUlG!ls-+i@5$H>4i5*T(Ta8o8X1ZTI4`fR3BhkN7H3F14ycUX;?LE-aZRy70afW5r5s&Q+ ziZH;W({1&-%}%#D81w=@Ac$u$5H{L-dv{pIKfV0^?EGUe=$_4)uVS~`iG(Ahl5r6- zYJEKYG@1;ycXn3S3Z$B!PCofPzJM?2b<1vrWRr7It__B93LdR=!_^O!4JHcoWNosJ zh=^9M=+zp-D7Suak2n3>-@XI40q=z?qg?7s{c}b&8C}J4`O`;XL5YSUqG5M&MQj@m zM;P9n{X0NjJGI4?OKD_bO?Z){a3;ubVgsZKEQcD&&!@al9vy>G1srZn3d?-P)->8ZHF_8&R9U{Jp?YBXw z07Q(Ln2J|CIX#(cBfg#EO6`l^&uqSai<5rMBE(ljVo}1U6i&yZ5nGbxd(p1I+XGhQFiAy3a9N}TdLAMC0>(Niy#pfB z`2vioKOhMS zsV#w4IDfPnj>YTqc~XhQY&_|8d-+^`e{T=KolYl#ut$f7q%$+elyP3nG7?!5eu5O9 z_D zs;W@f-aF3R{kv~oDDPy?*yl;okB>in_t(FD|KkrIK723%HLyIHQf_fc6GtgOD_3eA z>2HzkcwFVDP5TU;c#-EP)1cH`EXud}mr+&B1z z>u+ywp=+T)uwND} zk$~Pv&PUU!)Pn~Pv(hw1mV9GO-^A4S@88=I0tSGe6-}oEd5B1q022A6urd=YX zJRVVT98?R$6cc|0PlEuyCpVbx&$*x?h=YpT3xCRK!s zS9VD`u3#lFYf`4|+bu1&!fFyvfn&zA z33yQ}U=v#S*WokP_1NhOE0#yG4)L;HF86!A>3Gr=>nvAgN1doP0l>wjP;dbp>U6m- zE-&0pm(Ut$ZP(THHK?xJ>WFwdxJPB)&_F z9}W&M43p)kY3P*}!29?Am!`AH;`NgtthD7l|%6 z*Vm-5>uc+e9zNp1UcY)Z(1tXgeoJWkH$ld#!0o`~rhnJiJ~=s&eo#3^aoaJF9YY#j zhLl*A%B0Ts?%oHoGl{GYR@T#JPoF$}f}IJ^@IKwUw!q5 zKm7MN8HN$OE3BgD=eS)G9J1%WmfhKL1K0oYr=N`Yf}kS0e!6goxGg!^tp$8O5W~&w z%_oLvD4W%i%jR;ct5R4eHD5}Qa&>)a1E^GDLR-YU7)_PcSV$qg&_ekp;|ZQqCMXcp zf>1GgGQN;X$Y5+Z2i6W(=J}sKeQK)JPA!H7#JqX^20VvPz_vBL9(P(&&}&`zLgOp~ zDpfmSH_ zzGQ2Tw_IUrR}7d9Pxuim?DppBM8vD7 zdV-#2WKHUlF#+BLBSD@vDOLIrX^PhfefRENFk12UR*p|ZZ8WsAy|=Tw+tW#67MNPD zu$Woo8Nj^cRbYsy)M^fJ5V&CD5K#8Mcer@+d+nzUFKg}9px?h%PGgg==M}WwNCW_Q ze(Qy0JU2Er?%ch{iu&P)@7-?K^XFdy9i(kQPa@>FVK%|Gu{L$$4iYl}xH$ty!moHES94W=SZyV^f@UwRUuTbS4d>LA;nzc(Ou$K{@DR zF3jGnbj}ECaB~uP+#aL$wUbUP0+hfMv%qjA?GE=6)y04Nw|{&5=+Wuv>6^E2rxIxW z%BA3`D_?Fj9LBTER8ZZvMwCW>ta9Zo>sw>JluBjtHZnh;#_8GlEpu5a@rlgh!uIYi z`4b5Q@rQrqyI7_aKzKZ)T+F!e{Q11n%-iYV+&86;VR(4>L1~Oy!@&px7QQ{^LcmAJ z?eR&|d@>=Ps|~bkxSejTAgg{lIZ@WhsZ^UUE)B;6t6L#?5)E(MM~n1j91aBSz(uy2 zHQfOdEN62&JKHX|naWJ2z7bHlhTE-biJUzKHIoe|g`!|yS*C; zN2Im4)4sU8H0pR9L3%N>xwXl~z(&?`HWG2RTRaJtyuQAHQR9vAy||HYe)|oXfb~tV zHvK_Kd7UmUBL-t^6J~6-G#I6CzWHWvS9as1J%^R~kN@zSOlC2yd7Ein;r_O^cZg*C za%*c#(qiQ^i;J{yY_4aDxLu*@#rupWqMX(1Vo!MmXk<1s$IOT!m7%`Qa%EVhOiB6r zL~K~m1gMI|fcXL?$cDK)Gip3)A^Lm6sh(z>ey=knLs)H2FO3ziGToHK; zyD1CR_@aReKYst+!NK8N`O>_~=EFacfU^9sZ>h@8X60Bk5!X`yw_VwkO@q=d?8)YG z`}=oD4!lw?ozaI^jfct9s6B=I!c=Kh>A_llnLjeZey>j=;`jMe>A387hJqNNbt9;# zNJ8r^a#$fl!6R{Zqm<&8Kwz!%_<)g3C-ZbBP3Aq6eje>kT5 zgp@2;o0hexjfECU{#;#Mwpwi_C>Dvzp-#6;iYBrm!=drQV<*Df=kdIG^X5-~{3C|< zo8SKS-u?T4S0;j|<%@;Ym257%oXg`z`L6giJ$}YzgF3~{8F08Pfkv6u5SpTer*^1B37MC?N^TFHefj0xyLVVPwQ3c-Ih2+m=>&5)=Y&8!-R9N?_H%Ob>Grm` zv9bQ*s~7yWC}?kF0xc3*F`lrHC_Q@oh-YA7o}He_DVkHb4uT=sv?wWy4tK$au->u% z|NMtPeD#8>g=czG5=v&AtnupRW~A@s(5>%GI!&A=FaQ>XzPKY4b=U)|SVZRg18djG zWpn3e=Rd!E8Hh-tA5gU`r^_W3Rhi7ayMny66uD@j=rb3JhYF)|U*H)QImbkL5 z4G#_vWHwz+#+JX5(g-c!+G=5ajd>K@c`0n?ec{gulB-~xj~_q6OOzCr8PMbkopwic z!X%GZ^79;zEoG`&pKMJB*o-wzFe$!G{B0o9KcO;WC0Cc%CjZCFEa)E=Z6Fk6B6&Ov#iBC9 zB)t5ikx`ao(^XN%ZZVMzA{N43h{Ozykwr6DMqwlBAB#%^DNOBZ(|za7n^&R(<8V10 zb2D*r$4D$Xcg*p9ctDlYk-|umPBRJ>9zgmT78Y@=KmZ~^-M*)*Ye`#kTJL87Vs*99 zQGwEX5AP>p$;*pNq3527iiil3EBmOLkd%^YlfL{}$}It497-3yF2w~x+&Yo1X)msa zl(DP)Wz3#67GwI#I$O45EtAZ|6FqqFkj(z|n>W+hG!l-2?*J1Q7grLQBx#s#tZy)x z^;Yxz;^O4=ly9vT3ei{$-^v2uNrdNlHj}>H!64xCFXUG?H#WhlT1Vy%Fby$)waB!p#6<_I=9ey~OSpe0GCNZCnO@SP4dLo)HCk(HtGV2A zr`t-Vl0xem4q^7jIkQqIJh=a0Hk}!H9ImihuA~xDH&Dp0EG~)e9;q7sx~D|ex*5}J zx4Y}>Yx{ThO&vB8iEeFeW5C6m5+D0?aw^OW^(ygVKFc;*by8MxV5L$I^Wspzr`UhnwR zC($pCh95tEEGMapi+qLUBMM-|HdR@WzWi3JDCEX2k?_+;BKAi^;n3#hbTr1jmXvvM zCW^?iYa*G9>d^2>;1YL~))|LmI359aG8v&%G`D75qgHCbG>KAERZ5_ZFeH&om<)+E z{9J3W7k$;hXBWY=3gN77q>)g$+_DdW(_kc}OE{D1sjl{=Qe7C`uTj`qBl5ED&*S!i z;LG{E%0I{skP%|zOm41=!BAi^w%}4)J#Ms|%hhYO%Zm#^Dh|<^#g9phE0+oL3rkDw zuB@zyMta={X(kh?z5P8FT6fS@qEKlU{QkS|s*O61E8y`hkT;~$CXy?tMNxG`PvSz3 z5V(}9Gb4JCB#CKN8-e&?duMllZ%^pTFU~YHh}K~;onoaFb^p@tVXE!F?(O_*uk4MXQ8@t(2^kpXZ8<={G%h)5fn-{*3-62iA9 z3a^qtOXsD7?Aq%E-{HlQB5yJWCgYTO(9834(kv4dVbS4$WFvP3WQg>7UEBl{rUm7G zk4H2Or3SCrG=de|aA2kx9g!YW{tekZZnbKv&MoqV*{s?@ohP^6c5GUiMYFc=VbMsW zksPA;u1H@rDW%d_^6wih!wU=sbK51$FBhcBUs+6nDPCpGB!gebEW{JIm=zujkN?Xr zzpwzf-NT0uxi9O`F_SU@N#e(oJE;T#srp&k&*k;|@&&P7+#g{Tzh*uDc&@hU_j*-B z9*f`I-Hj?YX)2S(HbG?P7nkHSJVGGk2gJlRR5NQNJ*%r^Y+fO_AcIla0M&XDV)3TX z^*M4PUKYH*zTpEz)1BRI?h@6;hT%{&qIo339>~#g;jBmM08D(c9cytxCLGJ-j^p8I zE~OLV1@bHTt=08~g++3pAAa~@tQn;6;_9KY?aA}LJG;AXm*=*4D^i+H!SWKASMvT) z(63F9Ov}Pjh7d1@qq?`YzP1J+>vg34(d`gsLGs$`n``s1%!nXGJ=ZT33QVq%Z^-se zw+r4Brhc~@Ou*XE`U{_Rjjt@{8Lq|5f-sZR>a)oNcoYjqjz4}P!fozsV=1g|ya4Wo z;Uf7WT|Pek_~$?UDVdbs5)2zlyuP}sp4VrNncwSkOy*~&=O5m@9cxi>ZaFJ0#hosY z|Mpgx91ac+M2dBBk$`M8GQd+M5N`CEZQ=2$H(f3v+27gO^|*ZjpJRJxPdHc(j##hB zR9f`AT(0lG|Nj5@-~Ug6k{;O&?=qM|b>sX`>yLUn zyE}$#e@6zamQR4hz1r1m`W3TFtj2E z3a;;e`0l^_mk&y=>r!4M7gKLkg_!H+`etr%>C?xLw%x*w{^Kuyl|IPn#4(#Q7d(s{ zJdHl3E7jJ6l{YerIpU>u2x8{Z!d2y>djgp==V6? zs*_zVS1ZEK$P%knFR!om_xH28>?xS0TEm|JOie+yR4JcboQsA>QcggmsOA6X={>j_ zPq%YVB_sq2fI#F-5vz(y-CZ5eY5UrD>>1x#^HuMib!V*^``9x+p;P6e0u(tXA%U`l zG{0x>ItL&3qCot^`|kMey`N`jBoqvP`0$b6dLZs&A*aSc!b4j7O!eKnHI^~1Vf`Yp zT31p7vhhSB7zull{du6XGuCA+(Zb?sw^F@5{n-JP3`0T0-ZNC*lpKQ}viOf5Kko0# z5CM}wH*58ec4o%ixe>`UH^S%>Sm1+0k#L_)I;iD46sP#NVlSo>%}p9(rneh zox_8}eyp>>Xc)PB7@hS}i&!!2EDrnTX_XJhMc3XwGJOYsK$3woW!OW zccFuPp=Fp#1dJ!?Fea!ji?jXtMb=)e9UUKXk%tc-IL_LH z{e;w1%N4IkEqL;=(Q(0G3=Z#Eub;D2xg*yce7lW`F3m4QL!>)Vj7hvJUb}53(}@8= zH)ag${*(xt&HYT@WV*!a`RSm!>S4|-gik__ybY?`j0NVynOUvhLB(Lh zS1TL}BtkWF>&Fq1FqV$bJD;u>evH>Ph3+|ZF22Rajg-_Q<#-F{>%JA_MSH?F+nIx{?Wrn_z8?Y4;BgpC#EJ+h7p!jLXT0>c^Ycr%s)HZJL?}eqLGetQZMCPS~pg2 zuGea+aK}5Rr)DByr3+k*1cD_e96mWd+S}dH2!xG<;ioZ|KIg|15^1`pada?^=ZmZ< z=sAsbU%zA*Sax!8HuLQ4g3A()2scM_6q<4->9-lJ);C{29m)ET6?1RE~b zmDzXRopmdgOTU2^pmrCY|ZXvz21Er!UX^|*#Hitu%S_KQppOaL*d-u+v7{mo>e9T_p z@FSeTf$VLgerxc1yb<1mCP`K$bi)m&5{=t<8^O|^q!wz)LMG=7LAbDd~MB;Ki)MJ3Np)gM>W zsZxglN}OYQ_~iKHcsTeOx`D_2%_! zB%ptwpI0_WEU|rIVet@HE5q;XPKoq$a&Rz9tVT-RX(M*12C{=pUYANd3~#!=u}%t3 zc*f{J)8vEA+dOUXAI;4*c#M? z5P|>7MTH~zLVnNeOxwP^+m5G2sBkUbkHR|=ygELVm`e=ElP6be6{}}V!uSa_M#W;* zNpnTMS2V1|)%*7!KY79@33IRVI>WfRDPYIdh}s!TX}qez^RPt9oQ&$j`N)wL5^s~nxl=Gtc0VG$(%Myj}A0FCC&$$SRtyz-T!qE#z z!wKje!eVl2YTO{JPpM(ACo0))aydERNg<> zKR-S51ST4dpoZwkb>TW1({!2lg5<x*r49nHEtuC!ufeZdo)wTbAJW;*Ko2mdFxoxdbRMr$N@ie zY%E6~tO_!vX&G$T5G8ZPVi})`Da3*8?(PutVSV^3%f`z6{TVWBukdkq77jUZ&~u*C zL5o=B!y~<<@3*ruI3o&Kh&Swc;g&0Occs`@zGqzwUAcXHe3Z{$aarE0(YSr}^2O=N z2^p?DG{HE$6~uXI~c5>6_GGi9zBJP>Wgn4KYX;ZysWXdvvYzEY;n0% z?230~`ZV#fxwVC~{qBb!us-Dd`#XCd*FWy}94+iHDU$CwfsCPPZI{O!;n0VZ36vp{1zA{{8Larc%xIs`C2H8Y*k z(Mk$ilQNj-nmC%0sCprvcP`6VG}dolNH}rQv**usW}EIA8q~8TyAx>j&h|DzFS>_f z6ES@K&9{H|_kYhyvR25CWog}{l_ab}Xt~TaxokYv)g2Fp0y;-IKH(j`C*MIiJgi(; zT>OWB_=n}?We=sv1s^?pI5sjiG?<;ea|eS(i14p}_`|c`e)Ft?zr~{Qz07VR!7Cd} zPa3t#4i0|%?YCnS6E(wUO{J5otE5u2|>K*gyvhX5WP}MhbgQg4sJ^JlpXKbx_#w7fEp_%K=IU0!%+AT-;Sn!Lo_C|{qM*UHbXxKpjU5~u z^2%HX6}WR}j_B5Um{X3yM^u61^n*QN$$j|1mDx~!OG?eQ^1WImE-#(X>00OZm!2b` zzwDrKx(J00Y2l`Z7h7ZdBtoeaCgR157hVI_q~-WH!6h<@B_u^5cSlox`Q;aRXpM0u zyUflz_8*_|M2H1X8Zx%hv#TrK=+c=Injf*NRIJ4)j_evjD|x&JJ>!?C6ZAa ze{eVvt^Mt-a2kwS*FC5e{es=e?xB(4bWd;H+DBSyMD1$Z_W9W|f8Y=RRMmJiO+W^D|Ty^W5J&&|!UUcdhO>#o6xU20D15<{HH^gE}5KZ&zm zdohp4;8A%EwiAQ$xurfB^gbpo?%a9aYyH>ib)Yw`7Qw^6He}h1e~BGMv3c@O##U5O z@uPfsd0wwKEI}7=N2Q|9m40jGh#ImPLSQ|^P3IR2wj|&buSl$U6Tu7~w2Sd48(4Kr8)~V1Um! zS3%IAM%!)SnB(gD`v(pV4|n(WdV6|CM}~x(eO(|$n4X^MAINm5dA0kxkbm~%@y@6XI-&IS` z*?HUMOhi}J7FQjnjfEv>&>$nLU9L!(FLKz^WHK>2IS~v6`G=aqthgwK6zk+vlv*qy zu@6=su#alvI@S;fCJYG?A1Yg4sp5e7ZM)Sb3fWlS2&+6cGCnrWIuja;H@=Q!>Wh5c z!R0mJadws$ELyrRLvYoPl~g<7RbGSh_QmcXPWYQgj~_pd9MZ+dj~|G7zyA8^{QMnqRurn$ zY~eV0wZGAl$?Ff0b%9Z(;C-G=K3jX}X z^M?6pjR0L2_J#9&g~38+(I&$n3^eME1I_vDvo)%@1Oj*?a>q}fHV=*tS>cXIgkNC} z+m^0*TuufViAJ%c>SHPuF~rzDJESdg<;#n!j~_mgH?ugrrjwdG5Ivzisq zXZbCUhXM@@_G=zwWR#D2SUYC4{x$nF=5Zo!a1f_P+X?cLgkj~@t3Z4g5z@W`96Aq8*Tw#FKM zB}i~y^ACUc0}tJ%!lE<3o>ZE5!OeF&9#*pBEgoa}`Sdid}m;Sr1G zkfJy0LAwtB*Z=ZkD5O45f@N;$v9^JAd72mW3cuGpu!tLipCmpl3PIH7UUv8QeaKR0 zu&I=JDFwO4O|Hb+o+db`E`WHWF3vb-nYCiAMocu|d~sn7dm>Jlm>B219A~j%Ja@W# zFM?a*MvmsiGjM%l%pUa)2p-bsk))YMNats323&O&423PY4xF4Gd!)?I1^W{1AR2xB z`n5=z>~KjaDy>^A%k1pjFzZ*a|cpQ=tV zHZ?U(?A*S+eY>{it@dT>;6UJrwpcyU9~pd_Ve(x&m^1IC#mNqZJ0jjKi4(<(IMxU9 zHaR)P)^EsX3UB|AI2s)*~TKIF^ji6#L)NwdL)<^-c}?bd!` z&u0|SjE|YnsK?bU*Ps6Mr@h@>4NY~aRMw~A;9jDQmf*oJuX4GaP1496?wip_yN>=I zJ$#H^Bb5HPfBjchJ86i%Z{EIn_x`O*+AG#CW=I7?GudmL} zPFP@4?1TM-)6)|pD-C%!ii$PXZjJ53Os}l0IQ9*%!{d36jA$yfHFaW$_x9yOBj|;9 z?K(B50PvFCr^dshnVF9tiDUR=LygDhMdRR8IlQBzWeo5yUcB7+xE`?nSgSJVyi2Eo zDy}uQHn&(nwNRDI?Vy_YoZs3jc{a;8meK^|4Xet-+_`hdBW8&%u5a^`xS2YlM~6D? z;8A@L#XH8e?9rIN>E~ASqvMm4V~haGg83HBT&=3(CmrCoF6;~Y=rDv%7KsQ=O-=IQ zhS7vaZ5*7RFU-%A(_nuNj*od?Z>CcTHqs#`y2R&VnTWG&{6owKIAa64=Z9Xey*0?# ziOF#k+`DO<0L|Np9l4CHVZ{bSDOfRR(p$$5z*zeO`}rgRaX$M8I%NT@R$WBnca*wS>-)BgD5k5iMA{6rJ{@85HGo{s=DfG_1k(w z6B9*2tE4pQRzEp9F5TSl7>i3wJbbM^?NValB{PJQy0p zMKG1Ds+VS26E1akX=OkV8Jz^a5gju$MJ_&&?TE*^lLQ_q1bE-lAs^SS)T);<&N>n= zU#p(Q`yv}+<}0W}t=Vp3Iq_#W`&%2cv__(&7})YxZWhS;umk80=E4up!(RDTyID9R z_M`=NT1EYCRT#-})jLwD;-U!&T=jgG#F<_(Wr7enI{NdU|BS_`|CLP(1>wHJtXA=E zSSQCuvSP<|z2k;H`)On2CIazm*an*`7 zyWQz+rM|M#1gov$v7Mq>?c*_V3#!xa?2JStXyGmE$UQVo(GD1Ya+7@Dxb{SOjkOVU zMx)*-LK5^Xs9JQbn!C(7y^?Ps)@^8L*o)Xk5Y|ej5<^3SJe3zPuC6|>wMs!HjZS)D z*oEwGu={>iz~-@Ebx|2=LT>+H&)aB;M)9wH#K&@zV09T`kt2c;tr#ap2!G7~a=9zV zo<#9HdAhx2`vtq>p?A%YirtVoB&iY7m5_={BCCsYmd+Daq;|+6BUamI_=LBmzN>4m z!E4z&<-rL`nq&}b`i1yzqdSahnN*_ov6T4kXvIN7t$UQ#$MXtVJ87N%YqJwi)MFM zEm4ODd;13>C+_VbS!@S1(Mu>LPG5_`z1l%4d}DPKt9-<*&*0WA=JDwbl`)JI?-eba>Qi-g0Z?n`I#v6yIMgwtROb)0e3h4KgAW zn!j^r#G+bOdEaIL&}faLM8ZxWJvt)XrARo!TOC`tN*;eHDBarp;sTQPpa1zsOj|N# z(QJbV7? z8jDimHkC$W6aQ_an2deEuE zxPsS5*+e4Z&*#8IVbR#u&bAjpecn&!M)Kl13}icuFjcdj&g>+5gK+rpa9{KQvva|A zAg?K@x>Ir?dwkQ|+w+CKp73+`%7_-hxs9B5qKw>}ebguZV9C$IyPbQ7PGl5AwI6Oqituekc zZuAcw(T>xT(~XS{WJ$xgc8XfDbi(_1y#8w0MUPW&nLUsCS+r8Rijq{qnl5W=n4g;q zv;z&b!N<|r!QmmjX}ym7R|3}#sI+fa!)I%{-8?S$ViA^?mz%duqEGj}OUujCR%1q- z2Kon{e)-kt(D0>o%m^4@WTafFD9dc$dih+Zn`dW7md@#5F(#BN3n^6F4z&Z>{sC0m zP9-a-^YoP3mz+vZbV-J+9@pG?>)`MJ&BYyBw`qZYI$#cguMah#+Grwv81p+dJyWXU zL~;i7*8a>C9u&XJ*!Y+xytj9prjP5ZP}SLq*YlQS0gaoBQTw!T^jbD4(7+%|2XAiF zK0PxtZIn%i2M2^ox6LN%&suqVx!x!JDnE-NXYTa`OzvpoWv&e%wa;=5Y?rc?|I4?!T;>OV}UZI0!FM8U%r zKY74oitqZbe z#CvYUGTG24F>H`cy1u^Q?wASdV%5PE8^GJ~@MsP?iB|~yHE6}(Biuy%B*!8_iz%UT z6fq+~viADEUJD>R)~J)!mhqDpBX@ zX-QOxVK49d8NSL7?Y0ldW(NdTjHNp~IwH=PnB+0Xco>X3?tx#u|L~s2!x8T8?)cwY z#q+Z^isrT*aH>SF(6HLIYJ(ib<^oAU3AsAGMcx}Jh5K`ff>Ng%68&<`)uIa2u2hI#x zbYakhm29YxnY$ASBA$m29-^2({pHVy1X2^T>ZvynB8txO=Q)|RVqL#}^ZMlY#D)~p z2*BWA*6CdEBA8n&C*rZVu*f5=Z)`N0qS#}93;9AIsP1~BR|+{h@7(Mh*%c9k$)vYc zkD&rOl{Uvf;KLfLzfoG(3f9+=?HF7Bg{^v(;g2wwT^~ctf()l03$ZW ziz7wex@D~uwUSjIA3uJKm>J1c&6tsA> z9-AO5CH=!5`e8U0-=jmvmKqruOWP5jk#`GG$6?pTMn~_j-sewvY=co#m}O|#I@Pr9 z%ky$cxQ19mjpZ0L0dh-zRMc9kLtCQ|fLqH!CwVV62n%fJo-(YO zuMLCpCFX8?||NMDY7z`xOxw;i)kO){A0X)r^x{6=!us zfSr4kS1=%GWhS`IW9!3Jmvv7M3i$I+KeHgtz3r##JSsl8Mh+H_hgFY=2kfwP zN|i-P7+seFkn{6^PNBmsi&!*~nH{LrYe=f}v#cs$+2E*1r^d%7mKK*hRPl~AE}{;& zfxci!fwrCVq=Uh*H+d?YH=I1hdKMpuE%EY_A4UvZl!tfW<5C769U>dyQbC<^1?`R2Tr)!VQmq43qE7)I4DXiyReq9^fO zL4(VPsX#3P$?gP}LRjj(J*y8NaL149>pR=qd12yIJ(U-iUo`4{Nq9R94>{;f>AGAg z?;q|Hh4l4j@OC)eMzb+II?BTFgz@gK(Xlc9oy3thFPhEnWCBYnnr;GnP(BCoKlM~vD+g3#RMwkF9-PhaM6-Ne|ExFQbg3+GgIg#xW0z5u3kR7PlNlDEnN1Ynhiz(Pj#8<#i zSC;}D>*^BuNkt&c{5I2@Nu&}>3yY~l`sh%UzdX{y(xN~L_xHJiA1UD%rJ%dJRV>n6-xcVTK5~v6}rMb1fK6cF=2KIe#55uy5Ev$e7>B3bZAC8DR5aAarr3mNi zj>ULo;5pZYn}dVH5wwzkxPLZHB| zvB(&#-ku(@aW@+o)xx8ddX&P=x9DhCT(hddUopNUfvN4STh=0>)ff^ z(Q(ePwp#%Mzbj+wRDir~9^+-Vw?wYhYWvuQw@LqvqXkRt z$f^9?OSAk|tJa+qm#Z*U6eS}eAKt%z_wnQQ?#=~vCeY#|Av}LDj1!I++H0T{U@sc= z#{8Z6`Gt9|zqhm3zSRN#-^>vjac^~1t$E2L%ZKJ^4o$72Wns1@y6a-_t_pwNU`Cu2 zFCNo~N@uK-z=g!%^yHZ3l4UmX0NzD-pOp$m!`QvVQHwY|dGaKa=|d7UmQvFJ<2m8> z@kub)CZy7=*zs{dc!ddcZFhTT^V24)F+DvktkXT799xfo}h5N^Y?(Od1ltkR?`;{d)fV`5*uIM?Q?t=K4GKh0JKAxT||%exB%`D_`J% z|Ni&ir+a!es}R;XB){OU-nqxKx=wn9+&i4v)K)-1Aq1pYND&LRT3*5Rh7q4huz0yA zY(pjyW8_6!czuF@aroQ{@5x4To5<*+M^Ba(miWxkvADocq_&Ff`on^qoRD};PEB{k zyAdE3(TkcjV+&qdUS_czLB>b!JkS$JdZVE;mic)CFMB(|zIdI<2IRu{8>fflVR+`3 zFJ6B5@E-R={x_)hdU40H8qruM%IUy5J>qzgBXlH1;_GVzbMa|(KCrT~^3VVL&+O=j z4<8Qp_fUzH4OL?w$HqqSG3YQc9s6-}bDh)SmAZGQEAc-ksg;1D53Q zfNd@tPNBEt+30ft|A#N(t^KgwAy?e!>x@zJJ~0R4E(so^G&DGjy%V}qxT9RDdP3$W zeq5Y@ggmy>Fn~NAG2``h>85y{FQBWu&fLr_exf_kZTyu&bQ&2I51`QJ z<6XUdy?Cl~BYzF6uCMtDQFPg}38PB9G@|6=UdRs{jZz_3C=Cn3d&#rfn1?8w4X4w` zIez)&m*+2D@K1#Mt1rIf?a0s8*4DVoorQTUk)u-kaK)I-)+o}qDR^%g4?><=+1kbi`Umdazc)5A+QKLwA8l{%Vk|VG zaC+*kHz6ZjlWz+Ik^9}fy-PKM6`gPO>PjuLWO(F>H-&4VLk|t&>R5K1pXcI=jl^Sd z%32YiG_Cc4XH#jwqVkYZ`Ce~#P<1UkKz{E9r^*>+o1auztyFyLSqCRgVQ2AA*1Ut)A&M2T3SZdhSFc~=)&+ffEC0b;`09C& z_uIE`S#upHOpL1-IWt2BPg;K)Xcy$qZV_FZVq%4YxLABl*xKuGy zX0ePf1h8Bv6m`&bY{$8N+N>^$a44BbqVHJ$rU)OeNQ_W!G2nD`I8KvKrCS4L(`)VC z5{wA(hi$8~usaIcGMQZNYG+$az-So>nXq4kEh^wPVwatr-5U}52?B`qA&krPXRud< zYdC|pVPc@^W1@}8;OrZXCQ)XsS`#j*7Fj++HOOFqoz7dI1ks7tXl-(7{Pg7X#fujh z3U)+LK!JeCXUIm|E1p%W-Ooyg?(cJ!?&r)Xb$4~k5Aj|kspo1S2-!hA>6fDsxM5ex zR-H!GSUl!1g1FS(o!wmi>hlqLR`@o=%1EGrX6L#7($eyyM~`^foo!8yIiZk_1}z-n zi?9I2F&u@kSDIK5-ePKM8kZqZ+uhwWp_GK3OVpt>yM!h?K={J$Y;J6*EMl{-7>8m> zT}K#mb{u`jMt$?mH}~${7nb$u8O}&$*NJh2Umd$fXoh@p7cqxk<-FL8M4_HF>!U>W zjK3%3*_2Cybs$YxdJwd6Rv36?d_Mj(X5wHiLI zRXud(#peyR&^r?R$Y*AH8g=8JC}yKx4gVki?SCa5bO+2Pp|Nk?XuQXhIsP7HcJNQf z?;rv_yEwlo-LS;!ZHY!t&-DIjJ26-9ek_(X2(F}AJwYgtfRaF8ULNf46Dck(%;Vmy zy-H0MXhgl%AcW#=U%z_8W2vpzczKaLoy^3$$gc!8kxUzK!IgKzvR^EgH(Iksyr=iA zSViiFcR|6v|NeWV8EelX<6v;y23R=4H|B5Btfn)5ADWnR+1XhaINok{dU|RCho`(8hiVm(-2TCV zpx|tp5L+{)F4GvXg+un315Wu=JC@xcJXwvat2}pEUS7t9@XGww+i|_kOE(Td20wep*F6Qdu0vbOe) zrNBs$rF2@I8%2s6iFeVgxy_9I=gEn~pm+!R%N!~pONq`J%Pof?KUB~ndxCy2Yno^)`4e3EY`SBM=Q91MsGx9)kW9|rmnPSBg| znoXRspf2+TOv{tUPgwA0&z}AE+iwc_HFFszSrcDaIMQmjLXnUr(IYzB*CbUq^xh_Z zN(Nxkp-~ORNF*aZV?8=L#`jl3j2egK^nDB#xS#ul4?9gD_{thZqy9hSHF?%kS$ z%ObH~J$*WJ=Z?m*FV6A(EXb9exU!x?T(X#Z(tBd_g%9sPs(U$=#6F;LD+V0);`xj9 zkL$+BoIE}g_L*8p3)hClFO-i&S9h&i5eVJHq^eQY0;a;em?x59Yii|Tgb6y(cXO?5 z!I;>`9c)hOVdZCT;rOrIf(2<>0dHh@IAEn#WPWaTuGMTc1-3klv)5FT0n}J!vdt$4 z2eMU>O_oxE%jzcO-QM1+mMX}S*FM{p8GrG`7vFvN-NfW%)RMNQmA!ARiFbHth^={z zAzoWER6b!3oC!OjjgTjjiMCa*7Zw%}Z;wcUmbo@&Mk8|Qr z5KHVMH^V4lHu0leL?q~qx?&Wae&@K+h=FXYc-L&n-&bYOd`9Cly@Am-ur%sax^hKcVBM?F;k~xUZ>n)BPhh(pyWaeK0Ne+9NxXAISAR$fJ{M>?fK;|KOq=4 zh|$l*&(9Ti^1xyux7b<-X#)eu{=weC*5=mdBk|Vl&hF0o`bVye{M5xwDOo0KKRG%= zuZi-}0q?hnb?Ea&>+Sa*UQ(~8PoFL>F2$_jj#rL^Lq6%iyT5z)j-~d7KDGGp80d1j z#5>N--BI6rj_@!~d_FrnCnl?QTL*zc#BAv3yIPHe!b66R?u^ko^IyCps%jew6=Q)8 z_tfHB@u<*Ul;iaB90=&eWsa>L92{C$SPTnU^eQ5njxjM?ShD=JtL=Wz-_N3D1 zCufmp%;%B?SZH5-v+?N@E9I?84(;t{&PkI7BSJYs00ss!C=5>(k9QJX+OSQ@p(^-> zkU!84V2Qqd`pwF+f}Q{P_kaKQKm5n(=^2~nh<*OmR7vj~%jb3C$B!OAeE87E>HK7s z6(CT0^Y$&@4-O1QV;#dbT}qVs>o32qyYLnn;*)c9np9oXC3 zMLO5lKjA0H2h;>uuJ9uF?%m}g{ECbFp)MPTH|n)k0Pcc&MK(0+l@(YZ4)&&muWhJJ zqbL~8w{O?h*Vj>?>A6|V1Zn%`)+XzJcX=7LLH~J9VY^@Ew&azsdNP^msVUDX$tKmx zZWU~yLKX^K&`Wero;)FWs#_J=8)R5{R_yKC+Vf}6-&;GV<5j8qG~UTyUFI$ai4JFG zW@j+_cX+So&z_-6YHSgu^gc^13@LNxtmnewqI_7r9_xs+S8+iCI^-1IH^59vfi?Yo$ut zY5~1Ao@9eYH-;2FP5|m%hpha_$S6r)$(DjhhyR64jpay0XdSfhT%lWEUoYm{xkq@N0F9oDm!`0`GyTCa)eoM3T=h&o{TW zK7L%^KiEg7P#14YIk&z}bj=WORZfm{M2KDDU843IMc@NL6bD=X#TQ>qPfuRk{KjoV zIK3?I)a2yM)Kq6QdU=t%I6sSt5v1!zMa>SuV)XPnBMq5lC=l%FO^u8WJBk^%9v>g$ z;SmF$>?G8|5Wjx?8c917+w|u&vE|2)p)es%(D-^6<`=lBvJP=dMpNC1tBcF)eE#vn z$G`vK2X5Nc8OIX~FX-fCV|^nYjorO_FWr+y8u2$c_031P71zLpG+dtvdsOw$asi816_&MxY< z5js4J#Z>R?>l+;zMX5tJxB0stem6KYD443N9J^Vx28h|YS#$@RpU>s@_YO8TK9$Nh zUixv63Y)Xo!CVviWCsSSHUJheU@S`&u1KoXTgPQIJKosX{B(G9C~&Swm_U|zG-yrl zXrja3`N0^03zzki4+3Jc@Xl_suR(ltE_cb52@^3x(P+$p7uC4hyk$+iAB_iND+%sj zy?TXF8W@8v)(}9=F~9*M%0Zql)Jhl zK;@>{zs{5^8L)PNcq}IDDg&_U>+e$`O#P%&2=Lt89E*u5-ZAuu(oK;KBI-gby{iLN z2|u{E> zKs)#!|L=cXn&L%iBPI|MJq(@X#Q8jau?U zA|!`BAy=KBpHCR|8;L%O$EC=11{EM?hq6Ps;m%m+{Ne&jVHL+3nPrB+uF>4w`hcF}olk8@$aE0k- zUxL>8C91?c{^Ak?MBITZ{qvvxvcJ2pJ{oI#HUy={?(R<6m>!&(0uTM-#q;s8@qhe> ze&sk~$=x5KKc^hrQ za$JEb+lcMy*(v{h{P;0$?Bw{QV65^iGEsQ$GKZLrjgHPt&uAK>R7xjPL=vnsg5(IV zd{`ly4FqEM@`e1f=g-zRHad({K&J&uOIUpF|J$#>d6ABw1hGo@^>TfIOj()Pm;*YT zn;BtXaeV3&_kalf+aLbz{f7@lS&2^wZBy{hI!5ucIvhxcSA;lG}2iz5toT`9$^x76!^gl?&xRJbGJP0NP17U@m*5O;J7+%OPRS6X+w z9q?vGP5)0#rc-I;>epX?{qO(%zyIYge{nWa@peaJetKuXpZ(q_r(&NG_hF#C=hqRo zhlfW$BhuTk3V($Usu(GVNGX<<$S80$WKc)~S{DBL%g22NnR{-7`70|c_wKDalPJr< zbw5vN88p1wQ2PfGsZ>!Q5|z`F^Lo8XtXETGUd1R@)B;_v))S%<8uF85HM5M5-P{yT zj*n1LbT}T@fn=pp=G`#C-+lM(^vo3AsMS)OV$-5~c>3;yz)Q)cY>qH;aCn5V@F&ZF1%3iB5~Ee zSO>JLTcw&HVdklQsRY;=tCT85gVnrNS8c#3w3Hh)>kZ@~(bYw~tOMsR$(iw5+ket6V;yUb-Nm)y4TG#x8e(ySyUFLzMe6{mFC+i`pet)QaJ+ z#(4n3!n^nH6P(>xQ0!1^EDJYM{M5WXIyk7-)%0KEtE5EW13v{Owf0#xD#}%@FTvXG`ebhMCXO; z0;xmJ;Cs|U)w~@Z84-)o$cSLSgz}T%wbk-{c)$ww_YX{rPqYPbp&$>buWvb(qI^$1q`+i$)_!p|7f#sc1D8YL17J1ki3B=^5HMXH0|u}kW+s6_>tWo9vcyrg1S-z z2$F$VC0X-(_wQp0@J&P{t#(swH6b-us_T1f+|Zip2mAXUK72SiI>Gb=T5Y6jz{sO; zOMAv8$LrwD*;B5pQb_Dkez(}%{R!8yNA7fjUi=}yVsnE z470Gjyv$A^xp+K2b9Q>7WY>n;4e_ROWAih7l8t`-MtL)$i%uC;)Rhfh-mVMkc^hTH zC!<;dVziQqI86I9?2DHbap8*#3uG);WLp>H@;PriHzMSoU|4C4W}HMY+)}~y_H)}Q zYe@WokT^^b+WLC!4YCyLh+db3>qH{XV^_s5SI=EsZfFMGqOs!UYjFTX}^Jw06{^%zN}Qd9o_3G4k~hJh?U8NMlgK%XK7`Lpmp=p zCTUD}cNg(G*DRKcAK$Atg|OI(j42RuJSuoAYWHPxo?#`Wicki;x z-VmqsAf!Z*?+L|l;cIW-=FKtJ$|^G%J6X*KQXIa9T?jvUxZ1pJIn%ozXp9*>u!!V@ zz^s{W#}6~Gr-5iZep4=?{{(V;z+s{4)ryZ61PoJYX?`9-@zyP`$#Z++6d{$T(sOgO zBg11p_hQv6R!z0rpMU=OPyhL+k0>f0yi&zscXg{ur?OwI-VO$ij!zvjjX(Je*TTxh z<38B#CQrYz@rchyg<{H#R;m>n#&6j1eZ-F|#i?#59y;c-C|*6c7ALBsp?RAVKe0TP zNZE`JK%EbzvTzN1dTZ6{1z8jBoSdoMRt?{nj&O{uNgj_CK-)9(ckbXI^7$)bYEoLn9ev!)R~vYbc?>S1zf zqF7QRw{rKc@pT*o!w7J+TB&I=&j3fc0c{TF*Tt3gP?d__OXJT@KbP&N~Hy!EB5fu)s zWbV}Q!^2_?k%J*rYPDlFgrQSw%M99~0FR0#+1lJ9KxCCL3jhA^|Bkqmf?!Xv+I*5t zKevjYrbI5z>x~9!cQ_dCNv9t@evC(FHw(GEBZaZ@gnjj9eaw*PyEgn{<6ph62(@%i6m=OwAm6@)ua0l@85fXJZOieA!E!Z(*m%ATU9`EIG>e#5D zda)WCpEktAmriLc?K+QklMCW3fB4}CK^7bzsRQxwK!;NXBS7rJt;6biog#=Sm&)h@ z(e~8j)Y$mMs7*=XSf zx8L^n_Imp?m>2Kvy0^Oe)zhz#sERm4i$37M^YfECb9ZX>8u4hca7`A1grhQvRMOa{ zb0mxkDcZi&fq!phkpv4PLf(&9@JxGq zDv}`qn*BXH@9XWmyRxFf0z@(%yN-9Oa6?dMAIt8GWpHO&~Tp(OYQCK zc3ZWKr@@2?fIb$lH*d?8s?(Kg@+1~NIzImG*|V1~UI}rUoH(wgBpheCQbgZ$1f3y4 z4_P;I)W*?*26Is(l8tl-AEa8VD3=e15Lp5@;ot|_T}f5o`2M`dwo$Ft508#Bp2Go*a`~ z6mA5>F*ukV9~C8XG8`@$!+gKgyg_~c}B>(lY+i5~=!23?$=J9I3CK7-5{@sNPw>*eI9|wn7*v-xD*RS6aEu{>E zHI>HJ+`(<|{HbJ5w;d-eEX?D&QpwK@tfEpmKSNf9r1Qr=uW#?xH1`rBr>Qj>hz(&! zvr;V@m580}O-)a0N(vJ**gr66$9-%W?jKnawV})b>VW7q*>r5N=)Wx!suab1Fg!F& zmdO)#*-Ri`eTJf%9Uj6~;@Bcq8EV!V>13iOk>W9$w@m>%2V1?F-l5?ke$9>Vt=>a& zNW@Q0PjI)0;mFtsJ4lRGwUP~<15vrj7qGcxLPFpf7{FkaZi+Gz$H(MD*}=gF4<8bc zp(Ea`fDWFYp5wE7deid@b37`h@71f9J3Cw1>;P8~>xm8f*}M1f0C;q)6}B~O=;he` zr%#`6?&ywme@!I5rm zq8)@Q)*aJJ!p*z1Lm}P{U1$dai_1$$OH#7hYXF34Y!}*3vQaLJB*SMe#M-HxPYBgI zZ|scoz=m5XjAasqo07Nzh{#3DU8^GDWx=9d8tP)OaCL>lM%T(^rAJsT)*}2@#L%H^ z*5LZDSes63^i^x>Ko%hxI zZb~KomW_V>`t{DiF1Z0|sSHB9+0)Zot<||5FRP=_o1z%d2_Q0=?u4Mkkk9^1KY{hB z!Dtf#5&;Cm;z>i~h}aH~58to7(-3V)EW9JbBe>Pei=52b$OtwNokBM7YPh`>!s|>g z9wgKeVmJBx;K)e2rxz1+e5|>tyalj2XHv&m!;qj_c(>)1yPe(fi;FXS2N6iWF!;Lg z*)=^jQFT4j-$yh<{GBjc(!dq^qD($2D_pr-IKvIla&AmOgzXe4)*u? zXS%14{H#(XEzZ4v|ACAq5{>l@3>=@GuWxR~ySk&DU2WAcsvDm^?Hak2jY-@_!x3~K zcX6@5yBF(-;lgpoI=rn`(;CT-zr!=U|KN}}w~glb_+(#i#t&}Z%4+V0M-TG&QL2M0&uiNsa@iuGrS2qXD03q_j6I%66?eOxD6O!xK-jSLAx zH5#3p5n!({8gFk0GMVMYg~{>p(#&$kFh-!EU>#%pQk4jI^&R~NGIBN}cQ1f#$sVOo8 zr_3T1!|`Ic5ee_o3Rs&SA$ihbcB5!)5{$FXj~+ew=Id{6Z(D?_ME4jP;+|5aYT!+p zxZ~#n-zQl-I7DwT;_t+G{lVhtu43s1hZ&AVxHxJ^z`nn?g9|6W_sON@r6sg?a3Jfo zVRVhvTbR2uF*54LS3`Z}3LDp~*W1F8I2VJHHBk!jR2(W<9F=nA%M0=eWSHky%VjV` z$SR_(g0T0juouid<$Z%qgR46@I@BRkqrrBJ3=flGzyI(-2cFq%N|0fpzJbib;$kA1 z6f|rqg@>6FQ$iiTD?I0ceq!RB&9kL@dbW3VfBE&dw{PE_oSv}@L&GC;cji0eU08sl zlauw0ji5M5R))@N4JfWrXH&d&b$1T3X8VXAX}J3Fe4#9TUy*1j#WvZTOYExIdF23he9YEffpK=V!QlGQ{)TMIzDt z%{Sj57=A>I`Sk`;Lp)XGMKdPqzbzO=8 z+$AOz3>V z;F1uB?(Sr`BWwVDx4b?=E6m-l?sPhZu`1-92~7Y>-fSDPWEvUx>g%W3p`nU_XzCER zCoO>6gM*s2D;JD#>Dq7`#WhE$9gFe$-jIcBCgvtNo?n<}JBa4lEL;iFPS|19907|q zY}_**Rb_<#^`?8u#WLDNsD}X|={h((B*w)irwPteY0^tXj=h+im?9!4ksBKwpC!_{ zGfx0Vlz{~Z|MdqPEA40u1UtjSYP~)<+`ke^RH|Y_6l_l@jJ4Gmt2IFc z2$^pUYzSpmvxCsdPX&cf#1Lo`Nu+wxw**~nJ>kjO8D1HMGWxRw3ChISSR@d_k<`l7 zvlDg0V%qS#2R5*Od4A3+Ahx&=LS184I3n3LGP{4HNOVpQ_xE^gHRuKc2B3LP^ty0o{_e`k z?9^0GGR>tU zKbCJwxDDrP!$dAGFE1`GVp#s4fBOSz7Gf{HioQOd`>LzwwivbcSDco&5IT5!)SxAa z)bgg$4abwJRyvJj#ki_=goa@U&RmmEq7fYqW75~B29Z<>S-Qww@*6R$M#2J}xGwS{ zsXlS!kxN80%P@X_brm;55b%~jb#0A60jo_w!|D;4;YxRQcGMzH0$}L(S>xowW}?3v z>l+w1=R){A)n-*NA8k53IwDG7eV#u3>Wis_^KAqUWea!}vQ=?=8RdkCgUUJeeAuWjB*lOq=wXsDxfIb)Ja~1c1McG^YFK8?vBJc@{RXepuvtfJH7{tonZufe z7w2bDNEu22_(jUak|2Sa4Wa}7ED#FiuC7=<-UmN-@BV66vfGcOd<9wbyDN8R=4QI$ z>JwICN}}4+8#JUU5&l%F2527W&=EtN&C}t);9$4S?4KN;lniUsj@osO9WVmklEHcy zX`tM^AT3+u3PLt<)(4GtjE<;rvBAFT%ndKA6N!@(M;-ItF_F4YO$mPUT+|j$T7VpL z7a~@ygSRQ!>WCDch#@OltFiW9cgUIxG>^NrwMjUG+er8IoSX@Tf9DtYr|e*sc)c&v*9r=2nxJ8HbojQ};0o2Mjv@s&n#te>@FGHK5K_nO zr9sYiCF10%wW^Ll)t?m*xHewu%4&hUAg^Fe%TWa4*|TTX*AT`CBJ`zV`TXn@#h9I$ z?dt9}aOQTS-YgQeTA76VrWJ-_Q~Ht7ql1G_8|!Ett1vS?-IeNAcM=*K45}9?k(iyD z9vvGcE`GcAHebl|w>%&Q?&HQr(VF`a2@RpEzdGi<+zv^WHke8g!*xWP>RuA`%AGrR ze*E!A9{#y~Ic(GT#KeF3yT6~Eo%^5v*Z=(EAOEx67L2}QEMqQ78ocm{JLJFCzmvd8 zJGehvQ?bsDlv1BNcMSH(k!0B7fVJwN0A-`fNE;|!#Nf>hfMWCGhmTiRIj{0M!v1GO zwxDt;u8bum&v^9c(dz00G>3=5ZH$kN^GK+f{6sKhMG#f%iFt`~4~~vrzIus>E-fxD zEH4?-LO*HW*~LX?RQ0pI-hMnQerI%OxOk1SsF5O z?t?=NDAu_*lc|(S=6BUX$OHQn1ks^`4)*kBx||?3DBwv_|J=nT_C;k*i(e5N9pqN3 z-1O7dCJ9cxpZNs+z&$G${61Ri)S z{xqKaNPoUpu9R5YMZ<^cFzlhnj~_pI@`Z4PY#2tPK8A0ANL<*hol$gtejfEChPY7= zT|X8OH%zKc>O46$MIM4u+}x;X!23lcejQPE`Ske20f7gz17qXk;&&=n8qHd)yQ_Fp zJUu@p_wo6AG!A=(S$z58#mA2yNC~>TbU@0J^9=Z4L+<+2VES*>BIB zLB#nOkP1A6&0PxBN2B>yR|x8~p;tOKBmoDHUV<=d^UiR?y5TB#7X%m) zLcoy7UOQyst#@{J2+oL{P=VHM>-6NLe;|tk<_bJ*cUK(2N8>biOVZYA5q9w1;jy4U zFh?p&*Xz9RxHV^78p%9iy0w_?`dQ%J<(2UX^sCS599Y;RdlJc6ro5U&d zx9jWcSOC0fEE*db9Suh!B)ddrfB)m}V;#}oetUj=EQ)l0Q}3W2HPQ%gzd%$i+7|E& zg7MXtU#&h^HR!rmnlD>OHD7wb$>-Oy}@^6r8>Z-#+VOf>)7|lj75+>~;r0`5k2(P8GV9qXc z-pO=hwM!$aS8hXY@M+`I@d*KkFg3ZtK&D@yo9E|5v1K78=<|n$B6VSOi5Sw8qob>< z%W$eYUb0iWA!8ei8t_cJC5UQNxjWfyZ&1bfu0D9!mFPxYQAjQ2*mzHG`pLt`-+lWn z>veQ;%%Y5rk9Bm$$dJ%jLrc(f3h@ciJ64}0o$q}Vg#B|SYDb4xtuc{M*l4j>$;^sD z#0`lF?&^v-RQ=V)kY$n(LL1rmh*0U1;}etf3-d$?o1Z>mO5(AY1H>S#qeL;r-@x7z zDsnsAmD6E5D64a4e(}W@ECLe4P5G?{W!`;ORuw_59BISB7#kbq*?7**SX^{^Hpt5} z2W&zUJ1%2XtKp3MGyU12tO#rS`&Gm5N(_$-N247TO?Pw-8eEAX)rAT9FV4;@r3&ku zO5h&Ct#*^W@6^FmzaXOxlRy8y1Sfn zf;IfG&MDiA$YsCW-WWQg}DW6 zF$n<~06RV-)zVsF5P2ixAZt2$niHMgy?fUw`P|X+Ls2LW4&sLp4@Yr2vK~VeflLj< zx3#&&?z+9;vRn8a_rZ{KWw+I0E%8GYfaN5auaG@VXmhX&Dv zx9{J*dij#es{P8ooClBqjid)Rh&*UEy;{XsA6T0`76-?+ytK@R*WZi&lD!i;fiXd8 z-bMq*31?n&UM~bB7zk!F{WB9Y9Z}7%8yHhLk?3BSUnFR7)>|F8#X5?mGX7)k&K&0W z#f#^-QWWt1%F5922oHZQ>vIwBjFX__lJTY*cCxYl=55pGmq_BdFXs4%AAUf<S6o z6HQ`yunb>)`Q<1&Nt7Lu|S%z-dA8rwC=nM=)Fk zc9!H-Y-SkJKmglLLX|Iw*oTeF^kwSGL>hdiYH>ft{PnBX`v-znWrI4{Rv}|!<0XvLs@!6Rh10obA#Mv1SfJ+|eA7G0`I~0j} z1dN@ZoS4Lk@FZ9HLbF!KqeQsZ~x8bFQxvYVWX>1^=Lk|HdTd%J((_Ptebcv2MvbnYO`t@t}8?6>KXaK?LkyU0P(sD2DpO@I>7P7wn*@3eba zW5*jej#(ys_E!?|zuS*bAI+>`5 z{5XVyu9M$&Ivm) z(>%BJ*gH?3v!i?QLJ&VABMQ7UI~4E{YUN}EFWJGGA@uTB4vNBuaTgx#v5(GM=di93 z;R)o|*4`0L;VdVnrbRN*)AMQT)9&8>>DeiX=IH3i?|%2YrR60|Ay(%4rm!atL_zkj z)C8Zq`}-Zy*g$`V$BJu8zO=Qqjf9iauoQ3KycIuVubS!+@0pot4B{`p{F2X$j5cb_ zyBq844Iy@^+aD`K9xyRJPBgcVI*e2ZA0AT>wxTRL_xm4z{QBE(yf7b7FJvu$ znd51{{`%|t_wHZjF4;}incYnH_MTr{Y<&8}GhbfmEUH{AAF|SW`^24OOC)^cojmIC z;SnM-Gd=S!|MI_~A{*-)_@3FB8FImki*p!vuxe-rm9ewG6{q)90ZOM(M&@mn{uS&(ANi;N`NIB(MpXa%4=c zA=Rp;YzMP=GHl~te)`Mn*Kb&>vC%P-{?1s;i2)1<;?ijw#>V;OsKczTf7-yEEUzq) zp&HQip&|0BzXbo`Jm>yHv*P+$7>%;Rp$+&S@_%F19i2 zT_i-wt*uR>I=xg_NCPBDEb>)e3la(jJL8=M9yaWtX+6*LW==^mww*};J3w?ml!bf!1ntsxY=0HGL0Kn5)=$Nciu z>s&5BL!7s=(%qdX6x777bKh3WS;=(*+zwn`<_CY%rxFeohVRD8FYOKm*M%boj&z>RDPo6wMHtJRJ8+vUKn=>#tI5$7PdiNfh z!pktdLmGYL_!Ac=13icfZu-e4N@WW>1q}Cj9_O6 zvT@DjXGh0G1jjCiLg7qrABoxC?%w+k@2&Mc;#^5hW39$Y^k?`;pNU*5{N-1V$$6c; z6Hh!mG@P?UdqS9P{gxD6HEtEU5P)B5R3PMGV8I9)->j|u^wZC!k_c_s-IKFZLfX@F zxj@x}`!hX#y`(|B;l&bM7)U@kyvLOTW|2ia?+jFe%fUx0FI4IF$J;f znq#XqoL`z}aQmpUDMPk<`SQhw_aBHMa)z)Nu_=M3WjsaW89v~NM2LdYCoLvgkK9}>k?1l{_ zC~i=HaulHqi5alP;*d@e*PUOSSVvgMDd<(aL>Z2cd0G6u&<`4Q}=4U$VS%Y=n%H2UqAi+ zyYD8aCcOdB&Ykk-)TUrU9NGKYj#jONb^S?QxdUdHNExeqXLUw1!K(V>A|>pPyS?TxvGzt_6t2 z#S$Pch66e#kH=yx9`iZ-)InD8x5iMq>#6CuV`S*YOcL12^g&Pg9 zUOrd2yu9FD@CKqd4R^MU`exKBsvNDv=EepHg9U{>&(F=_h%xer_1%j`^z4E~2i%ER zNB*Dx{O7Z?)8WBk3HbQ^Ud!Nx$XhJ{qKWyGOy;tSg~NI=CdK_$Q>^A(=fUGgMwp-) zBC&N=tE|B{Z@wBC88u?mxLc=~5Frh(O#qvjoik~?dnV{qyoO?$yG*N;#!41?CnZ7` zS5<1H^Wme1pyX=38tY2L;?Y1T*spW981aUj(s6ndIqph#4Q0mtB2Jo{1^3`{7)eqJ zopttzUm7rXdv&cNiG1$V+K6)+&b&twL-~LEw|~Q0MiuOXYwK(H6CgVou0P<%@qrZM zA_N1@ma`gAJ49S;rg&b>kps%miXb=cZX~qZGa-G?W%gZlben~jM zdKmza^uX{S*_+yxGa1KA=rgXO0nYI8I|}HV|nT+F$aY_4`!M;A$aLrtVe-XaPo_pahdE?@VgVO- zJ-9ABJDUDK{pn9zTifBVD6||kn%j0T?x85bvQev&(~G*YQf7QRCBalvGgUww^AJ!f*os zN#JUCD*5WmFDIu+%0>IEj@VGhF=sWb$6D0HmdabDv<_?vMe^*r_L==YCj)YG4boKi zSEW<|2|al5faQU?D7(H^)gzcpI(}M5jZ)T`w;z+ePG2d_GNvR(tSjDy>tW^a zNc?91@aWrb|4OVi(JGz49@tMheT_qU{pB0NwyG0V<8~F0gk1IdT0{i6zd+FMDC<}} zn8(D##M07I(=-e)xgM2`cpb43RwS)MX?fPHN4$yU_^c7gaRT#6MuscA{_6EN-~0lH z2(%}Z@&VSN+tRijxeyo#-*kC%Bc?!6>xpGI9*qIt*Va}^Pyl2gV%*uunM8se$$;0& zni?&!;4<}?4W_KZ&VZk+0!!2O`|WMn1eEZ$n$n`G)1N&3LQEH)p9SRmdit|Dr5J^~ z;>O12rIB5e<@ZZZzD!1ezvg2^)3~i}maVetP&j>k-D-$>mlu~Znvw5=`P$9a=JsZx zTpAe~5<^1UgJ&UmVuj?K6z4iHrjf%ewd-L`E%rbW2ozobpf zTGjY9SU!cqom6Rh#Gr@0xvELb@9N_64tJbPg#y9-gT1xY)wo|!vm76H!WC%fIKY3FH%@qqJE9%o49~)a(Sa_fx?Z>!t zw72ixGBskk@_9|=P$kpa_p08z#uzm|s5U0TnhDBPcCn(xu;G=`d%-#~_ILMGoNwHj z;y>u@>>nItMtHo>pI7;%q(S=nCnrF&c_h=-BH<^g#mOIS`U8a1JmB8${G%d7ojxJ+E8ulDy301(%io8A3AGQ2C9P=lDx zyh$-Em&LH77HGrvQg|DZ^*#yTst`x25?(KZd3t(69Fls63ZTR_pe?I%i4kBG_v(YZ6iy%!wGt1ttatlG@x7E0%4O*Cj-Dd%M54$7Sbc=LoJ0G6U$8^qkiF zr3%6?4h|1>cheJAhaM~L=$L3qCh4f103 zWOm(LQq_FG3`8Mj(sKN5iPA>zNLX8ZM5ayk;=GIQQ!-g=Zngc&wQOJNvnmE)q4?CV8lt*;zahHsquiy3_)w>EsI1vTnEW?5s35 zg(TwPaEB9jQc-0v2ncxo{CTt4V9Euk13?_|;P8;&RBHeqq~#0_h7?c4>LT&Ksg&hz z9G^zbdKk3l(ASIq&E|4liFiu;dxW;T+-=tFhqvktJZQNjkV^hhDM`&9(8}%jJ_PMI{o>x#47M;f79dv(~*>8luS*__U-Wt>l^FsdTV%SkS|`TUQG2J-N|m14~nl? zbiqxlMR)5>3}t};o{m8#m6TFKCes;>s3Wu1=1tjaYL@PDf4|fZW6^+5tsS^g?33U@(8A57MPQN@8BL7U?B zTUdxj<8~@pXGVC1{(=6PnP~vjeMJXy9&LmkGn@Esg52818o!BlM#>frpFMl_#giv0 zhT7S2oKw6b(d+vk-)3&FyNx!|iN>o|yn4U7zIJ+k#^2R(Yu*zt_SNgxiFl%IJTPR{ z#8Az9Qh^rV-K;l2E#XjTYHIq+SFfBpQ|2baG~-EFCfttMAxbC=dpu4w5SVgTDmuzQ zai`?-;$;bj?(#WIZW6CQJ=JQ9E0}40{P;;yyl_qMjSa58S=#Ex|i0qE(=Yl8ap^rY1~6-e*;m8SM!Dh#qaz|QA7@HH)g892DqeGelp2oLXE?Iy&VvetjM{oLBB>xRGhG(P z`lKZ=IOtxS-)mE_t7|~}w4Ex^IyeEi5Tb|@;?1?4VKK6q3+40H78oGLa8vSg?#sip zRQyp68sSVJ6mTqWOp^)0-AS5yaG2D$R=Z~|Tv~;5#@H~zQU##qbHIIML}y-ks{(VJ zORAIddL5Soi>^aPk|Y50{$-;F&Sq|Rws&|}m3EGf;eOS>XK5R$Cr*IBGC8Gm7#vk+t>y2h1ucKn8 zq)7+|1-y9v0yD;n$imf}JuyLCaFxXl>6(C2(EsAu7hGs+dWygRp52r9rOJ|BEdXnk zP>;in$6^8?_f_>dr0DH6DG(r+4pni6Gy1l*4!Wc0cSceM9v3TKoiLK@>-H{wR z7PGSQAQTL%AmuhYXrwK~t<%%9vIyw?AVb&Tp3SOhGo2>U3C_;UVKge@5Py>@BOLV= zLkT!=lE99)i$}%ISY}4{)(iUJJL98cPrvx0(`0a*LTX9Oe|g5!m6#j*^r#E@PK{CU zXKs$)W4h^!3o)iPM3UEUP4RdlQh|tyDnZ93QcwKm_0@IuRw6|>N_W_EuhWQ5mIDqE zuZ_f zQtI_uAy;6^#3CCC^UP$WwR(-$bmS+hmiPM@lSZwMnPIHh<=WcXk3arMia#_wGCnrm zo#GMthKGhD5y3u>@~~kkwi;@|0C)_sBVCFuixrNq#Qbtuot|Kl%gf7vrTkc~0Y~lMV-y!aqsjvAf5y?~2jFI6Iw835&5Hv6jbAp2XDBP#zy2d-_xdOHpHc zX3^rMF>(-Oudy=mF8o)PSt)gNN{0$_J#)v~0Qpl%r??FpA|s>Wv)wZ?Coa+v?(FIA z@%aLv4Tf=Wus;@!m^he!Zf0g_VHslpC9q)YwYr-Bs`sQ6g?yeIba;4(5pzAzjK<#1 zuG6QwH*F;*^sanY7TCIVr}z%+UkKVR;y4@!ui&Zp@W|L0po4kmeI02UZin>L9ap!k zw|;P70Gu??H_#Q2TVr%qh$@$pCd$wtV=kv*CttfeyQ`m9NsRD#mseM=0Ij40-I$YA z25g?6o#PT8tgL{{fo6MUr)Rk6kP*XIjrF%`n>{T<#9SQHa;%CH>ahU)^5sh$ApVe#FFjb9 znVaL*`E35|OuOa4fWCfpTaoQZ9nxw8U2}?PY6b_s{PN4EPoH!7ZEMZ4@^aapYb!lH zITdXp0VhNhQ1=m6(>bfp-({fF%IO0R!!?^NmUG*BKHNc}oR3u(yIn~!P1@q+;aLxM z#E|rn$=E-olHFMH;l5OP9C@uXBx^nLy6zaa?bZT-c5$`%YI{fhQqk6I8@uZWEjm7|!jaJid)X?{06}+fe$4%IZ15DXE z$h};xE(z*aUwy@j*7@Vvss9&Wzn+<#9_Sw|6z{k$NJ?p9T(!zX3*3hay>dD1sn43= zuqM^MHkvwR?C4~q4lNB=_}akOVYsuO=at<_>uiY|m3c#r{~^vDNkUb*|}l2(UEF7*qL9b;W8P#{lqyUwrWe zQ|5%87`^BA7Dk5%8N1%HHnY z+jnnqpNy(mViCXDucIiP@r$~_aGvXz%jUAUijm=A$2{r^755Irut^M)vdi#rv)(M} zR4l~&;&5H<1(~!v-(`_HackAVU0?H8##zdtB4J42SWYg^iBhD?(OAs%MQYfjdMiPq z7Vq&h?wl1km`rqeJ>KoDt^NH2Fl1R$fu*5=K`faZ+G$+!Nw?~?x8K{VW`sn-I3HAX ztbAp3n4IC{|tZ*<();Yfd{rY5I>@18cuk$-iW3_}6r#bbPU|9*FOj}#Q!;P;?v zu89Gw%1N>f1CCvib;bh#)*JPPsC?`7PGcbFnF&H&i3IaFWMXmrC@uzrk_EE?F4Ng?kTr=8Bd>HGNA;#DZrs`n{DRp0UH+4k;U(e%6> z?T^n?A9&6&YfqJIuwM+dN5@AOT5&ZNKJb}DTswBh$5MXtv?cr*46xjI0&X8R3ita8 z`CH%2^bE`SuYdjP&i0o7zy9$L{ey$d-^Y(1u<6Bx#fhn@xJVzw0jV06mbNd-_m!}* z7#f3tlb~ri(Yl5SI;K)dtdehWSCLqiiue&A2M$YFHC7lA;R_3o1tU36t4-~&%IBYD z4AkMO8YN5$I4RD>t1EuV9Pj`}VijU(xyGS})P8(UmDV+$N+C`ewwR(B?9BCzbGumi zP~QNVBHv>4O15aN>;6iNa(^k zneI_*-K*B|kN3e~z|s7=LKVi)$)vchQ=E>JWv{MzPOz$W;zO#Hu*Oq0ZsDx)_!-fX zXkc@uI99fjH%BWij@3+tp?0UjPF{(RISEdN<;uA6h=sT$%wTnO_4DV?PBxCYX3~HE z``;@Rl}bAzir?uU93a`bAlRRs=CWDfk;?U_rg${Mxhq!K+uH@oa!t{TMk9c#2P+Sx zkEGS3CB{(TbX?Y@2e`Xyx7yA!30)uFe>gom%c_L++?~{D^?AsW`!HJ9X39iov$rN1 z(F;EK)vtcl)6;A11~J=(j^g7=Wp&td$C=rg$#I<{ZftIV>lysVj~-7?&yc9O?WL>q z6>;}qZ$F#KSe-#_Xn2^E&Znf=1LPM=-OvyrkaZ{G7wZxfZ-xj5RI27|#tq=+)~5D* z6Y<~u{`dd&|N5`}y?s0w>*B$KhZqLfBd|-)n1YSfgW`!3;#J-rGz5>a=hi zb*|$z+Su6m)1Us?YVSi29zIxHSRy9_F%Vy?jhd6ScLx(#{@narcPeFyTlY@ZVt8m6 ztaV2I&8J{11bQKT=}*%@)XS5o1O#>XZ`NwWFM?(WXX z=?Q^jV6Z{@2D)#PdCbNNsp2)6xO zy6pN4U7Z(kF=TlvcFRO#Hn>ooe4Wb74v&v?xT%A%Gd#S@As6Q6mKT=-ULUc*VQ7bC zoeyEHvU(YRc_#^wG+6$G>iLC*@rm&}sp?4vCJ+dM9gmNWc+KmK0uzJD`t9n9`~UEt zewWSVxjg{2C{n<m{XA84}90@FENXl-Ms*OL4&?2p*pgvPWy4R zkyGOnfB3^6Sa@sJ0IGA%?(Rq|s@`WK%Z+qKFkHsv`ck`0pi)5Yi{~#=-QC)jIX@S* z{nQj;0Q6xy;VZ7-!jZ{Yu#ebLcizE*v^@{2-AUu^?Ck#gzyG;l0hQn5C9SFSp@kMr z7+{BJw6e5#b)7yu*w>YV;VWx+SCgw9iAB`r9|9)^0y^`+;I!k~t!4)Pnz_3E^Z)rb z!0-IR{L?R<#^P}xr-O1BXr)}iO0G>P4O{GpL{wE@tErf!v-9JJ53GOJK3lC;hK2?i z0lv-(nHZlWWhs}+rX)H{B7Sw1CTnpFWey}d+v15_^dbhkR!CR*>8S6RBLF)i&kB@= z*Te+ta8D#+qJ{urI1$ZywJs5^O2u$})Q;Y}h{tI$PWP-$f=uRAVcD7xnl@RTscJ-aAv^bpq`d7a4{P}Y!s4H=4N!j97 zJ%C4thdAO_uU`)i4P%x(vvZop8zZ(tJD%Yh=_}U7%$#;#-oATBJh;8hmCHrP z($3P&h=fBKRX<6Xwy#q>EqBM-)wDoH*lMxL7%QIq(!_(iQ$1V_r;I(ndGm(c+UV~C z#Mf4~! zUkCf;G7u00b3tfoYP=_<+M@N1jq96?@q_w{#XPwqa1e_n5;NVrDbrykT73+%wr|cr zZz63i8+!=}E%#-#oowxg5AXB&f)sFVzZ5_dk0+Y-#_s<9_U=|LE3c?cZ-Q&26EC#- z`P0GSAyeGl({m@(-dLJnAYr&Xzc@cTFBOOv(tN{aB9bIgNweF_bO#F{|p z9ZQdKBRdD!Vd2l8J&PC>pw&jzh&66Qg|9Osu6AT_a8Sf&(HP6$^=gaUdw>7r=oo)S zNba^%`G{oKrBI;IJ1n^>weORHOY~FCins;hTG;ATlzet|_4oDTlgCF!c^;NLzX$xK z)0ei9&};HsI+5eQghEE?$dq}t2`7c2#^lV@;J^^ec6Dv7w_mTE&FA)|0dtM#8=D*l zW0_RXtpA%gUlO00U`#y_3;|5ePfsq+E{p^bv~)r=<%RLrn2ws6sugYvy6jG-`g(hZ z1_yb>>U|Y3=r=_(XH`5FsU{ytrA&{=dSI`wZpgt|vD4Gju2Yi%We}ML7Y6RD>gL4P zKYaL*fnzA$w!S!(Bu?9bvj7*ngIiY!AQ{24GkhZV>gn!L6LY1Ezl(K79XmX>g})HA zw6kjLjPJT$roZ(Zi@T(+7vSdccwHN)tM<~FYa-D<(2w`SOMVh%{GoKpR#sT6P9N#+ zF3-f+xwUH6CMPEPdV2`DOi3~+?ab?I6%A&jF+dKQ$F3~`dDUNEy>}G+cpquk6z&f9 z4;Z~0rnY@%keryGamrb8XldCGI&I%U;%zEs1dZ24a+z2ouSt4Mlwv_$U8b#gFzA%NzIghS zkIe55uF17qGWS8BDg`uiU|dc=dJ)7P2IjiX8>QZS^?UjQUt{oMI29{W!OV7ICE zGoO*1l9$-sr}_{7RR#nsez#V$5!BIRlSq~}JmmNRU%h+9%{zJmDL+U>I8 z7<}N~{vOv9s3xma#Bnj~YfNOW&^|NQhk))`5r zx?G9Yg9i-!L#ER0{Ti9SsvLj=!BCJKcENsFccfu_UM&##uDblRGo0q^K^aRn3kOH-wge=E;Pn#NRh7oj z)oQ&1{SyBPtK}^)uzH)wY=zA0uy2A<5pJDLaa-8nedvs-@a?lAYiLISR0a z(c}T7GF?|SgsXcZm@y_qwQkc0<01}isWW(U3s>!FdvK;?3D;NYdacS5wG+y#v-1lk ziO~ynbQ~WZvEKUnbd)aXC)Lh0S;Mhtv|6s5pPou{a9O8W%<;`_CRZqk;W-)^92hKC z%2zixJUP$68<9^m+nj1~!6ogs z8Y-HNMlzKO2*k(@w5(4&tbHPG*B^~^f)#rER4ai2l&r0yYz)s?JMTF;DgN7|qeBwJcke*%*`Ug&g06Apx4-=@KHAZkgZ3Plb6Vf8 zUcJI2u-dtZqitd8!2zQqBHDDPk4{NCWNin1EPCNB*5&^Xp999W*!|I!`+a!;+Gw68yFazpPL6G@}@X$-pKX2 ztxAjZmWRi@89JT~&&4v;rjhkacsw}AXgnb<(r6@_xylfd`PZ=Oe&h4=^G@*Gl}8N@ z53#h#wD7+rY#<(AUR)B<<#@;fF;U!_LoK5tqqSO9n^nRw z5_M&)K(tNUZej4xPS3Kp*b%)6v(@{xa5Rn z7<0#uL}CyK`mq+r{7Qht(s;J037otA0}M$UmXgnEk?bza&n+!1cBN8|;EZ7@-&e|} z`PSRpC#ker6_CL)40m*r_3~_hU8NiY(%k}zbIs$!LsrD22M-BIWomNLBo&&IQU|-k+P@i1iPgz%>%evrFykScn*hxm||5PDb*5%$hk-^ zM}{$;lau3UG(wCBg@d3R=DlCSFx}lrvZS7RwZ65rk-om-rDmsRBIy@p}bYKei#G1t6^2&~l z!ErL1kU*99nilnh|K{pC;0r`zQ9R4LcRw8+9dqB8uU<~i&H{mR*<0~DmhU?{!-E3@ z*bT_NTDdP5HQKYYvl9~&%&zr1*6K|=P1k{F=F{qDRXg|ea2E#Q^Xe+*qAIGII)FQ@ zdTw!HQ5vqfTh^rdrpQX8aqSG701+s4YB}o10dBWeyT?sf`~OWi9BQ{c zBK9{lMVh=ElZ_gdbYgf0<`S8udB} z6K-gDY;;zf-E-uKhlgqf1e*q=mJ_k4BYA-LKmEkuI9*;f#w0`pT_{Q65opc_0EDJi zS#Vu63^neYggX+8kajR`cGggo;(E9Pn0|47CcfWz40wbkSjhB-P2?22&#x@6I9A$${-0}@@kI&a=O3~k z90kVgMim#dx4XB#xjr~Fz}s~w@x94tS4fB4jOp0uDD!o3c>&gm#}l0q(M9lQ5G4M> zXF7{A@{$IPge}_9iK$;(ydd_sJxu~9lWry4x%2b$lhaeo4}0T{0&3aMVJ$eQl&c5y z1;BG4BvK3VoPmBN+->V?*WPtkk~L^mBXw`HX{u{!E51=&I6OMS5A+Kkm)-dqK{wR{ z+zb=HCsmKxeRF-irQ}=b!98{oi{dRGJdjkH)iz(cG|!RpN^?&N<>c@|ccc|j5udMC zsgjcbc7WPkAB@|yLt;fSGRAPY*=|bH>8{A16S0`TH$`%Az|epBwayhySDnw!2VBnm_VqA%8eWyi@Ri}7U2c3Q5t_jWK`2SlPqj_SIlxlupP zo<}Vf)0b)7kQC9+&v7DBq=-eW^z0PR$Lohe;u~^hpFEq_>xqa)F7CKTdVwRevk}Gq zS`$ZBDHAXpjTEk|R;{a!-!fW8hMC$UIBf4+o}Ft`dT##Fg9l8<`sx}FkH>Spwzx2N zyOLpB?QN#Dxir5p&qOdsZ{NPfVc`xuZ4dC4fK)Cq_1<_Q>c|RsUq+Saiy7dj97{WK z7evC4GWdyv7(Ky2W9mi?%K>FF_-OthT8Vc1#~*(rNHAQ?HI9t8akXIlxOd?R*VorC z&d=i!Nw4%-ZL<`94iDWi_Nx70`dC6JC`#?qv-7n0)YFWuk&hC=eGRFqsY(TR-`$mT zXLuGB8m?Z$52y}?7~!r&7r6o0ITDS{&d)|85iF2f^TkgeKVDp30*R(4r>?KAHa0d* z@-NzGHe8m&{0{W@udF;^G{kMWy(3{ElA&1qtFKG?UUDJ)K+-1+6jU8!_qjho|>liVGTaCV^&;2&`r;f^p^0py_yhIkxXQbJ$2D`75H zGV&h>&#Fhp9Y22b7>CHa6DI&wpew6C=!kc9k=TJv9V>Wux7NOGau$dj07o(q?K#C_ zn66PYUz7AddGeUqB+~FYeFObuw`;3wXD6qsPOUK7Kex58elfY79bvoM%rjdC~OtK)bg|jhlgLieD&h_bDn3<&YmR$+R@=!zzICAI75Q4N5{M) zE<*gW#{P{@cD#XnjI`AqiZRvPnr9=DkvEsimDA(1aHwNwaMs48o`paf3UybP}`viyQNh;;kPCh9kfkO>VUbSw+7<(c7sPJo_+D; z;qnT8Y>nh#bxoz_L*g+*3;c9lSm{Zoe@_T%}Qh~OEOXgajEgqF~8SydU7%~ zHT{qO_>Vx7{lf#`r)Z#p0fvhOxVXGTULH0k&1OR)NDSbnb$+|%lya$vw_`$?cUBqp z4{9Xz5MQ+WXq~I>42YCh+%H#Gch=);{0Bi};BM>0&RREfg*+iCXf!XN1m?!&SA~4e zKRq#~eHc7@ILvJtjb_q#TcqQi>Sn}wK23AIL2xY<%N^k$ahX|RNvGw6(k)M$zlw9e zRJH<3oyxp_FK$S$6)L;XrOp%beV>17YLc*8GMX_H!ENz|3|}DhbDt=dG%+#u`0=B; zxp}{+j_zHTYQdU`346F6KIYhljpX5HrC3R7ym|#(Wj_A$m%lLI!~j+oex!d;c@>x8 z!Encn4tDG+uvDM?a}MnV5%Pyl9hik2&%Ro}8{*IqPrB7q^E`w=Rg~BsAa~E^Z!=dQ zFD(gAQyhmZbyxUfG9bZNEb17wScJq3F60MgpmtzMmm8>;<=rjC+Z&^AMxaK^K)&F=kQ=3geUUCxOR7dHR4LE*O!-; zx{^tzr4xbWudub+PLw54Xb>hQ=&qt*Jjx(Zfv#t+JATK0wm9T-&CfJLVL zn5b?C(h{Qat~`8*8K;dAsgTQ;OtO$!2HB`CEFww(d{!_Jyf{0n-dFK-L}HyL`29}x zYkq#7&w#g&PL6eeQm>OwJ74Bb9CD`DR?$jnDbeg;|3vpYYn{LdaRuiWm&C}p zQ6;$|a17O0tMb5NOhq+Tgv@e@D68%ovA8$e9#LkVS>BJ^<&#Vw6Dl>D!6C4MX$YRl z4lONXAxFiguI~SVA$5y@guq4(6K4b%F%hmQj*-L-V$w%PC!)|A8eCYI7elztUj;pR zDPAF~o?1Ui6^6~g^87lJo1DabGg(Z!+)FI#SU8-%p{qH%kkFno5CEb;ZRSSR3H|^c z>Bayq69VZ**`dNwM1-k>qeG##ST*)`6lU%v)7H zMy)`Jych&P)<{OXxVQv1{r0W|KM20GSVvy@%v8oS?S;gqq@AfbVmR>Sr{F4Y?M4zOI>hNVJq`= zzg0&reU{v($uBulqbcP=iPb zdV6>{Y=UH&+dPsafQRScg&#d!!MH&-ab5QoU$2A15cn%VsCI<_R#Uq7^Eg^dgA1a# z|DXiSlLo2Mj*H*qsIIVsd7Z;g5Uwoy>}6_P2{f1hf6A2^Sy#*I&QWmd;=Zv~A{Ge` zNnmgU&L2K}z=^xE5&Q@l19+d6fPE8vu|ikz=o-MAmKhiYN2wrHI2GMUXgZrU4Y(9T zQM@bJYL7Yh%EMrM*oP}n+}hg2%~xwWh+^D%Yg`f*&-=1$aY=+UMwJ237M54jLn0E3 zsB9RANIn!2M`PJFIN26!m}SY;%Jf^_)Z>+6>u${11 zsZ@5Po{X4CA*@G>(GF|ybwI!`c|{GG!HZ4f8IzQNGJ~iry=$ z6KK~y$V4nHE#24dS(BYAsuI}?A13+|UtLi;7g@G8c`*W7PeM_Gm3iZgR4{h*rH-ps zY`xY%+4Q*om*H<`hACJrC;OM z$g#wCm`sunk~b3!Qe8C%(BEZGmF#v1p8`e8?CtFb#jlqt-ib!LUa#sj-7C@_k#61<3#NwR zHehkw%JM_uWHQBLxEhhly?EOBI?n^#@92y$hKI*T)@)6#whPw5Zey{8HA%NwCfbVg z`$+G&g4+@8Q%6nA?+cLL?C$R2;wrUjy(U^m+>!0pa?d0H7iS^?gP-2Nd;8XJf=g8s zt7er|NkBs(R}#TLF$k&>Fr{i&=dY$-duw9e(ea@KG$nF8+CR|GT=1KJ{n!7~sy8Rc zC&3Mehw9a4hVRRgy~I;oSKV&p-%0J2~ZFZw=sLNE6eOV`CzgU@E1ym&=Whk3D$!kP#CfoLWWXP5~U3 zR~MCP1vj$2xrMRS8;#M?5!ZR|`lOj%^l z`MX7<9f)T#*@J__aJZA-)Kuj13Di73DuEH#fl8<#UUqefsmHY~5rFycpa1;lZ@>Mv zR=*zxeGLuT(n`+F&xboh2m6PBotx_$r;+ZmA70^ar!o%yxMy}`5j@`P+#F7m6>@xX zLIOD^5ylj=BCZA^bh}+Hmx>ZRCc{%NjSM;vC`jS?R{ioKl@wF!=;#o0u(`E?a|9lq zot}WSl>iapZ13Gl;eM{vwT_v1nJRTw(GD1_qhFC>l-aKX6!cpdFY_ya&y-YXW1{NkHm08jq+|N37f z@e*vWlk$FsQ9cQj+A>!O`&#KmJIVPliyVd5w zM#o0+YZK!WP8v&x(0-96wYAX7d`0Tcp0<9k4G*ya$BlCo1j9Ag*VY&o5?P+DRMs|3pexWJ0n?8Ayt;}j!wkkI z#(VpFBhd(MYGHn!@#O9BCw4@t^2VZZ`v{8%gG6gU51^KH+Gh=E(RiHc@OixWXO;u6 zkAreeD?XnZuaAz8c6N6Ogrj3)+`Uw(kUXWYucd&}_BPv~_@*m9Rk>rijI&}!_$y|% zW+yDJ8?f1G1IoEY<~C!Rp}i7UzDkpa_x7aX@kD>GPQ1!ilbMJ`ap@7!Ys8a@)cM)@ z*7_zPdC16|aa@_~t=o4MSxq{PBNe^B&xf0mZlgy+b5~c_{FBo$b5Dq`$ll!k^!A;! zJ*KB!4>Z2$)ytO;A3ThAb!ofk>gwYBLSCplMJy*43=ItPj)z7l7K=wnJ$XhaVkmZw zvGE>J>gp627fWOak_5Kw z$O-})!H_zm(wFJ|y?rh^w?DomN=?no%+86>=P&>M=g*&4?Kla* z;V}wjaccz#mG4l-`AD_5>q-dn0E19UM(5A(j>F5lz{sZbQ&bT~`7>S4F^}sKr3;1?B zhLp~EMk4BJwPrph$0wX}HU8IFlvRSr-1CHP-#`@&?RL#%I@JGAE}xv9V6~kcA^d4b zRRdKkJL>N3PMI1^2aZy#u&EyW#pcHPx8MGiEO8}IH}T3W=mU4N9=gKslsR?2-1lVUB288{FCQ?piCy()=P1Zpvv$po&TOB0+< z-)6+$B)l08=k2gFdze)Mkx;`R9MZYKMo1uoM2Oz1+6sYt+qh zU%k!V61o_l|L6t0#V;`a6%ptIv*x%di(&uZK}27Zw-YzR1Uq9|;wVIiY=g zVw|su>uP9-V7B(@lQbb_q`Bk@e{hV}SvM3T^z zFxu1{(*@$-i|guB-y9ttdHv;AW8-6W5*p(>tJhhyfV@t3GQxe+H#b;_uifUows&?) zqGc>IYp%LVWIe_`0!|`_<9Yt_m%nBUIX>hXxEXwgLMK)IecJf>_#xSqbo)R6DI@QV z$qu8@H*eldOithhPtVRHEOt-()9NZSJ2f=}p5}pB$;0H=LnCuDvn+FNyS}jry1y$G zx%KSa{KUkhsxQ61E46LZ=VoVDmY0o4ArIvJ?%n&FOX;`~pF}kZm}s>C6kd-vm(N8k zRmIDb_SOb8f8815zmsdVQX$$*GySIq9>hax>_9tE}o` z9B>aTI6prlBn+5>GH6)(6V)2tDHIM*O-^F!d<>f*ftdtkp2Pjy-z# z2pc06BdU?uktDbyIgcHji=9Qcel2-@Te*C2|CmS!mCxW8jx6ZtXZ!gn+T?3 zt;fFsDDkvpqJt7?ReD1#u+35LrCef|(Z+AP9)14Gg2I&%eK6pm!9i}+8R-Nu3=9l` z(J>@7rt7p&jWeR`&EJ{sRukNSg^Uah5<%58+ic)j-sCdGmjHH>Y=i1)Qz`S{_dwe^i$t^ll)0&B5&U#pV& zGuf7q-4lTE$lS&VwmNvPThkU)`HULB3hodh(%G@HwD|DB;y{02=H?pr*VCQq?d|UG z?IGpILF2?9EUz?;7U1Li_q#hg_iBx35Y!1s3-b$!Sd4U{QEygNW#Atg8t&`q1>7yK zJm~FFXBPlPjNW&5%r}TZ+knw{hcR^GCQ@C=7z?bgpTx0hExC^#Jo@_UulcZ(LLY%x z_U1bMU}fpozxq|QvlF;L$i(_ok^nTeJrY(UApuW>!-_^EU=R*<&dn|)Q(Z@g$BmW; zlt5&~Iwb~GC~RzOGHZ!=S5VCAfvKs<2M?C9u)n2i-6>MxDC1wcD>K^J%x$e)+1=hb zIX)qB_&mPV&!7ML=fCXj?l>NHUc^wEcYAxAIZCFwiMz3QjHk;L3a97iZnyK`@Q{T% zI6O?qWTH*Jsb6i!l-1z|H1O|a&MWqlC@ zCvfEO(BR9LFR(!Jn5%U9;X@T?8Arhok>kQB5qkUko;-PyNOlp)2&jGwKj7WA&->Lk zUoS2#0P@J6h;XChqe~B#$?5Kc`#oY;J(kMn z7Ab|-=n_dsl2R$u(yf8rFO@ktQB|g3Yje}11LppEvtHCrPm&vLZf#uM2%*|3o!1`< zZ0&6S<*$DQcf5G<9LoftNC{Epqb(OWceb{2*=!eyuW^q0Jf4%|;~&2Nesg_uXmH@= zix*ty$9He{clXGrzkL0=E7gqyE#6m3mHV3;5%L@z?GqsIQB%`X~c-!7C393eg&hdDK z{L#VTeYr%Oo*tWM=v1!V5h7pp#-bgWYn@Nls`nnFTLIF6LZXpQQV22)o~m3_-D1N@ z(pvu>md7e+&|db+)l=mFP}aCyI=g>o7Zm``on|6{q5aa zx!M(rlbf3KLS%VqX>xL^UaMtAsZ_Yh-sEnx#-@HrPPVkXghR%0tHsW^c-yAeOQvm< z%MBmdl*iK~b^@9Yk4XJ@_V$lYPH!@|fXG9sot|a$xwhXsH8b_=-~9$d@(2B1YnrNA zy_iI6Vk&av`LCramc*O6?Mz1naV~|&TTXduLGkJK z_Vr6_#^Z6Qj-@&^J!2cp#ek0B0&xs3IeSQ+_LA6MD&rVKuw>SO2{PI=* z5Wf*|v6LYFeh|mlu+(6x^;-G<9!EaExUjUm?B`kl3=yx8(N6$RZZlby2LXvYvFzQ3 z61d6ng68Zz()chVCAB06@O`+mj~_qbN9?@k7L<)02mN;LD>nSr`}gm6c6Jt*7QcM; zQj*9%jivH^Awl4_1b4Z9r*y3Dw6kF>?R;HaL;1W3k|aP$gid|~n4K7(1c&De>PhE< z<0|Hv|FJtdcX5$c$-XC4#Y@X+u;wW=+PO6A^3$pS5% zfD-9iza4<(ZL?HWLLv2O0Q!Ixzx?Gd$41AoPa`2wrI@2UeDdV+qlZseqWDT+*Vfkd z+qdu1SJ#shliK6y?H3_NxZ}QB1C*$c9S?3@Muc9RQGZ|m!rVLq_3p>FKuchU+bPB4 zfZZhJ6bgZ?W6@akzV0Z_^ZC2Y&28c-uu;_(Vy_e<^cb#XY^2%1Qcu#C7rg148Q|T^W=;$C7nDXFxb9ok(mPD;~dwuIT8Hm;!n_FjR7w%kK>A3K$YN&}{ zm2xSQxd#2Y-9N@^ZEelT?vf_4Jkl3wi5CaM1>;}E5(ucQ;9JRgUW-yHbGx^*tD@Y| z(UKK>nF3m_+c-M7l;FkbNu$-Ao%?wYQ|f+xKgk64fX)0r|KoqWdi|OJd39 zrYHjwGgj~81RHw0dmVq1`caK>Ox-V)irXPPJvp@=+*9#;8<8sOJbj@ZEuM<`0!?BS zfB*M?|N8YCcg`o(>OCC+_NjTg2fNBx!9OF0OCrftK2)vR)=F3^(RSR9AI#rXZVSa+ zHiLs6>>nUT5;A+W_tj)hm}_N+g#w8e6Cuh7v28a-Mn{}l!_Tz37Z*G^j&^HT{AH6< zQ+)E&Hi}fq*{Jpn^e-+glWk+JyZgIYB3mIxJlo&hEmy?62)-E~8}IM$#py7@{L}SC z8b5V*c5->iTq{?Yn40?auYdjO)hmK89-~^T;w!YKq*|7))#~@+R6k|~jjNM;pj0m5 z8-Q_)Ez9{_4Mn9dzxwLg^XGi*U;p)AS;#Cak6qWIPObY2*!1|~V*l{CR4%3xiC*hJAyVr2pj^UQ;$3kf z-{8>TfBNGe-hA~nP6HTpaBzt4zP-sZ!bDFe$?6ZQ$qR+;Oy$^=iMFAWs@C- zJHn3tAdyTk+Sm^%%2!`~^^myR)g@7xV(~!KOGVAjKp$_4lQM~j;ML`owCuF6T>>a$ zr2T{abF*Nzfr`ejL@rPyF)Wrqbseg>4r75k#{X5w<(vw|t>`(^uDD%&*b*U6czk}V z(;tjE;>=PEGQV2Zsk(2t$)E6e7{s<42E($lKdHpFVx8R_~`K zNY7Fu!z0U!ORRSwfXC-!c)2cDGuqdhR4L2u+_%h(V;VTYSTK~t~v)V&7GZv|2pNB@p5t|MwEWEG7@ZF6J0R%`V2i;fZKz+^KAeu?sS+!>XcqvmInXJ=6%Nvi8pJT<0Yu1u_T&0srReP>(t=J&hLW1Ln-?s@m_9j_@K zrSo%EyHvkMRKY;n#3wOhoRMnBqEV-KA2#u|KGSs{8XOuM9q9}Q$$PGEuD5r0x!Pqq z%~S0f*C58QxVXq$koA&~FiLnUe1MT-cQ~48JQRb;AYWcx@^z5GvuDpdt=8MOZ@CC> zWDVb9pC35JMpTs}GNb~{@9pjH!6luYUlv3?UW`dUN~b6MB;?~0j^#~i4Yhj4 zw*6J;YbWU1Q45B&QPbIBr4{PDNE>BRzxuLP$neO;8D6eAEh%{aDcR4-i3*MYzS&#m z`uD&2H8E^lBcn=whLlXGx2G=+6HV!=fo$OwUdOHO?>2`DM9M zb`6}YJ}0jN>J?$~@Ca*)Z;O$LD-oI4F+gGjA%yqbhIzl4t zy3P1h+ZA+u`TSrZKNr1cb63}w;K-T?AxzE=$Uz=&LhXw$uD=c*6X~W$foWJK!m~Jp^3=};(bR*wyI{% zyx?+gch7y*N-t+-#D&@RU?=Ka{q;BBl*{+T|C5t5qidPu-nfja?Ff-ibQ`aQUuvMc z7$%R{p$0oZXiiF7<)0NFF;JYi)1A=KV>SzDO{S89!$vhin7=r`+}qv(s5&kuM|tm> zd364-R-@MF=oqnqTjSWs3$4=61IjZdag|c@-OkPqQyRYo969w$HMays_HC?*^#Roy z4v5scRx7J{_r9mE`-?BW0F~h87*N1b&@{I{e*Ac4(qm2Q+>-ofR~P6L2V@nAsl~;4 zqQd$4<;n4>3hS*ZSP2j|6covW9nWlF_hha@EaKBvEwSs=mV8JyM~HHcENit?glAq~ zjE3KRyR)-f*6DJ`qN#b;8;#A)&Cjc=Oaa#{6z}TQ+UV%W^JmZb0CDBR`wtuI8!Rn? zHxt2hY9DfV*y(4vf-+VP$*@Q|&o8(&)9R>||Hf_0!z?V!0r^>wm|h^@#rW z*^ldyC!doVE^9s*;^DcS3)QZ-`=_6NBD=z0L?aQNfxmKh+&V@JFmej&d&*YRj@;km zNC~SkXWRTZ8h0hc#UdV`SSv=o^NU-_#N4v#h;WXp{QK{}=N8u{t{}~yad7MeX2w6U zh$KyK3`Z(7RnuB$)%x0TY7F?&($c*BVA#AD-(s$h&Mv`E(gw|D38HF{bMmOwDyH)3 z)2EZOQ`fZ;wdzQI9zA;Wi*LSR;gBEj@WGHc*o$_gs-o!e@mMr=U#m%zfLyj*A+mLM zB^h*vjtoQ1(A6rhCidE~iBu}7LpKSU`TC^hBye+dd`v0>1UEU}oN*a;hW=w?P=uh5 z#U}-x?d|P}#iNe5j#nV7bCRy=J!>>a$E@(8DQ~klKM(kIl(a(wgT`)F7yb(dyW(9q zRuy=UjfrqZK@o;P}`?^_E27eCs94u;GjR?%VuxG;gFSQip-N)aHX09_TyAZw2RniGY17z z|Llx*0+@IU!c8`p!@$&Hm+IQs+&B<1aB^x=4W%Iyc2b*iINTLa3=MNTzfXm?{*vg8+wGT$2md=(O4hGOoiu zVxpF$>BZ6=){#ginYFdmHTC-q533c^ls|HLm7No$fw^2nExxUWe|&I&WYq~4G68_E z9wV#kH0g>?>BXuFW`F-+V||^k@v1ERYc=8QpP!v)jnV}_xF3ND#k(%)n$uhQ2l@EH-qB_ra*gH^xBPrqWGia`=_@YFzGKTa99dwhKCwx%uV ztccc1{BvcUmg#s^?CQtIM?e8E9qFTbd^=c;T}G}ey-lMmF5li})9EWG)5K^HAbH2H zzkV||rd{`-ZDF|pb3u&02XIovPC1ch_IXs4F`~n#hofU-V)^;}*^=5YW{0hl=sbJ+ zjH#*D>dazAjZEs(2Ko^^_@`GdU&WJ&qOmp#TUcuWH{uR{e;`4`^7(nZqKT_JW+)Me zC*nAC;v#>2`t*s@r2s8C?!CkPql=64+%4Gu8aP7!p?%SO-X(A@eDd(T1rtXCdVYS! zyR*g?R43fy@%maS&}(5K2Zwv$dcNo?_|*t+Va%fgm~>I6-7#0riZ}Fn+I>CUYoFJS zPfoDi5wXA4bwatbLyXb+7NS@S}iXzuxUHyKeV4zGKra)-q%O0 zRHY?j<0>jqNys4AWU}^l_n2Q^fmP>ZviRY{o15EiXN-GcAw$M2;P%*Ei8a$?E5gU} zV?d;Np2+~A{y(PP`$_U6x$;b{WofN-weCivp$5R{S#sBQepHOIj2subUd@Nj<~;r{&^VqDE)%mM%3IF11+M6QB_E`Oqh)a3b%h#{hR#*9X#e{gl zK8}OQ$&RwJ{2jXjYaSdOk`I;DVXt0i<=?}@_wL@!*x4Krnyi$`$K8RMTuG+%8Iwt= zd{(QAi%WOz-s$V@tyV72b2!i-(Jn1+GHG7%y=+VoJLht)DwT)FNcb&A#X?9yZ)0t0 zTG~)duj-bQDM$arljwG{n4g}R`R(t1$Fl+H_)^EClC-8c9!&iR_@Z#6Wy+qsk-1{9 zIQpt-3A>i-g8gwj%blaTiM8UA0Beomy?*r?Y=lvAJE?Py7S+fSt_F&dtou5E99SUFdQzV94$W&7JFrvN#-`7*kln zJF!(svqWU%4}$l>f}|Oa@SJC>n#XWri>__VZ6BX?e)shDI^8*2m!zFMAM1o!y;ZTY zssYFlDoN{VnVy=wckdn!bYo4jupl9(QTzl+X~N>53g;Kwn_JjFcFvi4wMN-^q99p*7=VCAoW`x|y2sB~pz z#mRMpgxH&|sEQ3fKR1_@czo{Q=-@~UaYwvzfByjUAo%fMV3%$aDz2!Tv7}?&WFl%k z{ReydKvfn!q*y5l+6NCm8njYP=NvE_M!{TlWwXR1pW$GDU3X7Uqp6b&hJ#lZpF|`o zPP*&sqvK<6o};EWuG13Pvl-I0pPfVio|~Bg0rlCTpKHulRuPdlA8B&)s=)>>6^bB> zcrwAGoE{zHH>Fc;>Papmky45^W{3i`*#yF|f1ocIigY^OKuFib?S=}w$srhnGs;Gzb$xwh{qG?@ z|Mly)&PzHyAEyx6Qb-;i80=H|bgM0v)PlN@c^NT}C+EeEiH+?sG&o4|WL(=p<4o?T z%w%Q7ZTm~}(Rcx$&lK7(3gyen!ovKmo44%5zU&n1ur?weK7tIuwYQIti)xX-h&o4* z;>;Zsvx>fsQf;7a$uO5yo;L{?c!BXTW{9+@#sgp1>xTyiINWMk>LOE?`1(w<&$tY) z2=mN<8`sxgf6X^q!}K*tX|vt13$uXhqjeqFJc}s@Uz>F96mAr+;d1NTMXqpBsEA88 zcY2y5K`BbE=hTt5GX#)6zSX6$NuxpFqq@4g?%lsj9?;v@OXS3$c^(|G^kuudcp2Z` zZvvufcrY1Jb+~&2;^`F)z3=+Ek-y08@9v(RigPC}uACN6_2R_~M+r{OcW`*LzrW{n zXYogMB_TR7cJ$Ovi@IZ_(b&n;r%ze0o40P=zjsf3Qi;TGe*2sM@!$XZ-0Ym9@4x`g zE*J`6+s8-8bsgVT4UMTM)z~^u>~5lNA`~i$0TVbe3D*%=sSqhkc9rF6*tx6ZP)wKF zNtycXd8CioY_6}Zy|!i#@lKD7Fm}i0=5$HfO5>JvGBo_xH{X1NCE#(?pVLtdA)!&c zKLJ%yN-{1K3`bQD3<4e)9QepCfZVBogXcUg!+-hml}JRZqQUX_JUCoc`PHgYZHt7( zbDm7HWNZ%}a%*$5Vkj+Y3_(Tv)1%XeZW6e1u?XHL4%)bU#-yfAL68_E6$tnp-3m)! z;-R~a-InLw-Q5N?nldi&TL~*4&khqB$rZ46U)otNs_b+z$z(?WN$yQ*n7Jzd-dvrXEdZqc@mpvEUu zeqn0gGAHJrMR99qJ;as$y?rL<;lq!|#zv|-Klimd&HB}~WQi@mcU383oGxEVz{=EF zi0-dmy(*OoKk@L0NpOGV!+Std%tS$iIZn@Ty^D*B?p~00?d^(GD-?>HU*z5xJBl1M z>0qhs*J)}uUx#y$aJ4u_#Dv3N{H7btq&da{^%q@TC*lbQ`^HAugGtuZ328VXPN(rT zJUqhKNo|XzVoz@$^8;RFH@WJTpveRU)T!7Ah5agMRb6gC`K8~_h}aQ$31%D2ac$;m zAf~RUW4-Ao(hAG-0Qc_QWp}V)4-fZ2B&A~6FU>wN^Elc>;z0Ad!HTdnJKNht9dc`2 znd|>vB-NgnP&J&Io~29*ehu)1 zyW@H_m+OXJj5_S!WGYd)tOR^M*BQUDx%u+dOQ+=K4%LkG;zT=G0Lahl{mTn;CGj;% zpfqPPkQfK3fb71aOB!)HfFM4+drx}d!hXww^t7m^XLNcjdX$vQUzu6H$*4Sfcum-3 zwnRFgOpJ|;kg)-pQt5P|SZ;MXtWY|W%H_@g2)c)e$M_Vy1LMT401%_mILOJw3dhLw zb7!YKHJE~bGB1gQ+CM}-=kt4&OWTfeB-9>o?Sq4U{i+#trq56DOcDYQgSwa#6Ih_2j7X{<}Al@tgWtD z`@8_X6M{8DACEIZES3K{X&0A)x#m%$<9~~-@It$T*L7o8R}XW=gxj%9%1-LKJ>s}0 zkmTJd!qMTeq}hByZ_68wM2Dqan5tBzDC~&e0RHT7r?u>^%yELi(vLs>m`Nj*{II%G zQ<0~~`h|u@Mu(mFAV&PvS6?wYm$KyTMqee4(O4!UBT|uzwP5Lys@462eN(c#aQbeG z3yW!c4gX{&J<3!@**R_FR#cEP#y-C!<;w?FQ7Q3^@$pPL&FfXo9*ceTvoCMoy1l-( z`uOo<^NeeGd9kOvmnkomijI<(6c`_Lba=S3vRW)k zVhcM73efxcE}qk!LpUN4l5#99lg&g$|8(xU>fI@pt_FvPu{uzi(Y9!NTPtma@2W{Y z?8+DndWrQo8Zkim#CC~8A!T5vEX>a{1fT)AECHAgWJO#=$F}))UjOai{)TDI%+K;9 zy*ho(udc3a??|)3oklwP7e+BOFc=jpq}tzc1xmSyxLzM0$W#=Hg=_7v8ed@@hQb^w zJD8beN3e13-nj#eBT$Kx@6r^0+HD=Z)~jwmI;xF`ct|z~dZQyFzxvg$SPQ#&^Y`}j z9339v-EyZQ<=|ylInES^AtBoVojgQiQO7fCn?ffO3~G32m_U_IrSa5^mkrKlkF&_=wkua{)x z=txW^$#gOjkMb-!JwDGJ92~N^Akm;d;8^P=gj^~)DHpz)nPda9rj;u57IMPRgZ+aJ zAGmGKSpM*be|i1t4K|-8;q$at*VfL@&T;w+iwo&&#u~LV>{(BzbMw}1hOGHC+0DHj zh#wwJ8GIRrT_dqmz2OvZ%5@t;zYVO!iGVU z8D%zj@>o2^00VYf?%GBe5D&o1mX~jkB=Gl~olr7ALxV%9WZLXd*`qXrgF)umux7*R zay&SM(Xmls4!fJ@Ws;PRE7d+Wk`UX2jl;tONj_&X;q) z4v&8F=_e0A`lxOq?fv}&EGMaXwOYsS`4*8`7V`KneEpp}cOsFn8VWn@Y^F;`bJe=n z<5w4x4Y!N$H8z-U6DaNe%*)4Jah)l|-qeooqs;;u_3)66bDQ8x|c z((&mj5ydHpS#4CeJ7OZt-?(vuui%khh&lk+sBTwrceivjC$bUo8j2!38r97f*uGN*U7s3JbrTGU?`Hc8=C7zvt)`3Y?Z-byHVcUWTevLXt#+v4* z{fGA}A6AIytj^%jApd>+>NOsOIkeKnahEG>Z?j3rht!$igiCp)ND}a>!$ZxMs>;Qi zM$!(E=ST)M1?U=O%vfbNpm_+A3+gzlc6ndxaqt%WhOO?W&!zS{Ph zO(MEc?>4bvcJCKo{EP_dG%(-7zWA-2};t z813@%5=mrFxA7_*pMZ%wR&H~6aF{ziWs1f}N5A~p&r}F=k?%61(+j4nV^OKWA)oK8!unH#H(4$uaK)Hn&Mm;n(Y~uB--d;=^ zct>9U>ecISzWM9+?g6nml}tqA(cHPp?lAA){`R++5Rr*Ao#mXLn_pU71hTKMtsM}4 z@_DiiQzhw~s|g}Vcwm?;0ngbhF-Nbkdb7E+w}U6aY4e$mEE+7~XuK+ws`09x16Fig zXC$>M(K2E_epSD!4Gi=%7J2yVtG3lEou1{A2{wW*nD{u*kGx_eO5T!Ah!Y}Y&F<`X z^ZCbw4<2uMX$j*evnLhibAbMKdLhq~vSN5_R)?m-YCf_l-M{MEu@AHYvhVHdCG$?C zlEWjz#OBkJV-}atd-u-Wg}FKDzL@+1Z$CafeDm%t;kvi4U&R)tCCqNpeBQWWSB(mX zYy>BIC+>?%_5g(}>%-dE>_YyV3wvr5@SB zd5&PGQJ2|hC z`Xbghj53o24tKm>K4RF;J;-{op<}BQ6bHJe!+TFoRlKJ*n6VMQrmd4GUoaGORlyCr z7In9PIL(ZDGg>>_TiZGVks3Ms0UR_tGwt>I4)(#7z{5M~OxOPY0qf`KctO_t`-i1s zUbmmRL#-MlIABHw2S-Fz4<@vNSXa@`W=^Lw#9|h^X$;6rCXdSV-&|e>GVvkbe)}zm z+k}R43iW16wQ?k^ z>IaY2tdsFO*u`_Y5((CZpWrv0e%a{QSR@w3gMjknFrzcY?8&LA;n9&uILwDL zlNficT0J>CHDb~L(_0ZCiQo>l)zjOKldp$2Gt zax)wWgG2eKfBUyTK7an~s!?OUrKrg-R1}7)SW6@~GAZJf^_jR*rJ+e9~aKbpBfBreq#dRVPIPokPq&ou5*qIVz zbgYwg&{%)JOEE>)C4IX0s~=X>V{TPESjFt@9RHh|8Xp@U9UPM5_V_$&Ya4}9Nu2|c zkk}itUCg>2-RrD+dS+^VapC;@Vs&kuG1aft`t|0`t9S3-J1SFm@{F~!N7$TvFOPBO z_HCYxA6j9-u2ULUlC-m1mgrmW{d@N^sdTYi0UKp zPRXo#kq>$P{5gT2K`{e>LS}{+n1qgQXR3C)30NUj1qWo6{l~%hICSf`@9_l!Q{>`9 zL+tc$D13T+vbD9l726SA|d5_-Z8_(owU9A@g?ynXrp!@HU~^25FW-n?8Ws=4Ua z?K{A9oc_-CHm-wpEEI~MQbIEBZ)R?0d~AXwhAj3_T~gXUI2`%UpWk6rEkI2^(-hf5erh zla*Y~IQIh;6(@?uh}ht0GI2QAd@`QMbY;gUCjBZruJm;E`s@l5r@XVJsTk<*ySca= z4u+WL%W8!H!4}5ezWeUGlf$Ei?i`wq)6~^2jgOBF^z}Czt#VoQG$7QRRpOAdiaxbk z@dy0b?k+;hk@Sksunl)f`PXm0dGg(3PqPD-0FKux6()qo=vLv#key-FO}9}@7yw5i zEFVSE92C1z5SzyM86B|6PC=z;0y^Q1f*R}V@87+{qQOH`lT%KUrf8(usw5Rl#t|RO z7rFTq4N4?}KgC7w?e9N*^7vq9&u3R|2fGIVJ08+q5Anx+*QJr6G6^3&d@wRP^5c&` z{_{WozkK^wUwwre)G>0YG&MCnH$Q`mVgypn@pW8TE=v$g#F-uO^=2|W=Y^5@hJzA= zs)?L2l#Ip*Rbced;bCA0CVg4f@v7HOH+B6tAtuOMw{L&`#TPt058w(BJSLtyI5^O{ z76FE9&eRgNRA$Ow`3I@pqjfK?XSoU-SI5p*N<=MqQ)f9)r?7`jL?F)5RtHPgw zxMCM4X~mw3CgKbS#96hhDbtk!2>I*P%W6#$6C@V6Z{6^OB7J?m?n0L*F#V8-6F+d3 zqI|2=Mn$%uo&?N@6~zgvn60lLC?xvpwKZ3<#dEuhL$mjPvzRWlF%(-ie7xKEarQ%X4!xU`D4I zE`1EsdK4FYFwocEbLYVwD<%sKK2PT+w#aa600a?9~;@hg`II+jGj_j&HzNFicB zQBs%X4jw&vgqh-+4S6LodQ(A9B$7#;)fJhp*X!c;s=ikvhH}ik%*Gr{(=5dv2>uLZ0u~bPi7}B z*;FP?;^i8Y`S7=I-&hAl2yYS$gl1>wv)Rn?(b3-CE;I1E-~Ep98VC@h_?tIxx3_nU z|73n>XqdFD-D<6@sUWUujiugpr*v7aNM|O>Mmiun+}5 z?v9p_!-PmP;PiBRa}zTIb~2yCMh)#VjrT+{K{A1nvC~LWKlg zXU7fnr$7Da#fuksP2wWSC<`j?%#o3LLn=(tkE&E0e~4-~Fu_ZG%Xv=S zwty0y#}tZeM8{TWLM%9nnyatWRqIvFQ8eHa+`Va6SGPz9trC+bQ3-{|159Rdc@PX1 z!-!j{3;yB7v*+wXKC@w)(P_c1uC1~=)a9>2!Wj&>S`p|Z-BeSC$J5`}H#$DrJJ27A zMy;<#?ZtUZd0UMpLEQylce~_R&%hRd4C2sle)F4HEc*2O@4=>r2M1p5_k>OIJ}YQP z1tnLi!XD$RM@Pr73NZ$kN}%M%RXul}vkbDz^s=ge3?}E)GOyRKUOoNcdjL>fr$lkV z0>3|Po0P{Ew@-JswX`-|Re=)}(P?cc=xQmtvt6?b^Thl5Rh|5@-Dnj8EcW>IIcVGM-Ln!_hE_&GL=q^Yh%(r%$oo zFTVH!$jdC@F<4oU!Qk*PF*_Ix#KgUG$}n-%*s#e+u!#>NP21&W0do`f_=g+a+A^Txbj8?IE-U4F9}aX5SkOYCF`Ok_4PJ2N{uHF4dzCN7+w zh^3jRxv;o&-DrjaL2@hJsGI3njQ#%h-8-TN-@@46zj?z~W8o%*r9)kIA89cVgDtkU zzRsp&N8l3}5kuzfU=EgpxX34vyAx#;EC|)LDkgz#lTTh;6!UPsdB| zPV!y5kkdH@o7#n`lwI)fBp&%=kvF984Al@#U9a@=VOgj!|*C z27pVs452eT4x@GA9(;mp74YhG$VU!7GdndjI80yw61wtWVAsaRIv&d?5uzk~4J#OH zSrBsPr7BvB#JaNGgM;d)BvIhO+=)}w{_sldRp43@dY+!%E;fvrlqzdnwRSWXZHucm z=eYX`X1H3+nuo_w98s`(nHnu$AV@04TSQZ?Gn_Q9=f6&#^Zxz&CQUdB=wl~fa}IpD zVjRDfrQn^J7HJll3wB=2`C@+MsHgb}!0IP3UMzli|9)d_P32nAh`XRAOCaotk17x( zEyE_*kWBLK-Yy@7k@5MjUcKU#{Azhw`hX0U2Q~pgKTcBxbf+hoOlom)(Uq9-8a{-9 zFlt7`YMKmXYH)Z6L>V%vjcg`8KqwvR&DN?zjn8H~)&RXz0BAATDZ?_2Bi z^sLoUhY6q+3{)-`_Yd|C4i2rlszP@4n_vGnl}i5ckAHmj?Ag}Vw!0<_T8*Alh#MIp zw^#%fVWocKOIci8`tr-KBwI8$=cKDVD*lR>jWua|Ym4{dFGO=_z1M09^LU9jyq*t# z_u>7D(Wtq{#;~R3AVo6?kceK*4wrMrBz$su5=$hyCAHkc=EBjaP`OqEq4GxYf)$E9 z_Ut&>Kcpg4&nv}28}zZ2TLO}c=7y&YB;2H$zl~G?$qC>%k{=}B92B1quX%C=*(shEV< z?Qv_ZVNo0jjJR2Pd)i)+9ZpP5b)_?4p#6R6z_L|u-Mr~8FPtQ$JGW!QVy?NINCKj! zE6RGg$_A@27!sbls-2u3=gxA6hX+^!kIg=E#0f@t;G3D7lZvQX^Vi#*R?v!4trfUw z@(Hco-5r%!T9>fjh;P9(?3zwfJbDRhUtE}5Oqyq4;eP(}pM!w;e9LYN{CvWcv!%p$ zA);J{k1t|!oJJWR+feh*&d%9*eH>UcfEi2jvuME`#l(vfLEcW4N zyw;554()K%jxt3(xE9me*9vw2??yj!h-X2Ds(`Bj}#vJCr1hG*v625|;I9>u^GWKLu-}0N11}X`i z@mr9GQxM`^pyQ4)8@q;4C-OKqJA-=_s47?3dt{JK&CoBMZE=CI|9Q5-fdQOFfB&GP zFw4-T;oRAI$Lq01+bvv%L8w%{es!>a@b5Uu;}1&a9sf?+ggYJ_8vgRDuWsJF zkuXVimk~PNb_eFJO)Qpl&6&9N`O9DaLaJ)i${q4`wi717CtwDuqn??=V*C1f2KxJ4E4e%7 zu?#@*RoV>mEJb8x*w7;LTvU$g`;EH>j zjH|DAYGNXjOeuI6UH0bI7Av03c4abIzI}UpXLWT2ORlPwXpz*1u@kxZ9N?pRs}7EQ zx+!cNTkA6(jmO}(EM=?RoKiRWD67oRTZVvrs_c!r5)!8~hNHQ4`*tFpAomov=;kKt z$9J(<-+ucov*)g0YPI@_)RR^Ji7AeajZRNa@;r-6OFV|!z@)~r*4v{B#H6)9y?Oga z4M?Tpo`nrO=G@GjvG*Lk{qP<)SF2WC! znl^TbNw{<8c9)bG)b*ftFKMS=g>@3{#s2s94%~4UaKxB_Rn)@A@)f+YP}Gq~z|@DF zh7W<~>#x6-!AG=(**?sb)Q|cH%B2#+coEQ6eX{mRXe| zUY2{hy5csL{@%WUzP{xfH?VN*7JD!%n6P7yarL)^G=7UkIZbh?9b8?FjgNsK$t7Mq ze@=SC76vp(pk88Sq9`F66)&;P65I3OU?1N$HagBHFfM=^Ia?s;cdEBNCcL3;S2=|2 z$gnOZ@ZYZXHWG@u3zu&F=6Dz2+5XE1I9GFQ9+dvJ^*Y*i<$V(3SQ4S*q# zgg+28CEX^o?e%$`DiIdK4?#1SrOfI0I2MWW7{n?f>xT~?z$;~u71j=qjzFSe6OVCc z1H9h#Kr(RG27C28M!9nlr0{9hd8<+ngXtq3>s2yobHA%AWGYJ1(!KWoAOG#YiTNm}s2R6I zMUb{w!f}z7P#+nXWy%6U-{|P@_{4;+23u{+%IEdDzKaW^4`eZ%b|!Z3(mS8uhc$aU zo{B0XNr2RC;@DVJgfcTTJ1eFkLLl3WC{N75Tyf3(MfXg3xdRi#Y^O7+$%!#jFHp6S z3Jwd594C9GGj|2lGaM1COE?b(e0cUs^>S=%I8{- zi~Mp|rsHW7IM`)C;%cqZY+NPcF~^|B8#|pA(ax#c@*zAP2FF0w*VkA`rjk^_b%;7r zLno`?Vi-XVzw9=uqgBGwxl=V4GX|`K7V~9Qc8s;WY3hyh^9zq2eJsw>6WzesZSg>@ zUOzZIBJsF&^OncwJ5^Cbo3XfCd7`*@KnsNBYp2QXHGCC|xJOwY{lX}jC1 z1B^yu!f0llZuvIWH!$UcgCqQogT1kMEEMvq-0`xINoR(KhW0L(rIv_iNv4uc5Rk#m&dg3sP5~XXi+)l~W>JQxrzTlhw;6ms)y+;% zPxAn#mldn2A|?-904QWkS&zpEnB=f(bEJuzR2fvEaCUm?qBTbES_1ej9*}S0H4c~X z7qSyF<_W&E**HBuwJy?DBAy!PALR9TE^F{mMX8z;)0rNL!>5@prswgK$F{3m;V=%p z!zVCsfFQxc)wJ_=LCJDih#0404Y)4#bi0EQDaehD9-SON`TqO1N3ASsPY483Rw~)o z-ye(WLT7VxOC4@HjA;NdS<^2*|NN`3z9!lcYK(6BgipW?0h96O?Uwiz#>a&=8m6Uj z(^4pR$6<^sQ(Yp)3zGM&t*!HP;2!a|nhb5+h{u-}mjP{}t6N`ZbSh;?CPbW6zjEzZ z0>@sD#N2^{sO3q zJur6bAm~{7w~rrVgyhhnX!Jw}MYW{CYYBrW zyoraEpX+Qh6k^D1>P$9Eq{nNC#mw-*^yJk2yZ3G`FEg}PuU`>?7`_v?7Fn1C(?qY~ z;5B2nZuo(znQ7NSXX@H*a;$xma?4{Fv6!O@$5rwGE@B;74+Thwq2WlwVR7n#@+;Lc zSmZw%Ow$8|>2kglQzX#4t{+Pb?vxt292xZ{2BiRs4wf@47BF4Bl8!PyZ`y<4O_> zLDvb1SN!Sj*6S55aUq{dXK*Q5YgTsWNr6Dn5!g9-4}crF-2CjEaT16XO3e)aE(z#h z7N~^;z;Si)7$imf>h9gUm@8Nen*<#5vi`n49>z9cZfs)W!M*#g&rM=2nY5Gk@mhH#!Z@SfT+XDWxKjYMn`xjLvdFQGqY2wA)KAfrn5W^wtIAV zxVg2-YGHQW7O41ir~d1DTjSxViJf^ar5CLnzhFr!aW0ishm$nGYjxc-92~GnxN<&C zMFRbOv1l9z!3F?~U}Q^6i$nb)?{3L$Ji?5F}%LNPqe7#7w2rM zeEx#y^?&`(|H-2spGptQl`1e1IPtr;?=TkU1&XCSSd)cx($IWVDvsTZsEJwOC+-ky z&2A-~JeG8HC9a3p=DjiE8K2{hS=`mNYrSx{o|vekJavM;uJzN&4)zZY;0+fR7Z|k! z)GjV6R-}hJX6NGs|L*VqbEd27vRduxR%aA81UTaXmX>eK%*_F~z^aZdmY**#-xwSm zdj9PBpZ@eGe8lMR$jtO~I20_~iGov5;HhS26xDF77;!8TCs=}$++8ngQ7o$3+$Z8G zAAZWI7%|CYhmmlE|6&_}7!q>e20L7xHYO&hBB@RrAVp*)K7;PtZMDq+)SR%7C98cz zI6Q?hX&hToRX=%EG8vzg98-$vvUH@E;FVLSaua-``sd!hcr?mN;2_vSm<-5_T!G!l z3)nxd^9PF+7#8tX0bJ!MliVu1`&4Y-l{KkmaAX8i>$PLRuyUyyF~hn<(klIEw=itb zo8wtar~^_pcZRM)rDAzke&L8D17GiMKpX?JQ*3k+Y?6%&1c0s6(=$C%++uI5WY-;!c;ISk$CcQlv!_lau3PV~x5_;N5jNZnk7a z064GVLGjHlEiYr?44;qXTbwDnrfs~r)vb)K5`Nd$NtzirPxa}ipWq6`Hc(MPO8%k% z8Y5F;M8pr$1$;F7>(Qs55c^xrHsR{{=$P1Rg+CH31m&_EDp*ZQfaJmm;mc};ti=+E z+3DF>IEtwReZJl8-N)ZQ!GLiT1m@rW{`Y*#%G&Cw&P-36t!69{ziu|Lw55ebM#N*| z;Eqp@{YFLNxC)pbS9Tll1xPZ$A~?qzH*YXwB3Cgk9k($}7xfCyP$-u|;c#!i=<|*a z)g}?sqV%{fY9US)lvVRqPE)RlWVENZmk{;Qg9n2{LnLj45J#^T3WeRZuC6~@ExzdG z%a`J-`tY9T$F44|V#Wy9bcw?Z^Y=Gz-)?PhxrVg8gZ-8DHJ)T-bd>Op_VP@l*HXuxy+_CN;g(4paBhC{qLv~%x@dLqj> zlM}l=C6EvZjkc)TYPMLlY;Oq1OheG)mVN5M=zRM^KZCQrEKZ{a{z7n{d|OC-o=NhK~9~!V#;;2}zVFShbkZXH^$Y z$ylVMHs_*!4Tty^7Q!`=0#3X8dc|b7FpsIQg-6ClB@<`u3=Rl(jLV%}Y(0tz|J>{h zOVu*D5^`*v7t}T@b1wL5Ebd#Ky z&*3dD_jmVjBw?%vujlOt2L~%3KCG{;1E1|Wq+g8cZ;P``F;l{QIKvo%OcW-yZazuW(vbxHny0}iH zWVaJ*9NiBakk{P0b&ChsGG;Z=%&LDWAu7J>E1*?(S2vHL5}Ul3)~$Fu5VSimcM-+@ zAxO;3%q=b71p1LqDW>Qwy(sxb^1n>hd#aU=SwA!!tRg$fo906=AY? z`1;4j##ypMb5EdB{1NtWecd4Rvf13#4$BQ#7P)kHmm}(P{B8UD2WM7uO5 zw1yYxOlf-u?Wz0sRq?3qJ&R{pwf0{ME01?X`1Y(Z%ZIKgR>G$L8l3*naF! z7Ld7OuQETX_zMJFW0kqNyq&~*i6U{!;H~~5n^Ea<)72|roP7Jed-r&|O4(f}_w4N0 z__$Nd1W1h;lyGNX1Q;Oso=NAZDRy^P)HM5h*E)k~0v`VU@BjY){2%|5PkU<=4Or}e z)udo5=VHvfc>etPU%&ZgZDsX5e{TF}5unWb_wTHVM;wsf+n;C8o)d%mdizNI@wcYP zrt*t^JF4B>*kG-PM@K+@JW4bo0cK)WFfC zXNP1o5DZR?kAL~)mrN<6ATP1nk*icjcZYa?ZL41d>o z&z)Zo^(A;UGPbj`{p!{0yp>_{Y(@%uj>(b4KX~|nlv?MUmOT#+4DipM-kz4)BkS%q z1XRjI9U7CR~45i}{*5FDp)O4c~}&#=T&eA68cO_V=A1t6WxM*4sHeq`GDD%eB?jC*Oa+&QzPc zBcb=vqeuLgufxunTQCO;gv-Tsd=TA-&Vimidj&8 zqfyo9vNTvMYq7htW4%V#s$jk>u~PYhlqI9Fc$YCpssI-IEEJm7Bq;`H>q(McctgC! ztPwDadAKNC7(au*QoSTd<4)Pj9yI|E218*%qFT)#2-w;DKr|i&L$maF64CaWI4s6M zl5IrsMF8K;Tek?eEDfm)R>T|G*We)@p7DZscI;-i+ZxYwr*&|6X}oVhLW$Ye>)>5? zVIiFY8=*BF+{ZW%_Vy}9aRCsl8<(>2Z&w}g)p?ag8dt<4!X>#QT|}}3gc8uC3Ty1n zIG%{(U3Jx1sU$>kGa=Y&C(ow$lXptwPEW;7^@sc*tjkLM{45uVhQIpRR}1qC>^jpb z@w;cWQ@eyO;4g?PbrtwS62`Aoc6(XIvs7wT1-!G<(q%cBPIcK;XsMvmn05=#7;yJ+ zj;|Oum&ta;lW|AXK*mFO12L&%I2793*?Io#+4j~}Q0!tg@F3GYH#-;b`&7|-e8l)2 zW3xLVaH)eehbXXp{`u#wR?R4jOLk&eSXo(-!qV#6Wl83Bsmu9u^Nc{A)8{Xrm5lew zQNSdywoKL?Mwu>6gI!TBkr_##!gbmEOs>n?{JZ!e>x2=w>P<}C)z|UQ!{dWesSt~b zAD;;nk&_(&hK*OYV@C^3qk?mXqCDijZAIR$-j!UgR;jV}#ZvM3@EE&1I6hkWup;I~ zlfYCp+4;HOGywP`M%l436@L~AY__?X*=Qtkd~#|LT`?ZNua4?;3cq=HcqCz9BQFaE z{d^`?3)Ik|=+tz7|6nYhXmlEkPRfrefUOXW>$NJAqyqyf6C8mtFV4?hXR2;=I-SN< zqumDKHF<~M=N%eW)pYLc{Pn9h#*lEzw_y6#7j``~B-6wzHX3z&K_ZhuCD(0!w>w{wM75=*S}^b zGtX=lt1w70Y5*TLAZqwfh^;EzkjnvG!Poo`FwwMjURS9AR3d3$svkdoytTFA>Jl7z zqzA7Cqm;y~uRAp-wh_*^E(UxNS-6uSmRKYMS9L3;@$uppFJ6e*E|sz? zPeEh;DT>O=OCI|#-+aTTef8B>pMLfk>76`*8iAtDQL38HHmT}{60xhgTK?J9WKI|f zK@_8M_d!Ho{FLgneLmgGX0mF^FPHD!xidO4^5n^5e(P$Nh`Vp!zQLq1k4KL_zIXo~ zKR-S`-QL_P6!RmZ2OS~e?(go|Ekw3hD6&{27Bf>b;L?tooyNg+Pk($yen~iVd~<_C z!=HWnNq@hTmDQ17$g96g9dRK?Z}R5d+kg4PA9nZm+g>%tJ8HA*t1DOi>kkEbY|CSr z{e%6fOj`73-97Wm3q&9#%_k>h#&&vqP40^uvA*h7OpLlZbu3wTO?Pk4qfZ{)SX%bm zg==qjPskr=wi|7W&{z&rL=+(@ymROF{NlpY%rtHkScAj;?r-0|dHE`n&fWk(*Q#%f zGt}(Kp8+DNtn(m0s+S;*ikpjcbxy5d7fhbE_{Fh$nRg;Eew8I^~+-V|k48v$KNL%J;+vg^eqau~d%T}}P z_los`6;%!Fl_~(d7K+%~{(!&HY?=OC0juNR{ey!d$+@bjU0BV&Cug}c{DyGi-htQa zpPZf=93E7Bl1A1k?_~bRCniGSaPBHvjO*Q7QH^5uYD4Jlb!FJ( zRD_tQbw6T&cDVaW^>vEJs?RI^ToC!o>wcQ18RsTr!*4*jPU@ z;x^ z#V#oqU$?flj;Axd!V~97u_fS1$mFA~05Xs3XBo<(<@7{MLRi=4a;$B; z>`8;#PL0V7a8@jrtkNeg?z-JQQ7gpbS63qa;PV}E+U?u70bDj?C-p07UKR>cV{{#6 zK^>>-M9y6y>q*r0dlInAiTC!$g=BUncuL1j{rx1%xWAV#U+`PTxU{s0J8$+Agcr%S<|hv5G<@6r30vpPrr~LlS_o>QfUh6CbA(VH=Ir zl~r;ACcM>bT~;f0)u5we)}2ko&$qWW+4FPr^J9|}#2zN?>Ep))9!yr~q(|CQt}Li> zS>?@4An*Mz|K-0tcyPbfy3U=SktJYh;32-(u3!&w1h;P9GNNY5MG#tm{6^(-({$#?L6y$`P93LAep7DGBHyUrW;}!>AtGh-GNprDXs~3D0OWYCAaU~PNvfrsyq-QkQf!3ZQ|U^*RTB6 zKv7rza}|k1rCB;XOsP?U7cZZS=|Wfj z$(gxnyuqOX@nj;wQkt(Dt5(!y%W{YSU}k!3V&dN2yC5EL=YKH$eR%(YPqSSpWQnEIbmJZ;=<}6;0rU-360ytzi*9C#GwQfaGcd-jYR-n3Z8adHfjHK|E%kg0S~67^Ar7 zLm2)KKm2fcS@QF&I7A{PNRjV$j-FRArG#jscPO<)DjCdV((KR0g=Hq1C*wOD-LcA{ zqfsCs`@dqkY#y=3SJloN4yRLT*B9%Gv+@SDwzjt#s*Vet89gML6ePlZv6Thb(x$k!?VKVK{u-D8FXn8()P(zR5k z2?neywuRw_!@;9tsg9rJPSq!*vM+UiHLjbk=&Z|BE?hO8xDkkLm*Np+8(YnhPocV2 zJw9c3pEet<$?3_DKluazNa!Lh>+k8ib>mjHE9-EXSK8(S%)A|q9=R5Bkr8I3_rAHg zX@w_^%Sy?ejgyX_z*K;XHU%t%B`!dN3#yS=+>m2;PcQnB4^ zWv%$At2;ZXlg5-gdl1*-=oo?19e{uN<(H%mq^h;5Z02D9;KRy?lasSpG>)D04feb8 z2mB163eWZY)k|Q|=-8N)NybLT#>a5Y1SA#9S%upFPx7d(LNL2QcX~lYd=jj;uit=w z@xQ>~qVY8n!+^0jmT&Mp_$GEBo>vOT*67UG9To&W@^>fw>#E`<EegEhr81NJG zZr{JhI{nlC^G{EI{9%4!{?5I77$KqM%z7WebBScqXlg__{vVZejMNIYk21*=kx8B9 zQW# z6Wi6(jk&&f`QpRMiZ39YRKM59*p;| z)_rt*OrrPIN~Wue2**0{%md`^*)II4tEa`6fqk~@)S8{RxU|Fzq)+GdjE#)W&&{jP zu-z69!>!vUp_4s6J>Ilb&nF>KOsj$Y?`&@XXF-_0SMB6Ep<+OD_hAKHvNu!o6A2nw z*ECBhfTe;RrC-@D-4{k99CG#th_pFVlw_4zR4AwibF;85S-zyNS|ZFPkdoE*`a zuKTaX5{;!YscvyC3_2k=>vgog&CAPnt2sS2{j;C_Y;06CkeCg?2y~^sP`fD6NpB+Y z%U}MIxXi3#b4n=NEdVva6??w28hCzQEENeJR(9H8C*HhuE0IiybidtUP6A=_?;M$% zYAF(mzQC_pm3#(Bh|f-QjpjAbR#5xw4D;UJ*)H0}w$mQ%7Ny$4*u*HY!^bLiJQ$Vk zP4X9bfbOoIWFl>}5Y_GNz5V^8?Va6K32W+7A1lJG0@QR_kk0P!?f?1De}4D=ozTX^ zk8a(%1<>w-r;M#OSdyHdLe0B-DE( zQ+li(l~krXn;kdyA6GeSTo%K^-WtXf*T?Eli%W8?934yEUHV#=C2;wR~p z29c$DM2_L%p_EnYB$J83K@m&w%)}vvZJh>X1qM?x=C&GbQoYwPPL$0u`hvrEg%I3|oElS;E{XQyX} z$49sphBiGpol2+5mqphE#n-uZWbnk`&|n}GWFGt?IUQTZy8}KS8v9HUcP*3 z;&(B3S7Ml^r~@MQkdck>gkU?~_4U_Zv**>%XM&8n@H4Htq}5>o`^bkHYT@Xfo|*3M z>8)1EHDv?QF5;q5Qm|zBZgAs^7cZ*ynm-s|^XY(_&u0+;#y)(U1 zJsKKf9`I|ffXG#12Ta@1@zuB{cxJ{*1w-TyCnu*;L@1RiK-=QFHSx}(eURhaT__|{s7~EJ}|L|TC1&&L z5b2pKprg<4bL={p)6c*DIiB>*o7bD$TiNdH(BM$iqL)f3LsG~F?nufy7;+jRmWZm^ zY;S+hK?D+sL@e&}in_34UbGrPJ&shnp#*~08i`oq`QX%mOP0_bAEPKy(A*k2upWw-<}+wWZNDeACdpy z`beSjg^Pk+@L~U2@w;~!V{SA|Vk7aaNK0hqvi;}uJJOXPmSSPGYoaWof(69=^s>oaefpj{9RTG1A=lQkO zHQr@%B)~zS&)Mqg+ScYaL*v6)6h18$PdF)CKFvV(!SUg7z#G8z6;++yefQ42f&PJ7 zwGRHnu*k#!A9D)}Jj}|<+LdWM0Cx;g;dXR_vb(p7=@RIO6rX(h344d>Vs|^bO4lV6 zHo4oTf{57TC1nu`OwY`)?&R(OEcO&g+Fg=j>Yyt;q*L+Y_2kpbON;&o_wVr`q~WCa zy0;%0?(Oce`e~I=>v(W>7LSlfrt+4zNkFPpb_dHUAvrmA@f?$q`cg89-IJg8bTPlz zcvUf-gd+`uQP(ADS)B0?vly6G;OXN4;K&bKnC7_ zVq$!tub+|a?dd2cU~0$b7gAEXbLZ}oRp$>54$sWaxrT1XTJFRT+IB|4I`P$PRUjTX zhEa%}z+~Y`zJc@NPLnQGQXQX~glk9IP_lMsK8l<}>|m{SDwCO>o$2oGy>4FfPw8bQ zQ#we{N;j~)@1K5;ui?Yz7Uu8Wy@#`7PKE{tbVvB{qo6gV5qd2jQiFu)B?cXx`2?U z>gqc=K0ItTnglZosClRKtO8enXTWM)Q>m%R$xtvzc7>Z`3B=K_bB?$xOmn>%*aJw* zX~D9Bm>ge+(K9U=4|`8SQa+z+#$_8huj`#NtonZPANwgb1Yse=(0C4yhf{)wYFx0LC6@Oh;~1G z|8#3p%|F<~;NXy`cQ4ENJaL3{pkzg=Uf26UfNYuqDT+z3p>XK*_%wHN67Wl{gyEc><$xt! zUFt2zhL4VqNqNYsaeVLIz2Do}1DdO(E?=Sm9 zUC!wgK0&p?pnCTB(owpWY-t+NvWY(xEOOD-_jLO-l#;9*+-T zit*vnS&hxDt+TTW7j+H}Wd}TQuXR02M<|x?dwun4jU^0*LQZ;COw`#d&mN6Mnr%|L z6EZ6{e_wyE&+k1vI)&oA{9}r)zw#c zRl7LP;ih>!K#X=mG=_-)!PqDSNKrDdYKNM%a(n(CX#5dkZGeb@@X zUs7{{V5xjbT82Hb>blfCP`6cy#V!;`G$O%3e{avc$cv{Z#z*^lyRWXQ`}@1a{5fDW z6bLjMSAf!yp`n?%*}3`oD0?6rSy-G;rqXApx!gs8<&+3~IKp$1xZJsY7qeh$aDI%v zaGu}Z+NfPs#>a=pM@F*g^wjj^h^h}Fv3QJ3E?+1e9v`Q(8Qz5tdj0kd8~f_|s@ZDx z_oF2eqHi}SAF==N8_WT41^8b*V{KdG+eJr zr&dH270HBwhX(rxW~Qcx1_!6cr*OyMmB!UIX*anwuWB`#xW$QyNumy}T%3ii_Qd!^ ze{Ww62YP+2>zsH(6rFwjjrw){`l?>5u6$U1|Mnf`kiw*r8KMHNXK(ND&AWGR-+wqi z&$9=u%XSiDkYMXsjuZ`33F)@1(9_lRi!Z+%9voze5BBy*wfS7v@6PTurFs#+3}X7- zJ(s2O=Eeq35)Fqga_8WtYwLn!zYGlw;=A{W^P*VTU0YiPvI(y7ecJpL%T zvaVnM@ZEd1Gyj{M*}+2Kn*f5y3Z|$>2``RebUoC}wCF z#O!+N@`4vC2*Nc>hVSYsmWca8frF!i_05fPsm$94`UZmj0F%alH`h1Vl?~HcHXYVZ z(wYOMjeT`pGI1W(PJHI=&cghH8e`6KN6I?z>baJ;6A49x9Z!yobVv+E`~-vV@96=E z)+)7t*PBWve11-hKGj0Ls)fxPcN=xcWe92tJe%rd1rtXN$WmU zjpNOWVgb{~bCO9DfC1=%P$-?r&d)E6jE(8C?BJl$Y#tmPmM<&JFagyuz_^k$V&uW$ zk!)gbkKl(N@ED6uFc4&2fa7Y85YqOWPM1_EnT_S8Wj0r-SjOxlQa%rnDP#7mEOyS2 zTUL;$@Fq$FF(;CW93362Anxdx=*#kTsa&L&Tqm2(_VjdTGbtSJwWQKo@mM4kPp~D` zS(i+TIVBv;rZS`qJDZ!&o;|<3EKf|1XSy=@7A)$VOmls^=;2SXr{=(}WAG#VP4@gD!0e~#Fwc_Nj8ufDV^6i^UzA8&a&A^7?#NIvH&8gzBRh z85L?Pm2D>%d4^Ch+~2PZ@<6>V7a<9H>$p^%vAtb@ypX{%o>PTFWl;fdZb?z<==hL$ zt5f}AVSRnAT9Zf-^P_`q=^d0~>I}|!jisHWmW6X78~|Zb9Md^(vYFX_1iablncKH+ zE1OK|is3JR{pQ2kmbcT=(MT#qbj0*|ad%f2aVQaq>CDiCOW6++Cr>4Vy1Z%Xv}R_u zucycSsfx(~r;ftYxQ#k|1<7Bl-Acrgjq4U(6?{XcL<)W9_HCYjYiEbG018Y`P67w< z(bJRDBf}&6`v=>bTllGmA3bz>rCpgWESb1&%;ay*PEJL=q|1&$vb}c4W9Pbo?VVjd zA5;q10GxrlPjTM|2OzDm9ezq7gUqOWnLj)K@#zmQ#D%V+kE&#IGE0j~(^FGeF9{IN z@xlH37{L2??=djI)ty_n9rew%6+*{N8;UK%=Do0n2N7zHi`dAWp0R@hK_7+z_TAl6 zF(KIQ-P?C->uY?4&u$9*N-T5(;_B*wkB()G`2GEpCqMk~11}>!Vc0is-B`M{6pV&8 zHaD-X>l4%BHs>J;R8B*Fk{oA3EiM%d*cY%8THoyaTu*l|`9ZtcCb*N#t*)%|3=-7q z?XklW+^JWLdzG5kD5{LUpXNxFaQ)!R zOeRgJs9jd_=jZEd>p%YZ%-ilvj*S6Kw>LHco$S_PzKF-rkq^70)#CZp3Q;cCuE1CU zCdcm&CgRCZ$jPm?$?9Icesg#PCdg|z{(y0eEUByW+A8o1rB<^Y@aq)qvP=$o1yH~< z5Q&M5IN>wF!3wYc_|cJWov$M1Le1RMeY!ooX z0-=FxHgoIdEdnchmQAM%@{0?r33TbI6h_hhY!&^ma>6Uaf%`l9zZsFw~z+#O+o?e{}7dN|FPS`?flbMypZA+{57+ zsSQuF@2o9aC)?PrNSBP~Ye!)Qtiy`yEZR=HYc;TZGSfG zj1))Xm|0v=C}D4FYlj@jRf;kewjz_BCK#((Te`DSZpdav$HzJy2?iKhQiruAePKwt z0I$~6?i`8mUa5|kF9C*`Ojdm+9xpLNSUVJCHfHDMSQrt3)$0+Jzng4(Jcbqh_~Vac z;kt?w)t#i*NpuKQ><6BzWx&lT7dd9Q@remM3Q^(llgA{oIDJuvH(L^dy>X+rukYyi z_?y4}?fHurfZx-zv&v-&hn`L)JSO|)D8ffaMsD7`sS3}H4PYj*mhYY%AN%#Me|6{n zJt72~u(xjjSi82m(r$b3Xb0;06`_a3qbzAASqIeLynU0*W=D53l}C?0nVX+;+;1d= zWNG|;dTRRfFFt3IH`X^;chddOKmVeyx3?@UY85(S%|HXNU8z#?b=tTX^0txTVH}og zIKdF4W!Y-+VsP=?!u-v^e)aL=@7C7VbWNCu6Ck6BXxrlj(U*$)mWoMNef{&VfBuVKY;JA7ee)J{_1R~i ziFVlM<56`$y|-&Ne0}%M-MP6rQ-{0`g+o%6Rs&`1?Bcwl@-)?v;kM)v8dvP$kM2JJ zC$&33__`=NPEP*(=Rg1O{nJ9ZNM@rj))J{bu`^>lQ^e`T#igYi%h&BDK$}fIH93Wk z=WZqYF(j<_ z!|I10e)#e6_fMK8Kx-=Q8!)n_`I4o8vJxW2~xZroUA9}%L! z`YNrLe#Rx?9j`JvF47_f=%kaFJ>yOfNXYa|x8P2VgHZR)w|@aU-oJnE*3FxfGc)88 z`}=#%t43G4o3#*mlaF+&Yi4p9Jf!G-es0yN;wq1))M*O%Ww}*|y0wLED4D6(cD8qb z#S4pzq$o#HkvR{Lar%5%tu@s3s+pptLJD#!wwR~mbDbE?ro1~eG(ZsWdHsoG(uQ+ECK!pyH=bx$mQ}H=7N#OIhO;7>-riJI zRaJZ`o=`N*im;<`QuwRM@u}YKUTbze#bEHgKEG-$uS^@wM2#Y(q^)+NSh`f+pNRSV z-mqrFcWKv%--JX zH*a_`*$$%vsno^H*u-#LkA`|EtbCG{?dk1td>yPKe+T7YV?fyZ_aA^Ebhv#=Dy#p) zuVSSVOziFUFD)!sgKJ5(k>RlVtaa5i4Ji0YQ!kqhhQg|f!Z(#lj!pr@YV?7jVzKP1 zy-!Zga1;EH=}@m&z)xgtDXG6`ciLEIAn3;+Pju^YCW-HSo|g>{46x-$UvRI9bmBaJ z0Y=bv>g{HtTw{2r)lx7>XZhsa-QA~8pE84{uH$tLTVQPrjzrvvY#4$r8C_-5Dw&VY z^LfW1>?A}a#3B9%buSQ0cnnwA=Cc+_P({{wotP=rG^H~mV`Iz-i3QKhvt=?Opr4+d zAy#Taj6uxN(WzikQkM)@L?vpQ$zOmYAAS5W$&={HYPCvLigIP6LbdkX-Wk>4gu#RC z-Z)stE?vM!B#;bhfQ(;luO%?ArZ*HOOt!6TglRuKI1C0OQi>#;j*ft_qp|4D?#@5_ z!$17+;}7`@@N}Lj#bP8maGtXZm=Lc8>=U+`J#1)vVw{xDIJbWy7sQp{xpSM8%O40F z9v_h_lO__mfl4~C^7sfaR``Hr*TK$&6RFcws`u{Qd-UiLA^(qm`Xg~2C^I@X#vI0C z(e7??myq>R2S5Gf)8GI8_lZ=B><7DYRB+o{+hosOz1=thQjNiZ!LIJ^!$WC_Uz*B2 zzMeeb+}IT`bRt|yF0_i-upOBe%nNMp$nEe@Y@Xxe69eh$@2rV5BS8)a-WMs4Dg3bc zff0NAd(vr6rz)3ag3X5yAM)n=2&+Ikd>_+-RXEBUjD)rR=l}1YU%Y;MRjWFkK|a~> zP#R*(;_F|&e!01|6^lk(tulk?>z8W6;^M;HJ9nZ|o;h)`2a{tJVsSAZV9Ym{muF^Y zc>$S(>!x!Z+k%_*K+`hpt}HBk`st^SA3rwYhFp+WFig3o zE6?zO8+|QS-|v6_`+xrDe`e@jy?XWi_un0#{CcA1mA>RQAo34?_!EG8O1Qncj3F_Y zV8cT(0=((o-iJT``LDS0Op zxlESq4NyKkJA;2T`n%lZ-Me?Du8o)Cmw+Un>O&jaQKnUpw-R|a2ujtu*$*@N#99E% z%5qBMz}Z)yRz&-hi-GZ+Yw*6!QOS)o{WOEf$^@=rF2UkRGqcuVvWM z)1ksg{9y_{{`h0214F_xgMmOa8lIk;iH*duOx~`=lQc zSqS&_Aw}C;bx8Su$Lp)tn;FSa+g6(uA1iH&Hc|AMoSN+G!6lw|VR50`6JB0I50CNi z(L>Bn`Em11z2Qxh-A9EZ{r+Hjc8Vy3X&6QA+jK^Yvd3!b&v6~(39D;sd{;zYgbP8M z{;|xbPoJ8qBW=#Nm{u3YmNC!eb7biRQRTvna7W=oR4o7_=Ys)&R2CN(?4N!7snu%7 zBX4bPdEFl12@4NX@%liKl0NS3?WeA;>e%bh;&3_f^di;~1FMbB&CROha+Y|?iy3u1 z!4Are$E+|442sc_z)+k*7-us}qEsn^OtlkHN+g=n5!fq`W#8ou_kx@!$mz=M+3Bge z(V{qA>Pef5=rX`@;N%I&l&*g;Hs`SNGRv93qHhWlRl6Z)bqH$63NA|;_z z4}fPeO=7KSO%W{)RnC&$O{c4_M73AfSE5}ij_GzGncUjmX3ma|4nfgRpFJfWOXXO9 zkkx8_P|zki?5kCmC0 z60N@o0;A%%@?OvEj{&!rq^%{1cM~?_>uaSiE^8B;_>HNlX_gCa=8G zhDT#jpKMIoRc_B>sKzHJr{-p6@XLSv%5{r=*&y4i= zf=2l!3m?RZhwZcka9~%28HG(T47gG%4Xq;7Dm`Epo1sHGJ3p5sb|ijwdR7+yIKkUV z?%Qc;!47|d?Pg2XVZFhn<`?E4KYC1Z86SxotT50X8|<7FAo7&T$ib~ir*IzeNR-hg z%`HgQ>kdbwb8|^hj_@?~`(WH$Hf!WKr4uF?G&%u9X24u>Ufk~f!2tn=_^_kUC+ zO}A04H$|Izik~;kL7)ok&L}#Yy7a30O<`ys^sDtMV=kS0Hk<5erL$PI2uN6lMiyyp zV;!W$bg~S2BwpbvlbM;Ec=q&3e=ywL*};>N?#QNPv6#-Joo<)U<0;4yz7PU4o(KDT zuiv}@ekSMUrbKYb%^32IX1jWS|(9Zl^t;6y^<=bbpL6s;XMuipK=BU0kGq>^PrD zC}bo(2&Dv@kwgN#GSGMABFSX({{06X>Ba3Zt+qPEJqGD{nCiP?}f${?#=SL?NHAs{$K8BT>l&xJ6Hs zOV(6R#$0qYNW~aZ7AD|$d;2~i|60iauzaIwft{yP7l0n2xa^2P2riCQjPc;*9z1+V zq+~or@Iwg2#Dx-E^_7YBf>yz+MzGu^r>JQm|8o1-s;ICr%swX@4h zOY0jOxGa)SJP$rI9*-HRT+jnhc<=B4Pxbim!%!%KJrK6c7!nq4wNfFhQt?8bFgra# zGDHS5ni$Pwg*A-X3WY=Qm^7i|ZN*C#iUdWn{=~@0%-n2LPUHHdQw(u17*JgZt3s`S zY56xw|+ z)JmB!=5>1w$o=MZBzT?cn{*)PABo3<{y=h0_#EQ#k(ScRTkTecj>Qk+vkUXikPH6u>NSft znOykj;}=GvwbK;}j^VIRgig*SG5yr}uk1NO;M{ETJcWEV81OSxhQkFz5i!KG(||un zfYhSmYlj0|RU_xH+pJ{UvK3PozPF(=1(GbzP0w)I_q)5S0dCDQW@MNJewof>OdT&X z!hhn6fByMrmGyNK%ZJ*6NmL{D)U_`X>o?#jq>>4XOJqC?L1pA-@e_;>4-c7fVfps=x;Db(2(xx#efSeX{D7f#^N!%({U;8K71Kmvp z7`0oivGMV>bl z3mE>>&p-X2|MP#yXbr{b*4EZto|LISE!b!1MFeD~)Z+8!u z1Qws3nl<~JeC!Iq&I6AoUcC62AZK=}YEsu)8B4@gS7q=0&HMM*0684f!F)$zlH0Az zKKq7Id?J;^<(aJr>0=&A@cOu2zI&5S1A_p^00nL*%#>48yew~F^p1=syy4g~4dp`p zKNRM079&|@v(a#9J$7HH=0!LtsGbVT7ir<46z!Ll5L>7VgrfPFLEzywH#bm68M^Sz97vO~+aCzVqOrcN zg|=#SU|K9U(R&Yvfrew!&^1ql6|x`!2c^6URhhKJ^!}O*)d;Wg;taA8RL$lxA3p4w z_6h-o!pkVE&K4y)mTvM?irW#MSy{qEd4A4slrGnh=Gt^0(PEC(O^dT4*UII^g~e($ zksH53oGa*(GxR=&=#;senw-XO*M*|88;XV#qhq3rim%J2EmoUQ`jjhN)+;QTOHl*sp_-D|j_SCgp4yghT212D$ z;q>&_FcUKxOaX7Vzkg6IOFs_2nw4170A#wTc}|<%no5Z}3)cjqFD)*+J)X3(5%AWG zCsrYc7v&1MO|eu=j3tCBq|^TC=bv%uLXH~>;%1EkCw;d{XZUW-%bzVzEiuQLO}J^K;mi zmLAFR^>Ej!?FtS^-0>dw^@+m zfr0ToJUn7~N$HC81K6ggW=wg#m+#hU&05{-@i-k$ZG}7|9I~8D(>nA1_U${?CDXmM zAUZABC7&^;R(!Wy6)w-C<0Ep8m6cU;f?Phw9nC>FKUewf%Bl*yWcecNTsPc?EIm;I zcQ_hVsVCs2m}Pzfv1R)%;7cS%n<_j2hE0qn#wW)`Y3d?XQwM!^ewM$>lV$qRI}h=(r&5^GU_cIfC{k#fo0~uZJd05_<&}92BE6jZmdhre5Ssc*wOp>6 z?q})y@&inL;JTmRg|*>&qMfY3F_4(9iLEBQb*U@H3N)A1tSF1BiU*gYMyy(HmdyI*#`BL~ghD~0GT@bkX*#3K zriIh)VBrwJ4v&t~LRu%fBmG|A^7r;`bArI#2wou3g{6glzk87q;!;@)x~ZvjlEQnB zodO!M2QGZ6)6D^sP@W=u8a~eFnVAq z-t_Y?zxc=h@sF7O>Dei62Z+YQm@q^P0_?JW1t5-3SO(G;Dkn`I5AMh!vGT6fY}mj0 z;){tf+1oieKH?!%>{4iuK{LcztN}}k2s5P@hpOGQ9hd4mnuNe^bE*tZ^FLMgyjn_V znBIt>J*7A|I&>fQKBP0E`VROqEuJ{szi-e9XPY5Z3Wq~HdN!LmJv-jt+b3O+zBH#O z?;5S4l>WiDO5uP?mKru~p#joA(I|0I%1~L=()4M!@9ysKBy)2~)wJn2>>~fk2QDwK zOqCYzF67l(TVE{PwdEWlHmV|1=a-jxX(;r^V*o=D6)~V2XNSEq-$pturhkSy(4ROIWq#DJKF=R6tz`NNUSzcP2n@*8X0tE4TP>Tz zJ~1wSjfEilqT#UC2Z>&q)oyEOoASZo;YBLdR{bRcys#H_y8?`SKCt8ChmVBmU1)lQ z+MNuNY?YZcOq@HrJ0z;DrX1P{&t)XS8szba%Dle7L7RSmP#HG zp+#%i<<4ZX(O8uHRcttw!lvi716T;K^z24DwkIZt3RhQ`hFa@Jgd<|W@i=_7Hu}HPj>jdn#6c~UUTrQoMH~cz@tYnQ)YwFL@AZ2 z_Zn+4agKxr{0jQSkBLxKvEWkyH?4n`(r5!&%qESI;d7|6r%({j&51_aNMcJ5unFTQ zr$?s>CAm)mU@5>s3fdMn((^y{S&;`lLOE5dyO`6no}qz~jch11j*Y?xOa# ztgmfMt9FG^2Qfoogv<>st~olC+IT&=&|{|j-_-(eS$>OEID=d|IQR`y)6mturFy+O zJ3F(zy~TX7{_fwuPZTuFET=T(qa!lgeWw-%*7Ru7RNF8lbF;H|a_*S#%7;ZY zuA>ZzEbKwg5)6cyYhnDn#FhE+9yjTmVx{B*(F%)Mzt*U=yIs|inhr<9r>7@7JMRa> z0Z@)OX137c651OqftaYLCrtm2w9abKA?j!IQWr+%dU2UzLQCaJLyAlbl2a)J=ZkBr zYcoP3M!d5!Q054Xi2nT9Gls}0VkycDn^y0cnOQ?rCH{0I(NMBgzT%NY#Zl4%G%mZm zyk!6Si_g6tVdLX1xw>vl^9jidCnhGreb{AuM79%w=hb?Rd5uJ(ByD71q?LSz3l$3` zQJ}cFG3hU`>-JVin;A;HDu&Bna1dM}5{q&R9$ML`PenC$dPemnG6W~lT#|)aCj85W z@ZBA0LHhdE=k|>y#vCqrbaPI_OOjY~J2{0N4$W4K(fi|H7Z*kEmIot~#x8&S@kj7l zEE)$^M^&gK6bvPVGu>lI#f*k7D<2CWSW1bObhb#R3O@s(uv>E@QfpoW>ydGklSMi9 zsAxrTC>;Lmv(I>b65rHC3NPtUwtcQ8#13AM5wsDkYPaLLz~kwgG@tB$lZ(IYs3PTeL_kI_tBGk2^h+8e<~mZ8jq^*B&<^_W0x^7z(q%8qx+(Q$9SOFk$7g z%Bbh&FWd-ch3nz-`}_Nhq3rRNN@M^`*~;oNUR9Md`uJkMPbgA_yCmRGU0jMx`e=gr zlAVuM3wYvndm>~r{r=6hw7UV7{9Yd@=lQee5v9n#&ED?q?;8?x%+F*M!hM=4ZSeknWprzR}LhGS(u*2-jC~Hr*E`v5!CgnDsBM zy~oGAlt;NWaQe(+Bp%~MaC}4v9K_+_fe_ck;)@FlfF3N(*?{0n%gZB)L{)aSufhA5SC^QmR*+2u zwO+vhm+RZ~jQ+7JyDvVmTCH$La=7g6?VDFGFH;xgN|lkohItHvIzf(nf-6gYCN$K- z{&9AGes+2~Gd=amr=Kh>E#gBkKX6Gb7WD@FB#XCyFP~=2aW&>t5(73>W9GP;pNtH* zF#B5@+gpCG-_*j`oe~e?svKjA68Po2ckd1l4-Jho>lL$?ssfdf=EI=$*RNlKVu>y# z>D?@WTsJqj$jXn8kE+!=sfbXWvycXT;4=To_{*M6Jhr^Dj9)P-(M$&u&3ust88$#8 zo?|NBg^E8Oo1B{B`h32x9<`;L&+6G_^9lcqhcpLyrl`W~1b~5*5WbGrRcRKh($oY` zPtV@IeQUNSjpQOPC;_I^F=xQ081qgA%FHt4l^NK%x!I}dNgVQzKmPFg^(&UG2H>&v zb)j~-D~LUt(^KWdo;I}Dj~+ct&L^=nVa3OP3CBg_E}uKvKm3&oHWZ2o-PM?-KV+84 zkMr5=pxXnLvQAkYvWe)C_G7QdOLVl`97{{ftxk*46Q=iv4|(`^@84�^^io+QnZO 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́~`8?<67YxnX+SXxa{2oq}jD!^Nax7KL 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 z zc8kn!Xn16Hb{1QO;jOQ4Y<}KQtYt>pZ`y62zn35ySF>E?FuYi7*6Xc?)IbrIv_i-` zcbET64L5@suqI23OA`|lax9_i+8hq8dpjWgXo9w)F@AeH7z*FLy8?5P;fnEVvQ-&x z?RLV7M0h!!#+*pyL03MPi-*n<_Ef2js1gx@E|pLsteaILZL(Qx0X0MxTE}n6N89DZ zWpHRvwID`9;n2kNq^RyBR2^%(EsFQkQ{`d_DmXbdF*Z8NH$@cvQl{)g&(BH4?yau! z{-jARr+Zlmyws#9y#Se;nwTIX&>8h)qpIe)S521dot~b#fByl1b_z=?m8Per?mu|I z-AR>`(>^{i0l59}<_)YDh`X(nkB*L{v@;kaP-ik}Zc1I7bkl0nKU<`*d1>z^)9Cg4 zu|^=8nJb9vxM1;@5`JjUM9IOIXBn{=2GVb7Zg2OVF zN=t#(*4F0c=44#R5JO)>(|kX3(Sl+v|6<}?>63$yq|=gM6)In!D{?n zuXH?=Ht30*v*j`lmz{MS z9Up}S7*(5rOU-HEeaM}>Ucb_Y9pk?7bVILhEfqlecaWX&NXCOErLOit^a1b1j zz5>uLPf92@0g;#LeB8-oG$ay9hyoXbHK>~BfZm{kp>TUfsi%`rEsp`LR`3oN_4|bu z*kzVcu-E4=mx|HIIhdv9SM>JuU{d}38lOeDl78HB8bviA5iVF)1tfo$B zAg~zt3^WBBQcXU6T{ZGn3+B4l8T#t>`4YZHyXSfJXF(H;+6sBjg1XnsXYU86H14Mi1$Q&UN19eq{g8I&Ju5k zVS__MYy_^w-oQLq%$3!9Y#(b*qQe(V(r7jNd;Oy$qg724R1{B}>>6uMT8cvsN%>0{ z)3U3P09ZNutDfuzlx5acL4TJ$t=4YY8j%d^>*K~XZ89$Yj{1@gJgdy3#VXVYrY*Qv zI6O2xJw<#1l6H;`4PD*jDotc?hSrMPdjn7U`uhh8|*&$4vC90`84I+7VdaBKd6NzbutxslW*@-DTJG=NP zD~4?YEo=l^laeMV3jon+ccbJbg(8uG)x#io!`s#-gQsJ$ zrza=;7Rc+gyMn<1)_mjR$5NpX8VC_|VS(Sh`W{Od9vmDQ9n%?fT=T)9NF2a9h^B0P zsazQ!9ld`K==Y`-pJN|YPk#nG)DDe7E0&_7q$HARq#cNL7CDD1EzB?YJUv>IdO_8* zNFAn{+fCAGQr&9;0_vzA28?+xEG*g`PHye{@4qXT$}BZp5U0qiGV(%E##dlzY@FR< z74ZX^WGctjED;Ib%+wTKAj6~LF^e#szP4iUBcr2p^K&+vB@&JBR>TZg9;6)ab2%KV ztE;db%pBhTaBc0YZ@z@LX+V!N^6S_zSEz~~>!gWnC?S)dvYRCOm2$OElsXS$-tge? z*a*CF(k_Br3f!`j=g}@=H_QY(dg*d z!rXkLSr=`FYDFj0i&LlPXSfFGfl(BO^iz|Qe2_MjRy(Meo0|uwR0W0yW&ot{TXNPy zo~;HyV3T;q{{8_8IzR{V6iP)LfqNId<$NAfcc`?D1t=7YWJeIA=P#ZUHHjUaRu^+% zJCqc$U3#w6SZLx1Yu;|PK^s6|U!4O@%}jTssU*>qz8Hhs3q6&BYBEa^vIfF!6e9mMxmGZ^Q%NVI}sZwrfXCi8oq>I<(9vdI^ zc$~0=sz|q==Vhc|ORqQEfw7r$dfdiSE}oWi_8s&K#`ryulTX-dSEI ztmd*g5+SeGBU54?JiuNF@T7*&C=okucXVo0JE4f*-QC_%ZH=ZvDW8eTBg{(q7A8cB zeQ_x~T{I$wF|A>4L=JIO#xOQM&cgiaSHI3?b5mmz>|>8pp0%?+yh8f%Z8q)>yCFre zTC9pdbn(eg8|&EF{j~>bxQCxiULN>eTsqu6WM&Y+@4ox)V1J*GBibw`!%zqh4Md}t z5E{SFtLfN*CURh#%QxFCr^nsWb=d-z-Doh7+{pBcb}OCBSR6Ko$KC99sttLvOJo|I z92XJxKmgRh(y-1_>6VWh9vMtWHl%7S+r(Y*gf;>eWt5Dsf19Tu#^er;USy102cWc4#xzMU$c3juQFf z@oKFOgK0PF#1+u9+iC;r7DbZrNtl6AY1L{8ib;(%go4PCVyP0pxN^9hcqyJ`)ENc` zf_&~D|M177qZ4o^ag)G92g2dnZ56f&>J1GM<7B#JzKA7D`!Wjx1Gu=1GJ~9%!+ch#dhJCgTy7l$-^Q+6=Qr={> zbPf7qIlsHRnN25Hm)P|+6h!l14|r{sM@CtfqJ2@;k}QW~QbA z_JhNtjZYibH*vGYJioXIuO$c(6*jkbG(J%%lv=GWo6>4^*mqd(#Ka`Lh8uLq7bH6Y za+0qPl05~U1TYfy6t=EL8Iboe$(gr@U*6f>uH2Rv=I7lW7k?q%i(~>oc`njU+OaLTgyRr(d`f*<)V5X0 zAzq1Ld%aE2g{!=`a{tShUzUp%anJh-X*KaaN@^F(#IGpZ&7x7yZSbe>{qRSf!gRYHQV`gfOdwl!uEw2m& z`X?r)1_#4X@PbIA*9fFG;o?gokMFSk;SYcO`0*q6$mPKvAY=v+)$&V=tlnTXTcqE? z=M(jze9kyB7$%n|k~iuNU#}lH}B*apULu{ly&3_EFggcvKS2Z zX~SEfUC*99WiNm8n}7c0Km8Irv)U{(vvX=Dl=v9X3)9t(yBGxWqV%g&Z;wxo;WV?eB8Z{!$NBkr zHb$xDM$(zI8oce5Nr>6(^77K$>>PwwglwcKvm{5&g#xr$WUy*-rcV@+mb=mMFTQ+v zcV&e|*xcNN-d@MAqvsa}z3$5|Mf{6P{rKq<23=KOqKYSjmqkBB#_Ac2nou)9Npx&= zIwTo~hewriDG=t8lgeLQUK}1Ao<}2nem}_;zW3(cI}Fk9>j?!z zUw!?>-Icqz3eYTb8ZsIDi;Vi^7cU`L`-cZt7gwU5oy(<@Niq`oXq{A3M=mc4g&Zg! zB26C%@vZHgtY@WM2Ge^y zJ$d!T+hSUBsv&a)gd2VQ@Ieq?Xr+$W2Xj^Z%`$3}cLT^oR9uzssQ|ps$MLx!fW>MH zhXz@Y=?N*nB7OPt%P*cke@=M6ytu%Xr95zMT4rzG#4q9(P?9;XxH0 z+8&q7>xD12bD1ow3Uw3tXp<2vCV#p~r)+iy^o1mXTzhJE8e=;?KEf06ZdKhQTESeW z#44o&B^r$;mWK_fe*G%Tt7ZIpwds7590O-8mnsCL;gMk$^WMFCgM&j` zo7?~Vo8QzWR{5@CSFqnky~eMcoSw$6H$!w8F#a0{E%bxNbemxS65|{~@lRW(F z=RY3^1mA!BxVyI(3Wu-(ejPvV6}UFLT+Zc{<*@33)OWjA5m5xg(nwtvmzF#|o{AJY zgq}Tr!Jp)yKPYkOF;y6K6^lt@PxaPjwLqI9=MmCPTov;efeVUeV%=yosIk^9tT86_ zK=q)2_Jm(yBYvkrajV{9<)sXwB0^)>&&kR0t5>g2&(1&?mQnPpizSxA)6)arf(PS| zBO@|9OVJ>^%pj2|uF|ip>yQ}hMHtxS_WOF}*{{W-SLSDDd8?7(QH+agCR7nYrlzNQ0|8>L$RrQRc&30?QUoWrIyp7PcWdet zzT57^t}f-MCtuKYyL<}fYgCiyNg5?+)T$Ds9ZoI+qdbe8{_p?&|DGM6Vpy$)657>u zuVR<-w76QutOtj~Mx#C+yCUlw9UCVD&Sj-6nU!+7U8E}PqEh{i>y1XM-JVL^934r= zCs;5wJ!3Liv^suy!q?*gZtM;@1LsmT^()ohC;dodT_B5+5gzDty4g$`m?q;i%1rxK zp(w*6SlWSL05n$x5xr1FAR7a+SWFO^rNsrH0Rq0WvweDeN+^Y^uHAoNF_}`?tjFz^ z-V%>Tn@A7!fd`Pica+{Y+h8ynV5&gOStQEqEi!w=Ju)&j5D2JFU#TJ2>)@&QrV&TF z5?yu2?A)A3DM!lmnEn76XJ3Ecx8MGBT$I6EP)pS-)#&N*@ma}a>ixTSuYdRf;A3|H z5w?#{DVL>bZ**+TXf+o~A_*(fZ|aMP!fq}tEZ)7lQYaSj4S7!4l*%1>tYS27@9u7G zZLz{|j$}IRb-S<#ZnM#7vVfE06L;?1nHCYQ#%;9%*8?JV_jW;>2M_N5_(wlB=(~`_ z_+^X?42$gZ_hNj0kGEd0VYB3mqJ`9GrsR>H6rt#K`hq$;70r|0K9QTyb)P?b`tpk} zdWCQK2SmOumrkUj=Mnf8*C``8d;7}Lq+SilIp+ww3E9Vf0A-RJzt0a?4=5c+hyoxh zC-BllZ%QT;8=p6EY)o-(ZXPBcyN>nxdSASF!6t$}qWl-VV6jHVM&YXXzZ#(FA)Sg} z-@v+vf9$o@Zi~gPF-zV@*EOC;qL;C&qNrH({?&i|uYdj5e?2ul*;Mm|AXrL;QJS(W zN_ScwReHS>Gj0+|exb+hzPq~W^tho}yg^%PUi2o5h5QeSLrm)J?|t_4sn72d zt;A%yD7}etd_u4{8g$Yk(h|{ZvTd+QN|yoeY}RZvfwTOSU31u6cpMm1E#HoWhrj*y zCtrW{Rj*HqRAccgtnM%V<6lh9OdTE_fB))xAeD;&yvUXeazfw5+$~0#)D{{D$&sMR zNJ_VS=g!w(e?2rfn2_W26YRN=&zlU!a=s8bk8&9klM^zDS+6UpzV_3|xy;WMt;f~BE3+~AZYZVxHJxdx=+Tc(kSlYzc#QpmZ zSoy?F3Pw9SGdnRkeOs=+diBGve)Uh6mshLzS8>4D&GqKiHap{Ry3A5_pS(_7V|y4C zjDff6lXC9>fBE6n4+jVP2D1g$3nB%>Qk6YEF_F$@2*3P^ZP*-kHD=0TwptI4$y9|* zkha!kux>h;PAG8*8F&Ll^SC`EaOFbz`sU{3_z3y}tHKDm3}_H^6P7Q}2UT>*rqg@d zyQe27P!OBNHaIkh<=m=4BX}_k?3cg%<(rQiZl{BogypbAS$JL|k;`R8nj&A&^yUa| z!c+qNth3AQeE$5!)2B~u!oXT0nAL*cn1*D+x*G=FubI!+x(1@6+nGSU}?1(Sb;`RBtOr31lLh4@dv%i!b2^8|&+b zhllVyu$sMQW$F!Sog(@k?CrN&t)-Cq~Cc^SK;Ug9PvI|Nid)YMIp? z69r}CLs-8{%Hm~M=Kpy*V0tZf|YFK;_wOs{>`>?zn#J6-QOo9GSX$l-208ynQ}w zgEc1|2Len|GfAAV!eB;+M@%L&sS-quo6TlPy<~F0?(SY9ag)i3JoV7X$hSZJHV_Cx z9e#NI3d(hQezvo-!}?oPZ9Q;Fn!dii0W~3P|Ih#Ve?5Bi_~s^o2j=sIMpG*6hyg$< zFaPr8%O}sC;pd7>h&~LdBo;WTj?sv74u>3RW-`+ERaEIL{xd%}hb8YH9Adg-Bcu5L z(a`}P2S;08zPq@v&{YqZrI{@wHA)}?u~{D0_xEOU`OjOM>3jyKfIYi=Jn_W!$=NBe zvUF$Z>9eQ(q8e69WzyKKXdm|V5|1(9sp*NLn3p`wYStTYpyw}MU@gD<*MB`eIx6O5 z1_|~=T%4Mmgl3c5dA(|APcQ%}NhMM&^`nQ61_A>c8|%OQmwy2hu$Z1c-+45;x%IhP zyB!8NCMG=I9!QF}0x~QNh@Wh$vDdLo=jyuGzW zDj#GK2L`mJIL)5DBDW_Eby4~0fL{hpW^?(hL2tBK9R`Crlg@qK*f>1e@9pz1EiOBp zj#NsXJD8+&bYyaBhIeSUJ5~!=-_PIK>%*hN_wPT-gNbxTrqd4&uRd7o3&P~|J-!~c z!y+ZPI#!=$$HfMRhik0{=C{7N0UnZ@)>}McgW?FJN|QZh?1$ff1yoM%5|f^)lJq@yW@jPoJ>xYQ3?v zFc%7kxgD-w1btgA{4O*Q92*mf>7aTzb#ih-wAW~AG zOUmcLXTqeCAkCbgMQ-9Tz3Oqej^A{et*P;ep>PPR1F}Tc4$voSmuf$oQD92OfSQyN zGs!VmxWBuXPD&SVv)&>cK%ZNUCb=(3_2>1^@7}(F2SU&dMw!D=lzwJ8+9g!8ytT^h z#d)OFsC!)QBK-K~I+c_|_Mi1_K-u zlp)E08w3Y}Q*VnhVx3Rp8YIJ6g!7QiK#ifpqjuHNSJ@QhDRqS@_14tJ4C$%$bgjaGK;E@ou37lmdG1Uj!)EKdnKFCVnY~o zFhIiNXH(jZCcFQw`r6GY z%cN6mHyJ0kLG~c(BBZU7m^M_`ndtvPk6_wU}h| zkj1FidwM+MW8=UjnI-qKwfPx?OlFeT$%LH$o}a^4o<4c9FuwpknPsM(R2#`C=u&|+ zlywkkOsC7J#6qPEC7TDqho#lR0mHxoxn@lkiu+>IGnqX9Op3l{15QF1Cb&U!K_NNQ zu9Wd&ZXeJfP1NR|NgtHKAQiZQJ}v>M8218-Y01$JiPA!sCxV2dPO60FQBynvF15?B+ zx%iJCKZ)E>D)r&r`$+TxpM`yxEvDJInX!>EHCNjj2=o)xFw5DQ*DKL@bKV}-EET06r2R zz&aMYkuqkBXnkq3Es5VTnOk)!V;ihiaFzu%sE7PmEh%y?m*3ml=RRR)R_UPSd(y-r zV=|M;e6HxUSz(_?D*vT%biv_v}f zyMO)N@Bi?J=;bAE-`Cr#HyBw`+({a@ZFW&bJ~^x1R{16g*4g<R-C}B&958#M4J>DUY zB$B+LrWPI^8d_OhA!ZXrKCZ7{s1sMoty^tC6Q9J{Ha>5XQGs@>4Se#^!^bS990pn> zR=K3%(u=jI30Lb_4&mxYU;k)ga)P7;#5bs=Aui&~nCtl1B&iZC>hJ*ea$32q>DoFO z^d4H*^2|~0HV|5A^`%RVf7xbM{nq=k>k>J z14d{Pq{&1QOJiAx+%Oo7pKM+pYD`P~)}Ai0)AHo<=xBR;r(CIkn=tWWsZgtw*{q>( z7^AY;?U*8I8iprB?lKwnH3Q%lW%^+)ne*9+uIeTR;v|QN#EM|=*;}Q*Y8t`i7kD* zqa_SNe~%6{H3CdAesz6$ftwhT$rKE%SP-QIJe_}HP7T!w!#@c&yfaJM(RDG%u0aQ) z9v&UTC+6p8WrUYZVoi!@v)2bd^SFD$!QkDy%Q}N`XLp~FaBy@Sxwt$!J(g;WVhQ`! z8TFZbUeGL+1igddu*>5SS*ec9os|&|x8+`+_u12D4Cnx9Eg8sy6exx2t7dAIH$!-b%{31-pA~IDn?n5SxJ7l;zPz`%xpVVzXIz<FPCA{!o>Uf?*I*P% zK}469UxQwHx_W!L@_|sWToHu_o18c3xvyDiU3Y`dcUSI0V+}_AZMh69#9J`J3w2hoi)= zViA@6m2WHT{^HWo$nXfRdmW2&cl;%n$)=UOHi9BQo9jNrQLh=_96n-05EYiIX~7-Sb*j>qCk-?YG*UtM3Z zWxyjBAcuZZxs$yitFSu&4t)OV>L!!RI~+FB^oI{0f=9pp&2RWc%*^W}5$Xl1=J0}0 z2nO-pci*M6X(%aynY{*=+|rsdGC#+EvzQrg$i;KNP>{YpztiQ`Mydf8WMEFa(`GWu zJf74w2E+QFMKf^4)`1TQb;k4XJPZ|LAwLqQGGP3F?Qq{1ptt(w>h1`0qOOC zIuyx{E7Ai2A@j*pg&vSi8^#Kq5nXH55@~n4%1WYN>qS)6oo-*BAFsz^x!G(kPr4Dk zxP*>ROiki?>Jd+_*>3AiMqW5KGfT=y&O_iZbh_i?6R=_8<@euzPi{)+n4epC{Nyo& zFPTb4FQR6vg>B{QCLaHP{_+2Q`~JO7@@ZWeO=m5Y6LIXel`Okmxi(hb6 z_$h&~BYAC08YraK!%1S@P#u!2E*=Ew7d&E{?ADG_SEy-XpVAgF3m_1c*@$5oIWVMz zV=Ju87+>RKYNVT_XIwc{NkX6+E6H~*RUs<3-)VP=i!zSFV1Us0{e8FPDhMeO@pcDh zL{_LoTCy4n;kHn8)J)uY@ev&!zrt` z#$KO~H^qqIN@HWB9hOc9d&-}mpPih@TmhhmyhLZ{+H7_R;Pp)$Z^w2Hk56*BLa)z1 zCbV&3XmFVOA%+YD0z-pC!X_L}m?mcN!w+wFcK3*ky?y;AY38)SgG3Ec&Lm4^OstR> zwGR19fhcOXT6EnuTwT}c80A5cnIOv>`aGWLsY!x$E|bP0S*)rkXxbJQ=DB#gDk>An zalKJ%|AikB2G|U%*~Hr}Ei4ep2x)r<`{$QYIK-pJj{#+a$q03TkB<(I5W1igM1`T@ zK?$Yhip+zI$Mz2n_Vy1hFJn;IzJRzqo=<8>1`m}o84PRpA3S`xCP{5NBTcKsgF+#j zNvlU(s@x_I%S^Xqa5Ba(#g87hHyj$2k?hqPZb@Fn%M2!SufKP3@y?IF`4I@hMwl&D zq7jjR4Tj~6PfUP2cof;y?#_<%n&u&WS?G&!I+kw^HQZai_#TLDPW;eZ?=gzAm@*~t-L=yp2f>`??D zJpf`rMhpe@M*Z1E^fE2eRfk7qhOQdt8JDxgMxBjFh_LEqtx=O&fp!~QBP2lA@TF3* zKyouXJ>{@kheF}Uj~|n^9v>d+Mb^)NO_C=G&Fbr~R;oBTx&GRN`>keUZ+8butAc@N zW@gIo?;$JS-Pz{P3pMhVNJ9u$iVe+5`BsMRnT@gdmB}IsT9N2EdBPW8J%99gt#n(w zN?sEiKs3^aT)uF5b#ZWXKnNM=@5ezPE=E{_#VV6gl-8rgY%b*TeSj=KEjgE~?O-_L_jh2jL?&*={g30lzm6f}p!GTIm)I%X*$EPRFdVP3^@Hva6 zMNZGF<=d&r$+_A2Qn9kVwUfL_R?1Zo;2jyBSE&yu$z6lTu-RUJA30e;^pbRLw-+1( z7UMT@gURF;F%b9g=qNr5fN$?WEO+zi%-G1tPk#L4moHz21_qKhiIamPu=%U6zQ&jB zfQ-e;@}5P`iHIJTt66Umm|4JT{WfwQ#ZWbAVxkn@NN8qfZf~oQo>I9&zTT@9*>Fq}uL=#15cKq~xIk(LFpkL@be~X_ZR7DToR-5@l^xOMwr|XJP8>KmIZ^ zJ%#0e`;(u%c>Wv<1QRd`>`3Mjfy_0)}C6)Qmt$mKqM-cBVG zGJ0-d87_#)k>~?u*Q)!&C>6eKms^gfDym1%Y%*g1PPbCDt=BYFnZ?CLscx%@Cg{q_ z3YU$mlKJ2T&z?PBy?<|Tcu)?#Q^`hK9`mLMjA+#x1yOpk5|CIaO)#>MD+;-a#Y+V~Sl=}oT4bfS zw}~4v-6SwVZhBiT#V(?_Zg?OF5OmuuR^4T{g9sL*+1Ql>W$u=MIz#LU2L1So&ntqf zGEt}4Rysc4eDjTxRxzlN?@eL`SXQr8!5xRidRwkoO{UqY$uSw8dW*xPGMUM#snz>y zCX+dp&fxsyM^=;d>f#deGBq_-tyl5#!;_<9VCd$i+3x7%LJWTOJW?c|>dob)JI@|J zzKmYH{{FR5r}wx$ToqhfYFzD(%S%nbxg~H(9BDSpR_P205<^-fH61^mWz+IcIHhMymy6q0zq{;NaDMv;|)$@Mi zojXf%!X~`RfB*jd`Naj3RUS7C4iCX-Th+SFY?+;&nHV1v-2~4wax}Awk>dl+Cza(+~-EZ^xEY|>* ztv!0kE|Y2lP;&gx=>RJj*uAy;Y$i~UNQ#L{O#tif@8i#_^XP{+@5-gh;6T{#?Y)d% ze*E+)9+Myewh-!x1Y_glZ{NOs_4)@QuF+_2)SG1K;qXwat&3h=DLF71I5;&sv%I=; zTW?(5Tt_aWC&x$GR63vFhv`so;Q7<1gW*Av%cM+!J-m!W?KZpLOE&Lf{R!a*yL;s8 zfNZ(50`2UknvoX(J?lq}AJ1D5%g%%UCf)?hJ=LGi|PS@ZOcTDDRzqd5Yi!1C3kef6mE# z@_EiVnYl1AJ>hgaM@EPHJTCN7vs0U02&~>%MVs74;a&&xkacR`+O$L3d*;d8I6BlRa*SP}PcVcoXnaTYA55G4U^&7V~c=Avr zG#ileoN|yKjS{OEET0Thbh`VxnvPZ7xyu%E;b>I&bfeL(HvyCJ(a~5W`r+-{SUA#^ z_NI>60Ca5u6FWIRIX*kd7xHj)@M2=ZKOLBYUYuWECa+TigWj9BZ^6b&YELd8abZ~P z0=5Xu5K4p9ymoVaa(e1QS{7Yat93q#a9C6QX^>r6U^lsJVQFb;W`2&T$Kpq% zYM@m*!OhO$M$i<t()F2reX_#y==nVPnH6MuGgGb2cLaCtbYB4P6%)#;DhwYt8 ztvak~D1xxNdwYcExj+ETads;GeRJ2@bS4u|CbU`&di_c&V0=mT;%qWXgxROx_) zxfyJCYisLI-+zA@3_?y}a5rw;kb}LdWVKeLKwwF4G$8_5bgRt*Inrpfr9vr_Op92T zCL{$`R626I-Kr9Go{1Xp4oI{2Vm^^d!eWu&V0y2C#`gC1o7btmu(fr3Ou*CfRIm^b9W9+y zN9+U)ixK{7LlN<8?tZsb>Sy%fMKH=pB(flNktVT7KzzW{kEt+ro{dE$_79JYsKU9I z5Y&8p!P&W4NYaZJFC&rAZ-4vmA3b{b_T9Ume*CdstM|HB84ZR=IP~HD2cznS zq#7QZdKLSiy-Wz-|Ni~^LZL9Aw%>ssP+OYHm7yO}9k3x497RFHJ5lN^BFha)l{%@7 znmV#<$ev@dfKmYgK`|VJ*#J0BPmZF|2#5|LW2)6jRUN_9X|)dz54U!$)vv$%Zgq8K$TxJtlpP--ZbT>)%JC?%1iE0w z!-znrH@zyYpsJXg336kjBaB_*-@##8G+#?{7VA~~+GIA@YgMl*IZ$s%Vc^#*4ioO zgX8lH^8_RU>iGD$x|3)IvH5&-XF7Q;4NsRAc{Rei)sz+>IQ!=29i73*yy2}~slwJc zJHL4I=H1!FIdqDTT3fr}_fP6|y3vv0g@t*dAmGWQbvu$f&}_7Vg!fPg+u)U0Ak*CI zd6P;?{@e9+24S+ev;+lYjEO{?uaFWJzM)Y+1aHhD_h96P4wxSfh21Xq#F*qJ$o7)t z{4}z;EVJ>^M-Q-b78I<;Ee?;4_Kwc_+^+lg?g6|Stp+T@HvyAU38#~Cl2YMS-8C~w zT33bn=fOZ8hL*`?SC?02XJ@W6SvY}3cAli5MLK=0>B#%`j$zaJ}exLi7kpi;!2xAn?q5&2LmT~$U=#;KJb%Os6ovIDh~Cy_rA&RlvHYu2Z34)M~RMZRZykBGK4~ z4)8vDdHP{P^Qf zaH+MmHJi;2*8_%_itVi(Rc=g*=@Y47GiHlPqwVT6+FrX>soUV61jGsI4(RjTEU*O^ z!Rr`4-vHGGpx?cJd$4~1NC9&*GqcjrJDDIp-MlGBwpem6i=F4ksm{+Yv8X<&@@lf% z9Z#M-`R=>#n19)2s#e^6eSzs|kK3acJyZ;Z;)Ozvu*8Qjv|6Rg8!M z0K#BgT3PZ955-fdaT;1!jYFzjy!s*wBc{U_dd<&CS9Q`GF$9wMUVIjV2S)yE!G5sLK_b)9xGe zIh}UUS*z1aFNA!~VlukyHolS9>kV3!bWrX0^fSZY@A%O0|MVaJ_OE~Y+wswH$%qSH z^?TfdULW8-GCVTu8$w~1D<#ztvI{@%b2$NV_@ZQ*HR|}wt=qT3ik+S9(=+KAJSO%6@+2>S6r~7W*xrIsZ z@9#f<{`~U%9M(G%n6{||Ip%I^YRYUjV(LjEXuCBqI5;&i;dHrdR{Q#m8;?GEFdLX6 zoDiVjyndUA$B+}HlH6?1WF->xOEqJ!+ESY22_Z2keoRFQ)XV=&ZJ8WNn}HjtUK&Oz zp<1s8ucX`ppCgs{;3x*^#uEvLGm>DH!B&}sR;LY9!AF=|2L8pDUj(KDgcG|}ZtB9# zSqmnLs4vAyhKJYIR&Q=@GRf#Ls_hVVwP^I!?4>-Dk(rwsYF5% zFb%DYV2}&>?0G&%_}M<=H*UcO4DGLuu2Ybz^y zo#FEA9H|3@VYCjLUAD(7wd{44VV<8!D!J6)D3=qlxE#11pTIRTsT49@XE2nc!cv|U zl|oe(>z#Y|zWl|PODoHwFvFpS>bJoOsGXlSEry_TDhFn%&YD< zy`~7fj0Hnf-@SdCzx2{@kuQ3^&SWuJ?GD08NRsrUEIAQ^zzH1dwHlW2$&-&C+`I4d zu~={jUq2F4qq#V{U=8Al^q_C(voAiInx0lQtS_RG==tS2K}d3itJP>c4!dPN7(DjP zBVn=(b#rrbYAPT{ECxM~AY7)p$=;@fAETkA>K;RDqVZ@ppOx+0Mm?EMfX_GlyWjoIzx#Lp0~CREM|pL% zT86JvX_2F2<5Gq&63b+-A-suXiY10Ht#8}}rXV3(+gp3Pd&C&txrGsq@(MmudkiN zSci)slu^u?Im~3UFJDVSmx>2w>AYz$^4@qfdUuRZrSKj7)d_~D{P?HZI-k+ZSTV@(S*Xee_qNSxJY!y>KlRK`BcBdOwmrt*ASx}N-cO|~a6Z`GI}{7!wL7IC>%`|sHqNY*f3-ZCB3%3jsvpdZns;f z)khHJO&4vn(#9x7<@W&U8_rD<76rkmvciFIgM_;3WFHDAP|^YTUkZty?FT|na;pPW&;6u8#In^6_}m9bLTd?uBH;|6eAD!dprYP zFPMqlLSKA7AB1>$b=~1`VIR!#;o%V+$kRUnkMw#6E0x;W=_&YQw^*I3;{x;N^?E(h z%b|n&%Q2Hyi)5M@_k*s*e7>vI5Qe4nuTIA^Lzu#mNbe?mw%B8|JeA+$;lu7^?Pg==$xFM1gt=03}R<% zE3K;D06KDet58Ih_R9SeQ$M_a&oqHeS;3lyaG6{dmPDM-4J&aJzP~To?KoO6wE2FIFqW1ovt*8 z(CHu(Mw1x~V)lrpZ{A6@NGw3*H>XBMhjE)~gP@+OO8#!8SSnhjqf|c_d3~L>x%vXL zGd^`ms#qvhR5>e2$mwdFu0Cv$-=%S9G_HycnxWD;xlquWotd@REHIdhi%V(jDfN`% z5zyk|N+Sel3|z*MKsSs@_@L?>j<_5hANlUP-`u|c(C%;*3x$9F|NiOa`!|hBt=W{) zA7CX`fzf~|YK)R9I_e)am`$w0`Q=4i^~nHz@SLvPMK|5Nb?fod$IxDupin463sR{h zWQ&-m5;~>11;1kmZ<#Kt+H@&`w3NU-iE2|4~R#FZ}LO2w_E%p8b0S2DU=UB~-M*2xaVsaG#7Ik`j zvc0thzZ7EG?PM}35YTG38B}uo(ec@JE>o%2jYj>A^&2*cH`n*>-Tm&@-z_XI^7+yi zB+E0$n)P}hFy*vb34~Y$&I0)c6U)^q^P@K!z(kWpO1TlzD&?Z&@9OoCT{*q=xLJjZ zv-4iHPId2CE(wRD(Sm9Q1v`|)_f`|MVIZtdvnKcR;RLMs!NI{_etNdIw^x*_F>-*% zx*!|@Q@IXyboBP^8=jMZy}5ASD+kD z;jlUO_V$1N>1V7_n(0Xo^1`zh&wlvnr>;)7va*Z^B{SEq9u29Y#ejoG zqvK!uJbi)*^{SK;kv4P_NJPEaSSXb0HL0tEf=VV+lH?+{xYIkkd+*-7A*}G^FdGJfdHmpM$UU zf=XTrhsxeEfsI(zQEhOTP-YNAfy?kgm@J;qYv!eT2T49$SKW*y{sYj!C_aB#KMyuGMvkD9jyJf_B{7Kfo%+C;i=SXJ>oo z`Sa%oM@N|8+S=;0R4Q&FYQ0hsQ!mXW$`yS0P<6RCs?Om!2BL>KVv(>r0I?*_AKQBO z?qGi(FV#xZr2e_Utj+GY&SWLqL~oE{NoI??&#n4l>rklgw?6#k&wn|T;zT(V*y`$9 zzv|n?{7A__pIjQvUQ2=8SR!$Cc`3D^jmQ+Kjn(h5hO z@H;6kBdMxc0@b~H_q^UAJ}sk8A$WVaSio@x`aMq`Kbc=x!mv~^4WI0YSQ$7EM2QBjyq)Ofm57f~-MCD zTo5g#+7L;4sI>AevJff<)q2Den3J3c1-ViO zZNlr+c|jUp!V&xVShxGAi}1FVBxpjxH}QV~J=o z70;+{$7LyOELCqHE+&(eH7h~pfqr5u4?ufs~6?ml9b&2A4xqo4zh+EIOcS+95^0TvMLG5BoeTHUnr5{8Lk zzTvU?g#~!lzkL6%TU*?)}5w#BDWFQZ>=PRNJ|I z!69G2S5&gyCWRf~zCa)DhSOb~pW_XxAfgKzftU5mVVQY*Yv=s@4CBcciji0hj|PgF zC5xgODl4+;kVxS2gBoMfhKR2N00DD8;rRIE&FeRbWKyfw5jJoHg8H31cTs_QgH$() zsLNJBvC*JwN=-T`WhmI$)%0q`U~H*$rm4(Wr;$q6`CL}p)s~AzybPKc4h3-^c=P7w zy3Jt&w28HP$&zvv%f)0e-E3d$3lO2{D;18ylM& za7TwD44aO{u>|SUCEb?=kO8#beiF0ILt;rl7Q}S;dym#xREun=U$6Cz zYTnY%Bk>ITEKj-2V=&s0(NWL90KQQymhm_^;B_v`z@-_g!-apkoPB7|UK{ypxh%KE zndo}$fLOh^hj*|_D0MzZ5^1E6LcG`HT#8+{BnwTo<&Y$1o6T-C8Ch4^e5lm`tkaVd z)m#=B)qqey6ZnGpP6eh2r4?z%i|2H#RvUj*X&3`@b5i%bp|0n&+C3Od(b!7Dr6BW~OK60K)k>-+&i1#$p~ldgL1# zM$z`Rj0*WYYqWmj#;hCAqONES@($fAIp>BA^Clr1ODPnNCP+&y|%G zFzDd$kQL{TM74{HbAVN}ex)qUzw)_gMBt41K}j^5EkYw!VY6CXR#^4(S!TmRGtZi&;u+)r^&%`YG z|7bN_5{R$YtEF<$+ux5V5J(2xXxF})IsqXV^iq&P9w|zt*Oy8~be?oZl*XD#>F?R@ z5KDG~S_5_%bUc`GMIiTB@QNGWM!^!Jac|Ks1ZF!sK{brW(V> z>mdh{3MlJn23i?xuW2!En9ig^p-`h*%Vly%0=-mnU1cWY(fH2(ekgd=YP6*8M>Gl{ z0MYK>e-N0QW*(SBrW%)*f*W`4@D(`4+qZ8oudbw!K^I+aUS3{VTwXvk)Ejk4j37+!>8sK<~KJs8MW-{MPr#vn)$qW^VXMN{$gcit#@%)TKEz5 zizN+<-EA}frJ|@Wi1nK{Z}2$C2*_f2w zlq@gI8~g0lY-e3~B@P9cKu^I3k$jy_ue>Oq2^hsTeW&n$4lIzEPIFU1%O5wE2t7{KFdH^kogrg8BEV$P;yd)6g zkY0@a9-skMTd7u{h$_2R*gBXSm(-m$ra3YuW!xKrq!tL5u1i4FtHQ--WfKa0XmD8W z6(a&FMTU`=lEvkWs)#CWYV7u@>1iGs=P6f8pnx>xj>ie2EG-0IYUiRjZ8quZRw_vy zO|_HI>U0XyGF{)%bW4?r&*R38?M_ESI*g`U?N<(6{OSP3)-@?kU>RW(uRg)%ug0a)W; z4hQeE$pN7QH}3DY+ZS;8<0Gc}&YjyV=YVv7lLSiEiM5wr^uEEioXT{iz@Ei|n_fKu{R;B877)myKy|=r2d3o6@ zC>B@e=nyn1zqR!NIrZ}8OP~sS6)|TvBcY%q{KLV)0gqy^NY3K?;^M8FH~DJBt4``d zbb7@%DkT_<4kCs7jr*spHplVF$=T^yquyji;IMK6Cu!-JtdHO%{aJtd`Qq{df0J9M z$yAU3s%BhCq@JtKNnmri`asF4sp*!gQv+iFJ77HEMX$^6@UPc1rd6-9TxY#lv1~{ zV^%9wD;iB#_H~mGniR7A{QLs-gVrAy@Q#i915?w08Z!Ws+}_%1wc4=qvJ^v;%`Ji@ z=p!2{jXJQHNF?Ri3`UE|l2@BXApZQ^Tq>Eu9&in(RP44{tTvGX8ZA$5FdEPZCub+Y za7e0DYcwo0Mj}P2RE(D{BSs@c;rIkAIF84pMefYZEK!+&be&Eab=p36pI%8crn;lm zF0ZWIx^vq*=;hr2i?rj+<)Ot3a|;jd-76KOV8DbNNBAw$inJ6Chlp6x}P(}XAF;F5d_^Z{)U5Z@JYBu`@z4$Wgh*_em5V;U^k7^KJER{pi zFi=*nN@p#;3#?P^Q&ndiomBHROPjb{I+<#y2J&?&tk{~KoSc~nfPS@lqbmi1O6_i^ zw>zrzwA}Iy1%r^J^NR~q4J2OG2h70(@`b!)oEr6GtjeK6%I|IP9{W zaIg=gvx3tz0iFlWDji*QT7$uYAN3D-`n^ybXFi)dk<*q6V`kE%wU2anm}Ecz+P~>k zt;S?ABD)KPEO8x#giHjlu9zppExZBN9*M?MX^C#|B-VO%Zq{tJ5D{1=f>IH8E*Eu1 zy~pkGPxx0?S3vtzO4tx_t0bKywAcfnLjcRGzCkC)$LX|GPm(T7oel~`$dD=eW@KRqD`u zaP9s3_bqkZ#;5wf_Bv`2MKC);PPtgr8uU;+IIqLy;?w6B7x)BRu$+uHJEo@EU_ps$ zwcUGn@88_K1%fmiQrz+CN^YOBHY3uawOcM#FhsSfAvItTg+`-^DX6PDVUqmdbdE@i zTrD3+6j67uGiW2e(bGQ=kHrp8PZFu5&+8lT4UCTuk9r0@&OVdHTyHh^4?v~uR5G); zxM+~v3CZDWw%YI@x5tfV31PR`XBQTJ`R%vFW4=672u~Pd62m80p z9BuDX1|!d8vX_@vkWIC#BbO@W48GmQ;_u$Q3p(_!zk(*CYTp6?WwDE;B9S;9Pt~iH zxw-k7895(~M8dF|-Q8_$g$L_3=7SjR?(Rx$J3MBP6Nk8J1Swrgg)2-3;0|lJPUpLy#TX*l^t8d=Eeg6CfxC}3> zS8E*+=&`Hd6%u?V5CAK;n3?NLThmpYp8al@8~{}WQ(C=V&gE*w4Oex$5z&iFi#e%* zEQx}I`A9NTt2Y^@)oyV>aCHW_i#ob%pPZguoSi}z*Ecu%2l}rrF7ug;!(t^6W0t|o zOW8Wp8~U75E{d4}Yv7vD8t;I2YfH9dF`I`EA37XPfF>!4d0HaDKmY!}W2NG)dL4iK z&;R*%qQWv*{tvG;Nyv2jKoTjmSq(Km^b)dFHiEtix&Wz*W16ozQOAM@WT%P z-RRgD{s?LV*$i0~VaP{A5!r$^n&#){Z{NKOx&P_M9|2iOPODUi?&7=_bFEoVUFTX| z&HViM!^e+c09ea^`M>|m(cu|p#`H3EI4|TwYOh!8a4aVO#mg7iGvT&}>}|=Et*b-s zJU)Vi&}sD2yjA);1gzTq{VKv7mMXc=sn*B)gB!l^N&whrG#=FS-iBo+^g4UG8zEe^|j4dJPOZ% zfIE#SLe)Hz7 z+!D{EVWnV&MS7HhjV%->W+FQx>R<&warX6DtoD4qm`P`mQqlrh3XDtXdw5+M3LB0T zi-2=iDl^*b8iSOfh2o=I%GDw)p;9h+R8}G6`!9d_3(7>J)kvwO>x{P3?eQQ!O{14< zuu{FeT7_2~9v$%svR~crf%W#<;h@=I-ph+i*K+1kL_~K-M~7R@I*0=UlJmAw2^k7c zKfSm>vkngW#>f3;lNq1CytpLzd0Z}HUT=%9Pu0cYahVimhA@NC@SkqgheuVoZsB_q z;}bTA4R~S}nB{h>372*E_jfgty`IfoqapZeoF6Zpu?IAAp|>F09WIx2cy>5eR+cr| zcBLr6&#o%?6FDx=FH(twlzFR5!yL@W?d&6bLd4WvI4N5#hk_n=zg%^7GZ34@L4-It zKFg+M?%aJ0Z~&1h@9lF7GmS;dwThR&`UWxaWGZQu5+`%xe*fOq&i2l>O0twxOBfJQ z6FS20s??{HXc3Q9{SrV=)?jjCk_meA=FR!ZNw3QX53{&1KQioVwi-k};&SdUOt1>QL4SO4!77hQcLopN0zZIi=#A#A?5=CUvZaLuLTWTF8^X}9 zegv9t5a!GCFm*1e?&#(h)C0l3tPVa#M~1LE-{8>X#FX8h`SAY3AO7&iR;!`vI2ta_ z&RKmz6v{?b0c<^g{tS+?wsu2GmS?jwbF*u!Yv|o+e|McwV|MZ{!xBurK z{$Xxr7PZELCNe4fGo48xdf*L2j*;O}fTme*u{xn>q~54X8#29aX9tFtSz20_rZHoq zj3SlEt*>wL`SEz_)$8~DUg!Gyn%>xzE|4}$tHCG0^qhrUUJ9#pI+A{ni1&I#nvKSS zI=p9w!@-dB=g=DtcJ}_SzyEvW5t5fBKu^p}2da%aJow5$;)%8d`3hISI z;b1U)?_Tq(Uwnl%@ks~isOqA3BOSFc`68CR!mcw|U& zQKF*eJZdu;IR(U|az%Ar+&AH$?Dq`79+AAARwo<@`v8;Cv1YRdnV1dC1lpa~Z{J>q zt{DF5=_#K8ED~~Ja!+s)6+SUGesy;7;`xj4<<;cGcut-1xcj|KwOmIZABT5_!eOb+ zXEXsoerc38Dm_xIwtlw=@O~_I9h)u}Q0M9rJ+c5}BBatn6$#h$4V54*vYb3#=Eo zA03tJ1**5HgXMhmqxYN zot;*@-LGy`fVxi}KhBp+A9lBOQWkBfcaKuBr6HA2Dzn{a)BvBSkDs7`-@SV$KBbD8 zzkB!o{PJRfP`13nYAUXfU{=5S>T4LCx|4Vca;s9NIi8;n0lTVoxmZdp0(>9@k#NM* z=MlA&%faLi4~{?{494y9^i8>m6mMR?LG!qsQdAW`B`{mf7Vyn#GQ0cwnCf23^Fgn# z&%GE|Xdrc@b5g1F!Gj0P34>D2PNdc8hwbfHG8s=MgW<5Mv0O-{r75`E<+iET6n=vI zgL; zU?gm{+C5&6*=}vX@vCL4TlRr2FM<}6F_+D&(vV$LKs=E|MuQ1KWuVkUN+vzo64<_v+utC2gyHP3@|_digRGy3*gfeFxAP z^N;b*D1v9tpCb!^duUOuQD*_*zt9;d-o=&N^~bWoJ{*-*@3j(RVQ@bwLE<0Jspj^x zb8~$66}&YbBYg59z~bomXfzxFZV&CL?>-je42sDC8w+Z*UMs37SkyOzI5= zi^VoHBI#ncZ{PmzyWa$+CwT^f*7bE(8pIwScUmp!AHKXiAk9jpj;PLH)Tz!1URC4J z?u7AMwHn=ZTF}Sk>I2Tgkw~lF81xR}t2VohFT&eLM@LGfB0@xGkXFQ6ogM^#{pQV& zKmWY9w}<6{`yRJjYCexKP(PwgG6(GT<&_n9s~iQJ%n)p>%BM1`RI8B7LFshpkxTRG z>j(GmfArD)daW7^US-l5bRjG8@ZLR_LymGYsr14AUZYkY9~*_*#|7AughPB7@}LR= z=NvY13A>=A3Gsb?b`}nWbZUoL_5ZT=PUtJr&e`Q3A9uU^bJ^U%!QSb~Nv{b33*S30 z=OI7;{B!8upZ@fxLaw;Fx`xhUVk6-&loO@3w6JKiS*o>4fB(Sb^ps9r5kNDIj*gz3 zp1ghYrq-xg46+H0x^g+4U;(k2SsfkoH(TwzkdKLl`FWP<)$7;OGc!-*MA==C@+@g| zKO_|9E_VgWWo)3+(Uhv?>&$hjR)*vb4-O5F4BM=BX$un$LvMS1 zpDLAF>0K{RrsM}GKUSU=n4TtzV;Co=rx(F1=rHrs>_`r=Z0xJDka9^xFZ*MSdTS;y zJ2^E;3@EF!=w_p4wwQXAy7~P5z1_EO-&Lx7yTxEMWpf3-fvWpep&EP5FXGS3E+DKI3AF%#Vx4u8=~9^mle;_}?=tkhB0>!k7O#Dvm!b8EG15)jHs6+hNzXi8do22%VaRR9FDP(5!M(?3tt60s?3F_uTM2D z%QLY&tK8&hHrriMbuM+HF+DYjbrDe@!Nk{VA=!Db$!an8T3s;~VleS0rl>IERq4fi zb{`Xeadj~}JNwNy-w^5uEj*QXz>5NwG#R}?vU<{K*5Y1xIU0?$T1~t`r`7#iN3~j2)%?!! zr6^oPol{7(Lk|My3Xgb#X=;NN+%O;Pyfu!EK($qOlfr*L;~z57L8+3>L#;tB zzA8bls={^jPPy<>P{p|>_V)Mw^1~0kD;`p&tJ^V~Z4K#7i`Xq_b?UOUh2SJtxRh|w z^tP?AgQ1}zxfGC2^V_Fie8CiSRR>emxVJAHjo>f{)vO1jL;d{{O;wv^f1kUrn3LM~ftjgVr9xCwZ7Z6DF{WdAb%h|xs8oN6^0gG8NJ?34 zjZ|i5mLP6-@7=>n-oJkr3WgBqp{rmqR{-%2Uoc%eds53b8IMC&1_!)zv-8p@26Ye$l?p|uz$c%40tb)B;u@{?;o~PbPe*F6 z7a1=I3wGdg_&LD_xa<{PPpcoh-O;alV@*s=V#A48DiVu9r}htbONG+MA3y!u|M0gn zvw@?dqn#bO7}9G^3dcu?e*5jOz_Ooz{`vdw|CKm~=9`_LZ7F*G_{o!%Rk;o=UD=1E zJ?FbOZ?+E(Y-aO=2lsfFs)AXD-;9rqJ$UfZbRd9&xx6^XjigES`DKZ~Jm?!3=;wi7 zy?KrA5o~VWyt%r(!W11I?yFJ*-A22u)oZ0Fm)?jMkBvzR5@tyhxqtuu)2EN`+`dDM zgbDz<5C{TWJRXyFnPX!>QcDzeKd8ZC!4<&1a!D$ky?*=V?EFlQKl1r#Eb3JEp(^DH z(RX}&45Egn1Q(>;g44y~&M(fp9IjHi*lIT19+$;pR@_2@e5ouw%Ors#nKBrR%S)?w z?%aYVHd?i8?wUYyc773yrhvI6Q z4~8c@ZRHZb@LfDrLuic-sqoq7pBwek*a>Qm3jFcMACFH?q-~t)TMC?-%tEbL7nLez zH=C^x3XBRaDSPI{0&sz;5nt~=xF?aXT9Lf?y?Q$JOgr8${)P_-p!kvQiR8DNoUg4N|o4g^X4XCh#TFxwfVRI zzyiF8Zlh!pGu)V;{Ouu&kR=2giv$eAY z7TXj#kS1MyPPx+DYN*o18q_-R3^ybikBp41Z*IE!T*Z98*O`8NY+M48*L(lL1Bl)J z-hQvAoOHmHHPxP{9vK^})oUH8+9ml6y?fXb{)yXnZjX$N@?=>_p_h=Z zc5)=qo(bx8rR{UO`E+SEX_GQQXJ_ZfC&$m8J%c?-yG^~J{%=3cdcE2vezZF_s|9{N zJtZ=$-D(%h#Y{To_ISSh;)~_QCEj>`aiI!O7jY+pIthe{Gd5-+5{+JGbIo>(&>IW| zQ>lzbZm-xu9|)}U4<8x9%JJ%!YI}wiT8s$6VUx*NEET|9W>eKJM$*;Y1O3fT>pBaF zrQsiA!^56FHztT0&1N!CvBf3nRLZKLX+VFTjTI$A;D>+u%b%HI<^;~y&;>+ zB$FdU!(V;<)!fYN{@%fx*RNSf6em39;_Un~cm?FKLIeHMDV--*_jj6d8PzxR=;_l^ zrMUI}eKZnQO_rGO4nXEmWmcN%E+yt-QI&SU^g^kSyiUs%W&e1oSYg$Bz22~-j~;yV zcYpW4OioR`c>aP=fzsuNWsus;Ug<@6dUp2w`E%$h%yDdVY;(X*R+;c-+Z}NrrDSK>{AE zudhq>oUyUF`FSWOBBolcHyf>X2bCP(+Sw+)GC{qr)q$A+WD)0;-U(9pNdxeKN~{r- zc3fItOZiFS0jAIEd*xwSl!p%<&dtrs<-mNNUq1Ti5x}&wz5B<1m0t7&olywmxW7^< zCKDML-u(O=bHZBl>@1E!6|ctg$A(8BolHVB6fUZ=uh(hOE;lzfrY5I?Vd?w1u($|8 znVt>+Sa09H#WEc(Cj$?K!v^UAt_LqsaH<@S98c`-?f&CG{;ftm-=J(qy_Jh6s?VVjXM;L*XOahLq0zL%iK07}L>*SVGzXxkaIV~(M ztgfyS1-EwqkwI?0wu51?Daf|0MWS2V+aEq`0d3&m zS6_XFrC?E;o3{XcK>79SH!okly1ck#aj>_iPoFZzpML(itaj0dM~3AVy3faoV-li5 zq_mFw5St0Y@QKl}QQjh+7>%*kpqV^aIP6p%YH^1}_0wy?B>UXzG*>0WNs@Q^I%&09 zM#o24k-YS8%^FNbj0Z0D$A9_b>G84MVc)p14p0y$cs+0L-7^Pc4-O74F65qvRu#R6 z?kJI?R~JS5rK0E6C69tl^6g;k?(Qyz)Jw+z1NpRf@803a%gf6!6?B49V9wxG@GpP< zVRwJ;?DBl~-~dA!kWv*8^ikj%v?nGoMwCWRmSONF)d_xjc81wt4Ks4cSm^h7aSgad zx1+JEQdYBpxxs-!cb|K0Rkl*qZgHYot4vQ%-dJ1p`Vgjl9*yP^;zccWZQ-hBUgB zlJejiG-YyXVq|m_c$7LVrIOq2fmVVxh%rFKX13xuhzH+*7bO4i;X^DM1@Z3Qy=zeU zfmnifU?5j0NE@qs-qGh$mz?{hbV*XutO@YZXly{b$M_WcYD!}vbplPa781tyL*HB; zH>QRY-o0~oeA3VI5Ib>57~j~qaIS#5XQb+0=`cGc7oFHE;l|hWOcpO<3=mJEk!*$M za-m@GT(ah+1`0ljS|xHoH7-L}=tF}lOj0SAK&yV$BM8s9y1IhrmZc?y8To}9@9*yu zO8ea&ueV>P5n&F0$1Qtm*y(imhKKlzWV2MtQax^Znm4Mmw?wH_AZ81KrqT?FDFE4_ zuCp`Kau+-zwS??8o7HZCW;$FB7zW5*kW%?s%m`-#jEFk*R*O)*w73WpXQV>w_V)-U zIEz;`rvAh4|FD0sj|DRdjB;jX8W>^}^-9gC*E6xa@hTYn^Pm5WH4yL6A1E-yD2s|4 zU~NEuuj6`L3lkB#f1%x7)1@f#u*Cg27O|UX#tha9G^{yham)K5}J1!hbt2 zJqM&Xk=xS;Kufa}bqDg~{0tArj{01pJEdzvqXFhJ|4$!3ou8X!=>e3kM$06?!7(a~ z+h(=$_IjhXxV(7(-W^;8%afd?Oe(9`w2$!Wgkbm@>-M;jqCiVR*N0-c%<7a?Ow7h)>3)3mYCgIy};$!32Zskt1*0QKeAwE4@#4k15AV_LvdiiAXbswWvx$T;sN^>kSiRPe zyTn63o9G^gtoPVZSP?naDm_Q<*Uta9)?5L{}&1g7MSK6>F{b~%5NfuO9_U_7w zl-m=FMPI*qeRUZepYVVA)h{5gM4-LheFU_35G7sv)1UstMD-dM-no72x4-=@a|rnO z1_$MWlGTbbyMONgz)#SY+c5VkB-W!0;M_+NjdCJNd_4n#$5Sc zh_ciKlq5H)NF!a{N)^HhzQ3`tvADS4^A57O$SJ0}w_nNJ^h-?-zoh5oa=;pY2AXc% zxWOO6y_1s@e);7$-|+c>gR19szP-I24oB^(Qc6iMwgD#az&BRckeJA%ob<1~20(Z( z_U!TWudb~vt}OY-$NLAoMuSmnoDUD5bg1au2y5Vf>A7ilma!|tWZNn1QMpx*90f2e_4|nHMkNuFNG9y*O)P3 zm8q6uc2koC@OUB)NPqh2CtrN=8Cvh`>{L3d)~h+G{Za!4S#Gr_tK(fSUcCJAr=J*p zI-T(i4J|G$@ni&G-!SGdh`K|w5eRXOY555dh691=i3z{c)fbIN&o9o27jCC(b7Ny= zdBrCs6HGkVPe1<10GF3nRMxLte`EP@-ih&X{u4PQ2sS(lIcB{;PUf?}e?V=k=pQ|L zgv;>E@U7LA)%k@5tzIul;JK{+vqw*CPCE`WH$OKuJtb!exooH1W>gXqW@cRu=giC; zB8JamrCB!q74ii!R0q@@wRfh;mUywbA9nu`?DXoyoj=_x8shf5ZsXu|mJ}=I!qfOa~_Y{zNL-!-dbk z_<~uK;*_x%A??=fTQ}A>Oe*EHEH(7OTc@P8Qt(3ZfT$aAVeJg9L zW8P{@=xcdr`tO_ct}xgXhQ-zT@B=uIf;ZLTD=aiM*AR@^g07>j5ULm%v-PT@7s58 zqKSk`WN1raMV&60kjl@IPzWRbRgb4&S=;1!5JJTf{k;MM5}SXwA^ zI27hvY)BYIzgS9$v${3r0{x*E1oeV!2q8c&0w{PC;?d;~I+q7Jwf!aD9 zF2+I-!sGaACZ{EbrUr*yvOifWK4*41fZAXQBs(!Lm0rfj{VZ`lEB(2#wEe?_SS-=Y z`GywAZDGAm>Ae0-_8Pb1+c8u80{JDrQz{M*4>1;G3N`>ngDpe8p)vm$bFMarO;`&e z&p$co9~+mV%>bxI19STM+0UrSe69d%=i6EO9%E){d_JkKc}i4BXQU-sqk%*zN~hlD z*x2}8wJr^*&?%dCz#XfD%|j5s|Ni@EG%h$jKuGI@3E9;3QWeiS#5U=PDIYSnvA&@* z8jeqnApyf9BVHB$5gvTkmCDw2soI2uI*g6E>UI7WW##H~xSdcLfF0F^YC@Z05Bw(x z!pg3%ufthUXo0}Y^2&DPWL_TAyqk=Pspgv zPCWG0tCuQmr)@A9v2SKWirch0ShZH8gSN^T)YMH)O|NgF7!;bnW=q_;g@eefZ@4 zyZ3+*9tKdFTbRGOxhWSK)D1iRgWGp1l2BdM>9p}gY;R9w9Dz-GT(>*Xh%^)d4SDqQ z^K%xPVOTAewv_LYdh`-vm5Vaqi_9iV15nCuSgsBdU#M%s%{O;3712|F51G!{i4fL0}?I2|^}g9i`h<`=8#*u1Vvs7oi1R7x6{RV%$a z&&jwn8sigyq~)dMo9i3!J|^V+^em$4dakUjAZSwA>}+5LkV3=&`|dZ9RJOn8#!uuw%ll*usPmnl0u;= zd>%Y-+U@OT$7Hs)wKxePQ}WmJ+3vcagAx$Yxf-*^(-Q1was)O3z=s_`@Im2t`Ar!Z!&I(o5AMH>5gx9dQb^2Qzi`xkkoD069ep zQ@KLU>ac@ih-0J4*egkh?3fty6GWxMs8g!gzz@;5b~~(Vq~FsY3WvV`)1P0xehaPz zrUK9iVo9;0_OS;%g9Dyv$-a=nQm4l!C}x=DhxhM}j}G&NytjW~$Tx`FOSvN1K1qYl zd<9m~tT#{3&x}q}pW8`XFW1X%k345Gk;rDUFi4xr0j1d3+%y`^(QuUDH$OWE`m!uG zvt`id<1uR0^2q4$ty`P*M*Uy@^tS${=Re?hG^Pta+SSSuSx3p**VWSIpJ6LH|;kqga?HOlH{a*%3x`8!BfgaPB2Q0G&kl}`LXn6fA#J`l9ErBOZKK5` zH&cvq12GnlU4=qss}*96`y8K05lx;QuG?%kr0V|BVJeZztJ`gW&(&2BoWmS}4mr(j z)QQ1xIQ;AI;83y;A`vhFb5+R>x@0P4G?*~Cl05A-1~5B2YgPS4n5aHiU$Ib%MWdB+ zWoUp{=?z7~xDN+u+u7a503JVn3=7B3fgqxkMyCl!LMO*(!ElHmJRJxuFD@B%dL&?AdKz9H zkH#SD@C<%gU0wU~%g;ePm7*r4E%A3L`aL^4IOwZO>u#NI(1)X8rBW-&JFqSV?~Lc? zmvHgr)fHB`QI{gsgI=HAY6qD+t=53YW6~Q6a{br{L+!RZr$;9&fv{UvAu6|eopuKz z3WPzL!xWK-aL@sdTm@~nTG#0`2tPV9qV0BLk!V+LUDz{O$*0)*utnsCsvtE9`2|q1 zS~eK<^40A&a)`xUo?HCQU;XC(y?fX?suz31b9HK$4tO!k4I!iI-aA9w-QC?`70{(D zL@t}{>vMnf@ZtRj_f69EPUBR!(y$o>044-qBuD{w0s`09g<^ph=*Ndfm{7SlNx7xic za3GZ4s3))y%YmET4HUf+;ONvP)z7jbRU5OgIq5bN2=E$4@{3=5`Rnh#1Jr;~h!_@$ zO2+;$<>RAcoxvbS<>iu8dpJKQUP7g@5@h|w`IXl#S9tpSJQ7w$Mv3KB1nAMx@!^r( zYMU4zmwT>dsjn6YOk-ZST%lZKn0ULi0gpv>YQBYD40^3LE368Omm5#ruDV33WoCU| zuk`fBya4fT7wQcuX5QbaiWb;CzZXSbNN1tRoz6f_EG;Q46eEjf{R;yv`(n?x|SV(bQRZ7DCmKGPs{eI>hM^g7WT}FdG zm&;#Xg@BLqbJ-DM!DMGpt1}tpl9OyvbULf6t6zQf)ui9gQWAqVHaFlyfFOJp9RR`P z?~Qhor!vVdRvG+aH9I=Y@A({Q zmZkTl_ec+9CQK&0E4cE$+Eh>X^my(LxumFNC{`a7{HT!rBYt26mlCO2E@yUkw$1c( zS65e;LBV?bKx2L5$T+Rz?w3FR`TXQ`A})ynGqW?Fe)5w@I4s>=RMso|&BbMAj`SXsBag|cDP$1O!csUr zuGL!`K=R(sUZGevnGHnEj!ggcz$PP;QxmGR?3LMM)M+&s4`c$m&nH=;)AMr~fHYH__$Ok`g~s1n#MCR5q3xqzxdAH z-e5v1E^~Br_@_U8y}kXOhkf|q!TOra0O)Jvl@Ge4uhX8MovPQBJ)%*yTyd%9 z9OOC}^g3n6W;|$bZRZ)7zhuG zQ}h*I1dcEURu4dD3;0)D5)+-8np|9zObC`8Pf_VnDMU;>k-WaXhV; zx7+VsoSm_lOUuhdre?dP*BRQ))^#d@&Cg6uZmh3!lTvPUC4Dp(7Z#S6mOvz_8aO&o zrIp!4JS8cuDovP!??LIU?igo4G?U%Zr_@onaN}_+#Zl(u~~su zlr+DE4bRTa;!1>M0;lTKYv8gc$5`S8u_hP{%JG2DJE-ZvhQ)pISye9TvRJKVoAvPU z0DJ4pB)#dC)m1dl>(@VSZ*5`Z>OFj=qx#1U&H{*5uU@^9A-Uxe<~Kbvy}q%*w{WRk zF;AG_o@JgyE?aLjq+w3GB{Kj=M=^W!`rhuI^vo_68?^?A!R8(x9slzeU%Y+uhDhO- z)H7+*%OCjk?CcC;7gJ&TSdHZWC%^#M(XlatH{sy@`}f;h+Yoo0Wovs&%|9(l_Hn1f z&9m27EH-JV*Xpwi^O5N=ZiN%FrrARN#dlJSB$*nWUbETK>7@bppiLTIi6?L&P|xjj zVRv99Uxr%eyYXZ+D>j6oOQNYo-o>S_Q(1W(KeE2QQB~71rQNYsOYj&8_(5a>I-yH4 z`V6MmuYQD!$tiEQ_3YV4Hk)b@W-~i%mS(m7Pk;O;?&s+T&v3t3BL3#>TRG>mNs+^c zAAU$+_~MUWBokS_55sL#s`3h@P~?WM($}SO5x5^7_VFy*fZt@)b0C{-(x6qiaN5pZvd$s_}ui$$Ul(2%$iu7g+i zpg1P;n;(C?me~tZT+hl3GS7J^U=eLZAW5q6g*K~YadDy1YGu=D`_NGAI+KW}F?uy9 zNh2?vdOZvq`GNgKFQR+9yU#!VSZ^{#FQZ*eUvHKkf9zekR(bK_MJb!FG-?KmQRTQc zv!w!0w>Ud1mCF4-ikUSZ@%uo8vG>%Tw-Uh<6@D}=MSEJfa#9#Ij=|N z;5O=nG-x2qsorR5q*AtPw^<%Pewa+B{_uxC6mvztdl(-;uS?&`czkJT0ftd575e?2 z%k4@hlOA=t0!Rddp_?~v6L?^tUw!q}-Me?>l=|pUUhDaXmzI`@<>BxoH0Ax)7BHu> z^K5l#oZptQ7B*Yo+$&Ye?XL9hm(grWl@j@0y?$$R*oA2%35e*Y}n%i8J|9Syt;Jb==cbnl}T1|G9*oW zveI_ZAxZm^Cs7(14fd>tSSnel*K^ed{xds018+7;Pe(^s&AX{qYUn$&!PuT2cLvnM{UHx-W)-R<%sq;mlg197jfG`;@r&K}=*V|jTZ zGKnt$TWBd3jV(rXJ%9cj!u0ax4+eP~pMm%{Bu8eKPX>bl;-Xfv8Ak0xutz8NkWFW! z(U`PZFk3VleXm?8=8HO=-skp9&m5I=;&#b^PQ6~+*J`DsO1lXa|NiCodV}G%YQl^Z zPo*=l%PUrCes+Fz?be_pDH@&M$6_1emeS}H##1bp+Wl^$-R>0%CaWbfJ$Z0+7)89+ zn`|qW2QIXFW3`67D8Ap_hPZ(2GRn#0uC-epr#mp>R|K@$Xw*6#BU=xTY4^G{D0rph zu1i(=h^h`aIgv7_M3xZs{lgxB!)mp`IPr^# zu`qWG^JCpm2OzIgwaUqc z6mZrA`8zrq^r_KFM2h+OnSB0{qy@#}pmZoCBl%$VZqds9LN4p~4Tnd=-+c4U(Z#9R zY;g>^9YfBEa3nN37M9Ly(yup@&28=MeEG$f@noETB37Y%7ME`DrLW(<-F){hc^$vC zy3TDM93GC1j;Z+3L)*Ar?nblr>eUYfV7*S~K{!oLuCA^S5hOFW+m&NupT|EuT#ZKG zy?3Ub+Kfq3cf-MbI<|KW#M{Nn2B8nola%8lE1?_OR+|M2_Y|M=!L z>h|8P+x$wQERBbYY@Q4Nbf7`mUn1z~(aHJ6xzFQk)oVMOn{Jm!Z#1I6(Q^2moR?aq z^D%!%&eh75^Ga1_LcoKA0ml$nVgr`J2ka1~i&z5QV^^_3Ck#1S?e}mo%!8*$ou0~! zI~KFw(=X32I6eHPbd4ZFeDaf@jD7N^O?=ocBjkw*lqTD zs}BEy->K#R<51K~$%Dus{!T8=4%N|qQMFq&2UUt`G7(oTSnH>!CqKUa@#-qZgHMJdE2@wNKLnlU z=NE81RgaY9ll)K4$m?~z!3ZGQ?Fg4~gV`jr#$Zy(sxBo7|rB!@Dj7hoJ=I)wHP+4PP!iEa>Tr| z^Yg9U-K*<_#cT|QM*B)vU0gHvC-*w5fVbtELOkQ%gumbt$LGKi_5E{VtHpyAdE$0@WX~ACFrpYc6l@u zlHn|V9|5=^2Ty=+O1cG1On_r2C#PPYcQQOVGhd(%4#;3B-^8^k{OqVltA6;^8i-Se~3GF^H}s^e6aVsB?3W&;bH42KDPa#{=rN+!FiwE$joc6NqG zoU0MzK{h%(!4~5aGC0+0yS%)VW)=AysuDppD907WKQhASFQQRMfYN7 z-`U>H&5_o-V-xr9-Me*j!)YJlCvuWslndRvb9Zrm z9^;@57E>*=$nk?E;)K67z>naX72$!kzp&YQK8WFL=9J1zLs^70b2 zE-ekHbLyyUh=8PqoX6NFM0qNe{PQ>8-~gX~_UZi6JiCW+iyJf=qoZRtZ*3rxfA_oJ z{n!8cyA#RLZKxzNvjCILVt3kIUS}Ud>U4rrg=}sx?8W2rm87G({euslai6UF{@y;M zMhb6yBXa!EgPA6Q@3pnHU;g|TOY@7HoA3VdpZ~bIx!LUt#S^7^ZU`y;SWX%U9P|>aeqykT$|+`CPtQt4q6yKnN}=Cy^QrGP+R6tC=E_`oYZ; zs|MqGxZAb$b!}hTh!0v`E1B*r6s6cvF~>6djjW8v6PZj_-nEMJ*32d&E@3k1dmR~B zS+6x%cGYZeyjrgwot^FM?7&gxre|*5yk#|8Qi&8~zb-)591aHII>RG=oFzOp3CrXD z*c79|$eL)ny-u@r%{IqmOkq`x3gIi#nG|b?MrpL#*_?DTdH;S(8mB}rcXni^AOSWe{lc)^5SA4mp?l`Z8lor$mIRI_bfJZty)pd_R1F*QS^UN-eg!NBU2WW z8S|HP1fvm?Xh`cp7l8-IX7NZ>pJ_70#>E|+g?ECMv&fADbW#>&#tjSoNkXmxd!bv{+S+pr>p zpbXn!DeBEyp`2C)O9I?7+_TKzWf}hvl_K?E32H__Wb#jgF5_PEG+mgCsRnuf<^rjgP`_ zV9B7i8YU}6pDJ1V8XRkO#1|0K0PFhtI>rn(@u6X_kMP6iFHX-ft;P9;8>?%HtIL1< z{U3IBw$TKsG@Paek&?k#R-3fqIXy?C@N{a9f=rS>IXf%Wsz7b2T1sJom9j>s0ak(` zsq62fR_nE5v4EcA!SmT{;_BM(@%`f0zrOqM(dl{ghgUxy9UbQjdG;=(23gAFTAS5q zGCx^?r{zxvg!jaxvfuCK|Zvk0cR zq{y~3eGLo`u;$VC4-U_xQ9QjX$&7V2ndK#}&n?WatgPAzy5(|5a(P@@t>Iw*;H$5{ zZm3={ySqDsp5&@!n^Yg^w7U7Zd2Dj~{Wi|)_P9GO85!-c+vn%!{-=NaS3mpdPp76P z$3}uazr5RrOAY%a$%tRimx`!oE`__Foe^1%Rq}^tYI5@Kox7EC_5ADAzV33AYGb#`}mqo>hEvze0< z;-bTDQ^(Z}5YJ#j$ICesx<4tMSgK2fdLZr;89=+PsK)v|lAC;0@G zip6GAC(te8B4G}iXw<1pW{YLSHv%BAJ2Gu(VgfNCLpiUmqN>3#%$vys0F*}+NjK}#KZn(uo|=C2@DULTMtbMg?N2`bI1~yN^SN%L8Bk+9uycK6 zG(?ESncGqqk^1V(umA9ee=6roQxg%p)gHUJJU=Pp zpJACCHb**{K0m)G2;-9~?MkHv2jg!pb-v|sxK59c|MB->{yX*0Iq0Tmo6o#XR(BU$_ zuU2ihWVUEJ#nn7|y#f2#-QM9>(Ov|wA6~vnBvW9v(PYXMiYjrmN31MX%Gqolf6Et& zd3_AY1U7qJ3eEjU$Q(|hpQgT== zY%ARUFaFKH{P+L|IG|h3LMni%P0b?J$Q<>aOy_L3Y5-xcTW_~( z%~nqcbsrGDx{eWBG#0PdXxq&ut~V8qtgWmpLO;hRDuv?3>6xa}4UGiC6BBla ztyZg8r8Gj`r?Fg-$fU>PgMCW@*v|g@&G)zg1RsIBurR-|u>s?eYIVJCFsKS5JU$kJ zeB^SOqk}_(PXGL)j~+aDXm_wVj`h{GXU{(P{PWL2!$!5qO?#cb8jF`JgaTtzlhbam zKRh)v5*jm@&Hg|zGCgx+b^YGMhhQ!{dkE`KC$UeWS2CH1onJJ{lHqoAa$!DR%_wU~$ipxBlR#OtQ zQGQ0#L?kjZH|O?(!d849qI~z(t;zB6(czJY_wEOLzQcX-nrDxnEX>Wb1^@Sd{?GsY z@BZ#0dTKGjvP`PUtseIYjs|Dv=j?VT#+=Az`g*NzWTe&WT%{5opLZe>Hp;P-H5`^M z2OzB5&8-GX#hgs|_~B)#kXx9You8iVwAx0!VRhpcw}pB~24(^GdIQcK2#x5CImdYI3}g&lC&UA!rL8tJjZ=O&Baz7ItJbw6eM!92r3}>b1R%^;Nj^ zlP6E6!{OU&D-Z77)oc6pYGq@6{rQI<0@ei7z*rFUk6y~`$hrBs(a`A8{?QkI{2~^; zL_G959pY|2UrZ$8K&(F$T)TBkXEdD0F5;QAUec6wnOq)n8JV7*UtDr|yt!ieSO{6^ z==hAt*Od1Y8dSu=!NJ#Ge=U{7L-xVZ1Al7OD*AiyI)n#N6SVp>(-FVV+pJZGecqYK z;la}Hz0m^VJzoFq+jj!~k>kVT_| zd=?5T{oLzSO}8UMx(vF$mVizGmHtclq8d!s?Ycd_(a~`b3H-T;UcmW|Pvj4Lr6gtD z1;5ufH#1kr=1)#fI_mUa8V~2viDdlpIwm*ShH90E+|I?-B?3e|oyz3oJZQupMC1Td zm0F!elfjgM5#oYm>eValUR$H%FV%Lt#ZAG+KsFSoXV{l5wVC0>8wdQgTp?~;$C=eiIj0S_aCk_HM!Me1P zanK{)=~w0#MgoC_g$07S$z;~)pe9B+smf-Pl7E%Lh9DH#wDc%}{cXSBYSe1Os=)^_ zpX;EC4l#k_qg=j_NG1*r_JQNo^|i5Z7&X^u%G_*dh~A)gd%b3ZC7sTy$&_YXF`LOX zYtnpCh(<0ucr(s5`F054gU1hth8%C+zCm>M`&yVdyU1=C)g&K2V-+H!+1lQE@!~r+ z>64#4|I5Gpi>0MSDeURC&=#n0o5L23ULEWm$6{AJF!UTTdT|*=i_1&bV)4hCL7+@Y6*=eN5{Kc+u(S$(SYbZc=&LBejaQcR2$0_WCW|rW3gEX zXwW^$i%zGZ(oJbkZ9=TetH{||spVB;90{D#%+KRdT`kAWW>ck7Qhg5`nAg7yUAjKbjz7*12%&mwU3U4r14}$ z+K@q;0s*PscDvjThn=tv}=>2~|zK1+ez!Ow}H&z?QIefu`L#Gp3?0zuXjl0YEO#b@kEsb^7 zR#pkI*Rg8=8ukV|@(&M>g(vte(6A!u>vagLbI7rI6j~K!din&5CF!J!}qm{Ka9CLSP_drI8AH-tU_{fp~#l;2H4jL5tjbK$Em zFJs*BWMm51=kXB<#35Ka0gMoSetrgv24O&T%*JFeI2}WyV`EeD%Fx@a*FaHzC3Y37 zNa|ulRH@gCw@UMBue(vNM=zp44M>H@88n9BK|z5*Zy6k;N+Df~zk?z5mK^U(##W<_ z39a0?v7{zajE#lnW@fD>sUz1(C4wCY4Fm(+&t)tI&=FQ3qXgIM>o`hga%vLcj%yIP zRhN%`PfhAwTv`l{kC`nNuH*8!9nPV)q`b8}9>2^dRq0m%_?tIx@P*)TfK>`lL@-N` zgl~}qE18#2m8fJDiSPD#K+ZuMDM??@>j;tcYL&&o_+4_c*5ip}yUInxE+Eg22ZLe& z$wUGsx-U&v&Ihvtu=#Sir2qKik0!#A@rkhBU~INKK_QhZu;25Gi(FB zgAo;GXQ!V&enRYF^-UHtiU&e;2JTDRsvfJ3Mx&#l(Bi`4(c$5L`}@D=Ke-d>etde` zX?3!>-1jfPk6m94=6(!%r13~oGt;bTp;Ww1#7o(HF_(vO8MS&~?cnHGxkRr~mr76= zmbAwz6i<(jWIB^h%la-aFE1`Hx9W|Z-Tlie=^u$8mKP)OM6FgQkdFjL+)g(;2VFQi zJOU|LXe_E&E?&p4%Eh8d9oMTe5>PR8;-kDy}t(AdP7V@P@w+lQRMs3d*pb<%p`&Yj>`D4tAQOHV!nWCGNX zs(@qy?lv|)rdk;bu~n&n(#o3+HJdF2%S1d`s#JztE-)QJpvodE+>BFoI|3*PetM&^ zUaKOhTm8<}b?oiyH^poLm&X1Y)jDQfDOV()ZX|H$=1u9*b9M&w*sZqdsi}qed5B&< zlO=cz0zFXy?hl+nlCb#o^>x-fnNF&%AT~HOJ0eN*E+?d%2s%769G;rGiYMN`+hVyO z3WK>3iFkq=_!qzW)n`BXl)q%vOp`)UdV|1Vf z+tASE)z#b0cW1GyhU5lXi>2a@Osjp5zI1urCZoPyEKZJ(&Cbr%D#HD}PLIdwj$K6m z^ySw%bVD)!^1JWeynNYjcV@%kwZ-M>NW|yy*o|hbnnfyRY?n756?GCRFV-Z{rs^1S zbbH;?)8ot7B|n5R4-bz_PELVPcKeV@jA&iQQ}LvvK;k=IkGD{iQ6CGjPRfYsvmar1H>#`?1kND!6|%V7)jth>zOpWF|; z-o^%byhsMgu7vg!mNQo!lLJnD@m0nF`jTWr>Rsf2oNv>H0IF_p=_e!B^qCxZU! zSHHP?`xXyNB<^-P>gC~axlmFqX}x;MZPw}x2D8=1*4({&FE}<)ZM8w$LN?W|H>Fi) zqj7#F6_PRs@QP@9$y2YbuR|9O50C%;@Be;xf1kivD#?g=uoy>n4LNyUnL2uYKB(8c zPA2vbj|x&oufaHnWsu;o^g)BOB$DNPL56?p3{Ye+aAjo`2!8qU2SPYPhIPi2lc@x{ zFqKLda(Mvl)=lW^23vzcuCJ{6q3>GY62rFtJQ613wh#qCY|AKaR;4NCkf;7 z9|pJA6Py^6-b58NgEW~yP}j=R$i*|{vY0F#168iDh3SVK`vqTuJyI`U;OMBYik=k{_EGT z)7h-UF0GX1L>5*glX@kB9v&QAOQCrY7?ip`t7XtK54Avy#D%bDt5r^po2v68$T=8h zgZ$&RAv$uPOKb%V+0EB)-fX^mcW`jf>vn^o&>&%1 z|IyPASR~@&p(JWS;2KVGmzQTk_g&r z4NB~}Ef}ASwXf9(euPZ^S*t1!YL$vXXK;BvQaLlf;D>!kr9=aK!~jr5*qqV_GJ;J8 z=`2ad2K0xFKeF4Vr>7^zCb;;h>MW7T=Aff>)qewZB1_`+@E0JJAT3?e^~QqqR!!Gr zgrq^E)$@7cTwC%LEnNKO`b{Yw&t&FiXP-ZRF6pms4;a^yKW&XxSF6ffXzn~XJOVj_ z2I^#dN}g*DI&mh1i|I!Ke!X6oNvANT)zvjW~&JHU-Gcz+a zIVsb@+A`l`VNu#Ba($vN3s}hIc+!Q1grH_OYb>})D6ox%`#AAa~DH-;Vj@WT(% zQ43H`r3tt3gd|!6yR3s_XlQeD>ra3Blf`73otpU z&@P=vyV4_qzy^(!7AvD;M%CZAqpInk&qz`>kq_KhT$&sk>(!e)5p>OAwaM$5Wa{GL ztXitx5Nfv2tW?2br`7Ivd-NJjqg;lo83kVS1k{aNw=lv~T1K1oHCi>K-C#1C#>Xc- zlCxbxI^fvL%QqfBd^9yR1&LWyTUIXDqL;C9xq|zQs;+pOoA1^92`faCXapY0XrP68 zgyK~!hI!+C1mIvOFgY2vxulnibe;8j(cJY~9X=-mV$J53Dh{m5@L-KkPEsahvUMg$ z)Zu;zR9BZ*O_i54=n8IBEn4s2zyF)x{CZk-S3TI@mnH-ChCxk?FBZ!JhRgbU`O>L6rjilk+vGpFYl*lqkWhO|YX$hnG6TG%48 zt1^wPpzZgkr)RLA?d{#KzWNHBiG&eJK6qZfkYi5`dIM?_3JWD22?T-ci)eKBlzH`R~dREgIT2uo(z9&Hb+N; zQu-;&Jvezz?$)aCYK%q-@`Wprz6`{eADn@12Ar3F|Pxya{7gQ4;9u}ZnL`F3-6 zZ;yY%Y-Z@Qs9|cO_1>gM)KJ#k$h%;E+jqn5@tCOl!*|jR5GMWZ^2osO?qi!Cd9qIZ-lj; zUs^yK#iG$SuixzL?!viU&LN9YHx-#$xp4yn<*RwZ2M->|)SaUvr*jBUkhPGUp!vbP z!h@qjjK-`|Y@(N!Sd|1^gFcg!YTY5bgZ~`%`3MO+(%$TJ*dNeoG?GLh&4wLVt;Hhs zxJJFUS}ID9KbK3S6`D-7v%YofHVg%?-rYZtHaa@J%PueU%Q|gY>MNvivCU?c&O17d zL8n`oTbQ4n$9Z^I8EHH^djG+_g}J%DrVB^z^t72wR+_ob%&6f91w^MR$LiH({!fkQ zi^Oj=>yy(D@7=$9esEgf2}Qt`AS;ia zd;r%uIM_cvKFadIC+W4>BOEEd8hA z!~m5+YQ9lo262;xipFC3oYZ$gN1z=baxxib)4BOZtNG_Yf6F@P`UjN6G(e13VU(ySwnxAu1GwKC7jYCL>!hg&sSYzvFam0DG%P(&}V z^O@OMO+A^bw{guWPT8-c5>vcMW zNxToRfGEh+pYicPa6|?`RqJL$zEUXzLxZk!0H{&gvxu`an~k2l4|j3{XueuYM%&hk zl9e|(8R7pi-TU|M5z%pQJo?e2M?g%mSlHUy;!+dgiJAF%pi{%6kYAizl29aFsH9CG``S!-6&(6=rMn|Dd`v(Vj-|Xxxq24iRLk=qvye8x{SQcPs=L=r>ooP81?#6zHoYctk>!Z zy{D=@$mgGb{x^T~H}HUW?=}$(^K)~c>+a4rJBtz+9Uo^+*l_{_Zrhd@3^G6T)-9>^ z!q^C4L+Y&?1VXDi8MvG-kVIA14ol8duY<5DRw}PvzO2YF<#N4IHJT+GOJ~qG@xMQdLBJx!Ewex({E_^&wu)}`}glc+BV;9N``qpk2*|? zjw<(E!kHn6#7l?WL7awj@2HX3g;Ej9;wN@Vrm-2=k@Iz@Q$re}*EdUUMEXe4sU@O+)lM;`5{jKe-i?g$}jrC`bo~*Adv!L(|9n zk!QwHAzi9(h{@q}>SX3aYhoh&;Ne5Kfb{#d*~Z7lh;Q5?)QP5SCAxjRvWEDVA{ThYubE z1Hs*$-R-R{?BL1M#}nfd#OYS27ri8iU-2wxSs6o{PGfw;dTG;9E^lvcy?gtv-|vox z5rvZrv$H^tr1r&PgyrMoQ%vgQ_!ucLE6s7bv8$L`85uYuB?>o|Z>?<%`}`TzS(5+hxTtB}fMmsgk9S9vM3C})esJfy5%>1g|1ou*Q+#S#hP#QyPt zRJK&hiA?e`e%Wj{asKJqnYqQee5JIzcW`!osRpW~tCfn~VaNWFjHl(~`ybWlN?$!4OlOLkd?eO5|xR9~+nGJv*E zKKc0GgL^KgdvS5;*|TQ^28+ciX=2Hw)o$e%fA`=1+xzV;4143&O%^kqPQ^3%vP#|X z`+Z>X&ik$Xo!!gJ=1;w_0YS32inJ9{=f2fBMk}A4tK*#f3(O)mU@}Eqe-~XFbm^ zqorCclS()1HLKYQ;6zaNf#AgGC~P2%2hA_C!szK2-+h06e$kgf=oQdEC4+{_I-SAq z^J{uix^{GUe1(r>Gkr}DQU2S1^{;L}xQlHA?$vs|T#|uYO5L*nIOA41DtJ83CS%f>{n4 zec%Xy-e4v-!VV=4@vNHjfTV59gs#N39CewDsChyr%ZR&O zUPOVB@$oQQx%GYvBFLV|u-bMTnZz!D1R$In7fB|D;2DV5QqAdh3n0s80CIYYZl}{l z>`_hp(}9r@>Es>^t*or9t*#N9foUGQT&X|=SRhG*a!F}6O30v>9FyeRb-VKI2C1n0a9i%vgK0yX! zvB6;ggk{L-I6FC&K|t-c$KytK5~oX*N?>#pu?Q9&A04t3UTG^m$ycKfM58w)A&WR6 z-5xTTcp~2I_6f>orxz({z*glm@H+w(5ePU?xkVK&rY4H9ZDr;4$UEIVlG-ey{IZ?)NC z=%dWYJUeF%rQ?;^!fl|6*4I~oV9eB_W_}e*rIA4J=Eg19@xkF?UcKy!US7O?^OnCn zdi;pJL%p$yQ`3_erJ9mn#QDc2xaA4yX_`*Ma`?mky1lOWbsW?D;MoTRZ24$OraK&- zoLGixCI3rzE!_v)Xabb~2{15;558&Yb zzNAY)eh1@gQmOyZGa<2t_+`+(Jpd+I-sRJ)l0Q4H6YS=DHIyj z8FVH7y;dz&Yq?_4gbwiepaiTyu8_HkU%_T_1%zOdu)Q!pe{+4^?HY<*UmYAD?QHLE z@9csO^|~-W6RzvV?3-`jzJ+LFrPql>tx_HF`Bv9fL36vqiu8Z`?yXsplY3WIewm6P1=Cg3p6a%pJUl!iLJSTs(%DSC-bCSL zb2)=fS_v*JEJP+Jv$-tn0z%pDw53+C+eVgEr4`?fyjYe~S_6x>f3ODu#r+LtlcXZ1 zl5Nzv&9c0-#Is0ASfRjO!T&DKPhCR}6r0^n#JB(Kv!DLOU;M@(Guq5RO?Z4lYUSU* z7p0}s$+W22$Ho!u|K{PM+%7Z=eBw&vmehtpFt zYLL{A;4HR*`Q_BXs=}odu!|>hS5kXz(4(IJ`mg^Q<_c21+kBtNcu-w9iEtg+3f8fU{S$P zhzE>Iv-e6c7=Tq@C$3=$gle#uTWU+YE1lEjbO0hlLv@)N(p;EZ_~?TVmlhT)WvSSf zgF~I1GDyQByB&o5?%Qv1Dwo^ImDzWBU6D?+m|Ou+A^=Es^zt(CEGfO*d(wAS9Xj9+ zYwPR3{q1kze7FNL{Yo`gKrldkkV9xB_#bS$q=+M`R}Q2#G5|O)P0sD!VK4C;(}E|# zkdRrGsvN3hFmUKDN7oQU2VPFyf{8Z{(^2Y@j^}^y`^HQFsQ{W z!aDN!GNE;LVL_wUL17735J&hH4-SDVm67EYsHY4vN`d@6?uSr7OhrTkTUAthv+U8DPPCl8RX8(Xl;n8U$rUK z!?vV-xyOqU$f=ddXtA15knk@#@9}u2r>8d7*Cr!jgS`3BLT3&Sj&|h*cZ0`<3$$A8 za5!Qzn>IJ!9UmPb!f+Mr{^COFyZys5zyP>$IbHKh^W}Qwh5eP_i*qjvN9JHS8ZA-aC}^X6e-7aHgd>kt8UJ zmg;md^n;_L-JQK;JZVq^nnCJxCQCFLGFjhkzT4j3#zkl6W~JiWY6aXUCdQDtsL4Vx zPXGrQT{7`05R!Si`hK?un?#@p_!>+g1rbz4XRU#$sQM+#^Phb3KmWVGe)PeILqqmN zJW(hWa3@04RXnbS*jM3;u$JSK^FM$0-Bs*rW_A|%##MkM$WXOf5pU6HaoXu{#OHC# z>0P&1u9n$lbnUaJPj7Clf|wvXc0WEoc4K)3#7QPofc0Pf)n5@=!BBV@YYkWSNXdY zCv<=v{HNJ!393;Xg<`4KmG@V*T3xG^tfHkG%S+44AkB|&-y9trCF7~H(=(X#%3JQ$Iy#bOmIQKXJXx(mG_dovjdk#k=Y^a(>`ozM$s{Jnf~!7!9*Arqm+$xb zZE5g(fjwAFX4UOMy7YNHZWaWy*J%5QQS2d`g=HT{qZgtJTkVCpIi3sV0Y>Oe#*yJ+ zz8CK%5)iIdZY+bUoA2IdWxS?WCeK7KaYOhLFbBkpgo3KwX<%w*%HbTsyWu5ltyC@O zwfNeQYv}&{d(R#}1addn_GB(0tryNDIex_VDw~Hg!>yIBl zSznXsaxhuf&=7D6WB%;ZPygLt|J%=g^$V}lCA9|9w81YOQ4S7qHB%s*Re*EpxRcQL$Kp4a0Ba@i@K!y+(m- zY^=i(LAjQUSMrXIhR`vXE1w~5sv?dYOd3LFQ*9rh1zS5iAQ<`^OThTql)l67B5lln_;y5}KAz#&~!vHY;rJ^z`iI%a>`<@qGeU zDw{?XWC}SvLgp!6#X3#lxP@~0hnFwE{r1~bCW8y8YUv=r`}pzWPd@pCFbRK6CsWWh zvy4fo0l&Zc~lL-_o1Z8e^9?_4v!Wvn(;o%Xx%>g@<(67@Ixuc$m2p$roB{y(Tf7R>FOic~@hIuF=F*o3rxvrLGLm~!$;ZCr8^z=5tV1Hi{FSHs0 z?O?Q>j3ZQSN4ZAS|1-9#|~uRd`iaJ z{P4po$S;P%LU46$U&l_cWB^10`z1jv>9l5Q$6@{_D*qd#RE6R;Fg7$@O$Z42>=p zWAU%0e#YToS>@$YrJ~j9kO(s7b9@|4kAY(7b*cWY0Q42~Ur<^kOij*y_LEPEl-YFZ z{PeV^kwLsNx6ADrl1@xl2YdVVYSn7D@WhQqz1NqPu!DkBqsbT;8AiAy6X{01)$Pi8 zo*G5sks*MWQCJeY!pfarz!jtgPp{p{WU}0$OsjUgd)+S4wBBkPrO%(#@A}pJgLbP^ zQk^&Cm1(sC59~?auM|Wb9-RQ?nRMpO>$l&%c#$vV<$ajyhFVuy7|?}=YE1Dnls-9jmNPIs!uGNDI-}lbvluMqz-Vx4 zVHT!swxBO(@85qg9*)2g%r>LP>lqIC=N9Mg-M{zYhaZiF#}7_UzJK)s3^nNV>JYa9 zr@gs;)9v-0gMYE;pz7M81`o?%F1JU`qiwW0a@Z&dCi(pN*_j&0J1Xy%+UU!|*~#ha zH?Ze7tZgchtd%MVCh?J+n1`Gl>g0tD@kYg`!k|(DLCJTiH==2otZpee^b*k7%h5Q(Yt|EkzSPJD<2y>1V{ z{rLIwU;p|y>uYP=)!xBgrCuE*893AsU$@VT)RVrRfdKUD!F}n3)oe8W_{TqD7!a&~ z_1k~>?D3OfuUC4CWim6{2qAnhklS>GmRJ);Dght*=QBQ5WmvVEv`$ zt=Ymsxb3s(#TQ?F^$&miCs<=Lk*MEc09_)?kW1!>TK2nKdgz+I^b)(R*{BvNo+mK&1F13r2D zq~GoS>6>r9fBF6X-ad*)>UwRqcW>UtqEUW@(8Zk(rsLpT#At(2KRGomwp1)O+D%E& z@p)HPS3tI;YU(N3MkZ4_n|}NH4ek&l_H?@rRr_F&kz9VhT6{$E(E?66&NE@g;mOF{ z%uFaCqj1@yrKKh3kn`;HbXNuw)!Z1XbZjErf}$4h))r|uGCTrj-QC}ZV*0yFe3* zFWp-!WkM3p0(TVZP)Q2{8~CtIe+78?Ad>PTWM)|LG}a1``5#2(%_?@~pu& zK-VF=V=%cu0IJdAair~c#mPLDZn$ z&at*csilR5s+v~B*GR2Gx!RU?prezK$oS}(L94@yaQ1`puiSZd)xDC>`i_dUBk}q{pRSKf<>di(L*LN)l>9 zXrv(MkW+0AQEVe40k10XwcBlM-ghs)fA#7|m?(M$egl>bhM)~XK1-cSrzBHXqZv%N zDm`+#<+O(7C6){_*QJfNUN4m|o$lmBcq}xkarJXeitV_%f^6lh zRfr{<*cZZR=idC%!!Hn=n_nOzVrl>f-g|O-ytTP0ebbMn=|8TK&E)utq{{nzteey! zu$USRtQ^W;Z`9elw{PD?FRvu8t)~_8r_+`zlA44OcKW?UA|aiV9S#+9=mkm^gI%cZgbpMPm#k;n>@TbP@D`sB&;k3N3(qa{-oAUAP`$kp z$wVTV;(Mnjr|`zSdYjLdDXwxUsX%J8%C(Agmn`JC+FlTak z)ek>zy?@WM1JH9~Ym2&T~F&3s=EGFWqlY=9|mKu2?jheBU{r&y3^D`iCacOBV zX?2>H_A;V0jlj~tT%cmpkx7;XvWUt*JULFKGNF)kpOwb6n7slTc@=>}narrG z=g*%@O1V_+Tl?J((v&MC_clXa#a58?A)EZcX?7deUVIuDxX|fSRjOO^RS9Q zV1&J9ZRh6ZSjNG;YMycN#xf5pEnTJ3r-5_TRpALH3L0_G@kBfj3Vry&hmzh!&{N5n zFuk9B{>>*9WLsTMXEu|SJnBpu@5Aswj|cbe$q>0-e^e%*%e*W;zy-NgU;$Sp8jbje7v|`1Qi+Q!DbymhaD+r%C8sH%5r zNC9Fl&keu{2BUd(Iz7+DO2SHh@`+4%^Lb@J1y;ll0iw{@C~M1y*$CCjLt|2JW{Rq! z&tfuz44_9@dT`ap*wOKEcqg|6o)3?VVD_WqXnH3X#NDK-Uj4}kKuKW|dq*ILapD*C zs`O_pH)@bb){{%&dI(Y9@Gy+<;P4PtHaR(ov|w9NYx>EtaBw7Gm4>(R*kv@I%jz{+ zo=R%VthP@-{q)|QJ9|4j|MkE8mmL`;i`a;2QP~p{!(LytBpKMm9-A76z&CMSpV!+* zt_9E*wnC}cXbBl__d2MeR5D(#l*c8>`Tp$m9M6D`MEqbM5JSGPBdOsgB#}myro4N% zd3JWLPOwda+%`EIotVugB;s*6W3ApeKfBo3*+rD^9qhsq zSl@2Dvwv`Oa41}a>w~kfEwBx^=O@@GAslnLQq|%zvaMKZce>~n)|PW2+m}aLnG-0i@$Z+!rZ0H zS~TkSkGPyJc;ET?sg#f!Wc(3#ONjFN{rp7EZ}j@FzW(ydufE>g*#ciu85urdbvV3! zpVnXmTH5`Nl8FJQn!6_rS=E@;TCKt6iQOCZ*!1A+-wzPWmi?h^S1c z>LAmED?pgkyAzF89T`Z+_NAry`B@pwt7h(&^To6MzA*Jh5Y0D z_ntm_JT(>$hsIqt`}Uj7|L1T2uOD8#(06;&;}b52Q>QmbV+_5V25D7ea7j1SYIsaI zHBPR|c~xe+-42)@9>_u6pj3}NDl5wCayiBDYVw)~tp;ARh5!&xHyMsBEY63+<0@yu zFqp$V=vve4w85QFFyyqm%JM!r%JpGa(zV}c1Uf-&2=wIC)ScUR_?QedV>`5xkQKYU zDwivMMaGF1gf6X03@obSr=a`^@pV%Absg_W0~0hyuv{v9|NVD=_xu0;#W&vo+_*Ci zn9b)awJHk^zH`AaTrHD%_3D+)YMq^#iA68d$>i;|4Rk>4Ji5ERv$wmOlg6tWHX8Sr zAxoKz8ozdgFUSnhQ;&+l_Mosh4~*yY*91vW{vV+{}XcYptf-+%w&Wh|LygDdI~ z3iJd(0Gy(@d8gl(y0~~EF_>4w|FC=2-iUxCrG?A#*q~!~7%jI%o42z5NBa-Cd zv6(GW-_q^fSiS)aqD1@s9%}piA_`BMo1Mk?XJ%*kIjAR9ZCBTX)s2k}4C(y*9Ng&1 z^i020sK48U8_g~*z|?DvI{Pv_5}KZ#83_bIKa59me>8pR;iJa%N~66ycQ$U`l5FtM zC=#NfBy}>K9uCSoEvTn=*gqT?u@4Pd>^7dhR4JSI4u`!`t0mJZv(*E4ioyM!?Cc$y7Hkr`U6DpqUkY)k&2UJbf%yQDla zb{R{iq{v>zVaenxA772A<*Tv4pz2(W%Mj7Y=l}kHVD0dllj9Sg>MW|xt4eyk4t{rIc}cI; z{>YynUKQoLyMP68#bUPjC6iNn-&?E}*N}8?#`h$R*`Vhp;E9`CTQ~qf$^T2gp<+=w z=<1{fbZ&NjA`-zH2k+4T|M6R@4!G;~x+Up4lY#yd6j>2fcAFa?i+ud?$1DvIE}P4h z)o>`Sf}z1n17zPXfBDM~KKMY<;XIOSFtv%>*66i_pNY}2(a0ZmfKAGJ?|W_cd85s;)^sR3x&t zwiby@5+eB)Ks%Anp?z&?LOUSHHkH+Tn0mE}t4vMLD11zyDjq(11a)i5*}e~4u*gt* zEA|08KzHD$EVAlFZs*=mC*bLo$nmX%qhsjTgZoexIcQhIo~0yaBrv?Oach2l4yR2e z6UQgVN5JIiNnZ^d#X76inpUraSE8hHIoUgylk}_!{J%WC2XkCmb|#qKd+(4yA~WGV z2$G;LmbYDPMk8sW$7y$e)I@CTL}<0z)vDF4QcKlcj>Tfp!`lSXd+)v9@7$bOR7VB7 zn0Wc#z2|)A``$gqI_W>aX1|bPW7UmZDV=c|Daq*GJ%mzte}PJq>1+i1n5S8g$xgc? zpcgw`3+q7-B7j?E6BMaCTa!&vVv||P_du2#&AQ2K{^XNS9>4RhL2u-7>7@{W3{Snj zwl=0PLl=jcQTaHR11bhMgVy)DJ(PdPBJuUr)&BlI5cB-_46=Yb8m}xbudl8Fd>geI z#E?#-jfEpGU%WWj+xPpfPY#YQ&dvlp?#BAs!onh?Vj`JL<@2BgEe7ioNdb<9J=Lhy ztio2r4iJn`NO%y)S=c#t1Um?pL_$hDOyz7A{0UuX;f;X-WZES|NQlzfE#!2 z+=Usya$o{*b374#_3Z2nz6G-QfU-Vu`|ew}Zb3ktou6g1Id~1t`i+EB=_J+=RMKRm z&g-~BgQb!{QfPHLkZh4a2yQol7s~RJN@=Pf3qQ~u@B;XICYyr+L)^eua=9!_#cs3V zHX#1Mkka5`@O^fMf)&Fv?(Mw=JICXwR7#k=R7{21OtRBtvnZX{G^kIUK!6K^D8O@J zz*316Ya5HlD^==ho=#_|Z_9`ZK4A$mg+i;LVe$y)w{G1wn=ILE9%cj(fML^VE}M#Y z#Y$PgE#O(uGm&WY`r0p)h&MLZv2>uM{$QZlp)oD+I2a%}lVi&1a=TzW)pC{3<5Tj% z+8V$ax4pKpwz9H<)c}@4IMEC0e4fYW!$&~H0N3GY1lEWoOKqSc z2o6+8Fcj*KhA<&~{?d0zQj#DC4^B*g%j26(rn|TAtgWmL=)gD&?_;&p6_rX2@dKL9 zA>Jb~LH^09`=Ll8z@tGN7t2*1SQw9=%jEEA*u$lzWk@fg1=NR*5){BJ*{DZq9Wg1R zML5J$VEwV%`CR7W;sP*>$LS3Qc^b2rZP2`D^^{|Z4RUUTLLoZ+;S1pGQ1IZ6Gp-qY zh9+F`cyz|!Xi&vjktWsvL$GO37l21>E>Imx8s<8gt~*hWlTFWoRq;fBDzA`_t1C{6|>T;^G2i9K40kBchED#-ee! z7WQV=?E-h=jJV}e1)&}hqSx)NZ>&Fh=Mf&`(&wXh>*H~;Q~?~pPk;`5p%AwYnu%3Y zYSbc;Kp~NM-EOCQ7PLjJR`z>+mO@*dNE0wSn#azvxe=c67;cwar>8o$)~&70&F$@NnDtj* zef9nK-zF0@CvI|DMl&W`Z4IMZYC06B*`Fej*l5r%%*{W3{OZDvG;Gb5xwS3*Qhj;1|>m{;yOm7MWs;#R#=)6ooQh)@lZ5(nQA>7fq)+r z0oR;$dq4~PSN=>o1I`Ok((d+_mR2;>nm>YoM;@Y5fu^xzi7q&PlFiyg00t*GJE!@$ zz^u8s`9vy#9l;XeSwPPbXkWj6g}?x_1J5-YspBSi3_t-9ORbQrXaa@;{Qa{}KL;U0 zJZSfNF4qj~6&Q!DfwB4{k^XSxbDf?co5QiVv?7zsh*FF>ge&8bLZQ-W_3%32 z4&a7fJ@xwlNBBP$5b;2%R5hFJVu5Ouc>=ypr(IiHA+Nr^MgXP}vr-v>9Q(1Dtwg}{ z`CvE%&_%F;St4{{Q-E}%(EtkFJ3nW#P`?f!vXs(ZD5W1?iW{i1+{#=b4;$!Ff;|-s zQ1%^LMu;lhIrLB>kph&0nnFpyV^tbz-Xx}aD!0*WggO1;4}W;|=Jnz6@x}RBxmH2g zGny@Yk&s4mrKt?R)#(TYLaYI(2120OY=T=AS?UDf{(}!c{F}e|8&E?~iFh94xyiS)+Cyx(~uLFL+?~2FeEH5poR2taE)RYsP zGDOq5Dw7jp?qp_Su^0#hK+&+R&|0gjE4OxTdS+)w1JXx}^NV-x-oLrCbN|8p#pR{L z!=t04vu=l?AjC3$Xi$~Mdwcgb2$@z*^8i|nCR~^}Q==XV1UlW`^fV0t12_UbHn%om zY4B^G?~=#fuL7GQ;mBY#q(jPjoxLR zm^9fq+&_rKVl}ozkdFqUBR1U6>FFtWKZs5^5{X4(*le1w#a@2ML7E5s-e3s+im%J( z3#X@N_}fX3LmFAuY{3x_UKMf$Si8e!H?jK9R3=U1%6NS0 z(AE`5VuA8N8us}uHCt3tkD(Cxt@PtVT4BcYg`Q%=~x`Nai*5xS(^?f651 zT%k~J)_eVd$Lj?rvzRR4Mj|04uIDq^M!g{r^5NQ(rpPcpK#DOYZ9ZEbCD!|C8AxDG-d zb;Zad?$!}_yMsPmzgPf40fiN^h=z;ft8s_;LyPr~gDWC)YX>mo{dYTj#0fnf*hUOjSyXE8narh z)oA;jKBDiK4I%~_-rBtldIIx(yGO&2Q>>enXWqMe=PqUI2n2nKMLe^`g0EL86?_f{ z7je!^!%q-a;bWaXmHflD#1!zj(6xj95WYkiOz9l3Kp+&2M>Mc{%;5rm@Pv?Pl$b&% z9K(9ERVtThXfc;dxer%YKmYvm!O>BQ+A-D@1mlWIxq`<6Bi3nja8O{%lOKL~_R~*X z4#(}G9{?Pkb7(b_1w{<7SWNhJuxzY`L@d&1)mDpDA`(M>!GBzCHwY#k4Qld=UMH5| z>R1ObAQ&h%7=OkWVcoEL&2}3;23;^Y*Rhz*p!SqDRd3)IsZU^~qEM-T+Hj2EbR9*$3 zh5VrKh|9CHvtF+U>)&oRj5-}1s2EMG+apcX5=kX6J9@3%>lR8S%KK=yvBH&d4SE@0 z2fm5_!FBK4zVqu}|HfjmVa4z<4b2HQ;Sr#gZtw0++3h)cZ%@Tqz&NEsnayUfVh+a? z04kA8Ad*fdoD)^IS``XeiOtKKOqJhz^9E53_D#izb6yZYh}ucd)o#BZO~esV@aqWh zfXfk^08dq+e7@eG2QEMct#573EzCFCt*h(nKsXHQTCLaZP6xp8`yYNd3;0E_W}%>1 z%nwHc#7@wPS9|*>$H%ai)s1zzLeU=&7Ut)112((8#$M#&TdGv!Zo~tEs=^)$*(}rp zHSVSfLo)a?m)DlvJ#esdkc=7Uz=8|P7nUF_yJ`jYrZr(D`1O-1U%4~6{ z%|eF~Q%6JAjF7sY4YnoJgIKQ5wfKs1G(^;YUAInc2g{*-bT)8C!hvMjdezFwHi!fY9TOCP=z4` zVhPmTVAPu_ybVTU4iE!UC^X3(k;xE-5tf7!X}#Hq5wER)^+MQ9&$tXGBaFXGgTe~E zZeKzJ3`J~1DPfStm|po1{qcvRqho|scm(7)IA1IlGl3}^jnw`~ETTyaaz!8%yd+UL zh716)>m$IcHD;?79*2t*3VEttRns^=+`!o>z1E@k%RGLzkZ-nIP^h3g0BV>PyaV9K zrZw{?(8Q(>@bSICcCUvD;qI@SzmOmAG;G}W}-q<8~?i{G8|%sFhfL8r?dj|E&l z)GH)SwOk(bx}|L4`r`8RYOrXTbQw|*S8Vv|1e1I|o z#6q=(qQitd(ZOq}M3rCy0cZi7&PZ)4IN?wT8x6kz!o$=-#Q-?aCy2gKeOP3~rjwHs zHtPvNfl6Kluy61l>hmd+WKtP?al6xOH(TULGt+nsY)K}Y1@(|f#neMpDu#rd)Nuo# zPfkw*q0qt6VX;tXbvwgq#p9X(_@j^S-Mjzox8H*5lE9KH)FgVE!)_P;aDI8w9gRw* zN~1wtx3CH`GcH)e`Nd_gKNN{&2unZ>H~@SG=#5>65zj3xbb5U-c=kS^Szxd10K^uX z9kGE=FE?t4Mpu46y{;Tk?g?TEXh;*RoC?GFu#8fnf7H@CUDg-x|uZJAsafCUHv zjle?TtLNtzR##UMH3NYl2z!zpp|Px%A=si&EUvKECe$vw->+3_8m-=9Hnp3O5Iwm{ zWi$-|e7>syd{in|UGy%?r6L#-cg%&AfIvYEAtt?k{d#iF#N|-|_&lp`fem3J5PQHP z`2rz;9szhV69O`NYik2Ko~pmaLQmaXQg3^UdzFLL;gF&hxhAfV?)pej2(D&@@1VCxC*(&uqv<}2s zr`MgdgU1bE8C43ZxWKl6tt0j>8Q8PEc0AQ7};RFV~ zX7bv+(P*dg1*1yw_`Uac@8A3SPk)ZYV~#01WbU`$e6#oFEuhxza)Iu^b^r8lUw{2? zU(3W2&=*iEtJMmhhe6$BoM$~d>5CAWPCiNDh{1iCs)cvLJ@p35s$Ne zUULY)KmYvf`0$uI?h1sRZWrsX1WTs+#W{%nfB4-$D&-I>G%^18z8@s!=Z{NOU zG8lX9cF-Tp=W;aiuhsBf0v>Ys%q(fId7t1i1s&Ao^-G8rSqp zJQ0Umfx2~i0{}?1-dJ5(t<~y#dvB?NA13#zWUZ9SrAIuDb&6gf%Ovt7kEaCCGy=biifi!ZcF<S-8x1gTP+K;|NVB}OjO9iA zfJ?$1utZji1-AhS2-^4T`Lk>;3;t3mRG>`e78e0Qv3OD-7TWB#xrI5cPRA4Qfx~AP zXLv5JcMcTr{QM%9&)_Bji2&qmGRu4!TDSYhKmHL~&}_4gc|33hUm&2r@8jU29VRt?_6i5Q*74a~&WJ_=Y<~z{ca#?7v16+s()W z_Le(oC(ODU($q++RSRwh7ZbB`62z=Yo@1?6qx0Zqi!ifTgkX!u;|S+#Yil=d+~5oN z-~adon>dS=SE*p_*!NsEPc>KnQ^I1GLEkC4Wi+Pz9xk_BECQn-rtzeQM@Oul)+H3s zFiON(eDB-0Z?WKbKByW*Wr#68)QQP#nx368BHFS1z$Rte*N5YwOfCmtwK{FY6_S`j z0er(@cl_ozzk%;XsRLn(wO6HSkrJ7l%^zO8fA8T(AAfAIn&EzL-|jW&z*r1BpNd7}{y@NYbrqyp?pf?2>!S{FIYuOd8ZH$I*yext@BZTcgNHOMgFH^#5rFEm&prk8v)31SK&D6_l#0Y{YTcQJ z`(X)g-Ml^Ha?vy=hV?quvll9MeSLFoZVn&|MgunkqgQG)c=ibO0+k3T1!fF2GaOOD z-;8Ve_U>&2!o#EelhYF+RYtkMsyG~8@qe5jv;l1bHl`l#N5`U|QOzb`fC`aCQaW}^iPzV-?4&yy03AjKZw5hz zENj!?CY_9R>jboc5WsdHJ$i_}TUuHKuMdYqi9~G5?s)Ifdkgam#e4}45Dtc)K6!F| zb>;E8S67xL647Wdpd778WWdJF0#gv|J+4`~RF=!;s#M0^!cst{Lt7Mz#X)Z%5=n47 z_!w>sq5YGOKmK3;=5N4lVdXHSXe9FD`E$glcs#5mG%+HmBXTEL<{Fj@xCOxN(h#8{ zy&d6ls`Xkd5ie9q2BTs3?wy^To4~cvn1VFyq2KD%TP>F7Kqpd&zFZ;qI&e)T5L^N* z%J@g%r*iNC8=u9Mh{P7Nwco>|CAzIH?g1t=;EYSvIzTNFi(-%5bDqyW|NN8BKQmh` z&2G0n95gyDsZzeSxycucL$P?X)0~>NKYah)dk-IgFg<(r3_{ZD@u)T0i}Ul4KLBsq z+T8l|(@#Z0;Sb;caCC5lTe4WKpnX*Q(C;^DwK!`agN+056*IY5GzyhQVN5EW^USZU zu1!r*jtO>fk|Ou?$EW9K=g_8j7#^2LqqRxi2pH4KE2VO^LX}Qsz-b)zDR@mZ9tC02 z>kT?sBnXg-UgYq`9Q+Q#q*x$=+{eCv6hamp9voyd8H3pb9p3Ljbx9aE73p+ZsZbOR zNB{iiKOY<(Xw*uJ(O9e2Gs$edTm$Gxg<{0fo$YOt(FA_O(z(k|pZxga(;w-^^7K-~ z;heHf+2PATa5zpOPhEiqU3!U1BgF!KI4=+oxJEOwR1|E6gTBFJa!pS|M$mgai}l{U zdtkS{UiXJ5KSE5TsP#b~Jg-`zNjN~l!Dv*hl=(caQE!0lZQr=Db938bHGxM$<@W~t zNHS5ZRh4R$-7&SWxCH)3h%+uMVp9dX9tXc$EEm%ska(&7S}HB>;5gA4@%bUNMf2t2ho1{3MPntlcM?E@okh402-a-u!B{a*D>TqfuDn#w13puEf-e>^U((QNQVt@4? z{`&E|@2RLptDa0Gf_{H05-a8KC8cVk$>9qTj0hgp8iXOpSp*1{{S>3J&(RQ$hG0x{ zGQ`4qtqQ*YEZ7}(u@E{wo=nnUF(?66bPEn+hK(H^A0M;O2!y8^`a&MG4^kcg4x9tv zLzmNQ%T^nU55Rfnop-QJ93D4HV`sCtf{^7lPV!(lT!eP*`sx~JlSZY+$5;msFLe&- zv~edAsT98w@CW>?7ajl~{*JYRIE3Dyfrj9fAV&UeP$TB+ytS1AWaB|?ZfPV@BqWnkV|D>+yA)bg81c!n_tVM^Vznk<%*d?NuP$IV59iSBcpr0B) zRjWbDnM&XfxF56G1QiSITdy`IwX*;(nM{Fgc1}NI05M&S~a;4(c ztC#!x2e1z+RqXa+k?7^s)#dpGf+&~-uo%z}9yggEqF^a}HLB6ngIG|5Xv)y8z+7<8 z$#fco8j*O$H4A5e;Z(|HSSOdmGq6rZ5c=?$C_4+JiIpPJWI6|>aA)Yuwbi07rk{KO zOhL20`thB+cZ8IUqQDm==rwF!r=>}1;CE-Ir}(ZrySwi^c<6G?;_)xe&O?Dm%sRhR;4PYGc!*6W14%Ry|}#i>8GD4XD6TI z@%dYu8+Y&D7fYm&kC3%uiO6oBa=ScIkp!lW@6{-ku+V5Mc@1C^@I+wlb!Y|=9M-!q zPvh&Ait~%pbKfPtlytC64ua7i^lT3MXP>`?;pPp4}Ri?~}SX;Q8idq3^uwU36U>^;egNt^% zH5v?sh&Z^q@?HD=fFu|Uun)%2VfDUL_S2>u8L!)|qWPvgtJQ{Yf$khUZ*PtKNV(zVcnE6pD8r zKYsAwfnKMFW5c9hym$`Y;Bk94H#V_lh|u`K)u2mQe>9##sf2F8Z3BEm;V=SZrC5$d z;-DIAVixIxF=vcL1HvMf+`oSxw1XX;%3!w$w=fvBM!mAOQmIry0>1tB+vDTY;dlhv zB;Af~PWoYAn9FT&=*CLcX|$L;Z^Gg++j>B-5(l@H($2}M9V ztdzHI-CW3co_PYZh^LWfk%PJM%k3=kj%|pXfO669!O(REH?oy>vmNK-b6U^bz^PO)jA$;AgfhJe^&tVx@-`-$A)J~%YA368=5bNgV=bWTXjV6m( zp^&GN>7(N#m<4>b3(?6AZea-)@M@z;Ducs`tTqci3^E8z0kv_?I2keQkH=hiDK>s~ z)`I|9t5SLR!Tw<^8l#!X0zMWI4jf~IK*8!$+nttJEY%qd5{VSr7jy&OU1Iqf5M<%05%4jepWATH-eLC~*P%m#pHLz?NX432D3)I>Xl8Vhk z<#oEf(TFDzOPvlU*hVB8`S!bS1B^&gmWNR2_Xpm-ep{(EtTsE;2A%MiiorktsJFSj zy}7xGPs06*r4sxZ>SvO+S1nhy8r{~`HcSN6@6DSx#R63*B@-#mnCqIEbvkE8!#-u} zQLJqOl0XiyukaIG9F`5Yhxg*15%b_SAQQMN3T!L|>GqvlE32zX);B7hN+;q8+&NYl z$ar#ky!ZC4Oe}THKw7D=^#_NCKmYU$B6u>%r`>8qBjH>&KOPQc5(yMP;IiFrQV~n1 zt7dtOu%}Zj@#$GAnQ#^R7dfBcs}LS)dGrb?wzZ%Cvf zo7F0y(UU1edZkJslS(pKM7X-aVgixuw&Bk4Gt2JpJLxPv8I8t~dB&P7dH$ zu0i8(uC0CX>8D@z&v5}U4yD4Jnux9w&-0Z&fEgI56WwC}{_dSSi}Q=4;TU55^86go=5#uhGFhourhM#D$u%>5_s-oL+uQ3as|y~gB>e8r z-@tRG9aGpEgs8o@dv9OA;c>ZE_J(lGl8^^XJcT3CWGYDm9(a7}bO?C0S)o7Z@SDen zLPDrUXn*g$_rO*!F3zDy0B0;SNNHjfWk3J?3<22ZyX*}KTdigbrMdR7!nq1-NCF_{ za`~+DPaA;|zr`0!@^OX&J`X7Abh*b|UM`n!)N25A_U3GmVr>it)YeMtnVmJ!8BIM9 z3i__EpnGu7VDYgy81UHXa3H`$Vle=OL2p!RH6WK%b8j?HWO|VXrD4@;5}919)eQQ* zT8*r(+wPs8UqA@4Q7)8bDxeqX^+W=p_wwxQ6mc5%1Ga}ff=ElIXtEwua=lhB7mIR$ zvm6=#(9%-KsaFQRi;d42VJi{xf!KDt6|n?xl+WZ4Spn|jVIMv|pgQtqmim-~f9pQ_ z=%d};UEJp3!6E#8l6Vicx4g8RN~aLiCsR{_F|S^|PNy=pR;ySl_D58{0d(cD6oGQ3 zjKH7CrCHLOIiJnpW~Qd5?mv2fz=qI`m;wb1gOn@e`9cAI5AU_uENYz&n+u8m#g|`x z_~8e5mZwjDeD>3`TDi<0b9E}soZF)iODQ+LKLDODEiEclN+@D%w1v)bdDt2{5oeV` z6r^aN311=+WADHls8yU!H|b~#vmux9cwokGcX(cd39w4F#wce zGN*NFX2xiXy6aT?S? z$vxB!6w8an1iH#(QiLSf=OkwvcZhFCbfDH+YON}h&%ycuM_RoWHbF1!sTY@+PN#Hw z4v#NWs;kvH0wH`mSID1TULfKE;{dgVQVBGHI&DCHjydsY?E3ney$LkxwYpZlRiOkW zom!?`p-yt@;>kptLfN0dKc|4|U2M!;kyU}bQ z@WbD7*-XDb%w{ukiOirgU==72y5Gm5unD0Na15!O#-G_7X6mq-&ebZlCZF5ubRa=s zrulqv%o)Meu*3p^XxJYr707!@naCHgQG)48YXl|YE)S( zD`H!%)?nDjv&$8VHsX9QkH2cSJ6NAqs}1O^*K4Uv3RZRV<}D5zfr2f>{^|8b*c>&e z(rSx^0u4N9kt4ye5pfZ~2K~X)pMIj$?pzMM6+zVDu){H6h0mY=j9^?U7Qi<T%R`Cj56i% z>%Hqte%R>NGR0CVn~$e^wWe4s)JSESOtzfK-MV#qb7@^Elx5@TZnb%Pd*|WZy9m7p z`v)R{z-+Nn2?uqy$^Pl)Ys_zy4gBEyQtS1 z`D`9E+F`a(>Q=xX^#|KEsv!h~4ToJ*U2nBgBJ|aj9}3T8p?o}O=3FMn=kfFmCb+|K zvq2}`^k4LPg+fW=D^eN#{DMNGv+4}HH*Q?`uA=_H)9=3rL~;g0Hp8kblhAysvy1a` ztuo_wS?o5b9{?4#i{S8VCYw?!hrFgL@N5o*gUcP`NkIqYayit;(ZK<3_>Sbx?HfCA ze;E16$!R8;l1f3#^w>0bN3+%frN(Mk>oxy%015@1q);eTsugzXb{z}`=DcnwQEJhp zR&n`!tH#voa}vo^C=x-OEEI~+u;8R1bA1rmF-Jg6JvfzGCE)iD$782!hM3TxACJen z%^IJ>0jlgD9Z^fdRhvwzsMa7gd=fqK57}w z8tlV!v01rX0Gzwq9f*Zu#9gn~3n)Xhu2xI<7(0~EATSgVd-V8lj2BLqb|S zi$SMjg#aTOO*k62YK`fOow-tC^o&9~}xkYFqeoE>t5GFYqCpg(YW zdJ31P!d&Vx(3k2ZD@)6i+!Kk!<8gXVJfv4d+%b2|8D~=@NC01=k)%|s4QPJvKq{x2 z6hxm^x1%>1EjHT>oB8Ij+uxF$sHSO3o(P&vAeHoi5>nZS&&`wy^TR$CcFHy5r;|~t z>3|fK@`bp0L2pRob4r!Qa6mbR?Y2}bMmz)I09JQ9R8QaOoc`jjmO}I;Yb((0z_HB7qBAL%D?{WzX}C3Je1C2sLrdR)u<6?@aa;OUL9FX zX1FTwnNpqc(;$t3mBf=`NAOoeRwP2TR%U9M+pw6e@4WLEWWi4edycJ|jEV%2z?xPo z<-oNc@dMfycu0kngMrm<2PvyoD-`x2l{g$YCmsU^0Va#!YBrg%g|NS7qYgirpP!S; zB*Ad-r)NL48ZEQgVsjwy$g#v~b_j+DN@FEx?F_@cyBaD?JV#WnJoMv8VFv;;xV~Q?(upM zY)VX<8X;aOaMn`kG+?evP3zlOXdX|H&lN(EP=aJ+9I?b^v8veQL8vDhExff!0-c7G z(J)=CFGN*3lcsLB8aleWzPiR|DFvz91B(Ry;<6gbv7>HejYcz(NKLAi+jLga5r`-X z4rpK`{?(sx&D_0n2cd;J7KOvWqwTG2d^nrWCa9B14MJ@wty5y>o*Qp{`PC zKKS6ncOJik(3wo9&dx6`E_}y;!;AB5p)g?S4=}hnkJo0m0~aPwhu}(u^AahmcN|R5 zOye{3UfOEiy}j$2ods0_k8;j9p;y4l9HT}ios7k!FgB3Fm#`}#i~Dl`EqZ6uim5%`>-)= zF(jZ6N0ELH<-@bL5O1En@?ifsY)a`d=3ONjZeSO2_o~4fI!x4N6 z1ncda{YW%IGsYDP+&|No*-38y>go!t9ba24mRhW3Iv61YWwX_~y1oj8LZI@QY?gI8 z;lKjdH#c$H*hH^)?#9lJYuW{`AM^%7zHq@i4=3vOd$f40AUTvlgYfX`&Fjmn zOTK_l4G=`+%Xn1q2JC*f-K82DA-~n_QpqK>Y@<#I9C`!g2`d$WV4z&Dsj1lmb)Ut< zBI;aTTt0vP9LiNFm0-1mLLNd0RSD6*`#c^8X1TS#F~6_?7k>5X)$z$G`1k7S>f+)O zo~BsHvktp_ED;SruT(&lOcoQY)MBv=`jplumx^@;9U>H59(L7e)N<^!585zaD2YTu zpzCCss*pMp3|KzLm~|zWnan1TV2C!cL@1TX7Z(>i?pfdu<+Q65HmjxGY63$NnKaZ9 zwRE7a9X&+GYLyyg0|ZLchN4MRTWA<9P5-1yr&bHWGM-MylSyzI*vZn$vR5nh;QK-dO`~p1ECexlFdlL8 zMeG3ChK-V81z^AkcPhCOW-Fwb>;fQCzF6S!xg*Z7NHyP0u~cHWSWQNKDv|vC@BZn> zCr`$MftHO2Mr5IizII!tqyeCm*Fn{{5Y1A`ILf4{sQ`6?tHL9wnekxgoSNR;+yJ}n zvEhR~YPvX#hG`NEl<1HO!N;vuCq)zKlJE}f4uT@poWOP z`qdj4mUn&*m{x~|$z-)U4ILrZsAvdsx<1v7UMxO+OZE9|6o%hbsQToCn z9*T0%np6aQ`_`>T40C?1RPSC`jSDxF57o1UJ*V^FGasWf0s_4G!= z_VyNZJ=kBikO5Y1Zf?@(s8(C4Pyp_6mw41{I*(wzzOl8ox-lAz6Uhv%poF?W@VMN; zkk0TZS*A~uXE=z9=)j{^ z>GV5;5oEVcr#cl^Akp@+%0j99jE8lrKpGl^ZL4PnD2tkW@JaZPK zxmK>glW*U=^~GnO!{>qZpif02%L9W!4}#X~QkNoVCJhbd6wx4Bm8wy#Wm73gv>vr) zEKu2*SPW#L$zPcyc+BqIU5#E>u9kfMYfz1`fI2VMO2t~K1gvGpYy(OJ2nH(nP^C`I zMf$^De}q^7R-)AC?%jVlGwaG^^U+iiuqYAAwQ6In+A5W*>+9PO?mskJZN2WGSg8Q3 z?M??&X1-j+?y%lEQyQHX0YRe!XYZy{nR2lVQI1e?;|8e07L^_H_@luH|F+ww)>f(i zFsNRsR?!(OT%HJ;4K!J2&~tc#es@r#5}A6nQmZ#w(AFZr5?=(X#S+CL(In#>r23pg`9_x&z-mveFglnyaST1dJJJD41%m=$Xuea;4+RmUy4Tff?tyA_PcYNl%`0mFa zF0L-AoTpOCWm5>w3WYqKPKCokz!IV$^h%}CXb*bDdhOus?DW!?DU_Q1_JGU56+|*A zhs(`pvTZhdLvNsQ?!eqJm!xpB)xbt*v~&nkZ#H1*YBlAMPa6CJU%(+~cHxbi+Z$U5 zQCB`6+yy)U2zVV1U0nMhE#W^PU7SH5bd}5FY;A7b*xpvC6JBT(?fhgm2r6dA&27+M|{CR2||YVSa9LV|^W-QmR%U8dA9|htHF% zl(lC4?Be3p-fMsG8hi*8L93^U#jp4FUcY_~!=tIdnJfUsY%+=k0y;Z`4VB7Tjpo6F zhlrQdL?Rp(^7u}mnZ>H4;Wpw{vz^K2zyqMXEf(X_(wtf@E9P>eL0=*k(RoLwt5K=u z7Z(8?mzS5(cpMnBy|o1&2T(-Ap=zmYfzq0CLX|RgF$J~i_RQMtc8_OPDBzXL)HP^k z+G#N96*4LH^5b#gtq88r7IX6+C)H$fsZ^f&r?#l2hD1E$nqFO70UA49PLtVqc5w>m z(CAcZjbbz^+b!m(JPTx#{Z)kZa)%Z33fsdTPd z>W&6tiIm6T!CJtN?RJL>-Xc@n-M#bi2OmN&LF|HKDP&aFKI~I>Pf+}6rxTU~S`YpI z=_g-U&DL_M==TS}jo>@1MTFziPd>Z<@DUdO@bD1i5JZRGxK%3r|K-2_Z%!x8{GpyH zwJL%nRj+cWvDV7!3Zm!b3y%ZIqE@RP z+`nhAm}1EocoU3Gp`hFtdX3HHLac}cB7@Gbxk2e0TU%Q?~g(sv0dWVbrB zDqS{{_g(rBpP)Txz*H#klGSCpz25))U;fJ%zx)O08vZ-}8L}2@GgV0><*MlCg=D0g7gSf9})@$U%h;F>AOm2vo)H~RLJpnVv#T&jh&xgQ2${r2R9Af(C+mTiDbJ; z-DaBImRhaah0MQu$80u(O(S5Bha<$TNjGCqRRm)ziqfOD3J} z_4^H0`^ZK#($Jw?HhUfL1NVRR<*#;b+<@Xq#NyKqYC8zr?~$#vHEI=f@Y>pnhP1`F zLk%1T!ANZX;3N@Gl`EwS-xUa!$!vzRkB0qlBr+P(Yp`4UPy?<UP2xKG6Erguh#)_Z?UeHW-IJO zRW24&=`{8fN^5e$x3#$m9uo`(e3uv5T&CLt!(|Nv_js%H-ZYcT!p^Bpm`;l@Ba%vWMm>UVxmFWNCHP(F;CwMhlPWmFR;NWhN+psJj|2@b~qZZ)oUuX7Wb?->bb1Le=rn`C*s&0C_ESlhsUF?|HHwA12tN8*s4?}0WiZ9 zY4`zfxKVdF9l#}cI%Ftl6B)Kd+J}T6j$xxbkfA~`o6hp6+m#^Ty9!+gx}3g9CFk%s zAR@q3kH-z#1lDC`{j@;GYt`C#Jo0+Hw{G3UuKBL~=U3N5&KMV$O64M+Kqi+$z!q3_ znMf?6j^;Kym%Wt{)7v0$esRA)08H(@-S?eSBXK=tcsN;W=pv%BP$1T8_1GEsSF_h{ zv>LFL>b-+g;>LcBi~OF%*ZI`H2UkldN9V`>US z4MIPkFQ}9%0kju>U!ztYpPYRC_17ad)NDWz7MNq1uhF$2s5 z!lg`2uj^UX;2RnUi;G`@c(Ph8fC)HoAy;50Px2}(NhV+1-ob9!tu_e9)5F7%KVUXn z+_SD^EG7{Or3$&4vf$h{lSQVGnoVZsv{SB->2wB}R2ECb1miKEE09prGyb4AfEJX? z>k5?u$Ti8L1m9d)TQil4F*aNlzYb+Q9F7qt0qACl1W2Y;X@EzQm;04+`PG}(-+uQU z90|5nZPu_PI;|G6LnP*zw7R^oRIfG%qfs;-qju=SA*|`i&(FH!VLFvAmY_(>Ktnj# zV9<}mqPPdOUN@{&y9m9Iz#<`x+hjH4zSFsUl`us(%{ovb>QQEvT)`QR_*^b!;!QcS z+1&s6w}1Q9zkH>X%h#4y%|=}~65T&Ighk%GbxWbq4EsYw`gA@Q2m~Y&IXn{rBAd;; ze)CEyk-#NfGt=1pd?uf4G+3lRs z&`&A8Nqm$i5#QL^Sz1|5X7gNOTW!=u67f(x3b2r?pQ;ta=P>a*RChQi}Mb&=d&--MaLeRLZA&el3WHJ8gn zvTtwiEO?jxkN^JP!5UYVmf{oW zfiZN(1C80Rw6a*MmJvs-R(m`Sirk%b&DhKqY}1RMpTi-GgM8MuCu5sg_|L)6QvVzNbI_$Pw`SL#Q-_JP%D1 z=W}tlnQZp-^b}kZ5U5ZnDU;vY*+1CN71H%uc`)oFX8U~SfQxpQdP%My1w5^yDQ!&6MpA;KNp;@}_dBaux7% z1w8x;4NEN*VT$zDy-#gMDZ_Nk1)*PASyL*NCnv|?l@x^NRbPjORY+wBUozACKIh{6oRVYu0|XPP9MW(gmnpW^Hn~HZ7&=>J{<$z&)`H7r3_>*NnsNz`8{f(QGo+t%J?*p&Q@6 zee0e@cyalBm;d;W{{XTzx3FL|nJ=5?-8Ld}d;C9#9dUPe!N7vi=;84xg}h`~%oopj zy@;(qw7tE(=g*&GXR*Tf??05u#NdAxMMDr z5{V@UKjQ(2BQ==RQf`j4SSV&PIVz&n=@it_TG<^8GU=>BuDEsc=ED3OI04qAUT;9X zv8LrhwL%GT_VVRRY|ruW@!9Dau0Jy~oiF6yym^h7fj={KN<~Ukq*!l&3qyHQ?zezn zu2qAP@Zr%>wonjKgYRaERcio)sHhgmQlRuXNPmyl>u^xp^mdQ>ZjSjpa9b&57f(Sg zj@f}FKm^;owzB%sM;|$-r_FjJ{8w>=ge5GFFamJ96>uc*0u_TjDL9Bo_L5S=1I+NL`(II+jpyQoW&dv4p zUwrwCciwqKrG(8U_&$E>?C2{;Ipy>|K%+M-t*$6k%6g4@*3$v1Kp>$+Vht<@zG}5w zq+%(5%s1$?;9Fp|d=O!J`$hfhSC&_-W(%}9H~?rIoe)Q3=}gAs_PqbzyFkfsDB|^c zwr^}l!;u%yUx5N{Z*RldKrKO>msgg{Z*Oh`&5w_cA-@Ea-YLP2G#gFoMIaQ7SiU79A~fI3G@y1ADx^ZGm_nz5=qyyL zkPC=>{y+d6_wnP$J6l^~p;#rCEzd8gWU@EUU;g9Y|35$f{45ts_1oP-y;^N|IOCB- zB82Sw^>2Q?yL$`dhDK+KrPxQXD9Ci!6^K#0)#Pz$>BJ(wR4M^sctYpj=esx1{rj%j*-EYI^It<>VhdPG z0T)7_a__07q!2pHZl_MvB6g|`hH-UumCoea?GE6DN6jO_2j=hY-dS2)O28q*QH@G% z&>5%)OE_jW8X=Tn!N51rR4qAydNdq^uC1-E13t=?Dy-U|H$ZrFyZsJnV!*p_d13MW z58k)hZ9(d8cg^SWjCvhB6mC_c{Glp*?Y$4)2VsR$mx!soS2!HyjQOxPcrm)aQwI;l2 zZq_T8%E^OLDVR6nf<~={^y;>|K$~Cx>Q@i%KcGf+1*~%iu4=VYf>kP$f(V9S1%pq5 z*rrpgG2Hap`kG84fw@wvgY^}M)i$74P4RrGB*vwcN@^iM{Q< zkT_toJ7A(Ru{4uRcA5>nMr+bpu|cp9@PI;|LIV~GCjI*LYq?x8JL|#n;`3eBGIGp* zK&>WiGNZBBB&CT*CE%U8`FTLWqzVy2w%?;B3J8u6Jk%x+Bshsh;PPY9XfB_XNyPW= z-qC9H*k}-$tLrN+m%F;W1i~AQM#@F%=|z(mu;{~Hq1c{*5cAA5o9#rLItT&~mzI`{ zYsO%JP8$PMgwv%>s#Wb)%8y^fr9|RFE>o?Q1vyc-(}B7IaC_$FAHMS_ozCtb9^xD2 zav3Z#7K;H=|N5`~5|9L$wfAO^2HJQ$BS?WKKb|U8_++hGrG~eGz=iLkSS&y?R%>-= zwMMPpXjTP6!Rp#N7OT!WGwax#iB6{?UteCq0^D;R>^E-v55NEY zh{FSC1j;mOtx^FoqAH@vgVuJpoy+859|G3;Kqiw}EEaH-cB{o5a}dpj{egfrxVKnp z)GWJJ@Amq@aa@Wjq2=Q7j$- zpwR0%2@M5Rd$-oD+ZcCT`|KuE6xX!0)c5*L6> zBoG#|bR4+4y1u==_0RwO&yd;SS|vG@zybi z3VWdJ5zh>IqeX8qQQP6#>BUJtkKibpbQy8X4F>%# zN|6--l%G6#G930Iq43q^WrL=eIY6;n?G9pRCXpG8hScSh!ntvAX&E%%sM8@@AMGFT zsC~!~oShNy5xn=>e~oK`*TSEHmo&;+Ci8l|*!`s?>Y|6$hVi_3{`~ahgv;ki4JxzI zB!Cw~(WWzFM1@l2?Ccba42s=pG@t$S3`7T*TPcrZuji^nlI#S zZfrs>fBEH?Ec!OeWyoBbtpb#Z$0HEIpM3K1_uqWGzqd~+q~B}Mv}Y=OfGdIb0FO{d&MocS+y>SChyVNkO~hhq zD%Pm}_~hvb;iuPjduQKy|M8vs_k8DPzyHG@a+!=oCRJNZMu$Zt7Qs_!q~_k+2J8J| zTsFc~Uc7o4jzmCe5pIE%2yx)Sm3kGo3W#@1Ij^s-n=QCi>Gtj0V2#h7Jp;DV;4g(r zDwp9Gu_ni-CqN7YQ~Q+DN2zdcVdscX^K)}BLQuE!^Rr2cD}pj#Ft*!mz!n-VLWv*- zugA;da8s1%PIJ#_0@#&531u1zgX^fZs@*%gumU(H7#^E^WwDqn8=KoB>eL(0<#JBv zjM2c2M5B-dI*m>VjVzbiY?ep&@8z;t8l}S~3RJ6=QV~es#KHoc;h|Uo+`!frVg{ID zhhD%51WucSLoYZ(lWZO#z*8<8jYqgiotDOH0^X^ikU&Um9^^pM#=7+e{bVMKi))QK zm0D*vTft}Xy*oE|Ml{i<20KBVhGw-|YzqrZ)JCt<#<#DnuX9-=mrO2gv(XqtNE-NE zu~bCl1;BPG$5VuRfT9rc`5f+OdU_fjx3su0>h;3@5F#rS2JW_2sn8J5Y7w9T(~>Jd z%%oWPAS>*&+wCkvv(S#Wi^V*EYjJU5ZEa)9;bN%m zFD-!?1cE_CeTfLnPl#Uxd0d)X!roy2OhzNnEtSkr%C6Pwu-oBva3mUWYBSdxjbJED z%~0aWLXpPr0Acw8fl{Fa8-PRxB5bd3;`7CP8S&Dd^t+A%WFXkOLctMk15; z9q@4a!+2b;RRQ#^Rs%~7bJ+73bE(bPB4pir;@pl6hN0yoXXOQxk_flSDEd)<#8zatcgvEJ2kK}BN?skbd1 z>Ij7|zP%oGTPQ|Mat~YrpU6x>_m$AcRt}gweQ8r;D{6j7Nb`kSRzp5ZvjU zhKvMmg0zXme3@L7Nms$s!Od^oyw&Np66rW1JzO0z;PE?;VZG^O>YWDo-RZM4z5QYLoc+&sKJ85JneOW8s;-twB1I2F z65eGd(tGbS_ZKf_p*kvx0P=nBy%A45&%JRYa7ZQ`2`|khY>sxjTa$!ssg{Zes1(c9 znrxs=O-{y?`mt(BT?Apxjb;PiJiojGo`6|th%z;anZ0`b`uyxvt=2HTGiKAu#^g{S z@cQ-J{7rnw>KGXtt__c7v$;1vzrwKh_V;)_;;C}k$??nQ-$0ZFKsD;C%TS?O!LImZ zCKkw$+m`+S#QgmH0=QIqyqLatDBY`K$;8R^rA0ca>iJlm(R9lf%Y_2`udkAB;(+^Y zI~qQah|b^q<3Ii*_Pn&TJUTMsv^yGA+4M4Kq-8jtg!TpF3t6dUtx>Bi4m%Gb=0O2r zB={^;LpJ#b2AWEP;o#uNqn(GXdi}%u_wi`5WOBzGSE+QW7)=>^>UO<;b$M|J2P&5_ zZ>PilV)yNJGJ0}y{Nckc=Fsh`d~wfWePK*G@{M4wDD{!x$kV4!uqag5iywak6S3{F zv9Zse4_OYRWT{x)&Fq8JODl_a?%yd@D~)#R@Z`8!t{fa3TwYz3tCe^%LGYNKo&ECJ zv+X-~&?V%w}G^cp1LDoSvPzvwa8bK0Q5q`|cep+o&{;KAsp%CIqp0&Qj+u ziY2qj0Odl!^?MzR`7i(auY*2dVCdif_P19TSAL%#>jF1wr7ALjsQEws=@0&ZpXbU+ zk2I_uEfl2GAVPV-J2XBq4nym7T3Ch6Y@e7IcMV9NO-wx+jRH97RHi2v$+Sk3MVh0` z&gIJ`22w5Nu(aW!;4i-Z2GWDX`u@+~2Zw`Zqq)=WhOWYrcG~EuRhqs^1+~p4Q#<$X z!`NEQma5lNP7md7wA1Yz@VFw8h*qarTAWWNUDD6^@DMwZZC1_*B4UOHvYHFDyKG?!+Uj5~A@(raGD#*(2fgd$m0={9b*<>X)U8 zwno&9D#bs+KGa4oUj%fZ;h?voxa6uk0Ed|ZG1+{ce=Ciw)yn-mcTdWE7r0_ImpCDG>Sj(OX9Ua2zx=OJamIPZQ)gT2N@q)pOGF@;*xC6xbIv1HR#!GQHes3g3(mE-yPu54ib^{aX&PDqN1>Z` z21o#APSi^M3g{hVveBr4Zus2T_&Dp%C)cF`Lz)K#hld?Tlig_cy4?iw@a47CE-@-~ zuS%sW=|>;xVG>exyxCK!W)~N}`o;6--~MuXVJ;kx{rvN*Tqes98m;Ed&CU7wIZkxj zR(*GO7q679)J6l7`1na`{$Z%-B)h|g4L^AJXmxGPV32y_rJB@cm#Pku>LpbqiQIS) zyz1@Sw**e<9bTz?`n1pL-$cY*i7s%LX0xV~f~*cgjbenQfZsn77zW&xOJ5omE)kc; zuD69p+%DJn$Y?2(yF9(feP}?|$nV^qgN`7V>3Snp&gs`TW=hDhF_Q`t-}$+1YlheI`8>LLeK0Y4`o^r;ndY z<%;y|(r7>=qs63TJ4$Pi-Tl3nKm9}u!v=1mS-D+lx0jUuwa=eF|NZZO&r%+K{(OCPB{p+%!UsZMum={=Vzx|W-0Qe zA$qMWuOOa}kB*!5CJZ~5E$r>@XRzROES^as^KBOPNPGGZ*6V{{DE*tT0!GPL^8e@K5Odp z`*A?XYc898|L#4m!FQEQg>`8YFgZRqKMUa8w#h;4O0A61QS3hwj@0TkX>0HG@|p2i z>?U$^ad`nScQu+;r&DQE5#q>GVKUMV)$ADXL0Be_uC8cqbMu$GERm-?Q zC~{M8v{-R`ff#}HDh*X(cMYZ8pGv3INn78(6t`*1=WE(h-_SfdHimaJ5iON6$Ti^c z@GR-pH8co@Z>+B^FD*jv(iy3FgAXvQOPA~%W;%)x~>CRSbL?ni4}ae*{q$ew1CAV3R2%u`nofr;m~!h zTIuw<)mkl?Ofd%OJEqm5T%n>Y31j2sTrTI-#N_}Zy9M=Q2AOVNfXEG91?=1dZrOQAB_%hw zBzH71RupDSQu_MJ`!gSs;>aW`r$Gh{l)T-Rg8tg-w`b1=mpsmRTf;e^G~g7@p?t{&-|g+-=x9l~ z#wWE#RVv;GXMiXa3xyH63nbN~cXsaM6)#`BI6FJl8+16nlKkbuZ*dh~Ubc^n29#4G znUb>GN5`;KqP|XNuqsJ*O7p%tt0Q&qibZ~%f50Q@S1&zwq-7AkX)+6p@=#bFK_abu z$)2s(s~A%{5sOP1OqcWMP-;*EZJ4rhmu%p6bH3S-OKX#pQ)aVK@j5A{s_v_xx4bGp zmXn0QG%tfhgG^-8DZAAU>6T)CsNKLYzIUozrj~-_8hyE3%H^_`SF+;ST$X8^UtE}) znFev-%k@^HtLi!JPHFx+J`P$zHHw82knuPF%YR_$kB*LYT4}@yI{{T02viB|1M*i^ zmgG?5>iqcRSZ)yZ`^U#ehlih;A4qEC=H}`OiE;&x66IoV2Ysu z-^%&-WjdXyN`+3n)Lvg+Mw4N6Z{NQ8xW69_M+ts#CWc>EO1Lx|O{Fkup(?k;grpbC zCH_xpBfF%(4YU>Vr{oMeYB0T8mEmBV{ARkCE7dA4k7sOhywa#eV=<@_qazwE%+K>1 z;==D8#Fwk}%I@B7 zBpS8aOdD(Kt843Mjzl76w_AZHhJ5hx09Sqd`0>up4%$m;yd!7&_!{1AGMoKM3G}cO zbi5{%wN<@LF8BH36x93rn{S3k1JXvq?`LT;07gN%zNw@^t6iL*M~!)0?q59r=C|Md z#$q(`yDDWqyGqSkX4C0#LOOZd_4T#6xjEo2l}btaYq>1>R^CB`1U`;f2dsvCK8M4O zsT?R>2&K@bT5SUX#>S*%cQ8nJ29e8^3T6P>{QUFJP`4oVF*>G~I&OfLEti*Wtp=T3 ztK$PFC*V{QIOECj3E^29e%NdlvkiJ@(Ce^UN%g5!A*Ow);siiynUx=Z{OS1QY=Ol(q*K~5&DXE9#KlBNw=8GGgjH4HVE=}*9F08xL zY6+}M+o(P>fH`&AZAlmb)0M_V!^0zR3bjs~FBaRaj&jfzO{LPzHWQB{u!7xg-|zR` z5+i;_={BuaI!8Df^@j9Xwps{+FdMvbb8`!P<2Cpw?0@^togt+$i8OkWT(bJ)tBNoo*XVN}Py?W6U7a)R9Q0zjyEM&VwC7?En2={>#7p z@ICJh?n{H{l++xT4n&E#^lUH~T}mV6dZk)Ynp)o$`P8X(gqxv&Z*^_MYInAz@1Z_0 z5|AnoBf(?>C#(#(JlG8p{kGvjwOT{RGE$|5aRJr_DCi8@gOB^KU%!?uO@raKm;>B} zSgvd@+gU$p>1dXi$6pd?Z=z95nLjgRxuo0cq0BZnHjI*SBekfAi%^qqzx_5i79`l9 z5kY>KCM*mC!lhANXD7!$NlBB+kjJZ+HV+L}N3_?-a3YyJy*Setv|y7#Z*0`1Oa&Z` zmm+qy+tS7WJ76FL0Jwspzk9@NDSBa(D-bw3ZmH3#C6}xrhdQ7n*39Q%Pm(jK@IfiR zj?cH-%Y$x9AbmdkRI67JMJeTa0T6(D@@19=*(L-3SS-y>JD!LZ zih1DD>2wcxhumHdftbleU9p1q?%unQGyeYv^hELoeEu(=J`E0!5M%fE_80}hpi(QJ zpPgS_U4m$ZVxd@;dd0Y!gn}}wpSccQD;;m+pFc}=@3s&d{4yGerIRUw^ugW% zVS~AoV5PK7v6?L-!y{67S);L8Y{Fh8ms9GZbo*V0%PIR>wW<_Y(5NkTE6^k9a>C`xYg~RpP%9CME&ipEn*Vm zC>2Uhn>`o^j0OTmmHOo1GtsxF7Wn8Y-Lf&ui3urdia<{!^xz4Q`dn zQY;fdSYBT8c)j^NETN&3ZVh^)!GNb247$mQafmW(1{c_QaBpd8>D~Lc%*o>7!qX>@ z`4Huh#c=yp^Ye4WD)0eI09&B-{a(*IG_&GyC?;D*+Z$D(SL z+UN5Lfp$4rJJ-N~D3g(qx!F0E8=7@;a)vJt`G#Z%(k7j20X>&{0Bw+nCAyvV^2*BQ z<|d)~_0O*vAW3;io!94)t0_k(cB_>TQkN>?hGDBvqZ&8W@k_ty0zwx^{VWl}@Fl%7fI^XvOiX3D=l$|9J_mar9xqLW^R6N!7uHsd(l`F z^Ej4%pVg7k(Yg6~IsB+d{X8&%kPwYXuNWL2;)#)IH9BYopPy6iLP!(6d|`io54@AY z?s~m@zzGGLnVQC08nuQ+DZI?2gB?tCx7`7lusPz;?CgSX&_^7C-Qzl}9DcaB>4SQ?Oh$^GTP&AX*RNmwTrL(s2)U2jY)ZYeiZtd0)iLp0Hen=V)7 zR1a4B{P}ath&Pw^0L6mc?!Z-e^ldXv)>n?P+v3cNOUtu!^AMD4)}>fb@{Jujy+%$4 zt(M!OIny&!yyS=X?>-+L=5tx88(OX4kI)w6dA}>gWtc92X@CDCbI$7Ep?aMW&#WtZ zw#;-8IyT~mN{6mP(0@KK9J;z~nPM;q+kp9g*xfxkI+Fe(opz-njRaXQm)qHF)ZhXC z@jw2rYpbi*mzN)hRpt(=)6Nfa~`=w>_p{nZNwyFYn&H&)7rZkkxAOdIyX7 zV)P~=&>W57DOQWwpwo9-?Nlb6NF?|hj0c$r^F^BTfztO4R~j3;zq7Nou}N4arVEj8 z)WLd(+pRPjNkSLoYXA5Ik1!ggBZX||G+U8yBpQ!PN45dap|n{&z@Dv6J5!pMiZRJ% zy)mGqN-%0DMJA1@*d!sPP=JtWq;{eDCKBfF)fyGg4TZvbC0mW@1#6V-n=RDm>gp{LSRlWGHlfadr+$G8QH@B+jBsfoz}mzx=b zAP$d=m@OvUS*T&Xaoe*9sx%Ui4S%UY)s$X-5FLzXZGHWlUwkv6G_n5q)vG`L@sBJS z;q9xhz9Qh^%h0B5CY8x#!QyhMqS8r~B^1;8*4p;=oop_DsdQCA#9v;VUx&hQn|`;a zv;emD z3cY6FI5HRltXC_Q!_S{nN-*H>U3SOP(jpA&^QTW5i66mXrJ7r*oKK{Zs=l;;jz$ww zJZs2TYcyZKd-Hzx1DIo#gd3>_tT*cLk@M4|^NTZBfzLa5^zlb(2hK2^^K)2K8C2(?JEpZc%hQcpjzTDqG2wh*Jq?73+js~GHh!`2_%<;7!Z`;H*}&($z$&Ir4Y_R|+9*ZS&sy`}?8r z^~mt>^6CmgQ!*Z<<_NfNky4SlEC`NUWi#os)3eyk4d21>F3-;qixM;X(u9QI$|?fc zt!@iZn=j^1Pfk=CjmJL(k-|>~h6aE6>+gQ`t8a1UshR0J_wFJGiCm>ZzRT}Oor+Q> zmo1gVTTzxVG+H7h`k++ID<#NzLms{R{{6|(aYrgAR{<|rC$FK?YG5I^nJE^tiO4(P z#u@GSp!zm($u74SfcTtp{}1J(k(AM%*E2{wldaomH4yK}I+clhzJQYyhf{eItQa0DAdGO|Xa!BNZz|F03d zx@}PSCVJCTt7MzqYJs2LUNg7box$K(KA$C?G1jg$+o}-}+lqPp`qzK;{Q1|?A0nS~ zxtxSFj2MKxy1cka#aoT$%=FBi?QQsnvOWEt!;DKjp@Y0i`iMK1u*sTUkXk zBf@U`w+o4B)E#ygwt+u1q{rf*Q6AUz3`$`py;9yp&L)XhUT?S4!%$(7(%D|COQn*> zpO0|AIjN6ffX_MYj%QCEfA#F?`sx}OeSUg&c5;$RBzx`7kWV`AV*Jv~wb^8Tm|m7U z9*^_%=U+cxT3-CHyZ7RS6u*4<=&{Wy9ZU&D`Em*PcG#rl*MN5bhi3)x@c;Cm{u9w_ z$UDevynFwSSaorA_4e)C%gYN0#~?@{Sp}-D3c_Aa=F(^&*2N+hru7B1ccm;{9-Yo& zxpWl{W%6aUs)sw>y?a+~@n_N#Qa?)rt3I8vZqjEXutJI@yj zax$Vcn#2M56~GA5iTe6Nz{n?}~&%C>7B2`Bz_K*mCM$tBIDM|6nDjf(s18x-d;=;n}$|{uI<#x%2mAHBNDik?6Kj+hS?%$i8pJN{6lDgFl zGVl&*IRw37>J3I?quz$upPZc(@+G_sSO`bJuxp3YH99(Wn<6fW@g6rZ5({U=<=p-1 zilI3i&SI(X?)6(NT&1*Fh1tw4E|n`)y-q74(c{6D32fks7PgM!pEOnntc@q?jlo9#+9vY9juUQlIkrs^3?^nUF*1 z-9{BqYFVZ2w3`>hc;m1EgDDwd@)28VtIts|!qPWqIZK^RLFnN6$`A zrO_(brPZjV0eKbq5|5!DWBEcJ!iS_zCKGO#b7$uvo`S48{Pa0~6E(}0m~(z%;o-xF z*lj$KK)GqueVg6p8t}-?&vd%hs1+;akTk?hA(t_7i}Iyx@h%e@l8HoCIcYAIin5Q` z?HNr*3=|5E!@|18Cnq{`pRkEB$l$Eypl~Q*t&{0yDVEDMseLVC^kmjQu zWh+T;?K+%Jx5LiBv(h^$jVrP6IFDMZffO$-Eq(FD7s$Drn`knggkC_w9z1xkxUd+H z#oxYuLx3UL;ds1lx806}BJbZxBN>EFSvnIIu-%Ub`GIU`4i+?ir%^9W}6hLV7m3XMzvNcmJCM80wmJBc<~~YPU2CLAY;%m z(?nbXFw%B@ZvO1_9Fc(4B$3zWDJcC<{i3O)K3m zQp~4DPW}LK8!H}5D5=7EP*P2hliPtxw#DSwD2xT>5xTmD4M7B{z!Ca-HG5}gE@bY|N8!Um*Vp6Fzj90CdRs_;Rq9+ZZE7I*; zw%l2T;oBp2xiUC)_wKgGHPCKL9)6eK>Z?PS*MI)wpN>8qT21Desi}uwJRBV#g@CGh zeXxlK5hIB)(t}H+yi_s!@ZtUEPe;{ST`5p)LsaHVB}O+m=n0OFVL}*xDw#oWz=*&7 z_FGswr02i=!#`YyLbx30{L_mUdmp4NVnis&TnJF~cQ|wf5%K%{;Mbtfr;{QZ{D!gF z>zJ$-O}`(H#vtemiwg)7X@&Xu@csLDyx8o_?84GwTkhh=v97(ny>wb^8`X~XHR9er9za0yN(C-CR_xxyZfdP29JJS0H9KwDcx<-wa9xHwK?j2%7$r7-Y3q@!I1{@q7K@5EP{2Q~$)RYA8k)53fPN(C; z?k+LCuk0&$Ty9B$lyY)f_*^a?g44xfD80{9V`U-m59Y-*J0)04{&IqedPqyWRmj0R_oOCl-^*H;uyQTiB!rU zyX7{hiu4%GX7FgWR2|n7?qIh|^NV(?t<3wR(#2eX2QiJ=OinVf>vfG5gDkT-;` zp+T?NB7MN*l&_QrbNoKvgNHkypL8(8(RCUyU9QUX`jca0Obe=`kk3m`<#tD!TZ_NX zjE{{IG6B_Uz3TS`yuKl1D4`94esz5X_@pzLdQ)n|9UdPY9v@5ek?ViWcrCyK@6Scr!}snhYMOo7sL0Y{Wt1pMXH z+1NPDsErb+)tIc8FMd8gJ|)0IKb!SdDxOLvl0;!p^})^~IIL1?r|t22nOwBpuyhD+ zfQ*-ymk_kz*eI_7*|Auy8=IReD=RD&(qGO|bUJaiTuvHI*K3lzEsZjyIKEb=8wm!d zrC_N+wzJadYw4dDVOb!IGt*OAo#tSF@AKiuK){FeynpW=q2l7=od5A$DbU~R>kV>A zgAebt>eG`GkDol$s5Ed=C@l_&W@oV;J$SgXvYO3j_x2@QRe?_1?QIR#nE4?Hf%uOf zeevzDzQw7IPL5!{7_eR0XP%mxwppyiS12d8a&&SCwS*7x=BSN~bW6|JY*uKNlGoQn zr@&hQmrn;DrGE1Sh~vD@#OtP$i#KbOT0Ss#NN&CT731xP*}aXD|l2 zImXW?k_-^k7!QsjI}pTJ3p~TGCYA|fv@|L})D{KG%|1LIv-Tnq#Px8)|F zk0Z+N<;chgYJ+j%2pX-frPLxwr896Q91MteIBaGE%D(R%7{F%%Ng+nfj3!8gHR!jD{QR4TFDxqIiYfAiO4qvQE> zCK?JAa@oEdmg#f3OtoH{936e~@c!EBf^uoC#l&8PLeNuIgrzw?KaUp*Oe3&ZDV0tn zBdN%QLv*4sX=@F+42L6-RH1GoLEcbl6WN8#5*0Dm&5iX(4<9(}_LGxSDK>I(K{V=g zr3b*fckh8RUIv`SsF3xHf(KcY7B7`ry-+F*2LqV>_2p$szH7-Um5A!KDm)lvO`v5S z;A8}R>4BHe65Um5&F$WGzK|uh_4@scQZ*ADhHAtS;Hbgi2vF<`_?#|hNjgmT#>axo z%VJAJp!3sHgIePs^i?X=v-2}zB(@4r2ugH2*cg=Y^!&68ld6;;nv(c}Ck}dLAGlVP zEyGL}3h1=ke1k(kt|;A7F_n=sa?xpWAesemM#sijN;zgSo0$aG@$Q{FsAsJ~2c+-= zpa%*A)KzH&@eu~f#i$`jwXoY{Qm%In4lXP$Ao)Ih{(N?F%*qD*0Z=P`!a}<*!OTLG_CD-=Jov=l zSS-?Q>FnqP*J6RCON3dfXE5*5RYn>qHsDmVb90bKW`{VZq#LZNG1H=oa`RjRSE;M&>>x=mWWmSyt4e)javojXJ-k#?2xEpK%@ zA-UC`e*Ezd|NM`MWCExS1pIQZMp}b)iD&3<{9$u_10QfYoS{e83r~(cBgG)V}sY==U0}O5d_e_ zWISq0NmARQT!XX|q+wn2C1jWa1_qu~;p$Gc%=P3HT$vnnevr3Q{B*e*N|} z=Ei(N1(e&^Ex-m6y0p0X;L*dKhmVFwMsaEpi=9pmWg_V(QtCvnG~jF08%myk4U*?@ zI>3~@{e4!}Y&JPv4k8L>0HtH9u|NpHfZHRt5qn)x875P3WE72nF(Pjb7H3q#WFytExnq2mBqeh&_qGk$3rAHo8QVP*vMa(}F=u~c~JK*ssotIj*YLywoL7=>U_1C{)Zeg)-7q@GGDe{ku+}YX= z4*H|#m$920b-SnO_J=$JgG#dN!u;&-fA`zJ{oB9w3=Up~uJXmA$3GMp4H_M`wx(Zh zHlZM}LTMpaC`bpCRx6!Oo?o0^UR=bL%T85km*sX217cM)0uQxj*xV49pxIQ z(_}FY47e~wB6F!&c(8Nt@Bj1P5xU;JeVdHNhtYrT0T@X^cGe2~fmhAsa`3`-x6Qxd z@xam6_Et8Vk?R0jEubOyJOP(PqSx)Z91e|Q8{wOf8lEmqc`Gbmx8En)F?BEl%(W_| z%~XWR(O?kcL9sxcC2nOhCnra5-oCkxM2L)_4!9Z#hmTH<5u=wOX*-t5=Afjq18Ow( zRDE!%QLCp@X+}Yu`_mu)_0_A_v1p9HDHY4j22viveI1J@3i$$pb$erLBrpPPQ8L&o zLMO^4m(x8u5;Pf%W8-7kB@OrB;v&6#Q4O720?AmS(MTudZW?r8+JKd z1aIjppO=eLFov^>^A8_(&(6;orp;<~xt)-85iqS5?+h*zyyVtQuiI?at75>6_YA{^ zAA^ukH@UswcH3eNz+x6^ zzaSO-rKN{XV)oeBIP)nrV+^{!Mud)1+pYlv0DAZq4}J3FF)YezGAH73iCPh9F3BV# ze?chNHWE2}d3|zxaubb$1^XXA9eg}cZtD&T%(YuqyN$3nHa03(%c?c$T`o4WEwev`Gq18uy}fQhWDSEnw}V&9B{eHr4odaz|T@LI-|)@R{BNWw&P{>G1tgV z*km?;``uqnPERwj;Q64>hlh6CEe3XWdX~-QcXsY?-`T5gd-7{cdIKW$5_bt`P8(IH>cV;#=H_6H#2$b|)s=H^08V<`Y&{mNzyx7Z(=?ydH44(QG2&9Cin?VPque zv^)FC%~c`@(4?0%J0lhtS5hDY!~VJ1nYGo`+w@+-kP{wcw?QKLF+2!UFBFTnM__Af z>#Rag)MG<|3p30H*)3N;l6dk<3yC+wEm1`0#6#!Rh)ck>fL9RWNd38b& z=np~#eA21Ws5d-){P^L{1JDEumTNYdOiE7aV+1O<)6FA@g-)kqa|2sk#1KEcdk#Ja)YmTJJ3daEIadFhl!ry20LSxEeV2;}t);OCH)t&Md&1VhB;K*rl1(OSJu z37?YGhq3`u7Z;a)`O9Bm*;16zYF*n{pPre9MoBMgi=|$d`ib zDxT;ob%QIinOfo_fD)JoGsA*n#F7}?Zg)Fvr7E5l3aeHOTn-(j`JK*cwh#%xI0)3{ z=9W*{6qT!c%3)!n(Y%$LEEZYw#56`oLQs0zjb$E zaj_s7WVx}?(V3YUR<}_Ik!jVNrA)rtXd3z&kJY(2KD{!x1gSm0y1uTK5!fs1y?3y$u(fvMcAh+W z0_GFEVdCp6YfvlTcdB_G==T>*()K)ptKI!OgerD%+>STuHC5~@`QVqTv4 zVSwO2GZP#cHJdCLFcYQjtBrD7Pm9Yp8g=i0S1(lN`uO}9BXBzG+5xv09sy!j#F)l| zBSGelpGJ(D42E<{;_k(ToLkgtm1HWNOsAQ5g&z-Cq?Vq}>2%4JCcB*(&nsU_%dG*7 zCl-&MoShO6VAjWnhe%PK&fxV9TFugYyD66-t8kfu z%JmxJ5N>IAIU(9`RX7pCLQ*lEuBC;A5q|*9zPz;bMc>`3U5rq+9uP|#o5cDU~NFpE8BH6fu{O&Dx3yuc810J9sk|@baYBhd4J2MM@ zDTTQ!%4J-{Qw_F(^~f#EbgEjC#7n>qiZ9JrLH%qFGY&|}hhdNdgNC>v+%0AcD^V^M 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

4ms&5d=KS^;0M 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default.png b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default.png deleted file mode 100644 index 667711429272824d23461ddbf83834b99d59f714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304403 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�LSbD$L?HR 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 z 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%0DAJBGgzpS;J2%ik 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default@2x-1.png b/TeamTalk/IOSDuoduo/Images.xcassets/LaunchImage.launchimage/Default@2x-1.png deleted file mode 100644 index 0c2328aa1691faabbf43d73775339a68c90863ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942363 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

Bp~q^ugig@a5;f`Rcb{e);<47r*`d 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/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%0Do!DpX;K0YBC5>yp<RYQ}!I3T#0 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/Contents.json deleted file mode 100644 index 04c42e3..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "user.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "user@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user.png deleted file mode 100644 index 148f3e9fb4bc626b85e96fcefaef0a972aed7f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cX64L~h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)lD`qG*K|O)H5_S zG_f$$Q7|$vG}bpT);BcPH8ip^u(UEXRe%B|plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OML?)eIp}XpbFjM%Dj@q3f;V7Wta&rsl~}fnFS@8`FRQ;6BCp2 zOG|8(fG&l2A-4c-Y+f-mn1BJMUy)d#Z>VPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP; zAXPsowK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&py2GRpy8XCoS6sW zYl1cS`dWGB6_+IDC8v72*eU^y(96tBu`+bEuy8eWGc`2?0ap_XV?#4X7eix93v&|# zb8}OeUYGpj(%jU%5}4i;gkCe8dO>L+w*Y9fOKMSOS!#+~QGTuh*w0p(xZPrm(>$o& z6x?nx!Kqgt=oo!a%p%1!ObD2KKumbL1#;jiKQ#}S+>3zeTA=Y*J1|dt@N{tuskoK& z=l_3uW<~|BBXtgEc#l*!{?LlMs=)m5frvugcX`n-k1sc$H#q)(hoh8Utxtu_{62R* zzUeG>%=Ql^R{Qof{z!VwE?_)KN^|>%mWSF3X^N&i^MyZrk`Ibq(SE$u?}>`EfL-g+ z4Zoi(a~Ak^C@I0l&bEhTlbrpuCyP0b@SpHBD{{Eg=_;eL%sVGej4>%*VIKdH{r?}c zzizY;>R7s=RZ(2vJoBUc|DNpjjTNQ>-3NJ6*dA^EugPBCI73>bP0}Ifh=XMS(<80` zo%w7=J`yXK<(hc@oOf_Nz;xvJf|C!-Thlf&ee`W$U}kt>+ObAt_M>&60>RVO&t;uc GLK6Txje6$* diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/contacts.imageset/user@2x.png deleted file mode 100644 index ad0f5a855b990db54a97c522232b61f253e37006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1379 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xd_B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?T<fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD<cE0=g99h1>$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;Np<V zf>iyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf`)Hma%LWg zuL;)R>ucqiS6q^qmz?V9Vygr+LN7Bj#mdOc#Kp|a#l+Om(7@2p)x^Ts(9F@r(Ad(# z+{D1#+!UtQB|o_|H#M&WrZ)ws*U;6%!qw2t2&fkbu;>M)h1>$5%`T}$nPsUdZbkXI z3Sd85W#V=V$UGcwf#^-a;ufesjB)DK2RcR{6thS%4HE(;9}p9sZh;(l%1_M$Cify> zx_)}yXD<T-<26qg$B>F!XJ*)XGdl{j*(yhHItoe)>V_zB35sxU6zJ(%vQcCU=Ra1* z{|&7RI2c)_ng2DIm_<c!JPKDd6H5{n3J|te;1X(zygxNYx#iBeJH5XTF^9jox9`oJ zv*-F2Ps!R4>1($)T}Y>igQJnjf-Q4G>fXrr3eB7a>#|n!m|12QoYB>MZ#C8I#_}^; zT_aB`{!_W0&|<Kj`H8QZiICV!^;wr^na*`Eym9!4y0Q?PW#?v{#0@75W=u7x;MQ_! z78hbmmq_fJ>9=6XOl5<!9EIT*tRoU?n)QVg|D{Nr@s`+=B(Z1uiZmw$PmAu$3u0gC zlucgeX?v5`NJz1)G~HkuOVJcp3$}8eWAB>tPbu+z_A6puRC>&&N%4c$-sY&=a>rx> z&i+i?aMOE=1$O~&9m|{>H`&;2dpb9jO`Nep{6MGUq&kMx3ye=h$4W;qOS(?qr@s8a z26^>PJ5{%X4qN+XGwa%wnVvh4xRqfaOMaZQ4BKmk<xfIbsuygJ>sWqZ^Dq0*14X*c zg{l2v|LU68&dHIVaIEC*%V!6dw5~lkC0gf2-O0&I|DG<~+x%I~JVN+Z!kwgML)k~= zHZ8iQ5trC<-z}=YnfKxQ9^VGu{-ev6lr(33cW+>1cyiv{l*gi_1XS#Ky85}Sb4q9e E01<fMWB>pF diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/Contents.json deleted file mode 100644 index ffddfc2..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "navigation_bar_background.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "navigation_bar_background@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background-1.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background-1.png deleted file mode 100644 index e8e62abb4496af86eac51f967156e35a1c2ad9f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmbtTZ)h837=Q0BNn@IJiR~aXgS_6pbYscol3vrC&C)j4YCmMwuHrxtua|3kr1!_W z>v}1!%RumpQ2ip-eb7$>KZ!V|FxdLR4+_c{h&H-`{h~0$vVwyu>-pZ9Kb@qd;sf{a zyw5$)@ArG&d(Pgpw?JgvlI8%IoIDNupk?-NAj~ZZ<qE)n2c?Gru(yaa3#O^D6r~sm zzNF5I2|<-9i`OVRk)*(I-qLuXEShjuoR^dwxqb6C38hkwe3>aGi&{Zkke*-B#q%rY zW`vcpkS&q<vvAmAEm@OAlZTePs2Hr3BVBM7#ZH<cp<7~>bL6PQ3NI9=U_sSI$RwD! zkfaA-CYzucdSHk?15-&lO(oM5osQEfHkoB<2G)&4Y<g*qo#rO$T<DY|>q9LsFDI7M z300q`=xjDiB~w%?6-O0uqoSC+6<3Ut4Fpa!1YOchNmZbO$j_=vW{yNk{~1Bnny_u} zYF}ZoczCHSI~U->8s@av(%Tl;n5k$YH7y$Ik}im-{G`*Yu?1b^O;w*!)y2jwPA#aW zYAmQ4EEHgWkryPzIiGSHibZx(F-%?&#7QnkB8Y?}l~^u2#$?7OGE8!Ol%~fAhSK!l zC`YHWLz#hOCc`v(IaOGaMa69NmRh|-2lhI<AZv)36LsmLSenpP8M-sGQX4HalOAK3 z^!R~z_1@CKS_Tj7rH~lP`Lg@IbR&h<#|fKziw@1r7ZtSbI@)XdchK!_D=2NC{|B>w z0&fDJ$K&yOd|t2bDIa<|{XU<+GZ+YT1_HrQ(6vyo`&j5$cd)0Yx3{O~L^K*b5o;RO z(b3Tr?23d!k-p>M<9*E+M-A)^5cY#OHbP)wfQK<6jM-m;R{`c&>+eT;aiZg2DQAih zz%dU2h}Ns8vGBV%@#5C>>vu_d^qKGzC=R0iBM1^0A|t{e4<6pz`F7{=3y&_>@WIt< zJJ@G`WI*lDtJTHF#SN7BIhsGOb$$5p7rr~+-6Q57D2EpKQRkIcj?hs#j6;Qp^oa^r z7QXeKy7u7mr+Z&TYirxoI&m5s>Gy(<dhzO1;HY62zqTEFpSbZ&zVgP`6Eip%@na*< z1F9i61p7m;ldVqqF#z4rsRgj_hqqh=YjtP$os?7Irt1&^RMA4~Z-pp}l)4b#M^+#1 zR@q;jA@Kh^0aBER?70AuvoEdh-Px^i*KW<-eT09od-bB@p4$wRf05g{*lVXgS^xZh kxa*gyi0gjS?PGPR+qt92xqj)2_I51xSANq5&k}a+Z}o>WZvX%Q diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.jpg b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.jpg deleted file mode 100644 index e8e62abb4496af86eac51f967156e35a1c2ad9f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmbtTZ)h837=Q0BNn@IJiR~aXgS_6pbYscol3vrC&C)j4YCmMwuHrxtua|3kr1!_W z>v}1!%RumpQ2ip-eb7$>KZ!V|FxdLR4+_c{h&H-`{h~0$vVwyu>-pZ9Kb@qd;sf{a zyw5$)@ArG&d(Pgpw?JgvlI8%IoIDNupk?-NAj~ZZ<qE)n2c?Gru(yaa3#O^D6r~sm zzNF5I2|<-9i`OVRk)*(I-qLuXEShjuoR^dwxqb6C38hkwe3>aGi&{Zkke*-B#q%rY zW`vcpkS&q<vvAmAEm@OAlZTePs2Hr3BVBM7#ZH<cp<7~>bL6PQ3NI9=U_sSI$RwD! zkfaA-CYzucdSHk?15-&lO(oM5osQEfHkoB<2G)&4Y<g*qo#rO$T<DY|>q9LsFDI7M z300q`=xjDiB~w%?6-O0uqoSC+6<3Ut4Fpa!1YOchNmZbO$j_=vW{yNk{~1Bnny_u} zYF}ZoczCHSI~U->8s@av(%Tl;n5k$YH7y$Ik}im-{G`*Yu?1b^O;w*!)y2jwPA#aW zYAmQ4EEHgWkryPzIiGSHibZx(F-%?&#7QnkB8Y?}l~^u2#$?7OGE8!Ol%~fAhSK!l zC`YHWLz#hOCc`v(IaOGaMa69NmRh|-2lhI<AZv)36LsmLSenpP8M-sGQX4HalOAK3 z^!R~z_1@CKS_Tj7rH~lP`Lg@IbR&h<#|fKziw@1r7ZtSbI@)XdchK!_D=2NC{|B>w z0&fDJ$K&yOd|t2bDIa<|{XU<+GZ+YT1_HrQ(6vyo`&j5$cd)0Yx3{O~L^K*b5o;RO z(b3Tr?23d!k-p>M<9*E+M-A)^5cY#OHbP)wfQK<6jM-m;R{`c&>+eT;aiZg2DQAih zz%dU2h}Ns8vGBV%@#5C>>vu_d^qKGzC=R0iBM1^0A|t{e4<6pz`F7{=3y&_>@WIt< zJJ@G`WI*lDtJTHF#SN7BIhsGOb$$5p7rr~+-6Q57D2EpKQRkIcj?hs#j6;Qp^oa^r z7QXeKy7u7mr+Z&TYirxoI&m5s>Gy(<dhzO1;HY62zqTEFpSbZ&zVgP`6Eip%@na*< z1F9i61p7m;ldVqqF#z4rsRgj_hqqh=YjtP$os?7Irt1&^RMA4~Z-pp}l)4b#M^+#1 zR@q;jA@Kh^0aBER?70AuvoEdh-Px^i*KW<-eT09od-bB@p4$wRf05g{*lVXgS^xZh kxa*gyi0gjS?PGPR+qt92xqj)2_I51xSANq5&k}a+Z}o>WZvX%Q diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background.png deleted file mode 100644 index e8e62abb4496af86eac51f967156e35a1c2ad9f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmbtTZ)h837=Q0BNn@IJiR~aXgS_6pbYscol3vrC&C)j4YCmMwuHrxtua|3kr1!_W z>v}1!%RumpQ2ip-eb7$>KZ!V|FxdLR4+_c{h&H-`{h~0$vVwyu>-pZ9Kb@qd;sf{a zyw5$)@ArG&d(Pgpw?JgvlI8%IoIDNupk?-NAj~ZZ<qE)n2c?Gru(yaa3#O^D6r~sm zzNF5I2|<-9i`OVRk)*(I-qLuXEShjuoR^dwxqb6C38hkwe3>aGi&{Zkke*-B#q%rY zW`vcpkS&q<vvAmAEm@OAlZTePs2Hr3BVBM7#ZH<cp<7~>bL6PQ3NI9=U_sSI$RwD! zkfaA-CYzucdSHk?15-&lO(oM5osQEfHkoB<2G)&4Y<g*qo#rO$T<DY|>q9LsFDI7M z300q`=xjDiB~w%?6-O0uqoSC+6<3Ut4Fpa!1YOchNmZbO$j_=vW{yNk{~1Bnny_u} zYF}ZoczCHSI~U->8s@av(%Tl;n5k$YH7y$Ik}im-{G`*Yu?1b^O;w*!)y2jwPA#aW zYAmQ4EEHgWkryPzIiGSHibZx(F-%?&#7QnkB8Y?}l~^u2#$?7OGE8!Ol%~fAhSK!l zC`YHWLz#hOCc`v(IaOGaMa69NmRh|-2lhI<AZv)36LsmLSenpP8M-sGQX4HalOAK3 z^!R~z_1@CKS_Tj7rH~lP`Lg@IbR&h<#|fKziw@1r7ZtSbI@)XdchK!_D=2NC{|B>w z0&fDJ$K&yOd|t2bDIa<|{XU<+GZ+YT1_HrQ(6vyo`&j5$cd)0Yx3{O~L^K*b5o;RO z(b3Tr?23d!k-p>M<9*E+M-A)^5cY#OHbP)wfQK<6jM-m;R{`c&>+eT;aiZg2DQAih zz%dU2h}Ns8vGBV%@#5C>>vu_d^qKGzC=R0iBM1^0A|t{e4<6pz`F7{=3y&_>@WIt< zJJ@G`WI*lDtJTHF#SN7BIhsGOb$$5p7rr~+-6Q57D2EpKQRkIcj?hs#j6;Qp^oa^r z7QXeKy7u7mr+Z&TYirxoI&m5s>Gy(<dhzO1;HY62zqTEFpSbZ&zVgP`6Eip%@na*< z1F9i61p7m;ldVqqF#z4rsRgj_hqqh=YjtP$os?7Irt1&^RMA4~Z-pp}l)4b#M^+#1 zR@q;jA@Kh^0aBER?70AuvoEdh-Px^i*KW<-eT09od-bB@p4$wRf05g{*lVXgS^xZh kxa*gyi0gjS?PGPR+qt92xqj)2_I51xSANq5&k}a+Z}o>WZvX%Q diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.jpg b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.jpg deleted file mode 100644 index 2ee50c42b5f60a657b96f7e985a2920fda67084c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2213 zcmb7E%Wm676dg)5Mcax))=ps90Xkr^NDE6OB{Q-JtEMA5uop@M*FcS~N|Q`XIDCMl zYuPIW$Rfz9pHO$zWtIWDs2BZ+J~j=yE!t0D?=X70QX&nY!Q7d9&OLMIP|2^!JG8vh za-JfzxA!?>QGX<VBVIo>PtFmAXxQFFD0!D%JC5T(6-6&98kT=#7fs(4TSg$tMM*@P zTdlw_PwW^U+0PuWCj9%;&jNO=n(&p<kQzbVK6Z95Li@{$#|P%ciCMLTtuOFqOKrJ< zYsUs|xzD{wZPkR7T!l5+76qK9#3wajn^eVzjV7-9p^cTIQZOZX9apMFS&`Q_<TYH9 z<gzH0MY&v%OR7{=Wd(PJ0M$b4sk*N}>ePa$CUh=!c6L@gD;NFnnJ8DQRZ%L5rBVSh z3emY28?AyD-R&~yc4UT55Ieqy38Qi3pT;!-l)k@$8}w*L_G%!p(fDwx>yiefv{Afo z_w|k>jt<TPTimxJ|1>mhNWV+Kfm#o3Blg1s-+$iiV)NLK{pi>aaJ`Q2Hw@G9Nc>p} zXf)J4FNzJ%wD<Iy02D>Xv7ndbhl*0(P^6u0S>9RSD9aDFb-7&KsH{tsiqggEzIp1} zUfji6eQb3smUzJppt5d<&bPMpDD+*N-dT0VYk4r1uY<M5YpIOIiXcWLFFWwk-7T;W zS@wJjLC^WN2X+s^*U3L<A$2RVuHgHjl0VQ(#LzT7Lo+io%q#=Hd6r?=`TX46{M=lg z%cq0OFWlsAF60*%mzEY6@2sw_-ubjQs9Y|0BY$I=<Ca%$@wZlb2a_(6E5x(t>r6XK z@hHPnS)NLMK~E3`qyO;}y_wwgE!gC)Wg*1#!#IE@zoUGX0`@GAw$NV^OJ^w5)-X5u zVxoNN$LWbDRIxIh+zDC9{i(M^^lP59WQTpx?aO`r!_7(0$<%zsKg46}QExBbGtN@q z477VNx;NAQ?lwi?HKJgE2=)h}6#Ty=Zx}LAVdP5;;WOId$fS-4=Fg9@4XK?bc}mq& z)M35{9i*Qb4X@E{?J#ZhEMb85!u9F)n@=e66hnL6WYm7c0)ljY7ihHId6aS;(gc^e z!oUu!UdJ4-Iq*w5fpegjobXZ`@KEy=$6lhYJucytys*w*a)c-K4ZyUv1_ziBkO@L^ h%KVTfUpK%Mtsu2V!k32rRz4PJ&3*>AgmTGm{{ibFtU&+( diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background.imageset/navigation_bar_background@2x.png deleted file mode 100644 index 2ee50c42b5f60a657b96f7e985a2920fda67084c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2213 zcmb7E%Wm676dg)5Mcax))=ps90Xkr^NDE6OB{Q-JtEMA5uop@M*FcS~N|Q`XIDCMl zYuPIW$Rfz9pHO$zWtIWDs2BZ+J~j=yE!t0D?=X70QX&nY!Q7d9&OLMIP|2^!JG8vh za-JfzxA!?>QGX<VBVIo>PtFmAXxQFFD0!D%JC5T(6-6&98kT=#7fs(4TSg$tMM*@P zTdlw_PwW^U+0PuWCj9%;&jNO=n(&p<kQzbVK6Z95Li@{$#|P%ciCMLTtuOFqOKrJ< zYsUs|xzD{wZPkR7T!l5+76qK9#3wajn^eVzjV7-9p^cTIQZOZX9apMFS&`Q_<TYH9 z<gzH0MY&v%OR7{=Wd(PJ0M$b4sk*N}>ePa$CUh=!c6L@gD;NFnnJ8DQRZ%L5rBVSh z3emY28?AyD-R&~yc4UT55Ieqy38Qi3pT;!-l)k@$8}w*L_G%!p(fDwx>yiefv{Afo z_w|k>jt<TPTimxJ|1>mhNWV+Kfm#o3Blg1s-+$iiV)NLK{pi>aaJ`Q2Hw@G9Nc>p} zXf)J4FNzJ%wD<Iy02D>Xv7ndbhl*0(P^6u0S>9RSD9aDFb-7&KsH{tsiqggEzIp1} zUfji6eQb3smUzJppt5d<&bPMpDD+*N-dT0VYk4r1uY<M5YpIOIiXcWLFFWwk-7T;W zS@wJjLC^WN2X+s^*U3L<A$2RVuHgHjl0VQ(#LzT7Lo+io%q#=Hd6r?=`TX46{M=lg z%cq0OFWlsAF60*%mzEY6@2sw_-ubjQs9Y|0BY$I=<Ca%$@wZlb2a_(6E5x(t>r6XK z@hHPnS)NLMK~E3`qyO;}y_wwgE!gC)Wg*1#!#IE@zoUGX0`@GAw$NV^OJ^w5)-X5u zVxoNN$LWbDRIxIh+zDC9{i(M^^lP59WQTpx?aO`r!_7(0$<%zsKg46}QExBbGtN@q z477VNx;NAQ?lwi?HKJgE2=)h}6#Ty=Zx}LAVdP5;;WOId$fS-4=Fg9@4XK?bc}mq& z)M35{9i*Qb4X@E{?J#ZhEMb85!u9F)n@=e66hnL6WYm7c0)ljY7ihHId6aS;(gc^e z!oUu!UdJ4-Iq*w5fpegjobXZ`@KEy=$6lhYJucytys*w*a)c-K4ZyUv1_ziBkO@L^ h%KVTfUpK%Mtsu2V!k32rRz4PJ&3*>AgmTGm{{ibFtU&+( diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/Contents.json deleted file mode 100644 index 64c77fd..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "navigation_background_64.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "navigation_background_64@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64.png deleted file mode 100644 index 67429e544862aefeb76f3c9654e0fbdf08f7aaab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14496 zcmaKTWmFv9)+X*waQEOe?ykWhxHdHI(6|TJ;O-WJyG!Hl?k))g4;o<d-nsXi`7w9u zN7deE?dREAtIk?g6{V&khmJyw0tE$yt{^Y10R;su{#O=9Lil^OJE<Z6dm#eL=z=w! zEWw^YR|_Z!kdv7OrGf*{%0j~e2=aCrvk-=Yf~B$ftP9pvRuVLKa$p1gW5ed<;QSX2 z1tl!z<qR~pvj9_?Sy<UPicnv6_EJ;YfJCTuc$7Jmouw?SZRCAiEi`>pKAZd4nG1lZ z#Y8EEy#)UfI9PyzlwJ<@j&6cpBGmul75ppzv&>FS`7aZ&oe1^+4oX*9jZ(_V)q;|T zjfd5o1HetmC%^{a0dVsJSSUF;09@=GT<icYRsg3Uhkzh}hw|SC^<QtUAWK0FY1x1K z`m2dhTZ6&Qg6!;`o}O%;Tx?FRR_p))0ReUnPIgXC*1s04Zr+Yypckv78_j<hq%GXc zU2UAfHcpO||1bj0oZP`8)PE!W-zhja{|~LB+rP{7w_xmEKxcLU8^=E>{l`#Q`TuX~ z;P5}zZeR_I{}b>3li2OEx3dMihJ~AxyQ}%%##z$*<H}i3%GCl0c5?mf<YfP!DymsK zft}o}ot!D9q$ocs1I=w5|Ir!$1yEKNRB&_y10BsR6r@F{|5C8o*nkA31tfX+BxPlJ zIAkOM02yw6E&#8DG=NKhpO2e^kB{d+SZOD7cLxhc@PDwN|6rv!IQ}d4pILBl{_9!V z!qvvZ0wn9|<UskaoCR(Edo0rbmG9qJ(0_|XQdZ`_V%h%&!~Rca|F2H}XX)?w{3HI) z-2PSmXYwr^|Bk!s-?{#|u6_pv#e=ILE%DiF{oG$7iFU$~W=~u36?PIC)R_5_Z+#3k z?^AG5gX9TSV%5#y04jT*EZNygO(i1QyP$=}8hn3SdA|*;{Auzt|NZs0H}LI2>`?5_ zv)EhQigp+Ij8I+gL9JL2&+Fk^UIN8jAYCB17aXWM3V-B2?)&<(Qv3d7@@|Orj=r+> z`{BLP$+b6UL+Jf6>ZRl7%+DPX2tMaA`t6U~vTjdbvTuB3qDK$Yln0)@@8N&CPMR-$ z0hi19CI^0VFQUSiuP5d`m;C|Zf!jNnNj@gGh9m9OmnULk>B+&1PE4M}u4;3t$zo#l zCVnb4g82sz`|Sv`m=!l?VO1e+YQxW0t<5u`IevkT)xs%amt;F3*Pv~?!yeU?qrH(I zwY~2L573WJy>FKkfp(tz9;6dPDt7fX?7dDEZF{4dBFjKu62pKpr|!$yPVt?Y$jdJe zV_tWH`CqM+F-iRYY+C``1Xn2|5cPbJt=xoTVlNSfjjt}tUW|obm@n+MP*WTDuP(Y8 zgTd+D8>r8@Z!8@F_&!J{-X1e?Vh`^tok_m1y)i8y*z=u4zT+42-oOWMvOJT+ZT$ta z+m-v6_{9VN%jlJ^4g9(t@7DYp9h1S|J(4rIZbC=v>H$!Ahn;6OL5<7ugH$0Nc`{ia zMiTQ<?(F<`yn9Q}aX4J1pLhwK>?fFJc=`f2-!3k%tcVVfnO^ctA4?uS{&5?4|24t8 zlplBh^6=4)+*floGk$ab1meX<b!zhGPih0u_29{J-RgIzIORx;{bqOlMwF`9>h8*3 zcApdX;md1#pI?m>hUBPZCe4&{O-_s$(U<MOjs6>qLp@NtiAw;+8hXOzT>#tmBy8(y zxR_mmQ<?|ogxh0}Wea~LqRg*z=1VS~+p&j{2w#*yjaOu}-*`XYjMyS}SaG5FU(cSn zh53jdDg_bG)h>RdntQ1X^s1WJ{MqciA={yp_wyt8)2(X%9^L!sxFW4|!OqDSV)fgX zy{3X4Qj80h7#ir7(_GC5VgmzC8M4NH)b)-wzCJw3Y@kOXdN#N`E4Ou#Q{WpT(o93M z1a=A=Y!e_J`>xh#f6DWY3*fg5ep<}+ct|>jyEW?>`PpGv@wAf^d%O@G-t~N$x;@~Z zi~pY8ZF@9td=lm(Hu}nI5XJjhdI#~%typ9)P5If+3}2`P!+M12=!Qy<^dSAci_09F zGy2K@l{jcTnUL8HD;4nY=0zhsVy2Ls*nZwvGSpxu{1C^0y*@^CNr)s0`l{N0^ZTjf zt?nHC!P{x~XsP=2{i%_|-quereg_Fc!X4cU7n)n^zHOJ9Hg0WUZ!@NObE(nd^6f{u z72S+~ggd9{7kB(kcr$*eJ3UfuGZ`Gv*SbGg{Lsr1PO$BJM=C-b<yM0R`13d@%#CL$ zLnn=GjhmW!yCB`8(#L!qWg?3l9sMo8^kamnX2Ua5Bot-g6-vahu44<X37}aj)_Nu@ zzX2B3jDKupRH-`?L*RBK%IS-D-5+PkttV99T=wvQ<z4o$x%y3+3F?oft|`c`7q9Xc zevB9e{OZ>r7aZT%cj)8OQBM)jI$A*J`gh$#Kg{uqFt#jzarqC6@I%7>U@C|UG#dQm z+xci)LZqvGGX#9+iEf54-Azo`M7G5>3unu*$6>k?hNUETiT;5evUc&hj-K*y-whxw z^19FXu-V#sZ)D#7`Xqgs)@!8>NcnlGoZa7Srq*^eNO=D}zk<RQp>H2QZ;)g3i(T5U z7~A2cfbN+J{uCTJQf%%KTr%GbW;A7-WwMPC6W}iG6}Pa-w&^u;Y?WP_lTZd1u+-#W zf^Q^+XL^k|Nguxj=w!H?g%i(jSP2^zDqj`B#{%OobtLHkbt6I(Mw*sm9IZGklp30V zCf;i+tVG+Dko_}BohI+-4Qj*a&5e>*GD(nvgT~NigBUZmJBR@dsmGe?2xm=k4ZsD= zK}#{MS>>P8wPauOp&y8124W#=L!a8sA=T5Zj3d{K+fjI!cc$Oj*<5m6$2dWX`)tVJ zyuZY6xADRD+RKcs9t@wp9GFgL2004{e=N~71Xo6%+6`&ET#ETsKMO@u8d@(4spSbE zp_AOC^x)WQZNlWOlbE`OXyLviKliZu8Bv}`o%vj!Zy+>Wy1+m)v+3ZkrGey+``R!g z9~{uG8>M*8=yUq+W0Q^X<4}@*vv`fm9@R;3O%$c*anC`^y-`K;c7Zhi7}WH1_c21Z zl9s}sP(mYEjv{$we$Sh6jy!;k4e>nS`lJ}ER^8ZPm5eKboP&udtN++#)(6CN#sH~f zTOe$W%@8q@&%|me>n~3DPAbSKVo>VNqxa?^Eh{<pUQVR{h|bU`BOoZOTS!26rbXEW z4@n7BjO-~Ikw8!lkX|WKQN){B?oR|)EMtUPaM=8U1MsPf3Ir1>A#MhTZCE%w9Mj}F z38*(PG^aeo*v*aKM<qAt43U_@Iq=kqnNayr2@oC?st--p8Q4Pk_;i(sW@wP|ofhPg zDLI}CVk=M1ItKhuPPFCT>|~UL%OGMVj3bi3*WRJnR~NTP^^|a{ced~4Lb7O951v|3 zy-PXrR08?q?aAo*ds{E3Eb^$jN&XjJUHZpBXWX^C>%^$s+k*$50E;-WUj}T_alcf{ z4kY|TdJr)$6xOlOosUe`=}|rz5`420aY3Zt^^!)IB<h3!pBn5JW!O6etzhPyG2sAa zh{&c#jLoreO^#t1AO1*?Lq=WMR_RNmLBIJAg_5tWr@zpTEZmd65#Mouu)i;*uBdrf z9Dih$nj$lj%g(?IQ}T)om^J?RQ`obYVgjYPPxJn(E!oUEYBWj1ioxtd(~?=H>41pb z>L;$1+2Wr7-{1_6y}f)KYYryLyK|y$-qJ)uZ=vIoJ=DkzK5M81e)eL}5=*+qFrjI; zl7e*=;f4+oGjM<!M)WvHz`wubwyG(tx^$7oUUmViUtAcWyJu+e#iB>ua4faNXOnTv z(#ZaoMU3OQrp8N|c<Pzp9`yzNk(w(?U5HXG51$GqIOL6@%77_8SQxPXDG$D4XCtp$ zmFP-F{Nc?;YoU~7DnKh_SdVCKh5YR5DYJe1NYXmSeN;O_94R=#aS@}ExNm<PkB<Dx zn~Ux+l&GU8ZIaYBsm-IBcdT4l@Q~GNL!dGiF4#x_Q4e-Fc}G{~Wlax~f#<Ec>*;{Q zQ^fVrWAb+ZR5cROfYO1Om<a})?YA);mloIz_5B~v4IGMa86(?3q~#ZJDnW>rL&)yD zL<p#1$DROo^eIi<i%pA8aIC7q+}gEa#j6EV{diP%+Mke^+wXRk8AD0#mRap9EHYE~ z52Of0Uv2A2TE8Zkfop-KpV$Om!qAAzxw<hTE4UV3uUV5KJ_zd{FlefPHe(OuUcZaj z3jx^Mqvt+IdEMv^lrr0w3qnTcj*!Z*A0mL+cg>TT^t8`qKgJoP788DFHFV6);;pxK zP+p!AJv6x25o?XChPr)rt7=$LqynU#8S2tkyL@IPZ(6d)u4egCPnL0V#!f|)W+4X~ zW$9XA+g`wF-%aP(wU=FJ+5aw8MsH!CBI{um6yEyTgNbLK*JYFl?DRgL295cczjwSe zLv^kG^dfl&`T3sb?%DCx^@uU;413Q(^Chj4!^aA7Qhn$HXoPAFFc=@BXqUV9Xg^Pd zD?Ud9v)Wu5wKt{jXP8Q78ZpCRC)lM>tU(oyWz;z?fs2Y>V}i?E`h%c$4X^5<o@2}$ z>pZ#ZWPFL;VT$l}fBI8l)sU?)M#7F=(yi&Hb0gO1MorZOkb*PBSgEmG#sEsLli(&M z7r7C3Z*beNnwrayy~bxqqC>*&+)g?<!qk+70a;dn+^4UxL}>D@if&305tdMT6&=^o zXjM5a^-OV(g8yZEW4bF=8YKNDY&DpL>E{F$Y3(>73@x(T4CmW8WgL(PYd-t(r~O_J zc76{G&VY)v9V=zA@L2&?@`*B~L|P|Z02JainJ^Zh^TRH~YSrcFF24*$Ax@2M527%I znYtXv`C=bVi#Kf<26aAOYbZsg8Vi>N`_xk5aYuy!?sU;hC@wVju^3mZ(NaY3`A~|& z2*=2~k#p6f3nlc<;BfCB0x+3o>-)ajQBJXTCG6*@JN4CC36!y;!9&{F_`Q_Z8*Og# zV!1a!)ax}tMA}42E4WyiqRI0KD2cfX1xgyICjo?@#pg^q!bA~@{(-Q!G%{9;@U`Y7 z*rs|~W=}?9%n(0KHnbm5aJK=iyB+1MgoKy-bDDN92K(l-2io#^ctvz*l&hNrcXbel zKB+(S#22!-UPV^tFlohryPAmT9uBW>vI9TWjI^oNm|C1OkSU2QT#Z|tIxR|O=NWlR zEQ(L7b*KC1>L-8sP}2tOxu_e{mfXsRmb;<=rK)r0&!;H2XW80%D4iFeo+HFl)R4n> z^^ggaSQZgrW;bjBR@v4r*+LK|1<Cq=esMJ=!or=IMFL|@Z0!5-GPYl~gILzHi&$fi z#Jt~aPFzLK9#F7D&_CO)UHYh^PfU!v*ar5FMd2K~#6zju(q>w|w=`8_qRTqV!%C@C z<Fum0F?HT4IzrOf<U<98OL4!I?6R=bgw&GGId{hAx}(W0Orz;A=IkX7=?`->|Drs- zj{mlLNlzb<Bt_q3UH#!l%u*eHC>z!mZYZ7q@Z+YoU^4^N{8l408H%Z|KT#A%5NTtJ z=9;si{Y>7JH?3HUZIzDa4ufm}vV&g9TEzE9w4(fMZY8gIJGz$m6icXSJu+~$FK*za zp=5FyqzTL&m7MNxan`G-;|%u`7TdG}g`0lNC|I}gAOzmYkg__#@y9yq$>2jC+jr~j z+Fs7Rr^2mh0;m{2E|v8>cM;HtdoSsZJatGJkoY>kWW}L)p()f&=JGVc(gk+{6*{O@ zDl{ij3E#!GT!9gt(4x)C%D3L0ZCEi8`=&6u3^oU2$vZlu8cp3ncb{hQ?@noJ3%j-q zoi=j=C$QUaP%R|FYL7o@keKQhLW}Q}xEcR>-<QGzCH5XLnqj?*kKO)I0ZJn`J#tMA z|J4Cz2;|PQwEp!O>v<^1`sWf#S)J$AFg4<?Sg+Mjsrd@WJ>+m|OiFai`W`=!_v^(# zvKDXkdG-NUEWzR*Sm1K>Y=LE6q1g;SO6)EcF^gI!?jg03-vo}}@UM7s{&U?u@K-q0 zW`uItIE=bD&OL77E9?@Z3iB`KX>qY~3<?mvKWp(OG=n=Kn2xJBrFk-xXxT8yb8YEr z7}ly;?b}Sl$J4lp>IT(iN^GARLe9ci*JgWvB$1ro9CIur+)<T~Fo_yhHZxLQ_dy?S zKLk&AP!65(EJ|tC8tHeq==XvR6V7L1^3Z*B<W1ukN!CERZ9Iw-c?bZH=E#_`U_E2a z5x*~|H#Ed63@@Y?sHUl!<%+9Cd)~*}Zh_+m>6)WnC2u*3jiRA(=>Z-eYkLIw*|CjP z%s`00HImh_tG>_V6lS4?H=r4CY>G>m)T2ibv(X|qDi#y#B6<nsH!B{R)fP_5o5Q26 zcQ(<R+pWNU+c9?%`;u<XCQVV4Se5+2jpSA^=wV{^!`=c&vo>u5IO<<ye_VR5eX<jz zY8^bll^IH-k9?<%ZXbYTMHa>uZyT|bQaD2g!<9#5q#pHS3X4i<_~f(o3J&k%{#1(d zglxo#6XWm3k$I!+kV8fr1Kz%HiyDS<*1~&6<nUxoHW}S{ir8N_U|Me2-|x1bx4uo9 zJ3NDe)VmMee>lT@$2o<?C_M0GJ-FZtNJC@xNq+sZ)v88?e1DA}q^yadA@%aWW9Z(U zrFnTtu==t`z$m0iMX9ahdF9ulThVVAya!$^2%l;fuH^Bp=YjpDvd=aKQ3>x<NcF1g zd~^VJ)J?K_=F<|bB}3u*@F>9fUisF(vxQ@RkFRzb`mz%p7B2>49u?Stdq3}a%1ROO zu&8G>xXSEacbMQ$*^up#@zo)`O?!Z3Tc1fsA{lOm`jj%QpES(bCe3Ih;kB@p@8x0d z*9k{UhVq;%Wkc;+J<4*WKAOyfTYsfxZJ+LZN-Xynt|WASlBwBBRoAhf+R|>S_L9wK z!GT}utVaY}M&Ds{KpgoF_VLK&{-B^v$l~tsM*Nd((|P#)UE72ejQgH?+$-ga!mxYl zhE$>5Mcpd5#{pa%a-6oyQ^}Z=91km`Hbx{3gsxvgh@U}XjXXT+JCj)55e6BGz(5NJ zQ+1jmj6{wV>~eD!KueDNLd=UtyB-EolL>-@bxW8ULxh?0T7V5A@kR<L-hpi@H@Mu{ zEjlWVbK#0WYt4Q)5tC8m56hjNb&YuG;sZNA9W@%E;V(ef>fHSUkr%1Zy4X)Pj9OWg zYK}PJ5dn>WlAo8f#EKp9812pQF)kPK=wCg@3TtiNxM*z{lf8A--Cmal6fwL@dX3R9 zKFhoCvz(1dwf>Me*lq{g47Iv1=nfHO_Aw<lREQ2pe_`Smpc(;E9D4_GF4Q~Fopl;i z&QExbb`e~eYA=&)4s|H!6Rlf(I!2$m@<4>^w%J981L+V{H7G#0r0F>AZQw<ad$`%x zPv%jztk^Ou{wia(Lg=L$*ztq14E`qF#m=yGE#TTrTK~0gL#%k^_T-{Wo@Wkir$C&I zvnA=nDY1zBZGi2v2~4qu;%J9bi|bXJuYq$y$>MJN$akHxR~Rjs=8lJi=7*vI#5Cm^ zp!VR4y7uv-`To#isypvM<`UG*N9}SZFcoUS*m6fwFkGDcBxR}ch2>fk|1@>|8S9z< zIg#2UK_*<p(&`iP3Rm1FNTy6=iBSfaa@N{?PmdkjGMLeHT*E|&@cBBVkDa)v1o`iV zv`*op^a)dO?kzU=fXl;CRVaMk5_MJd{a!Bh=v<YTqA7Q3a+(;3AIVM!eumympSK&; zL%Dk>u^tdwqRhPNW`;43LJ(_KH#1-j33`wUbjq@doQh$kyXvK}=U=$XW+3_!Tg82v z2Mez=ty`18<@Hb}?LB&MWZPF@u;8oEYj#O&lc;Cm!9+VjNX(8`+~_kh$%IDsvD+`W zK5+4{(0)~OOnRW<qEA_c5u@4a(TwAIC@9-Zo~cMA3L1mr080;=K6HU4mSo0kG6zs+ z?tJU96{4+-M1z42>cLF@W2w4HS2;3BCCdXHVa4E$Z+;FDC0c>%H5)~7K}rouVTtU1 zd9euQBAAl=&^Du~g}&^=#d3#O#`G#pgv|t9&Sot=W4irCS|<T^z9h`P_(s{5j?~qy z!@iGvHHp#urEUiQqdh&ggL5><fF}h<p+f!<1d5g4tacYvvc%G#Myufk8^PN0Q^A_a z<aWRTVqbV|;+HVB@3#ANRS88b$ykF1Xs?FLrOtCAzK)0Rg&z(YW~_;^ABhl_b|MYI z#g#>P<=bjzjz(3e#%O-<!FxVy6_`ba{Je>y6mE<vDS)jg`li<#_z2_to9f&e-@zX; za{A>~J5-;Y0hL`%Jv9z)-Ffh($7DHvz_w`KKBA(a2i==0XUO5xbyg-khPH|ayAfSY z43|M=hx>d=mYDh%G(-b#D7dXlTWc*#JJtbdMyhLubu%k{?4?-@i||sOB2_lL`h625 z>`yRQ#y*yv7u8A-5YZ)xxrvi$l%RVJts?01qSld<DZkCuI_S7hmcq3kId$z!eQa}j zaesG5nu3rwWhLVEvdCZ^%7;5uinA(5GQ9eU{19vVGoiu&+mD;rci3egcUB5cA*3UO zm9I&J_a(BG1j9ag%9eqNuNA$J*4W7yt5{y64eV#{CqWND3u9c7WgTeU415SHIP(yD zHL%d;?<`y)(~v~1DqGs)Vu{^MCwF36rVzMVCiQ!+!<wjw*h!z+m{xPa)XtS0_0j6K zYRxuR-Y3tWYW-==DDce8%y%zggI;WHo%1Qk61*-5ube5?=1vQCp-tyyU7ccCVlw)J zHg#;sx0p0kAh}(rgef}tg)f14#M&z4T|gl=cdCgis#DXvPv4W}V-K;gyzl<^3YF%1 zTA^LZa+H$Wu<F*O>h@IuR-<>@&Gjm;d!Xp&$PhUT%fb|qcnAsUH3c{sZ>>j*n!TyT zFv532Y#gEZA&sv3x^i=V%w_ERZ^k>L%+$i(JTq;i5@cIhf+i<;l8+%kQN)O?OfFIF z-RK<TM97h@?cQM~K^j^~JbWXF%G`61^0};A+7#UV;n{E_ovg(YC0wLqHv=tmD1K8B z(*?r|kfrE#pUcgGya&rLQ1%8Vl8$rtDbIS}RQnQenOsw$nx4I>@`cQEv!I{6isB<7 z{o<Y(9p2AQ=;k24$5xIOCLx7+$M-|#N`&gwTK7tX61!w~xs<73d#>MC@P^B1Xa@fE zKd3%Ry+ZUa1rq4H^eH3|fa<?HW~koHmTf14qjLN}9JTGI^MZN!_%k-Id7G7(4hl)p zHrtGGXURCYbJ!eN<tnJpwhGy%jDqzJoK-f<zp#7|W<0@qNvvuXKN<wE21GJ2&p7=T zr0wh4E0Nm1eylmV)jox4jU7YEWMELAVAR`H2<1klrfS2I`W7#2u4j4jxR^+FRBTdQ zm(C`pM@or)C%0jVSnQfZRmpboLzSaFE+Hd0B!^%bqAwXqVRp7E+yh$qbn4i6M!#|{ zdNn(UjVr9R>?XY7U0QZ|fmNGveE1=r$`n|~l!8r`(OPHRmwx}I@N2DW3OhsVr2%0W zHL<=r({$+3gT-+k`YlSnw7?E+xc-O6O$u23xk=!iDB(-l`ZSFl#ql?wf&aXU9Q+hj zYk$GIhIfTw*v6M_d2&jhZJ@D}+fzkV`FJ=2iFdA2nK_<|x=Rz+J?C+^lm~C;0LiRW za?9FTJA1QpB9+OpKJ=}aX%+7?{|(7<s)xqGq`gBbC}o{_yw;WUrtO0-1KJVg%Q1G^ zos_R9e$$nS#I9*wnC2x!X`hmwN@B7rb2hxW!67lkCfYQhLktXC!*@W7D4@qJD6M*T zCL``4fGrte@r^hPemX5>L;UXNpP^a5?dR5G^)!9^!VxUAQmaeuQ#L{(_Tdn7s9XJ# zhI2D4c5{T3uVvp2oxi<KFUKD(zOo&y;Ea%vsS>W#ht3Uh_O)vi+gh87R5b*(+&IJ~ zD`ktn3MbKQ)lFlRIjTxeQP=QH^4g!tZH}Pep}Y~-44MsROFE%p1~`e6YlRTihr7Xj z!$6ws-}0D;i|0ZA-l|g0Qk<<fu<OXx!kO!ep{#S-(C|qDJc+aY6WL?q85XhX64ub4 zsoF}nl`jj!TftKB>RQf5y#`lgY*H}78?K(+U^J7BgHRsh{<gMoKM!ss^Jt2(wOrzc z61JRiYORk=HKx6atkQna{FWt?_Cr~n*_~p;JcSJ6AG8By1SOuUwj56m_;_Lv1<#aG zWD~5^T4M#KaP&MC*}T6*p=%e%S^xG9XTx%_jydcL6JF2?oz%;8m3AiH#c3Ptl%ET& z^QI+9Q%fJtk0e{-C+m3+9_&=~Qrh2)a{)-b!N6)w2h&<TSXaJsRTNQU;@y%>dVki# zzFw=FqAY10=bg2%$n6EO(W}W;bzVXjfzRxdaFrB~{t3@v&Zw;ql9Ecx7S}EPQ%TWh zi{frpM`(B2{$)=LttM^#+}(%s2KT$Y3=@V1;Sm4X8rSYE4Izs9>A6V@o8n}PAso`Q zuMpkkFA<Qd+-Uuzxi(E_G$mbodIVn}e4}Ss@mz+!23e0yHr5_gad=uA+2XyDmk87h z0{;FNn84B3)4V9r2_9c-ruP0jKfBjixy7wdcAJFfy!@QJwKLXURQX2p%Su=(zZ&w< z{8P&_9!kKTgQuTL@{*4*#O65>#)O-zT{=YFwe;|ErGQ5*r{N#9Bv`}<`@X}a@iTo_ zP~>=U4;T7vYkg{3A$s?#61^h6P>@N1)R*(D%yZw=j+~9OO7#5!2FBOC<vA7I2sx3B z&$KJbR^aPwRi~U;VaH+cL(71A<QJ7I@iWIIZHyJDMiL<+QnQ3t$;XB;o-PYj04HvU ztvpSK@>)`ZibFZ~EsQNKfrk@=8~vo<3dH%N8Q)KEE2TE^TNbZF0Zj!x^B>|&3-(Tp zf#c^1vrDGAt+75idwaWNrAuBKp{{-Xhd2sqH>gp#5?oSaZ!~|=;W{PYhvePBNJDvh zLm@)Xp5T{993_MuRc6D!TsJ_j4KQ;F>$Z<(O0Sdiz9L+STIL~k@`|;V3Iw0pj(4Y3 zuXG-lROI-{ypw<LIt8N0t(SH^>-#x1m<Kn?)oeGimf={9PR5ba$DPenD>C>K8f<9h z3+l?*&s?Y_xSih;4H9QNOXtw^=n0;>bi?r0Tt3~J98N7hqfdg|_nj4~mk#&!);~^* zH(K!H`JiDMU(XAq4cOcMJn7Gds6-gh^IGNf2Qkr_9){a$zknoSO&#gEw1+j(5yACO zo7?7x=XJA0U*k~le62O;u@vCAcztu&vNegg7cbQsrM^!4fC86FYbfL<wDQGf=^sC^ z;q!)kBer%URXZ@y1zT&ja7MEVlz$5rtyYQz3M*P5Cw^Do*a(Nz3U=sxcuN~!Dn)*N z+wP;%XW6##8**PNCHNqVWeq3&_of|i202!X9Dzx+hg}wJFx(<ab#5(!h_Y0E3rJTA zTjRc|cqV)@v!2-kHJheLM;2xuDKXA_1^ucUEiex!Ly0IUHw(=*G}t~TZnz}fl48&( z4IWDu=Tja0pw#FWxvcwC;2F&VP|$O`Zd$^NX6L&b6cY6##Er1W>Zd4BM4;8v2s<RG zvcl<Xy)W6YOXmn7h)srBij$?wPnx;{85)W@YL@qqmTz(<%2HYYoPVkZ=6VF&wbO{2 zr#KqLD<Hkvs7qm}c7UZDgw`8>W;blGja?Zw%xnco5p_)}7|X}pyb(dBuGi?~L#&mO znxWGdGW(RrOy<@JNg4;2EJW&5!SFxmZ=Tpyy1ZV#8AP_XOmCIzc)OcEujpGTg)*%R zWWe|CWCNnQ0fXv6J^GNnX9J<bVH0=a0|99PgTixvp(kjAbVB%jXB}grzzv>UUdk9S z8Jy3MAek+4rh0qu&tFO3MW5C?3()_#1TBB`R$-${=K1YRHHhG@ihyR0b3bgf^qcom z%1~-vA-(So`rOHbwkII7A^Sis5Q|q%i(8>BvITeq&kLROaDG==vvsp#8LCbd{P3FJ z^1vHm*4(!hiSw;22;QBPd{TtOdVv1(cD`)OP3q5_O?<1FijL4w14&o`uTIefWnw^l z`;-c`a~9f#M978C$Ayw}O6k^H3=Ngl6TAb-m8S4R1y*i<Gq<eTh0a%__<o-1ee@r& zUqihFx+LA}`=B$OE?5+K(tjPkxAdDteM@_)LJ66+6u;1g8)lok3)!@LYsGM8<RDJo zafQ8J!eG6GYeQGLUo;Zem92>s^&Fs?o-+XeXp+rA3_wf31<`Wq;Xr{S^PU~r9$^_^ z4`op0*2~Q{J+Swl$O+0C2kH+08`MHJyjW)})G5B@?vLw$6M(&;r@OrRR*iodQb*`_ zkr;4v$z*5TZBzyd{K@26e#ngM2q}Nc?3yg9wH7Mp@4DTfk8LL*cm&lm42{7W*?vm2 zX015B`A7rBYKrDs*sCSM_S?A~9ZGLWEDX7a2iOiFAsi+cUfp6ItOELePh+i^D}+hE z13GJOSE>3=kmR>m`95`G(T9FnJEXJ3uNugy^o1)!z^5<NoztxBamyE?Czd_pxE+1x z<(hN#XbNrWE03vQjw*cANhMJwj6n8;0(Gt<nsNBDYGbrJp-FvjRP^k=cJ2jX*OGVD z*zZG+e^thx{AgN*>P}j2i<PQW@j=WA$k_HdUh`bC?e!!~8bVa{@j2mMrtw;go`x=o z4tzsXkO^v^M>G|jWH{f(mO{f(5-3>PP|M!bxwlr<Dw5bh)OoOVe;O1nVg6&mVIuH0 zv#3?XB=-X+1QBEWPb(j44rh|aw^X=@4Tt;S1rHh?F7d(1rPR^dQzFH0pS;Neg|S@g zM>i8J?S?En)`u9^JC5}MLe4Z-N<rsm?aOl94MN$WUEhq9?_cN%|19#0RL(2t?ulzU zDwGRK=F2S(p%T*f)43ug&xWElyT3}i^(auLZ(PfH*rPeYg^y2BtTif&p)#e&dlHO; zI1!>t8eO<>v%@J$xh?V{wsK3QH0Dn-!p|oQL!~~r7^_y+q=sWtMJDYOp9YYjcoId! zLx%^_AZALbra_TG)ovFfwO2PiSJ#lg-op-VCYpw#I(nyaxDaNn@y8)Iu}^`#oB0H& zM~Tf|e`JPsW(`W7sl!OE|HO>qK?5QBxP<2j7en=^-01IF9Q)^5(@s<y2Al-vI0oBj z+vD~b-R!<*P5?xZE~0h22-h>f{9lvQ^xh_k3{-gyCgK4BDj9R}3xz)#iD12+$`HZE z&)HF&&r0bv^$FpG>cyZmwB((Qbhl-*>SF_laBJptjlhJ}a+8^0#N-aR!un1^hJL6X zrc*~8A}pLY;LLq_<gt-!U&V3aN?8#b-s#1F^v7u0X5(3@qrv$O9<_ozwV6Yy_nW#n zmzYHWV3+d8f^4orkxMVDd}?VJVnO^7Oh>QrGd+e8M|<6zz#*?r8e?F&XnnN;+;D?n zhPYv@z3pjr&c;W3nKB!<fqBVO41v5=SB2P&bOf%{4m5wSgXUI=%a3!ZV~A0*U&l<Z z;Yg=Klk|zNHEHmBf0wDv*;!Lr{YXy;z$@PW466%}?^3~&Tj(0bUfMJZcR`0ST3j6) zDwuT5=o-xqSKnY$l*yMx-27=q5os(+AvD7TrR;KZ)cn9XdGJF0qHB+^QJ#d8HT9~7 z2502CD#iV^dz^|bT~8A*a2=_KCzUce2=NOQ?#IAqS7?wJLTEN<DP5Q(GKXUfh6<?` zRz7ylsioU$7S$U=VW+EuZ=|~IPeEu3JL$vDL^qD);QkhSp}&dHCCBNY#X+A5hblE- zdNH(wqSDdn=KXD~qHYI9f5-EFs-;lZ^mhlMf5o9iRu+16I=fl?_!S20u-D4P7p@$J zgaX_H;>j-4Cbjd-Qp7{|Pav?>#lZQQ)lWh5&&lp{g2Mq^UC}&KBTqjO$`MKbzMRr} zKgyh*NMdyh@*rE~to%*<NlaBQ>nrhbKqT){sQ+^8dWa54H5nC|9kUfMw%!h~RI*+H zPHK~^1lLUGf4U0ap|Px#E;vbXoBCYR61$X8YSI2_`n6x_rtIs;R&c1`u{d2BU9s30 zYENjNGrK?TZQZxdtEMrN?N-#vkNl+5N$;mQcEbsIg|`UaU^x3=-sU=?A#OQ>*etaC zefg2a^~-T*4w2YMR7?nGl#cS%FT0_zi$B8HhXR4Vc1esGtlf#t2q73Mw-r-p5~0o2 zEd9Kt$T|B}rz;UkG~x6)IfhdB=erJCQ}ghZA`=bZ-Tnfw+O`^=Ur7BXxox8+gu@P0 zw4U~;F(m$Z>Ne8|4y9!PQ3W$8VatB|&IP>pJ(2cY&lsF{=d)V9-~@Bclz%yA3CkDb z=g~e!0=wQMz}-nr^2%6b&;%clXdadr#+fQVDc{-@hh~A4c#;WOE@thwk)EM-n8NHc z2ZHmgxg-;4L@V`6h17<5!EX-u<%`(S@hvX}&Dce15%2<|Hf=ABR?COtS_BGlZHMA1 z(9A37-A7+9;Fp+2Pa1pdO97eqbb=`kg>uJi7YPz;t?@Ck5ar^a4m;<8>{)IDN15rE z(f};L0C#5vuuUzf3iyGP)mPN$VoP@igUI;#HZ4Jhgj@{CfBtLS0o9z5@9JIf=pZA@ zJYBFn4m$QCr4haAlS)0OXL5*OS(<iB8~%sWBf+xlM3_Ipl{YPH7|6nKU&}nd`voDL z|E?C{UVS;%$m3<Zd5r?9D3KD525HlH>#qCoH+MCkVH<Cu85DoEd+xTLs#;z;#v`j* zSdE%WfMoVV<&L`hM|`q+Z0gU{L@NF8;im~Fb@6UQ6X%ALUy~)08qqgblHLrw$!M11 z{<6VRKKmk*I1MRe4$V*ZK@KYIW===s*48+=%>-*06<=-(Ge3m?#?|FxZ&KqE;8q8! z#m6_YEfozR$rr^T{%rWJXlF-NCJQwHtke=QPqB5+@2#JdOYX}+V`L&Ikd5c;#4dL@ zcs#_>M7Jho7z2&ql>P88<SYFexy!8$B6g+-2q5QL1b8AvR=O57SQFtQ);b0@8H)z< z29_Z%jqlCfAI&25-YhR_uzV;Jsj<0iZ4PphJ0(@SFeiO!dLkn4<PPy<5LszN5A|*l z1sp&7D9GM+D56c3lx1*4U1*I$M<^bs4$sV!(PqjMVo<qarh&r2%nb@H*xvz&Y9b5s zjIepUAHlXdb*^zw6M7s34Q$9!$EQ^|akRdlMg$SKxfZ=i$TJOS^i5Upq134}*|+N= zv-_a&RxUzw$H20!E{=EM28cviJvM5Z=xGn1*hjkumwg+)e%l3nRLHeM^{QGP&%hu2 zj*?-ywyJc1kM_wY(tOh9M3XM)VXjDRUhB&cf!Xu*hJ$*H#C_EkwNwV3!TQ&!0(xJW zq#+Il{qrfitSO?ZN>GwhK_VXzA|TP62iLC7&?vmi(a_Lgl)RCr&C9J%9#_-$MR^i6 z1E^uWMvy_Y-rNc0<D2HadCf`5>(Cf3Yw)@E@Vg8ug481s2^qw9{Vb*t&?#y>3J=)2 zu++v5b_#hGoW}zOQ&>>>I;<s#py18`NfYo!Cqg877}d&B2*(4)Ry7cr+VT={sp|5Y z%eN09E#&^PaTd$aQqHFKu6c-wA$iBwX<A#qtT|<;YVWkDKi#?F0UPCAT*^JLa%9e@ zIXc(Sdg?ja8ll_n3Z(u%4ofH^M}Y&;N|+;x@6qJy4doJ-_4LE-osmERmQc2<&97Rx z<z$cSY;Kt2Cm#)-RG(=@<ZYmkP^<RubCv{i+>)8cw;`vYU1+xo$r&!4x5@7m&*2>X zW;`%uir)L4{9xM>7rEG_L&|9(;T6v88sz-l1Hh9n{ndLQDm(bHvq6jB^Lv}NlNPL6 z$n5+DvoYz8y3`t{fG-l36VmOK(PArhs%v#l`APU6L5XW#gnkMain~HKE(%Dr6H)92 zxY%y2NSGKWgLp&B@tbcX(Gw8m6;#-yDBCz)yC>-Ok+TSGU?>6rc0|ac=;R=9$b((@ z^oRJ)OB!i#O$qMYS6b@Wu4Sf>Z-awEB>4QwG&?Fsf;C$mNcz*3jFudoP-=KhSCazr zYo@JI#9e+)Tz=@eI5|<u1l&*A*f>F6O!OQ7(28d)4dSrf*_nRjVYdMFWZOp37_pl& zB5O%`nD<IGuM2%Wnyn0V7Q2HcCQ?tv<r0Ez!SQvB+a?o6B_9x}DYDOb%ecqIC9Q%@ zFO<kNm{UtmUgiPqV?wIJ$jO1{KvZifgwbfnmuqM)hKB5ie>BA->i};`mzXZJ-2-ab zR<FH`vMD0UK?pj--=Tqrbs8nqObd2r#V2C@QlX9pJQu(`%1x8jnAThU7>lPTVwT~( z$~!&@T!SjNG&bE1uwhF)vDS76=&A7iM#pTJ!WS2$DgIpPuh<ZYxm|kj;n7xe%ZGSw zCZBth%u3v3QI`V#)Z3hT5Ipf~?gYm)pxFu}Nzo9em>!`W>2jW%Oa-;CMHXD>FHbKr zJ<Wo=Zticy6oOnfjngx76G<u^zUbl!AoeBP_JjOnQ>PZmW?b+#md>Lwh%KWr6J4C3 z?w7yYMLERuC?pfw!_*Cvfe?>4-2=ixO4$YNmZuD{1^WZoU5ded!R@b2*P_Bz(i4z2 zRYH(P6v-akepGP74>NtUzR$sVPu?~Wyt}4ML}xbv4&;SV-Bk^YnPTXk05<3+K-}lR zI(-$WnVPKAj!(<nAB)MrQH+}F>y8H>=2rvKo<J_Rw2^hgJ6Y}k@zvl;RevQ(jB^;j zDUO~CLf{>&&eU<ioGn*c=jq7ge72@u9=axJu;L<TYF4&bmg3amJOBu2O%oD><8ZW^ ze&5k;m=(0S(xt{IJ7Be^v*2;=2IUQ9VnpahTCdpgSJub<;mYHjvaD8m{xE0kVv{Cc z4P5983=ghO&Q&RD6A8HYseEjMy|$fSv)r96#Y^$v;<XS@V0!jj-J^7_BQZxRiztoW z=Hi5~5E8BeX;&h&TafK4U9GL}KcZz~lVRF3z`F7X<=7vPmnozsW8WsAygcy4R9JEN zaKH2Y!oiL?L}Qp=SZ2`7eV{uVkOJ~R+2!-({w$n!aiA+>@sciELer2`lSPmyD8>0| zhse~Km%WUX!GURb=zH3~5mj9><J0}y+~+=`9yR3m!e}ri9f=t}?C|;<HI|`<3UJt4 z>|EKmOs@eQ4cIDjFhqUBt0ufnkRKoO^c+lOXm)2oqU(zhff%vNg9xH9(C4AKNuEJn z2c2(2i@c8UW#Jbtm>TGiz@?NBkN!+XT#(qzBHGPW6usPl{Y}6rxg3EwLtHf;al`Q9 z;DXBTV%<Cxm<_03Py8CQFjm3`b&~r0<K?bz($i-PpUP{EH2sB>O$8IiPP7w27?_2a z0bA5YuwJoO@CI@2A*AA(vaJ2yhw{s^ALrccd3;ZX9qM;i02b+q?=sy^b%i>z=`l*D z(wQa~|7J0*7o-reOVBWdZm$F;<GJ;#+VkVJ!$doyyi${J1iVvqK@A*~*k>QcEeXu+ zC|_Gj`sW2m>LCRTmHD4D3-bE6*Gg7&O10=8a3JPq6ir%rfg+YRi^_p(QpImJCl3JY zsG%4|V9cA*vz-mUxnoQ|%0bf!pA`m?_;%Q6im_5@OT5O;U0R~DP-am?eln1b<j7E` z$tICtSd<st;-G%==-`|^f4s8F*N3IYT-HsHk|AgI0}^3-Yd!Y?WMOCz5(U=_y4CCU zsA_F(!w$*Xw>{@bM9Q@%Vh+<q%vjyduh@x^zb38?`~(+Hbp$DGC`X3$bn&nu8@$$$ z8zL05m}4P69YxVI{ak*m+dE>Dm3Df>94?h(PEYZoAGY)0RK~AlKF&t;L()RLRBgQ& z`F0}GD~q}EV^2=)Rn*y#IGH|=N8p6ghem*)6^gBN5lZ=R|5Lr~P2L*Gc-D~?a62#z zD7KXIn}GLjw&j52o416&Frnz{#vt5|B;z#YKB2~-%BQ;L=7VnwUsg5-C?x%o$z9lR z?G2d_ec9&}Q}*w*{69!%ImMa`;qqH@^||G<(4@oeGFL3wW-%@gW&DaLLg(YHzX;&N zrRPkod7ybaIlaf8c(N&&6OVuW@JBSYIgqPj`&fwI?sLAod&WYVX3;jeUTei}#Eb0> z<z0_u>V&5FEuJ1@#OGlgZIMZkZDH}p=p7VUX;t(-f<Ut;P*|UggrI*{=JC>Q{Q<-h zmK|<&`o<!~&YcdT()-=Z%lo*h|NQ2OC?ZH8O#^KKp&>A*>{YNIcL4Hei?IT@EOGG7 zAV94k5{`p5K-2*!+DRY~5qV#X?Br6upH@C{Vz|r;BgZH(b1iD|X&nP-m_rk7r(y}q zrBG!^M>$QZOjUbXJLL7&s9i{&KO7gQ9%a1r3Ap^Rew<`h;gftI6#n%|*w~(0iXSxm z-A%8%z9&N>4*4?j*J3@+dSfCpOFsgXK3Ri<`3!Cxu5x|ABABY)HGl5G=j>(aVR=CH zmA;S?rV35Sh^q-up}+Y8?zh1oOBp-(`<djIs2oc#G+%SqeR3`}t85N>%n`~}vW(e{ zKayf$h1t*{NT+GmyZRVA#5yjlzJc;qcRO#_La=`Vd*Aj<?577p39h6$STmp7z~H{` zz_hF5hlKUVk}H(irU!yH0JDLcAmEOGcOaCwql&r6%@UX_q)0(Ml&B8A7n;Jm>E3*{ zV_JhTLwfR~c@CyW?T2SjE{+sx{Cpdfy;1im8`^DTP<CIos$Nu^p0EI8GW$RU$_&TH zuV&!7@CqW*J%U*`b|<?M4VyonN5U9H5q-2_{)|lWn7uS@@+9)-TcGCq%fmaCDHQ4K W*_NF~E5Sei3@XT|NY_Z3e)(UM>v)j> diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigation/navigation_background64.imageset/navigation_background_64@2x.png deleted file mode 100644 index 0b4cd50069c3bc8ba6a644e75e058f7f51f200c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47172 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/Contents.json deleted file mode 100644 index 92309c7..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "btn_navigationbar_back.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "btn_navigationbar_back@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back.png deleted file mode 100644 index 5b1b393337e3b27a1ee934a508cfd24a0e7dd0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1288 zcmV+j1^4=iP)<h;3K|Lk000e1NJLTq000XB000vR1^@s6Mk)8u000CeX+uL$Nkc;* zP;zf(X>4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z<T^KrsT&8|>9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~<wJLg{8L_J?=wVD}Kh?c9aozEndlcyGxo=u9<v(!ri)T`-EEs@L3 z5-!0N_s;9#9f}Cc?UC;OPWB_edW+oAi6T$HZWSGU8TbrQ%+zbPOBBBc`}k?M2Hf); z@Y6N~0;>X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX<gx$-tTA9oOBadXir_JPm2Y^4ct-PoO&C)tI zGolvqOIK@duBk!Vu9{g<3;i;gJ6?~-DQ&xz!jvD&4!U-s8Os(*#?k2}f30SEXA#=i z1-qUX+K`{!((H5w7<t$~ygD!D1{~X6)KX%$qrgY#L_{M_7A<1csY*MfP@XcB#Jxr~ zJS8&7goVS)VKE|4(h_Xlc{z{c$ApZs7riZ_QKdV_uW-M~u~<J-*#Z0?VzcZp8)p-w zus7J7><CN2I>8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#<s%v*srlI z{B2SKJ79W>mZ8e<cESmGBON_l0n;T7>u=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-D<EBz>aCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaE<h}6h3HHql{T;m+bPBU-O|^S1 z@dOw&4<!bj2G_<^#e}PL7FpY$lcrKO$i~?8Bd2y;oaL5^csibnCrF9!i%-PI;xhub zp1k;8_$IKX1NHus6EHeD;B72SCCD@4ojP$=Mf3`Eo6yZ&eg@wTqDiZE);7u&SJ|(s zuPF(9%D6IJ)klXF%`_Fy<tR3HxV^%Qqa?nAB97=m-uu2qcHInZ?ps8M|H3=#R%lzO z6MgLv^}ib0hVV{&<};#;2lcwW;^(7C<OY#bI<VjS9qCKr-E_Cnc!2j+&nHAXA2%BR zt~VMxUn2h&(Pi^LSpac(Y#S>R0001=Nkl<ZC>4#8F$#k~5Jf$L1hL3HQX5dP69Oqb zXo?gmYyv4fh^3^EkQD1%*uXT7f8ka0{_HY4StgzkLM^F?J$!d%q-zvmbY+AK{NM)p zrcAMe58U^}7GZ%09K4PV!W#xCJn@V$!wX7JtPrLo9yi5UKzc$vCs#~zg{XB-0qxEI ytLd&y!vwTBn}GI%CZO$x320kq0@^;CK)nJbGu|&e*U&ux0000<MNUMnLSTYNOJT|Y diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/navigationbar_back.imageset/btn_navigationbar_back@2x.png deleted file mode 100644 index 280f1e09f2e9b4b03bf2da32ab5c8db29bde3ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092 zcmaJ>TSyd97@nvsHa0|3%b<oaDyf~z?(Eo1uC~s&xzvcQ3oc!xapvfb>s*>SwyQ!n zx=Hj9K}AoZ(B+{(iXbym$cG-vdMS#amjYixh@PUNGwQBAY#nCiob&U4-~XNe|IZAy zw(Rx$s(cuR`Qyz}0?ifZ-MYF2eJ5XKuAylIY)Zj4s|#io2Vhan>I8V)P`W_^C|duq z7oZNqmT%FMDVUP?3#w(1iswV-3>%>_tgazvD{2Nnyc2ZmW`vk~@{GWBEkd-1Wm>jH zkk*?A9MCq<l2ivWDz6a@^>|%QKm-PW3Z651O;^Z8h<RQCtvxeE;PWmp6CoBvrQ}vz zv>bqk$xuM083yM#l3~Lf$Lz#|G!vv~^l$-&6~delti=}xfucEDmynQRi?PryLZl(I z1&YdMvt%|zT242`@I3Ev1cL$O5perWsN@2sTb*Z+fU7#X4Ry=JJw~O|>VpviDP1^% zVHapkcQH*UVN_1BDTbuIBjp`s`TwqlQSf$Q0xan*O6(^4Z9pY}YxOxQDqL5!7s?hy z2Pn{Tl9tt*&thxZf|i@MY+P*P@a?jq>ZWI?nMcU75I0?@m@0@%5dv|Lx~>Vd*jO9p zS&^nimSLLMC@1k^Xcy1Y(OQlb`8-y#)II~4Fpt%iu+l%VUNaariYx&~KMu5*V;T7T zp#{B|7M2O^qGK_{7c8!20jm|$;$ayYjelS%B!==z`&X&+Ce%OPve39_Q)qo)qJDQ! zW4|1X-$0k*QCx~9a~~$&ef965OHV0aMQHu-&{zM_$|>LN3(q(I_%;5y?04PWp27BN z!e1(`8Gifa<Lt#9xB4FY&h<PjZ#e0^|1>vv?~3{DZ2h4Xk@l+7*CspI%C#fBz3!%O z?`Vx(R<&l^C}UStoq2Fz^Wn26rqr4rC0X)%B6;-=-u^ROK06~`-#8w99k{%yadvEI z)AzLAc&X;#?>FaH8e<*1<>@i5A~WH)SMh^DJYue0R)URmOh28Q+2{Qhuy|98bieWF FnLol4V}}3$ diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/Contents.json deleted file mode 100644 index c5327f8..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "contact_tabbar_selected.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "contact_tabbar_selected@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected.png deleted file mode 100644 index 0d8c2ae485bf993d2d9739759373897f39f21b4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1869 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_contacts_selected.imageset/contact_tabbar_selected@2x.png deleted file mode 100644 index 75229d0d03d717fd29ab4f1285123f2fd0196d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3069 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 H_K5lqE&OUm diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/Contents.json deleted file mode 100644 index 81760fa..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "nav1.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "nav1@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1.png deleted file mode 100644 index 9878898c6562f348500f6c33c44e6ef69cf11afe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1558 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAnN?apKg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+AuIMD`$p8ltlRYSS9D@>Lr5I=vCwv0Ch7k*w|MTBqnF4mMA2p zrf25aD!t#mUr8Y|#a1cY)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1R-cG@$!U||WZfZ%Q zLPc&)Ua?h$trFN=D<B&rtgoa1R#K8}s|0aWgl~X?bAC~(f~lUVZnA-)iGsPMo}sCs ziG`t#f{}rtvA%(^zM-+Mp^=q=rIn$n0u(3#Z7WJivkG!?gW3h;*(zm}loVL$>z9|8 z>y;bp<rk&v8(Lag>Khp88yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1!rdk4d2A%%sdcZ z6Rg44*UB@mxFj(zIn~p}Rtac?US?*Bm9v|hv4N?fv8kb}p`oFxiKV5Po0EyNle43V znWedl0Zgw;esXDUYF-IUZwf-M2~NGBw2)f>wAm%KD6=dz#jPkmR{`v2t4!Q(0meHn zw?Oo!;C71<PQCg-$LND%7AdA-Lcrt$V#3ockONQosd>QUUIa|n`$GJeF)%Q7db&7< zRNR^~%`-zJP@pZ{s*rn~piRZaCmA0Uv@|4G3Oo6{J}5}obf_&7;$0DWN7S`PI<3e0 zm1lsU(Bx(oQ>T~@D~_pF2s%1)NHrHaD*qDw!+SolYF9d!UDdC%uh*^mzUtrgk10ly z-3i7Cc0P?8KZxFQP`BZzwy-~3U$~+<*5H!l`__*S4%+p~HacIJ|IRh8p?T>CUOs2> zHBC;I^B5`(xK2Hs)%25T^<t}={J9@wmN_!5bBaH;hj9n1cB0XpHthn%Go4HKv-cg= zsgUYUd!N90#Yr@V=hoz-8^Zav9WC0N{DFJc14)zJGmlKID(~Y<JIwiZ>eSc17OanB z)Ndzt1f4skcCfO7NB&{|G3^rDw^kc#cQC(K-gigqjmDP)RuxN)zP&Y{6C5ZqWAaM_ zo^vi0KP5ur`=^!eICg#c%-e6aH|N&O%zM{r5y5f&>c@4qTrYl2*J^4>H4^>jrPY+f zvPE0?^&9bX_0q;R>AyqXcpCk3-gJY}x%BSJAoJa;m+@}$H^?~s)mca|h1D-I+{12F z>3&NUi|AYL=V>YX&z9$&AX(p>n|a=e)8x==0d?WENw!OK!e*sSGQB))%EmI&c;}Ah zB-VS0esWm_&a*mu{q##UCZv8)aoQRF>ej23n|!jT9nMI<B-0r?eaeC}oElwMR~`KQ zN8|66{3UZVO%1}0=JlF-)~t?+{K=V}D426KV($^XXzlQ;vR4E@%)b(UO){y-c11=} z;RUAeiRBj-rY4nh`gu8VDetq1kKDc@>Upc|{;65pL|;V|TLh>3t(v-`-)FJe%kNDq z;<d~8wj5&2t?NB@|4@2q(L~{t+556~ZT_qBiy`}o!a|PjC49`Uruvzt=P%p(NBsc9 Xs{9UJkCP5xKqa-OtDnm{r-UW|Jmo`G diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder.imageset/nav1@2x.png deleted file mode 100644 index 31070a9cda8a6b67329b18bbf4967b8d70ee7024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2361 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 T?_q>xx}O;;g-&h>j92^z*SpeW diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/Contents.json deleted file mode 100644 index 7fb3b30..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "nav_active1.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "nav_active1@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1.png deleted file mode 100644 index 1bb446360541ea45179eea0662081ad7ded0ed75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAnN?apKg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+AuIMD`$p8ltlRYSS9D@>Lr5I=vCwv0Ch7k*w|MTBqnF4mMA2p zrf25aD!t#mUr8Y|#a1cY)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1R-cG@$!U||WZfZ%Q zLPc&)Ua?h$trFN=D<B&rtgoa1R#K8}s|0aWgl~X?bAC~(f~lUVZnA-)iGsPMo}sCs ziG`t#f{}rtvA%(^zM-+Mp^=q=rIn$n0u(3#Z7WJivkG!?gW3h;*(zm}loVL$>z9|8 z>y;bp<rk&v8(Lag>Khp88yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1!rdk4d2A%%sdcZ z6Rg44*UB@mxFj(zIn~p}Rtac?US?*Bm8+AXtGStlfvKUZnW3SpiKV5Po0EyNle43V znWedl0Zgw;esXDUYF-IUZwf*$FrIMe1*L`D0-((<sYRJ(sVQzn`MC;UKU-zubc?ww zPV=C8Q*gS)+zqE*eV}9XK{1OI(=Z`m@&Pg7=@!U=r~K4BU~(@4rfc1(-<KH}nCd-U z978H@&6(zzA>t^~W;{3Jk(~0A1?--EZ54rzj)F&2rKTvnQmhE@QJFZS;rBX6L1iwt zMUF1#_1XoWD;(sVq)}CDULmN+?ikaw+vQ93hyE$f-%HNg{CF{M)~l+otM2_?E!6pB zIurkFPVPjhDTmT4Sj!jazkBQ=rp|eT@pr<S%m4V)93O0vZC`94Viq9qFu}5>HTeQ} z_ClY&(+dTTIm*UdO0hd=b>HLGLk61`wTdSj=L9d5o_476#thv_&P4@6Y1LK+)y$_8 ztW8c`wAU`Wmn+8pG$Gotu8gV9QQf9ZuY70D+WJEbKIfA^SZ;`#_@{042Cv^g4EM(D zPHb^HcQi-;+`-xkZT7UURr3m!e=gLCdSh9!Gwm*u>IbG(M!!n53y(#p7%z}GSH)xJ zc+-4At#)8_u*dy%C6+giU4L=>tpvN+)6~#C+255`{o6Td!8N6oZT6G8G^ANIU6ZE% zJ@Yd^c-s4%`C81L#{zsrsuPyXtDgEQZTkbyY47hH-k^KE+|y-BZ`rG5ai1<Oy1&+N z^5&&~#Wak$w*E}K_AaMj>!xEyE1BbtS<K{VZgeu6Eq*CeDd%K{_sSn-M=e%dIZ}Pb zbHCJVXR9)cU)L6Qu4!PGdwFlc^Q{guQ=>Ku9kZVM%<E0nQWn#5Ej4GlzAn?&etBVi z${fvH1Npos8s>9_?z@G*@(nXPAarBZwz&mX{2SK<Uz5Ek_+kE)_$!i0MYd~hK6$Lb zS)N#bWnrrNEmjLvPR-9UdprWwr>^CGbnXY6=xwRcHI{Rh8mnJk72>`uaQ4@I8q;r| z60zWUJ$Kvn4~|n~9{PORm1pW-yjN)HS(W8s#%m^6Mcm?lb#Lk=Q_V~NxC|IL#Jltk TZ@A|KDxW=F{an^LB{Ts5?L<jV diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1@2x.png b/TeamTalk/IOSDuoduo/Images.xcassets/tabbar/tabBar_finder_selected.imageset/nav_active1@2x.png deleted file mode 100644 index 4da4720d3d24ba4d2b3add9063436e497d545f91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2331 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 diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/Contents.json b/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/Contents.json deleted file mode 100644 index 21faf95..0000000 --- a/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "avatar_50.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "avatar.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar.png b/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar.png deleted file mode 100644 index 04ca391788d06724b038114e346b3783823700f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3647 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 F^DlpSL|^~_ diff --git a/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar_50.png b/TeamTalk/IOSDuoduo/Images.xcassets/user_placeholder.imageset/avatar_50.png deleted file mode 100644 index 6a119c852143c8e06766f5969a465b1173ebdda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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 diff --git a/TeamTalk/IOSDuoduo/MD5.h b/TeamTalk/IOSDuoduo/MD5.h deleted file mode 100755 index 58c8d7c..0000000 --- a/TeamTalk/IOSDuoduo/MD5.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MD5.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> - - -@interface MD5 : NSObject { - -} - -+(NSString *) getMD5:(NSString *)originalString; - -+ (NSString *)getEncryptedURLForWebView:(NSString *)originalURL; -+(NSString*)fileMD5:(NSString*)path; -@end diff --git a/TeamTalk/IOSDuoduo/MD5.m b/TeamTalk/IOSDuoduo/MD5.m deleted file mode 100755 index 2aebdd9..0000000 --- a/TeamTalk/IOSDuoduo/MD5.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MD5.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "MD5.h" -#import <CommonCrypto/CommonDigest.h> - -@implementation MD5 - -+(NSString *) getMD5:(NSString *)originalString { - const char *cStr = [originalString UTF8String]; - unsigned char result[CC_MD5_DIGEST_LENGTH]; - CC_MD5( cStr, strlen(cStr), result ); - return [NSString stringWithFormat: - @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - result[0], result[1], result[2], result[3], result[4], - result[5], result[6], result[7], - result[8], result[9], result[10], result[11], result[12], - result[13], result[14], result[15] - ]; -} - - - - -+(NSString*)fileMD5:(NSString*)path -{ - NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path]; - if( handle== nil ) return nil; // file didnt exist - - CC_MD5_CTX md5; - - CC_MD5_Init(&md5); - - BOOL done = NO; - while(!done) - { - NSData* fileData = [handle readDataOfLength:256]; - CC_MD5_Update(&md5, [fileData bytes], [fileData length]); - if( [fileData length] == 0 ) done = YES; - } - unsigned char digest[CC_MD5_DIGEST_LENGTH]; - CC_MD5_Final(digest, &md5); - NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - digest[0], digest[1], - digest[2], digest[3], - digest[4], digest[5], - digest[6], digest[7], - digest[8], digest[9], - digest[10], digest[11], - digest[12], digest[13], - digest[14], digest[15]]; - return s; -} -@end diff --git a/TeamTalk/IOSDuoduo/Module/DDGroupModule.h b/TeamTalk/IOSDuoduo/Module/DDGroupModule.h deleted file mode 100644 index 6527ab8..0000000 --- a/TeamTalk/IOSDuoduo/Module/DDGroupModule.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// DDGroupModule.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDGroupEntity.h" -typedef void(^GetGroupInfoCompletion)(DDGroupEntity* group); -@interface DDGroupModule : NSObject -+ (instancetype)instance; -@property(assign)NSInteger recentGroupCount; -@property(strong) NSMutableDictionary* allGroups; //所有群列表,key:group id value:GroupEntity -@property(strong) NSMutableDictionary* allFixedGroup; //所有固定群列表 -@property(strong)NSMutableDictionary* recentlyGroup; --(DDGroupEntity*)getGroupByGId:(NSString*)gId; --(void)addGroup:(DDGroupEntity*)newGroup; -- (void)getGroupInfogroupID:(NSString*)groupID completion:(GetGroupInfoCompletion)completion; --(NSArray*)getAllGroups; --(void)addRecentlyGroup:(NSArray *)array; --(void)saveRecentLyGroup; -@end diff --git a/TeamTalk/IOSDuoduo/Module/DDGroupModule.m b/TeamTalk/IOSDuoduo/Module/DDGroupModule.m deleted file mode 100644 index c62fbd9..0000000 --- a/TeamTalk/IOSDuoduo/Module/DDGroupModule.m +++ /dev/null @@ -1,211 +0,0 @@ -// -// DDGroupModule.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDGroupModule.h" -#import "RuntimeStatus.h" -#import "DDGroupInfoAPI.h" -#import "DDReceiveGroupAddMemberAPI.h" -#import "DDRecentGroupAPI.h" -#import "DDDatabaseUtil.h" -#import "GroupAvatarImage.h" -#import "DDNotificationHelp.h" -@implementation DDGroupModule -- (instancetype)init -{ - self = [super init]; - if (self) { - self.allGroups = [NSMutableDictionary new]; - self.allFixedGroup = [NSMutableDictionary new]; - self.recentlyGroup = [NSMutableDictionary new]; - [[DDDatabaseUtil instance] loadGroupsCompletion:^(NSArray *contacts, NSError *error) { - [contacts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDGroupEntity *group = (DDGroupEntity *)obj; - if(group.objID) - { - [self.recentlyGroup setObject:group forKey:group.objID]; - } - }]; - [DDNotificationHelp postNotification:DDNotificationLoadLocalGroupFinish userInfo:nil object:nil]; - - }]; - [self registerAPI]; - } - return self; -} - -+ (instancetype)instance -{ - static DDGroupModule* group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - group = [[DDGroupModule alloc] init]; - - }); - return group; -} --(void)getGroupFromDB -{ - -} --(void)addGroup:(DDGroupEntity*)newGroup -{ - if (!newGroup) - { - return; - } - DDGroupEntity* group = newGroup; - if([self isContainGroup:newGroup.objID]) - { - group = [_allGroups valueForKey:newGroup.objID]; - [group copyContent:newGroup]; - } - [_allGroups setObject:group forKey:group.objID]; -// DDSessionModule* sessionModule = getDDSessionModule(); -// NSArray* recentleSession = [sessionModule recentlySessionIds]; -// if ([recentleSession containsObject:group.groupId] && -// ![sessionModule getSessionBySId:group.groupId]) -// { -// //针对最近联系人列表中出现的空白行的情况 -// SessionEntity* session = [[SessionEntity alloc] init]; -// session.sessionId = group.groupId; -// session.type = group.groupType + 1; -// session.lastSessionTime = group.groupUpdated; -// [sessionModule addSession:session]; -// -// [[NSNotificationCenter defaultCenter] postNotificationName:RELOAD_RECENT_ESSION_ROW object:group.groupId]; -// } - newGroup = nil; -} --(NSArray*)getAllGroups -{ - return [_allGroups allValues]; -} --(DDGroupEntity*)getGroupByGId:(NSString*)gId -{ - return [_allGroups valueForKey:gId]; -} --(NSArray*)getAllFixedGroups -{ - return [_allFixedGroup allValues]; -} - -- (void)getGroupInfogroupID:(NSString*)groupID completion:(GetGroupInfoCompletion)completion -{ - - DDGroupInfoAPI* groupInfo = [[DDGroupInfoAPI alloc] init]; - - [groupInfo requestWithObject:groupID Completion:^(id response, NSError *error) { - if (!error) - { - DDGroupEntity* group = (DDGroupEntity*)response; - if (group) - { - [self addGroup:group]; - } - completion(group); - } - }]; -} - --(BOOL)isContainGroup:(NSString*)gId -{ - return ([_allGroups valueForKey:gId] != nil); -} - -- (void)registerAPI -{ - //获取最近群 - - -// DDReceiveGroupAddMemberAPI* addmemberAPI = [[DDReceiveGroupAddMemberAPI alloc] init]; -// [addmemberAPI registerAPIInAPIScheduleReceiveData:^(id object, NSError *error) { -// if (!error) -// { -// -// DDGroupEntity* groupEntity = (DDGroupEntity*)object; -// if (!groupEntity) -// { -// return; -// } -// if ([self getGroupByGId:groupEntity.objID]) -// { -// //自己本身就在组中 -// -// } -// else -// { -// //自己被添加进组中 -// -// groupEntity.lastUpdateTime = [[NSDate date] timeIntervalSince1970]; -// [[DDGroupModule instance] addGroup:groupEntity]; -//// [self addGroup:groupEntity]; -//// DDSessionModule* sessionModule = getDDSessionModule(); -//// [sessionModule createGroupSession:groupEntity.groupId type:GROUP_TYPE_TEMPORARY]; -// [[NSNotificationCenter defaultCenter] postNotificationName:DDNotificationRecentContactsUpdate object:nil]; -// } -// } -// else -// { -// DDLog(@"error:%@",[error domain]); -// } -// }]; - -// DDReceiveGroupDeleteMemberAPI* deleteMemberAPI = [[DDReceiveGroupDeleteMemberAPI alloc] init]; -// [deleteMemberAPI registerAPIInAPIScheduleReceiveData:^(id object, NSError *error) { -// if (!error) -// { -// GroupEntity* groupEntity = (GroupEntity*)object; -// if (!groupEntity) -// { -// return; -// } -// DDUserlistModule* userModule = getDDUserlistModule(); -// if ([groupEntity.groupUserIds containsObject:userModule.myUserId]) -// { -// //别人被踢了 -// [[DDMainWindowController instance] updateCurrentChattingViewController]; -// } -// else -// { -// //自己被踢了 -// [self.recentlyGroupIds removeObject:groupEntity.groupId]; -// DDSessionModule* sessionModule = getDDSessionModule(); -// [sessionModule.recentlySessionIds removeObject:groupEntity.groupId]; -// DDMessageModule* messageModule = getDDMessageModule(); -// [messageModule popArrayMessage:groupEntity.groupId]; -// [NotificationHelp postNotification:notificationReloadTheRecentContacts userInfo:nil object:nil]; -// } -// } -// }]; -} --(void)addRecentlyGroup:(NSArray *)array -{ - [array enumerateObjectsUsingBlock:^(DDGroupEntity * obj, NSUInteger idx, BOOL *stop) { - if(obj.objID) - { - if (obj.isShield) { - [TheRuntime addToShielding:obj.objID]; - } - [self.recentlyGroup setObject:obj forKey:obj.objID]; - [self addGroup:obj]; - [[DDDatabaseUtil instance] updateRecentGroup:obj completion:^(NSError *error) { - - }]; - } - }]; - -} --(void)saveRecentLyGroup -{ - [[self.recentlyGroup allValues] enumerateObjectsUsingBlock:^(DDGroupEntity *obj, NSUInteger idx, BOOL *stop) { - [[DDDatabaseUtil instance] updateRecentGroup:obj completion:^(NSError *error) { - - }]; - }]; -} -@end diff --git a/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.h b/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.h deleted file mode 100644 index d84dc6a..0000000 --- a/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.h +++ /dev/null @@ -1,160 +0,0 @@ -// -// DDDatabaseUtil.h -// Duoduo -// -// Created by zuoye on 14-3-21. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "FMDB.h" -@class DDepartment; -@class DDMessageEntity; -@class DDGroupEntity; - -@class MessageEntity,DDUserEntity; - -@interface DDDatabaseUtil : NSObject - -//在数据库上的操作 -@property (nonatomic,readonly)dispatch_queue_t databaseMessageQueue; - - -+ (instancetype)instance; - -- (void)openCurrentUserDB; - -@end - -typedef void(^LoadMessageInSessionCompletion)(NSArray* messages,NSError* error); -typedef void(^MessageCountCompletion)(NSInteger count); -typedef void(^DeleteSessionCompletion)(BOOL success); -typedef void(^DDDBGetLastestMessageCompletion)(DDMessageEntity* message,NSError* error); -typedef void(^DDUpdateMessageCompletion)(BOOL result); -typedef void(^DDGetLastestCommodityMessageCompletion)(DDMessageEntity* message); - -@interface DDDatabaseUtil(Message) - -/** - * 在|databaseMessageQueue|执行查询操作,分页获取聊天记录 - * - * @param sessionID 会话ID - * @param pagecount 每页消息数 - * @param page 页数 - * @param completion 完成获取 - */ -- (void)loadMessageForSessionID:(NSString*)sessionID pageCount:(int)pagecount index:(NSInteger)index completion:(LoadMessageInSessionCompletion)completion; - -- (void)loadMessageForSessionID:(NSString*)sessionID afterMessage:(DDMessageEntity*)message completion:(LoadMessageInSessionCompletion)completion; - -/** - * 获取对应的Session的最新的自己发送的商品气泡 - * - * @param sessionID 会话ID - * @param completion 完成获取 - */ -- (void)getLasetCommodityTypeImageForSession:(NSString*)sessionID completion:(DDGetLastestCommodityMessageCompletion)completion; - -/** - * 在|databaseMessageQueue|执行查询操作,获取DB中 - * - * @param sessionID sessionID - * @param completion 完成获取最新的消息 - */ -- (void)getLastestMessageForSessionID:(NSString*)sessionID completion:(DDDBGetLastestMessageCompletion)completion; - -/** - * 在|databaseMessageQueue|执行查询操作,分页获取聊天记录 - * - * @param sessionID 会话ID - * @param completion 完成block - */ -- (void)getMessagesCountForSessionID:(NSString*)sessionID completion:(MessageCountCompletion)completion; - -/** - * 批量插入message,需要用户必须在线,避免插入离线时阅读的消息 - * - * @param messages message集合 - * @param success 插入成功 - * @param failure 插入失败 - */ -- (void)insertMessages:(NSArray*)messages - success:(void(^)())success - failure:(void(^)(NSString* errorDescripe))failure; - -/** - * 删除相应会话的所有消息 - * - * @param sessionID 会话 - * @param completion 完成删除 - */ -- (void)deleteMesagesForSession:(NSString*)sessionID completion:(DeleteSessionCompletion)completion; - -/** - * 更新数据库中的某条消息 - * - * @param message 更新后的消息 - * @param completion 完成更新 - */ -- (void)updateMessageForMessage:(DDMessageEntity*)message completion:(DDUpdateMessageCompletion)completion; -@end - -//----------------------------------------------------------------------------------------------- -//----------------------------------------------------------------------------------------------- - -typedef void(^LoadRecentContactsComplection)(NSArray* contacts,NSError* error); -typedef void(^LoadAllContactsComplection)(NSArray* contacts,NSError* error); -typedef void(^UpdateRecentContactsComplection)(NSError* error); -typedef void(^InsertsRecentContactsCOmplection)(NSError* error); - -@interface DDDatabaseUtil(Users) - -/** - * 加载本地数据库的最近联系人列表 - * - * @param completion 完成加载 - */ -- (void)loadContactsCompletion:(LoadRecentContactsComplection)completion; - -/** - * 更新本地数据库的最近联系人信息 - * - * @param completion 完成更新本地数据库 - */ -- (void)updateContacts:(NSArray*)users inDBCompletion:(UpdateRecentContactsComplection)completion; - -/** - * 更新本地数据库某个用户的信息 - * - * @param user 某个用户 - * @param completion 完成更新本地数据库 - */ -- (void)updateContact:(DDUserEntity*)user inDBCompletion:(UpdateRecentContactsComplection)completion; - -/** - * 插入本地数据库的最近联系人信息 - * - * @param users 最近联系人数组 - * @param completion 完成插入 - */ -- (void)insertUsers:(NSArray*)users completion:(InsertsRecentContactsCOmplection)completion; -/** - * 插入组织架构信息 - * - * @param departments 组织架构数组 - * @param completion 完成插入 - */ -- (void)insertDepartments:(NSArray*)departments completion:(InsertsRecentContactsCOmplection)completion; - -- (void)getDepartmentFromID:(NSString*)departmentID completion:(void(^)(DDepartment *department))completion; -- (void)insertAllUser:(NSArray*)users completion:(InsertsRecentContactsCOmplection)completion; - -- (void)getAllUsers:(LoadAllContactsComplection )completion; - -- (void)getUserFromID:(NSString*)userID completion:(void(^)(DDUserEntity *user))completion; - -- (void)updateRecentGroup:(DDGroupEntity *)group completion:(InsertsRecentContactsCOmplection)completion; - -- (void)loadGroupsCompletion:(LoadRecentContactsComplection)completion; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m b/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m deleted file mode 100644 index 60d22be..0000000 --- a/TeamTalk/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m +++ /dev/null @@ -1,763 +0,0 @@ -// DDDatabaseUtil.m -// Duoduo -// -// Created by zuoye on 14-3-21. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDDatabaseUtil.h" -#import "DDMessageEntity.h" -#import "DDUserEntity.h" -#import "DDUserModule.h" -#import "DDGroupEntity.h" -#import "NSString+DDPath.h" -#import "NSDictionary+Safe.h" -#import "DDepartment.h" -#define DB_FILE_NAME @"Duoduo.sqlite" -#define TABLE_MESSAGE @"message" -#define TABLE_RECENT_CONTACTS @"recentContacts" -#define TABLE_ALL_CONTACTS @"allContacts" -#define TABLE_DEPARTMENTS @"departments" -#define TABLE_RECENT_GROUPS @"recentGroups" -#define SQL_CREATE_MESSAGE [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (messageID text primary key,sessionId text,fromUserId text,toUserId text,content text, status integer, msgTime real, sessionType integer,messageContentType integer,messageType integer,info text,reserve1 integer,reserve2 text)",TABLE_MESSAGE] -#define SQL_CREATE_MESSAGE_INDEX [NSString stringWithFormat:@"CREATE INDEX sessionId on %@(sessionId)",TABLE_MESSAGE] -#define SQL_CREATE_RECENT_CONTACTS [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (ID text UNIQUE,Name text,Nick text,Avatar text, Role integer, updated real,reserve1 integer,reserve2 text)",TABLE_RECENT_CONTACTS] - -#define SQL_CREATE_DEPARTMENTS [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (ID text UNIQUE,parentID text,title text, description text,leader text, status integer,count integer)",TABLE_DEPARTMENTS] - -#define SQL_CREATE_ALL_CONTACTS [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (ID text UNIQUE,Name text,Nick text,Avatar text, Title text, Department text,DepartID text, Email text,Postion text,Role integer, JobNum integer,Telphone text,Sex integer,updated real)",TABLE_ALL_CONTACTS] - -#define SQL_CREATE_RECENT_GROUPS [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (ID text UNIQUE,Avatar text, GroupType integer, Name text,CreatID text,Users Text,LastMessage Text,updated real,isshield integer)",TABLE_RECENT_GROUPS] - -#define SQL_CREATE_CONTACTS_INDEX [NSString stringWithFormat:@"CREATE UNIQUE ID on %@(ID)",TABLE_ALL_CONTACTS] - - -@implementation DDDatabaseUtil -{ - FMDatabase* _database; - FMDatabaseQueue* _dataBaseQueue; -} -+ (instancetype)instance -{ - static DDDatabaseUtil* g_databaseUtil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_databaseUtil = [[DDDatabaseUtil alloc] init]; - [NSString stringWithFormat:@""]; - }); - return g_databaseUtil; -} - -- (id)init -{ - self = [super init]; - if (self) - { - //初始化数据库 - [self openCurrentUserDB]; - } - return self; -} - -- (void)openCurrentUserDB -{ - if (_database) - { - [_database close]; - _database = nil; - } - _dataBaseQueue = [FMDatabaseQueue databaseQueueWithPath:[DDDatabaseUtil dbFilePath]]; - _database = [FMDatabase databaseWithPath:[DDDatabaseUtil dbFilePath]]; - - if (![_database open]) - { - DDLog(@"打开数据库失败"); - } - else - { - - //创建 - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if (![_database tableExists:TABLE_MESSAGE]) - { - [self createTable:SQL_CREATE_MESSAGE]; - } - if (![_database tableExists:TABLE_RECENT_CONTACTS]) - { - [self createTable:SQL_CREATE_RECENT_CONTACTS]; - } - if (![_database tableExists:TABLE_DEPARTMENTS]) - { - [self createTable:SQL_CREATE_DEPARTMENTS]; - } - if (![_database tableExists:TABLE_ALL_CONTACTS]) { - [self createTable:SQL_CREATE_ALL_CONTACTS]; - } - if (![_database tableExists:SQL_CREATE_RECENT_GROUPS]) { - [self createTable:SQL_CREATE_RECENT_GROUPS]; - } - }]; - } -} - -+(NSString *)dbFilePath -{ - NSString* directorPath = [NSString userExclusiveDirection]; - - NSFileManager* fileManager = [NSFileManager defaultManager]; - - //改用户的db是否存在,若不存在则创建相应的DB目录 - BOOL isDirector = NO; - BOOL isExiting = [fileManager fileExistsAtPath:directorPath isDirectory:&isDirector]; - - if (!(isExiting && isDirector)) - { - BOOL createDirection = [fileManager createDirectoryAtPath:directorPath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - if (!createDirection) - { - DDLog(@"创建DB目录失败"); - } - } - - - NSString *dbPath = [directorPath stringByAppendingPathComponent:DB_FILE_NAME]; - return dbPath; -} - --(BOOL)createTable:(NSString *)sql //创建表 -{ - BOOL result = NO; - [_database setShouldCacheStatements:YES]; - NSString *tempSql = [NSString stringWithFormat:@"%@",sql]; - result = [_database executeUpdate:tempSql]; - [_database executeUpdate:SQL_CREATE_MESSAGE_INDEX]; - //BOOL dd =[_database executeUpdate:SQL_CREATE_CONTACTS_INDEX]; - - return result; -} --(BOOL)clearTable:(NSString *)tableName -{ - BOOL result = NO; - [_database setShouldCacheStatements:YES]; - NSString *tempSql = [NSString stringWithFormat:@"DELETE FROM %@",tableName]; - result = [_database executeUpdate:tempSql]; -// [_database executeUpdate:SQL_CREATE_MESSAGE_INDEX]; -// //BOOL dd =[_database executeUpdate:SQL_CREATE_CONTACTS_INDEX]; -// - return result; -} -- (DDMessageEntity*)messageFromResult:(FMResultSet*)resultSet -{ - - NSString* sessionID = [resultSet stringForColumn:@"sessionId"]; - NSString* fromUserId = [resultSet stringForColumn:@"fromUserId"]; - NSString* toUserId = [resultSet stringForColumn:@"toUserId"]; - NSString* content = [resultSet stringForColumn:@"content"]; - NSUInteger msgTime = [resultSet longForColumn:@"msgTime"]; - NSUInteger messageType = [resultSet intForColumn:@"messageType"]; - NSUInteger messageContentType = [resultSet intForColumn:@"messageContentType"]; - NSString * messageID = [resultSet stringForColumn:@"messageID"]; - NSUInteger messageState = [resultSet intForColumn:@"status"]; - DDMessageEntity* messageEntity = [[DDMessageEntity alloc] initWithMsgID:messageID - msgType:messageType - msgTime:msgTime - sessionID:sessionID - senderID:fromUserId - msgContent:content - toUserID:toUserId]; - messageEntity.state = messageState; - messageEntity.msgContentType = messageContentType; - NSString* infoString = [resultSet stringForColumn:@"info"]; - if (infoString) - { - NSData* infoData = [infoString dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary* info = [NSJSONSerialization JSONObjectWithData:infoData options:0 error:nil]; - NSMutableDictionary* mutalInfo = [NSMutableDictionary dictionaryWithDictionary:info]; - messageEntity.info = mutalInfo; - - } - return messageEntity; -} - -- (DDUserEntity*)userFromResult:(FMResultSet*)resultSet -{ - NSMutableDictionary *dic = [NSMutableDictionary new]; - [dic safeSetObject:[resultSet stringForColumn:@"Name"] forKey:@"name"]; - [dic safeSetObject:[resultSet stringForColumn:@"Nick"] forKey:@"nickName"]; - [dic safeSetObject:[resultSet stringForColumn:@"ID"] forKey:@"userId"]; - [dic safeSetObject:[resultSet stringForColumn:@"Department"] forKey:@"department"]; - [dic safeSetObject:[resultSet stringForColumn:@"Title"] forKey:@"title"]; - [dic safeSetObject:[resultSet stringForColumn:@"Postion"] forKey:@"position"]; - [dic safeSetObject:[NSNumber numberWithInt:[resultSet intForColumn:@"Sex"]] forKey:@"sex"]; - [dic safeSetObject:[NSNumber numberWithInt:[resultSet intForColumn:@"Role"]] forKey:@"roleStatus"]; - [dic safeSetObject:[resultSet stringForColumn:@"DepartID"] forKey:@"departId"]; - [dic safeSetObject:[resultSet stringForColumn:@"JobNum"] forKey:@"jobNum"]; - [dic safeSetObject:[resultSet stringForColumn:@"Telphone"] forKey:@"telphone"]; - [dic safeSetObject:[resultSet stringForColumn:@"Avatar"] forKey:@"avatar"]; - [dic safeSetObject:[resultSet stringForColumn:@"Email"] forKey:@"email"]; - [dic safeSetObject:@([resultSet longForColumn:@"updated"]) forKey:@"lastUpdateTime"]; - DDUserEntity* user = [DDUserEntity dicToUserEntity:dic]; - - return user; -} - --(DDGroupEntity *)groupFromResult:(FMResultSet *)resultSet -{ - NSMutableDictionary *dic = [NSMutableDictionary new]; - [dic safeSetObject:[resultSet stringForColumn:@"Name"] forKey:@"name"]; - [dic safeSetObject:[resultSet stringForColumn:@"ID"] forKey:@"groupId"]; - [dic safeSetObject:[resultSet stringForColumn:@"Avatar"] forKey:@"avatar"]; - [dic safeSetObject:[NSNumber numberWithInt:[resultSet intForColumn:@"GroupType"]] forKey:@"groupType"]; - [dic safeSetObject:@([resultSet longForColumn:@"updated"]) forKey:@"lastUpdateTime"]; - [dic safeSetObject:[resultSet stringForColumn:@"CreatID"] forKey:@"creatID"]; - [dic safeSetObject:[resultSet stringForColumn:@"Users"] forKey:@"Users"]; - [dic safeSetObject:[resultSet stringForColumn:@"LastMessage"] forKey:@"lastMessage"]; - [dic safeSetObject:[NSNumber numberWithInt:[resultSet intForColumn:@"isshield"]] forKey:@"isshield"]; - DDGroupEntity* group = [DDGroupEntity dicToGroupEntity:dic]; - - return group; -} - -- (DDepartment*)departmentFromResult:(FMResultSet*)resultSet -{ - - NSDictionary *dic = @{@"departID": [resultSet stringForColumn:@"ID"], - @"title":[resultSet stringForColumn:@"title"], - @"description":[resultSet stringForColumn:@"description"], - @"leader":[resultSet stringForColumn:@"leader"], - @"parentID":[resultSet stringForColumn:@"parentID"], - @"status":[NSNumber numberWithInt:[resultSet intForColumn:@"status"]], - @"count":[NSNumber numberWithInt:[resultSet intForColumn:@"count"]], - }; - DDepartment *deaprtment = [DDepartment departmentFromDic:dic]; - return deaprtment; -} -#pragma mark Message - -- (void)loadMessageForSessionID:(NSString*)sessionID pageCount:(int)pagecount index:(NSInteger)index completion:(LoadMessageInSessionCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSMutableArray* array = [[NSMutableArray alloc] init]; - if ([_database tableExists:TABLE_MESSAGE]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM message where sessionId=? ORDER BY msgTime DESC,messageID DESC limit ?,?"]; - FMResultSet* result = [_database executeQuery:sqlString,sessionID,[NSNumber numberWithInteger:index],[NSNumber numberWithInteger:pagecount]]; - while ([result next]) - { - DDMessageEntity* message = [self messageFromResult:result]; - [array addObject:message]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(array,nil); - }); - } - }]; -} - -- (void)loadMessageForSessionID:(NSString*)sessionID afterMessage:(DDMessageEntity*)message completion:(LoadMessageInSessionCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSMutableArray* array = [[NSMutableArray alloc] init]; - if ([_database tableExists:TABLE_MESSAGE]) - { - [_database setShouldCacheStatements:YES]; - NSString* sqlString = [NSString stringWithFormat:@"select * from %@ where sessionId = ? AND messageID >= ? order by msgTime DESC,rowid DESC",TABLE_MESSAGE]; - FMResultSet* result = [_database executeQuery:sqlString,sessionID,message.msgID]; - while ([result next]) - { - DDMessageEntity* message = [self messageFromResult:result]; - [array addObject:message]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(array,nil); - }); - } - }]; -} - -- (void)getLasetCommodityTypeImageForSession:(NSString*)sessionID completion:(DDGetLastestCommodityMessageCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_MESSAGE]) - { - [_database setShouldCacheStatements:YES]; - NSString* sqlString = [NSString stringWithFormat:@"SELECT * from %@ where sessionId=? AND messageType = ? ORDER BY msgTime DESC,rowid DESC limit 0,1",TABLE_MESSAGE]; - FMResultSet* result = [_database executeQuery:sqlString,sessionID,@(4)]; - DDMessageEntity* message = nil; - while ([result next]) - { - message = [self messageFromResult:result]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(message); - }); - } - }]; -} - -- (void)getLastestMessageForSessionID:(NSString*)sessionID completion:(DDDBGetLastestMessageCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_MESSAGE]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@ where sessionId=? ORDER BY msgTime DESC,rowid DESC limit 0,1",TABLE_MESSAGE]; - - FMResultSet* result = [_database executeQuery:sqlString,sessionID]; - DDMessageEntity* message = nil; - while ([result next]) - { - message = [self messageFromResult:result]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(message,nil); - }); - break; - } - } - }]; -} - - - -- (void)getMessagesCountForSessionID:(NSString*)sessionID completion:(MessageCountCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_MESSAGE]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT COUNT(*) FROM %@ where sessionId=?",TABLE_MESSAGE]; - - FMResultSet* result = [_database executeQuery:sqlString,sessionID]; - int count = 0; - while ([result next]) - { - count = [result intForColumnIndex:0]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(count); - }); - } - }]; -} - -- (void)insertMessages:(NSArray*)messages - success:(void(^)())success - failure:(void(^)(NSString* errorDescripe))failure -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - [messages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDMessageEntity* message = (DDMessageEntity*)obj; - NSString* sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)",TABLE_MESSAGE]; - NSData* infoJsonData = [NSJSONSerialization dataWithJSONObject:message.info options:NSJSONWritingPrettyPrinted error:nil]; - NSString* json = [[NSString alloc] initWithData:infoJsonData encoding:NSUTF8StringEncoding]; - BOOL result = [_database executeUpdate:sql,message.msgID,message.sessionId,message.senderId,message.toUserID,message.msgContent,@(message.state),@(message.msgTime),@(1),@(message.msgContentType),@(message.msgType),json,@(0),@""]; - - if (!result) - { - isRollBack = YES; - *stop = YES; - } - }]; - } - @catch (NSException *exception) { - [_database rollback]; - failure(@"插入数据失败"); - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - failure(@"插入数据失败"); - } - else - { - [_database commit]; - success(); - } - } - }]; -} - -- (void)deleteMesagesForSession:(NSString*)sessionID completion:(DeleteSessionCompletion)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSString* sql = @"DELETE FROM message WHERE sessionId = ?"; - BOOL result = [_database executeUpdate:sql,sessionID]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(result); - }); - }]; -} - -- (void)updateMessageForMessage:(DDMessageEntity*)message completion:(DDUpdateMessageCompletion)completion -{ - //(messageID integer,sessionId text,fromUserId text,toUserId text,content text, status integer, msgTime real, sessionType integer,messageType integer,reserve1 integer,reserve2 text) - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSString* sql = [NSString stringWithFormat:@"UPDATE %@ set sessionId = ? , fromUserId = ? , toUserId = ? , content = ? , status = ? , msgTime = ? , sessionType = ? , messageType = ? ,messageContentType = ? , info = ? where messageID = ?",TABLE_MESSAGE]; - NSData* infoJsonData = [NSJSONSerialization dataWithJSONObject:message.info options:NSJSONWritingPrettyPrinted error:nil]; - NSString* json = [[NSString alloc] initWithData:infoJsonData encoding:NSUTF8StringEncoding]; - BOOL result = [_database executeUpdate:sql,message.sessionId,message.senderId,message.toUserID,message.msgContent,@(message.state),@(message.msgTime),@(1),@(message.msgType),@(message.msgContentType),json,message.msgID]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(result); - }); - }]; -} - -#pragma mark - Users -- (void)loadContactsCompletion:(LoadRecentContactsComplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSMutableArray* array = [[NSMutableArray alloc] init]; - if ([_database tableExists:TABLE_RECENT_CONTACTS]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@",TABLE_RECENT_CONTACTS]; - FMResultSet* result = [_database executeQuery:sqlString]; - while ([result next]) - { - DDUserEntity* user = [self userFromResult:result]; - [array addObject:user]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(array,nil); - }); - } - }]; -} - -- (void)updateContacts:(NSArray*)users inDBCompletion:(UpdateRecentContactsComplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSString* sql = [NSString stringWithFormat:@"DELETE FROM %@",TABLE_RECENT_CONTACTS]; - BOOL result = [_database executeUpdate:sql]; - if (result) - { - //删除原先数据成功,添加新数据 - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - [users enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity* user = (DDUserEntity*)obj; - NSString* sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ VALUES(?,?,?,?,?,?,?,?)",TABLE_RECENT_CONTACTS]; - //ID,Name,Nick,Avatar,Role,updated,reserve1,reserve2 - BOOL result = [_database executeUpdate:sql,user.objID,user.name,user.nick,user.avatar,@(user.userRole),@(user.lastUpdateTime),@(0),@""]; - if (!result) - { - isRollBack = YES; - *stop = YES; - } - }]; - } - @catch (NSException *exception) { - [_database rollback]; - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - NSError* error = [NSError errorWithDomain:@"插入最近联系人用户失败" code:0 userInfo:nil]; - completion(error); - } - else - { - [_database commit]; - completion(nil); - } - } - } - else - { - dispatch_async(dispatch_get_main_queue(), ^{ - NSError* error = [NSError errorWithDomain:@"清除数据失败" code:0 userInfo:nil]; - completion(error); - }); - } - - }]; -} - -- (void)updateContact:(DDUserEntity*)user inDBCompletion:(UpdateRecentContactsComplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - - //#define SQL_CREATE_RECENT_CONTACTS [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (ID text,Name text,Nick text,Avatar text, Role integer, updated real,reserve1 integer,reserve2 text)",TABLE_RECENT_CONTACTS] - - NSString* sql = [NSString stringWithFormat:@"UPDATE %@ set Name = ? , Nick = ? , Avatar = ? , Role = ? , updated = ? , reserve1 = ? , reserve2 = ?where ID = ?",TABLE_RECENT_CONTACTS]; - - BOOL result = [_database executeUpdate:sql,user.name,user.nick,user.avatar,@(user.userRole),@(user.lastUpdateTime),@(1),@(1),user.objID]; - if (result) - { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(nil); - }); - } - else - { - dispatch_async(dispatch_get_main_queue(), ^{ - NSError* error = [NSError errorWithDomain:@"更新数据失败" code:0 userInfo:nil]; - completion(error); - }); - } - - }]; -} - -- (void)insertUsers:(NSArray*)users completion:(InsertsRecentContactsCOmplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - [users enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity* user = (DDUserEntity*)obj; - NSString* sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ VALUES(?,?,?,?,?,?,?,?)",TABLE_RECENT_CONTACTS]; - //ID,Name,Nick,Avatar,Role,updated,reserve1,reserve2 - BOOL result = [_database executeUpdate:sql,user.objID,user.name,user.nick,user.avatar,@(user.userRole),@(user.lastUpdateTime),@(0),@""]; - if (!result) - { - isRollBack = YES; - *stop = YES; - } - }]; - } - @catch (NSException *exception) { - [_database rollback]; - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - NSError* error = [NSError errorWithDomain:@"插入最近联系人用户失败" code:0 userInfo:nil]; - completion(error); - } - else - { - [_database commit]; - completion(nil); - } - } - }]; -} -- (void)insertDepartments:(NSArray*)departments completion:(InsertsRecentContactsCOmplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - [departments enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDepartment* department = [DDepartment departmentFromDic:obj]; - NSString* sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ VALUES(?,?,?,?,?,?,?)",TABLE_DEPARTMENTS]; - //ID,Name,Nick,Avatar,Role,updated,reserve1,reserve2 - BOOL result = [_database executeUpdate:sql,department.ID,department.parentID,department.title,department.description,department.leader,@(department.status),@(department.count)]; - if (!result) - { - isRollBack = YES; - *stop = YES; - } - }]; - } - @catch (NSException *exception) { - [_database rollback]; - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - NSError* error = [NSError errorWithDomain:@"批量插入部门信息失败" code:0 userInfo:nil]; - completion(error); - } - else - { - [_database commit]; - completion(nil); - } - } - }]; -} -- (void)getDepartmentFromID:(NSString*)departmentID completion:(void(^)(DDepartment *department))completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_DEPARTMENTS]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@ where ID=?",TABLE_DEPARTMENTS]; - - FMResultSet* result = [_database executeQuery:sqlString,departmentID]; - DDepartment* department = nil; - while ([result next]) - { - department = [self departmentFromResult:result]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(department); - }); - } - }]; -} - -- (void)insertAllUser:(NSArray*)users completion:(InsertsRecentContactsCOmplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - if ([self clearTable:TABLE_ALL_CONTACTS]) { - [users enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity* user = (DDUserEntity *)obj; - - NSString* sql = [NSString stringWithFormat:@"REPLACE INTO %@ VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)",TABLE_ALL_CONTACTS]; - //ID,Name,Nick,Avatar,Role,updated,reserve1,reserve2 - BOOL result = [_database executeUpdate:sql,user.objID,user.name,user.nick,user.avatar,user.title,user.department,user.departId,user.email,user.position,@(user.roleStatus),@(user.jobNum),user.telphone,@(user.sex),user.lastUpdateTime]; - - if (!result) - { - isRollBack = YES; - *stop = YES; - } - - }]; - } - } - @catch (NSException *exception) { - [_database rollback]; - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - NSError* error = [NSError errorWithDomain:@"批量插入全部用户信息失败" code:0 userInfo:nil]; - completion(error); - } - else - { - [_database commit]; - completion(nil); - } - } - }]; -} - -- (void)getAllUsers:(LoadAllContactsComplection )completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_ALL_CONTACTS]) - { - [_database setShouldCacheStatements:YES]; - NSMutableArray* array = [[NSMutableArray alloc] init]; - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@ ",TABLE_ALL_CONTACTS]; - FMResultSet* result = [_database executeQuery:sqlString]; - DDUserEntity* user = nil; - while ([result next]) - { - user = [self userFromResult:result]; - [array addObject:user]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(array,nil); - }); - } - }]; -} - -- (void)getUserFromID:(NSString*)userID completion:(void(^)(DDUserEntity *user))completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - if ([_database tableExists:TABLE_ALL_CONTACTS]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@ where ID= ?",TABLE_ALL_CONTACTS]; - FMResultSet* result = [_database executeQuery:sqlString,userID]; - DDUserEntity* user = nil; - while ([result next]) - { - user = [self userFromResult:result]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(user); - }); - } - }]; -} - - -- (void)loadGroupsCompletion:(LoadRecentContactsComplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - NSMutableArray* array = [[NSMutableArray alloc] init]; - if ([_database tableExists:TABLE_RECENT_GROUPS]) - { - [_database setShouldCacheStatements:YES]; - - NSString* sqlString = [NSString stringWithFormat:@"SELECT * FROM %@",TABLE_RECENT_GROUPS]; - FMResultSet* result = [_database executeQuery:sqlString]; - while ([result next]) - { - DDGroupEntity* group = [self groupFromResult:result]; - [array addObject:group]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(array,nil); - }); - } - }]; -} - -- (void)updateRecentGroup:(DDGroupEntity *)group completion:(InsertsRecentContactsCOmplection)completion -{ - [_dataBaseQueue inDatabase:^(FMDatabase *db) { - [_database beginTransaction]; - __block BOOL isRollBack = NO; - @try { - - - NSString* sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ VALUES(?,?,?,?,?,?,?,?,?)",TABLE_RECENT_GROUPS]; - //ID Avatar GroupType Name CreatID Users LastMessage - NSString *users = @""; - if ([group.groupUserIds count]>0) { - users=[group.groupUserIds componentsJoinedByString:@"-"]; - } - BOOL result = [_database executeUpdate:sql,group.objID,group.avatar,@(group.groupType),group.name,group.groupCreatorId,users,group.lastMsg,@(group.lastUpdateTime),@(group.isShield)]; - if (!result) - { - isRollBack = YES; - } - - } - @catch (NSException *exception) { - [_database rollback]; - } - @finally { - if (isRollBack) - { - [_database rollback]; - DDLog(@"insert to database failure content"); - NSError* error = [NSError errorWithDomain:@"插入最近群失败" code:0 userInfo:nil]; - completion(error); - } - else - { - [_database commit]; - completion(nil); - } - } - }]; -} -@end diff --git a/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.h b/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.h deleted file mode 100644 index 23e755d..0000000 --- a/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDAFClient.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "AFNetworking.h" -@interface DDAFClient : NSObject -+(void) startRequestFor:(NSURL *) url success:(void(^)(id JSON))success failure:(void(^)(NSError* err)) failure; -+(void) jsonFormPOSTRequest:(NSString *)url param:(NSDictionary *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure; -+(void) jsonFormRequest:(NSString *)url param:(NSDictionary *)param fromBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(id))success failure:(void (^)(NSError *))failure; -@end -#define BLOCK_SAFE_RUN(block, ...) block ? block(__VA_ARGS__) : nil; diff --git a/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.m b/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.m deleted file mode 100644 index d00d1a0..0000000 --- a/TeamTalk/IOSDuoduo/Module/Http/DDAFClient.m +++ /dev/null @@ -1,111 +0,0 @@ -// -// DDAFClient.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDAFClient.h" -#import "std.h" -#import "NSDictionary+Safe.h" -@implementation DDAFClient -static NSString* const DD_URL_BASE = @"http://www.mogujie.com/"; -//+(void) startRequestFor:(NSURL *) url success:(void(^)(id JSON))success failure:(void(^)(NSError* err)) failure -//{ -// AFHTTPRequestOperation* request = [self jsonRequestWithUrl:url success:success failure:failure]; -// [request start]; -// -//} -//+(id) jsonRequestWithUrl:(NSURL *)url -// success:(void (^)(id))success -// failure:(void (^)(NSError *))failure -//{ -// -// NSURLRequest * urlReq = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10]; -// AFJSONRequestOperation * request = -// [AFJSONRequestOperation JSONRequestOperationWithRequest:urlReq -// -// success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { -// -// [self handleRequest:urlReq respond:JSON success:success failure:failure]; -// -// } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { -// [self handleFailRequest:request error:error failure:failure]; -// }]; -// -// return request; -// -//} -//+(void) handleFailRequest:(NSURLRequest *)request error:(NSError*)err failure:(void (^)(NSError *))failure{ -// if([err.domain isEqualToString:NSURLErrorDomain]) -// err = [NSError errorWithDomain:@"没有网络连接。" code:-100 userInfo:nil]; -// BLOCK_SAFE_RUN(failure,err); -//} -+(void) handleRequest:(id)result - success:(void (^)(id))success - failure:(void (^)(NSError *))failure -{ - - if (![result isKindOfClass:[NSDictionary class]]) { - NSError * error = [NSError errorWithDomain:@"data formate is invalid" code:-1000 userInfo:nil]; - BLOCK_SAFE_RUN(failure, error); - return; - } - int code =[[[result safeObjectForKey:@"status"] objectForKey:@"code"] integerValue]; - NSString *msg =[[result safeObjectForKey:@"status"] objectForKey:@"msg"]; - if (1001 == code) - { - id object = [result valueForKey:@"result"]; - object = isNull(object) ? result : object; - BLOCK_SAFE_RUN(success,object); - } - else - { - - if (msg) - { - NSError* error = [NSError errorWithDomain:msg code:code userInfo:nil]; - failure(error); - } - else - { - failure(nil); - } - } - - -} -+(void) jsonFormRequest:(NSString *)url param:(NSDictionary *)param fromBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(id))success failure:(void (^)(NSError *))failure -{ - AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; - [manager GET:url parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { - if ([responseObject respondsToSelector:@selector(objectForKey:)]) { - [DDAFClient handleRequest:(NSDictionary *)responseObject success:success failure:failure]; - }else - { - NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; - [DDAFClient handleRequest:responseDictionary success:success failure:failure]; - } - - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - BLOCK_SAFE_RUN(failure,error); - }]; -} -+(void) jsonFormPOSTRequest:(NSString *)url param:(NSDictionary *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure{ - - AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; - manager.responseSerializer = [AFHTTPResponseSerializer serializer]; - NSString *fullPath = [NSString stringWithFormat:@"%@%@",DD_URL_BASE,url]; - [manager POST:fullPath parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { - - NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; - [DDAFClient handleRequest:responseDictionary success:success failure:failure]; - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if([error.domain isEqualToString:NSURLErrorDomain]) - error = [NSError errorWithDomain:@"没有网络连接。" code:-100 userInfo:nil]; - BLOCK_SAFE_RUN(failure,error); - }]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.h b/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.h deleted file mode 100644 index 5f09b19..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// DDHttpServer.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface DDHttpServer : NSObject - -/** - * 登录Http服务器 - * - * @param userName 用户名 - * @param password 密码 - * @param success 登录成功回调的block - * @param failure 登录失败回调的block - */ -- (void)loginWithUserName:(NSString*)userName - password:(NSString*)password - success:(void(^)(id respone))success - failure:(void(^)(id error))failure; - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.m b/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.m deleted file mode 100644 index f07fd2c..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDHttpServer.m +++ /dev/null @@ -1,32 +0,0 @@ - -// -// DDHttpServer.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDHttpServer.h" -#import "DDAFClient.h" -@implementation DDHttpServer -- (void)loginWithUserName:(NSString*)userName - password:(NSString*)password - success:(void(^)(id respone))success - failure:(void(^)(id error))failure -{ -// DDHttpModule* module = [DDHttpModule shareInstance]; - NSMutableDictionary* dictParams = [NSMutableDictionary dictionary]; - [dictParams setObject:userName forKey:@"user_email"]; - [dictParams setObject:password forKey:@"user_pass"]; - [dictParams setObject:@"ooxx" forKey:@"macim"]; - [dictParams setObject:@"1.0" forKey:@"imclient"]; - [dictParams setObject:@"1" forKey:@"remember"]; - [DDAFClient jsonFormPOSTRequest:@"user/zlogin/" param:dictParams success:^(id result) { - success(result); - } failure:^(NSError * error) { - failure(error); - }]; - -} -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.h b/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.h deleted file mode 100644 index d8dff3b..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDLoginServer.h -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -@class LoginEntity; -@interface DDLoginServer : NSObject - -- (void)connectLoginServerSuccess:(void(^)(NSDictionary* loginEntity))success failure:(void(^)())failure; - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.m b/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.m deleted file mode 100644 index 3653103..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDLoginServer.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// DDLoginServer.m -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDLoginServer.h" -#import "DDTcpClientManager.h" -#import "DDMsgServerIPAPI.h" - -typedef void(^LoginServerSuccess)(id loginEntity); -typedef void(^LoginServerFailure)(); - -static NSInteger const timeoutInterval = 10; - -@interface DDLoginServer(Notification) - - -@end - -@implementation DDLoginServer -{ - LoginServerSuccess _success; - LoginServerFailure _failure; - BOOL _logining; - NSUInteger _connectTimes; -} -- (id)init -{ - self = [super init]; - if (self) - { - _logining = NO; - _connectTimes = 0; - } - return self; -} - -- (void)connectLoginServerSuccess:(void(^)(NSDictionary* loginEntity))success failure:(void(^)())failure -{ - //系统发送请求消息服务器IP,端口 - - if (!_logining) - { - DDMsgServerIPAPI* api = [[DDMsgServerIPAPI alloc] init]; - NSNumber* type = @0; - [api requestWithObject:type Completion:^(id response, NSError *error) { - if (!error) { - _logining = NO; - success(response); - } - else - { - DDLog(@"error:%@",[error domain]); - failure(); - } - }]; - } -} - - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.h b/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.h deleted file mode 100644 index 38e2aa9..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DDMsgServer.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - - -@interface DDMsgServer : NSObject -/** - * 连接消息服务器 - * - * @param userID 用户ID - * @param token token - * @param success 连接成功执行的block - * @param failure 连接失败执行的block - */ --(void)checkUserID:(NSString*)userID Pwd:(NSString *)password token:(NSString*)token success:(void(^)(id object))success failure:(void(^)(id object))failure; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.m b/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.m deleted file mode 100644 index 7a4620f..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDMsgServer.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// DDMsgServer.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDMsgServer.h" -//#import "LoginEntity.h" -#import "DDTcpClientManager.h" -#import "DDLoginAPI.h" -#import "MD5.h" -//#import "LoginEntity.h" -static int const timeOutTimeInterval = 10; - -typedef void(^Success)(id object); - -@interface DDMsgServer(PrivateAPI) - -- (void)n_receiveLoginMsgServerNotification:(NSNotification*)notification; -- (void)n_receiveLoginLoginServerNotification:(NSNotification*)notification; - -@end - -@implementation DDMsgServer -{ - Success _success; - Failure _failure; - - BOOL _connecting; - NSUInteger _connectTimes; -} -- (id)init -{ - self = [super init]; - if (self) - { - _connecting = NO; - _connectTimes = 0; - // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveLoginMsgServerNotification:) name:notificationLoginMsgServerSuccess object:nil]; - } - return self; -} - --(void)checkUserID:(NSString*)userID Pwd:(NSString *)password token:(NSString*)token success:(void(^)(id object))success failure:(void(^)(id object))failure -{ - if(userID && password) - { - if (!_connecting) - { - - NSNumber* clientType = @(17); - - NSArray* parameter = @[userID,[MD5 getMD5:password],[NSNumber numberWithInteger:1],clientType]; - - DDLoginAPI* api = [[DDLoginAPI alloc] init]; - [api requestWithObject:parameter Completion:^(id response, NSError *error) { - if (!error) - { - if (response) - { - /* - result = @{@"serverTime":@(serverTime), - @"result":@(loginResult), - @"state":@(state), - @"userName":userName, - @"nickName":nickName, - @"avatar":avatar, - @"userType":@(userType)}; - */ - success(response); - } - else - { - NSError* newError = [NSError errorWithDomain:@"登录验证失败" code:6 userInfo:nil]; - failure(newError); - } - } - else - { - DDLog(@"error:%@",[error domain]); - failure(error); - } - }]; - }else{ - failure([NSError errorWithDomain:@"用户名密码未空" code:909 userInfo:nil]); - } - - - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.h b/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.h deleted file mode 100644 index 7028bf8..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDTcpServer.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -@interface DDTcpServer : NSObject -{ - -} -- (void)loginTcpServerIP:(NSString*)ip port:(NSInteger)point Success:(void(^)())success failure:(void(^)())failure; -- (void)disconnect; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.m b/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.m deleted file mode 100644 index 3a046bf..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDTcpServer.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// DDTcpServer.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDTcpServer.h" -#import "DDTcpClientManager.h" - -typedef void(^Success)(); - -static NSInteger timeoutInterval = 10; - -@interface DDTcpServer(notification) - -- (void)n_receiveTcpLinkConnectCompleteNotification:(NSNotification*)notification; -- (void)n_receiveTcpLinkConnectFailureNotification:(NSNotification*)notification; - - -@end - -@implementation DDTcpServer -{ - Success _success; - Failure _failure; - BOOL _connecting; - NSUInteger _connectTimes; -} -- (id)init -{ - self = [super init]; - if (self) - { - _connecting = NO; - _connectTimes = 0; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveTcpLinkConnectCompleteNotification:) - name:DDNotificationTcpLinkConnectComplete - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveTcpLinkConnectFailureNotification:) - name:DDNotificationTcpLinkConnectFailure - object:nil]; - - } - return self; -} - -- (void)loginTcpServerIP:(NSString*)ip port:(NSInteger)point Success:(void(^)())success failure:(void(^)())failure -{ - if (!_connecting) - { - _connectTimes ++; - _connecting = YES; - _success = [success copy]; - _failure = [failure copy]; - [[DDTcpClientManager instance] disconnect]; - [[DDTcpClientManager instance] connect:ip port:point status:1]; - //超时处理 - NSUInteger nowTimes = _connectTimes; - double delayInSeconds = timeoutInterval; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - if (_connecting && nowTimes == _connectTimes) - { - _connecting = NO; - _failure(nil); - } - }); - } -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:DDNotificationTcpLinkConnectComplete object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:DDNotificationTcpLinkConnectFailure object:nil]; -} - -#pragma mark - notification -- (void)n_receiveTcpLinkConnectCompleteNotification:(NSNotification*)notification -{ - if(_connecting) - { - _connecting = NO; - dispatch_async(dispatch_get_main_queue(), ^{ - _success(); - }); - } - -} - -- (void)n_receiveTcpLinkConnectFailureNotification:(NSNotification*)notification -{ - if (_connecting) - { - _connecting = NO; - dispatch_async(dispatch_get_main_queue(), ^{ - _failure(nil); - }); - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.h b/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.h deleted file mode 100644 index a105028..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// DDTokenManager.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface DDTokenManager : NSObject -@property (strong)NSString* token; -@property (strong)NSString* dao; - -/** - * 刷新token - * - * @param success 刷新成功 - * @param failure 刷新失败 - */ -- (void)refreshTokenWithDao:(NSString*)dao - Success:(void(^)(NSString* token))success - failure:(void(^)(id error))failure; - - -- (void)startAutoRefreshToken; -- (void)stopAutoRefreshToken; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.m b/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.m deleted file mode 100644 index 52785b0..0000000 --- a/TeamTalk/IOSDuoduo/Module/Login/DDTokenManager.m +++ /dev/null @@ -1,78 +0,0 @@ -// -// DDTokenManager.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDTokenManager.h" -#import "DDAFClient.h" -#import "RuntimeStatus.h" -static NSInteger const refreshTokenTimeInterval = 60 * 30; - -@interface DDTokenManager(privateAPI) - -- (void)p_refreshTokenTimer:(NSTimer*)timer; - -@end - -@implementation DDTokenManager -{ - NSTimer* _timer; -} -- (id)init -{ - self = [super init]; - if (self) - { - - } - return self; -} - -- (void)refreshTokenWithDao:(NSString*)dao - Success:(void(^)(NSString* token))success - failure:(void(^)(id error))failure -{ - //DDHttpModule* module = [DDHttpModule shareInstance]; - NSMutableDictionary* dictParams = [NSMutableDictionary dictionary]; - [dictParams setObject:@"imclient" forKey:@"mac"]; - [dictParams setObject:dao forKey:@"dao"]; - [DDAFClient jsonFormPOSTRequest:@"mtalk/iauth" param:dictParams success:^(id result) { - TheRuntime.token=[result valueForKey:@"token"]; - [self setToken:[result valueForKey:@"token"]]; - } failure:^(NSError *error) { - failure(error); - }]; - -} - -- (void)startAutoRefreshToken -{ - if (!_timer && ![_timer isValid]) - { - _timer = [NSTimer scheduledTimerWithTimeInterval:refreshTokenTimeInterval target:self selector:@selector(p_refreshTokenTimer:) userInfo:nil repeats:YES]; - } -} - -- (void)stopAutoRefreshToken -{ - if (_timer) - { - [_timer invalidate]; - _timer = nil; - } -} - -#pragma mark privateAPI -- (void)p_refreshTokenTimer:(NSTimer *)timer -{ - [self refreshTokenWithDao:TheRuntime.dao Success:^(NSString *token) { - DDLog(@"刷新Token成功"); - } failure:^(id error) { - NSLog(@"------%@",TheRuntime.token); - DDLog(@"刷新Token失败"); - }]; -} -@end diff --git a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.h b/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.h deleted file mode 100644 index fffc838..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DDMessageModule.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-27. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDMessageEntity.h" - -typedef void(^GetLastestMessageCompletion)(DDMessageEntity* message); -typedef void(^GetUnreadMessageCount)(NSInteger count); -@interface DDMessageModule : NSObject -+ (instancetype)shareInstance; - -+ (NSString *)getMessageID; - -/** - * 获得最新的消息 - * - * @param sessionID 会话ID - * @param completion 完成获取 - */ -- ( void)getLastMessageForSessionID:(NSString*)sessionID block:(GetLastestMessageCompletion)block; --(void)removeFromUnreadMessageButNotSendRead:(NSString*)sessionID; -- (void)addUnreadMessage:(DDMessageEntity*)message; -- (void)clearUnreadMessagesForSessionID:(NSString*)sessionID; -- (NSUInteger)getUnreadMessgeCount; --(NSArray *)getUnreadMessageBySessionID:(NSString *)sessionID; -- (NSUInteger)getUnreadMessageCountForSessionID:(NSString*)sessionID; -- (NSArray*)popAllUnreadMessagesForSessionID:(NSString*)sessionID; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.m b/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.m deleted file mode 100644 index 9647252..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageModule.m +++ /dev/null @@ -1,453 +0,0 @@ -// -// DDMessageModule.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-27. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDMessageModule.h" -#import "DDDatabaseUtil.h" -#import "DDReceiveMessageAPI.h" -#import "DDGetUnreadMessageUsersAPI.h" -#import "DDGetUserUnreadMessagesAPI.h" -#import "DDAFClient.h" -#import "DDSessionEntity.h" -#import "RuntimeStatus.h" -#import "DDGroupMsgReadACKAPI.h" -#import "DDSendMessageReadACKAPI.h" -#import "DDUserModule.h" -#import "DDUnreadMessageGroupAPI.h" -#import "DDReceiveMessageACKAPI.h" -#import "AnalysisImage.h" -#import "DDGroupsUnreadMessageAPI.h" -#import "RecentUsersViewController.h" -#define DDMessage_ID_Key @"DDMessage_ID_Key" - -@interface DDMessageModule(PrivateAPI) - -- (void)p_registerReceiveMessageAPI; -- (void)p_saveReceivedMessage:(DDMessageEntity*)message; -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification; -- (void)n_receiveUserLogoutNotification:(NSNotification*)notification; -- (NSArray*)p_spliteMessage:(DDMessageEntity*)message; - -@end - -@implementation DDMessageModule -{ - NSMutableDictionary* _unreadMessages; -} -+ (instancetype)shareInstance -{ - static DDMessageModule* g_messageModule; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_messageModule = [[DDMessageModule alloc] init]; - }); - return g_messageModule; -} - -- (id)init -{ - self = [super init]; - if (self) - { - //注册收到消息API - _unreadMessages = [[NSMutableDictionary alloc] init]; - [self p_registerReceiveMessageAPI]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveLoginSuccessNotification:) name:DDNotificationUserLoginSuccess object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveLoginSuccessNotification:) name:DDNotificationUserReloginSuccess object:nil]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -+ (NSString *)getMessageID -{ - NSString *uuid = [[NSUUID UUID] UUIDString]; - return uuid; -} - -- ( void)getLastMessageForSessionID:(NSString*)sessionID block:(GetLastestMessageCompletion)block { - NSArray *unReadMessage =[self getUnreadMessageBySessionID:sessionID]; - if([unReadMessage count]!=0) - { - block([unReadMessage lastObject]); - }else - { - [[DDDatabaseUtil instance] getLastestMessageForSessionID:sessionID completion:^(DDMessageEntity *message, NSError *error) { - block(message); - }]; - } - -} - -- (void)addUnreadMessage:(DDMessageEntity*)message -{ - if (!message) - { - return; - } - if([message.sessionId isEqualToString:@"1szei2"]) - { - return; - } - - //senderId 即 sessionId - if (![message isGroupMessage]) { - if ([[_unreadMessages allKeys] containsObject:message.sessionId]) - { - NSMutableArray* unreadMessage = _unreadMessages[message.sessionId]; - [unreadMessage addObject:message]; - } - else - { - NSMutableArray* unreadMessages = [[NSMutableArray alloc] init]; - [unreadMessages addObject:message]; - [_unreadMessages setObject:unreadMessages forKey:message.sessionId]; - } - }else - { - if ([[_unreadMessages allKeys] containsObject:message.sessionId]) - { - NSMutableArray* unreadMessage = _unreadMessages[message.sessionId]; - [unreadMessage addObject:message]; - } - else - { - NSMutableArray* unreadMessages = [[NSMutableArray alloc] init]; - [unreadMessages addObject:message]; - [_unreadMessages setObject:unreadMessages forKey:message.sessionId]; - } - } -} - -- (void)clearUnreadMessagesForSessionID:(NSString*)sessionID -{ - NSMutableArray* unreadMessages = _unreadMessages[sessionID]; - if (unreadMessages) - { - [unreadMessages enumerateObjectsUsingBlock:^(DDMessageEntity* messageEntity, NSUInteger idx, BOOL *stop) { - [[DDDatabaseUtil instance]insertMessages:@[messageEntity] success:^{ - if (![messageEntity isGroupMessage]) - { - DDSendMessageReadACKAPI* readACKAPI = [[DDSendMessageReadACKAPI alloc] init]; - [readACKAPI requestWithObject:messageEntity.sessionId Completion:^(id response, NSError *error) { - }]; - } - else - { - DDLog(@"read group ack"); - DDGroupMsgReadACKAPI* readACK = [[DDGroupMsgReadACKAPI alloc] init]; - [readACK requestWithObject:messageEntity.sessionId Completion:nil]; - } - } failure:^(NSString *errorDescripe) { - NSLog(@"消息插入DB失败"); - }]; - }]; - - - } - [unreadMessages removeAllObjects]; - [self setApplicationUnreadMsgCount]; -} - -- (NSUInteger)getUnreadMessageCountForSessionID:(NSString*)sessionID -{ - if ([sessionID isEqualToString:TheRuntime.userID]) { - return 0; - } - - NSMutableArray* unreadMessages = _unreadMessages[sessionID]; - return [unreadMessages count]; -} --(NSArray *)getUnreadMessageBySessionID:(NSString *)sessionID -{ - return _unreadMessages[sessionID]; -} - -- (NSUInteger)getUnreadMessgeCount -{ - __block NSUInteger count = 0; - [_unreadMessages enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - count += [obj count]; - }]; - - return count; -} --(void)removeFromUnreadMessageButNotSendRead:(NSString*)sessionID -{ - - NSMutableArray* messages = _unreadMessages[sessionID]; - DDLog(@" remove message %d--->,%@ id is ",[messages count],sessionID); - if ([messages count]> 0) - { - [_unreadMessages removeObjectForKey:sessionID]; - } - -} -- (NSArray*)popAllUnreadMessagesForSessionID:(NSString*)sessionID -{ - NSMutableArray* messages = _unreadMessages[sessionID]; - if ([messages count]> 0) - { - [[DDDatabaseUtil instance] insertMessages:messages success:^{ - DDMessageEntity* message = messages[0]; - if (![message isGroupMessage]) - { - DDSendMessageReadACKAPI* readACKAPI = [[DDSendMessageReadACKAPI alloc] init]; - [readACKAPI requestWithObject:message.sessionId Completion:^(id response, NSError *error) { - }]; - } - else - { - DDLog(@"read group ack"); - DDGroupMsgReadACKAPI* readACK = [[DDGroupMsgReadACKAPI alloc] init]; - [readACK requestWithObject:message.sessionId Completion:nil]; - } - } failure:^(NSString *errorDescripe) { - NSLog(@"消息插入DB失败"); - - }]; - [_unreadMessages removeObjectForKey:sessionID]; - return messages; - } - else - { - return nil; - } -} - -#pragma mark - privateAPI -- (void)p_registerReceiveMessageAPI -{ - DDReceiveMessageAPI* receiveMessageAPI = [[DDReceiveMessageAPI alloc] init]; - [receiveMessageAPI registerAPIInAPIScheduleReceiveData:^(DDMessageEntity* object, NSError *error) { - object.state=DDmessageSendSuccess; - DDReceiveMessageACKAPI *rmack = [[DDReceiveMessageACKAPI alloc] init]; - [rmack requestWithObject:@[object.senderId,@(object.seqNo)] Completion:^(id response, NSError *error) { - - }]; - NSArray* messages = [self p_spliteMessage:object]; - [messages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [self p_saveReceivedMessage:obj]; - }]; - - }]; -} - -- (void)p_saveReceivedMessage:(DDMessageEntity*)messageEntity -{ - - DDSessionEntity* session = [[DDSessionEntity alloc] initWithSessionID:messageEntity.sessionId type:messageEntity.msgType]; - [session updateUpdateTime:messageEntity.msgTime]; - if (messageEntity) - { - [AnalysisImage analysisImage:messageEntity Block:^(NSMutableArray *array) { - [array enumerateObjectsUsingBlock:^(DDMessageEntity *obj, NSUInteger idx, BOOL *stop) { - obj.state = DDmessageSendSuccess; - if (![TheRuntime isInShielding:messageEntity.sessionId]) { - [self addUnreadMessage:obj]; - } - [DDNotificationHelp postNotification:DDNotificationReceiveMessage userInfo:nil object:messageEntity]; - - }]; - }]; - - } -} - -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification -{ - _unreadMessages = [[NSMutableDictionary alloc] init]; - DDGetUnreadMessageUsersAPI* getUnreadMessageUsersAPI = [[DDGetUnreadMessageUsersAPI alloc] init]; - [getUnreadMessageUsersAPI requestWithObject:nil Completion:^(id response, NSError *error) { - if(error) { - DDLog("message#get unread message user count response,%@",error); - return; - } - NSArray* usersArray = (NSArray*)response; - [usersArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* userID = (NSString*)obj; - DDGetUserUnreadMessagesAPI* getUserUnreadMessageAPI = [[DDGetUserUnreadMessagesAPI alloc] init]; - [getUserUnreadMessageAPI requestWithObject:userID Completion:^(id response, NSError *error) { - if(error) { - DDLog("message#get user unread message response,%@",error); - return; - } - NSDictionary* dictionary = (NSDictionary*)response; - NSArray* tempmessages = dictionary[@"msgArray"]; - - for (int index = [tempmessages count] - 1; index >= 0; index --) { - DDMessageEntity* message = tempmessages[index]; - message.state = DDmessageSendSuccess; - if(![message.sessionId isEqualToString:@"1szei2"]) - { - NSArray* temp = [self p_spliteMessage:message]; - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [temp enumerateObjectsUsingBlock:^(DDMessageEntity *obj, NSUInteger idx, BOOL *stop) { - //如果不是自己法的,插入未读 -// if (![message.sessionId isEqualToString:TheRuntime.user.objID]) { - [self addUnreadMessage:obj]; -// }else -// { -// //否则直接存入数据库并发送已读ack -// DDSendMessageReadACKAPI* readACKAPI = [[DDSendMessageReadACKAPI alloc] init]; -// [readACKAPI requestWithObject:TheRuntime.user.objID Completion:^(id response, NSError *error) { -// }]; -// [[DDDatabaseUtil instance]insertMessages:@[obj] success:^{ -// -// } failure:^(NSString *errorDescripe) { -// NSLog(@"消息插入DB失败"); -// }]; -// } - - }]; - }); - - - } - - } - if ([tempmessages count] > 0) - { - [DDNotificationHelp postNotification:DDNotificationUpdateUnReadMessage userInfo:nil object:[NSString stringWithFormat:@"user_%@",userID]]; - [[RecentUsersViewController shareInstance] setToolbarBadge]; - - } - }]; - }]; - }]; - - - DDUnreadMessageGroupAPI* getUnreadMessageGroupsAPI = [[DDUnreadMessageGroupAPI alloc] init]; - [getUnreadMessageGroupsAPI requestWithObject:nil Completion:^(id response, NSError *error) { - NSArray* usersArray = (NSArray*)response; - - [usersArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* groupID = (NSString*)obj; - DDGroupsUnreadMessageAPI* getUserUnreadMessageAPI = [[DDGroupsUnreadMessageAPI alloc] init]; - [getUserUnreadMessageAPI requestWithObject:groupID Completion:^(id response, NSError *error) { - NSDictionary* dic = (NSDictionary*)response; - NSString* sessionID = dic[@"sessionId"]; - - [self removeArrayMessage:sessionID]; - NSArray* tempmessages = dic[@"msgArray"]; - DDLog("message#get user unread message response,%d,%@",[tempmessages count],groupID); - - for (int index = [tempmessages count] - 1; index >= 0; index --) { - DDMessageEntity* message = tempmessages[index]; - - message.state = DDmessageSendSuccess; - NSArray* temp = [self p_spliteMessage:message]; - [temp enumerateObjectsUsingBlock:^(DDMessageEntity *obj, NSUInteger idx, BOOL *stop) { - //如果不是自己发的插入未读消息 - NSLog(@"%@----->",TheRuntime.user.objID); - if (![message.sessionId isEqualToString:TheRuntime.user.objID]) { - DDLog(@"read group ack"); - [self addUnreadMessage:obj]; - }else - { - //否则直接存入数据库并发送已读ack - - DDGroupMsgReadACKAPI* readACK = [[DDGroupMsgReadACKAPI alloc] init]; - [readACK requestWithObject:message.sessionId Completion:nil]; - [[DDDatabaseUtil instance]insertMessages:@[obj] success:^{ - - } failure:^(NSString *errorDescripe) { - NSLog(@"消息插入DB失败"); - }]; - } - - }]; - - } - if ([tempmessages count] > 0) - { - [DDNotificationHelp postNotification:DDNotificationUpdateUnReadMessage userInfo:nil object:[NSString stringWithFormat:@"group_%@",groupID]]; - [[RecentUsersViewController shareInstance] setToolbarBadge]; - - } - }]; - }]; - }]; - - - -} --(void)removeArrayMessage:(NSString*)sessionId -{ - if(!sessionId) - return; - [_unreadMessages removeObjectForKey:sessionId]; - [self setApplicationUnreadMsgCount]; -} - -- (void)n_receiveUserLogoutNotification:(NSNotification*)notification -{ - _unreadMessages = nil; - _unreadMessages = [[NSMutableDictionary alloc] init]; -} - -- (NSArray*)p_spliteMessage:(DDMessageEntity*)message -{ - NSMutableArray* messageContentArray = [[NSMutableArray alloc] init]; - if (message.msgContentType == DDMessageTypeImage || (message.msgContentType == DDMessageTypeText && [message.msgContent rangeOfString:DD_MESSAGE_IMAGE_PREFIX].length > 0)) - { - NSString* messageContent = [message msgContent]; - NSArray* tempMessageContent = [messageContent componentsSeparatedByString:DD_MESSAGE_IMAGE_PREFIX]; - [tempMessageContent enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* content = (NSString*)obj; - if ([content length] > 0) - { - NSRange suffixRange = [content rangeOfString:DD_MESSAGE_IMAGE_SUFFIX]; - if (suffixRange.length > 0) - { - //是图片,再拆分 - NSString* imageContent = [NSString stringWithFormat:@"%@%@",DD_MESSAGE_IMAGE_PREFIX,[content substringToIndex:suffixRange.location + suffixRange.length]]; - DDMessageEntity* messageEntity = [[DDMessageEntity alloc] initWithMsgID:[DDMessageModule getMessageID] msgType:message.msgType msgTime:message.msgTime sessionID:message.sessionId senderID:message.senderId msgContent:imageContent toUserID:message.toUserID]; - messageEntity.msgContentType = DDMessageTypeImage; - messageEntity.state = DDmessageSendSuccess; - [messageContentArray addObject:messageEntity]; - - - NSString* secondComponent = [content substringFromIndex:suffixRange.location + suffixRange.length]; - if (secondComponent.length > 0) - { - - DDMessageEntity* secondmessageEntity = [[DDMessageEntity alloc] initWithMsgID:[DDMessageModule getMessageID] msgType:message.msgType msgTime:message.msgTime sessionID:message.sessionId senderID:message.senderId msgContent:secondComponent toUserID:message.toUserID]; - secondmessageEntity.msgContentType = DDMessageTypeText; - secondmessageEntity.state = DDmessageSendSuccess; - [messageContentArray addObject:secondmessageEntity]; - } - } - else - { - - DDMessageEntity* messageEntity = [[DDMessageEntity alloc] initWithMsgID:[DDMessageModule getMessageID] msgType:message.msgType msgTime:message.msgTime sessionID:message.sessionId senderID:message.senderId msgContent:content toUserID:message.toUserID]; - messageEntity.msgContentType = DDMessageTypeText; - messageEntity.state = DDmessageSendSuccess; - [messageContentArray addObject:messageEntity]; - } - } - }]; - } - if ([messageContentArray count] == 0) - { - [messageContentArray addObject:message]; - } - return messageContentArray; -} - --(void)setApplicationUnreadMsgCount -{ - [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[self getUnreadMessgeCount]]; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.h b/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.h deleted file mode 100644 index 0db640f..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// DDMessageSendManager.h -// Duoduo -// -// Created by 独嘉 on 14-3-30. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDMessageEntity.h" -typedef void(^DDSendMessageCompletion)(DDMessageEntity* message,NSError* error); - -typedef NS_ENUM(NSUInteger, MessageType) -{ - AllString, - HasImage -}; - -@class DDMessageEntity; -@interface DDMessageSendManager : NSObject -@property (nonatomic,readonly)dispatch_queue_t sendMessageSendQueue; -@property (nonatomic,readonly)NSMutableArray* waitToSendMessage; -+ (instancetype)instance; - -/** - * 发送消息 - * - * @param content 发送内容,是富文本 - * @param session 所属的会话 - */ -//- (void)sendMessage:(NSAttributedString*)content forSession:(SessionEntity*)session success:(void(^)(NSString* sendedContent))success failure:(void(^)(NSString*))failure; - - -/** - * 发送消息 - * - * @param content 消息内容 - * @param sessionID 会话ID - * @param completion 完成发送消息 - */ -- (void)sendMessage:(DDMessageEntity *)message isGroup:(BOOL)isGroup forSessionID:(NSString*)sessionID completion:(DDSendMessageCompletion)completion; - -- (void)sendVoiceMessage:(NSData*)voice filePath:(NSString*)filePath forSessionID:(NSString*)sessionID isGroup:(BOOL)isGroup completion:(DDSendMessageCompletion)completion; -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.m b/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.m deleted file mode 100644 index dfba6ec..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/DDMessageSendManager.m +++ /dev/null @@ -1,243 +0,0 @@ - -// -// DDMessageSendManager.m -// Duoduo -// -// Created by 独嘉 on 14-3-30. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDMessageSendManager.h" -#import "DDUserModule.h" -#import "DDMessageEntity.h" -#import "DDMessageModule.h" -#import "DDTcpClientManager.h" -#import "DDSendMessageAPI.h" -#import "DDSendVoiceMessageAPI.h" -#import "RuntimeStatus.h" -#import "RecentUsersViewController.h" -#import "EmotionsModule.h" -#import "NSDictionary+JSON.h" -#import "UnAckMessageManager.h" -#import "DDGroupModule.h" -#import "DDClientState.h" -static uint32_t seqNo = 0; - -@interface DDMessageSendManager(PrivateAPI) - -- (NSString* )toSendmessageContentFromContent:(NSString*)content; - -@end - -@implementation DDMessageSendManager -{ - NSUInteger _uploadImageCount; -} -+ (instancetype)instance -{ - static DDMessageSendManager* g_messageSendManager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_messageSendManager = [[DDMessageSendManager alloc] init]; - }); - return g_messageSendManager; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _uploadImageCount = 0; - _waitToSendMessage = [[NSMutableArray alloc] init]; - _sendMessageSendQueue = dispatch_queue_create("com.mogujie.Duoduo.sendMessageSend", NULL); - - } - return self; -} - -- (void)sendMessage:(DDMessageEntity *)message isGroup:(BOOL)isGroup forSessionID:(NSString*)sessionID completion:(DDSendMessageCompletion)completion -{ - NSLog(@"%d.....>",[DDClientState shareInstance].userState); - dispatch_async(self.sendMessageSendQueue, ^{ - DDSendMessageAPI* sendMessageAPI = [[DDSendMessageAPI alloc] init]; - uint32_t nowSeqNo = ++seqNo; - message.seqNo=nowSeqNo; - NSString* myUserID = [RuntimeStatus instance].user.objID; - NSString* newContent = [self toSendmessageContentFromContent:message.msgContent]; - if ([message isImageMessage]) { - NSDictionary* dic = [NSDictionary initWithJsonString:message.msgContent]; - NSString* urlPath = dic[DD_IMAGE_URL_KEY]; - newContent=urlPath; - } - NSArray* object = @[myUserID,sessionID,newContent,@(nowSeqNo),@(isGroup?DDGroup_Message_TypeText:DDMessageTypeText)]; - if (!isGroup) { - [[DDUserModule shareInstance] getUserForUserID:sessionID Block:^(DDUserEntity *user) { - if (user) { - if (user.lastUpdateTime == 0) { - user.lastUpdateTime =[[NSDate date] timeIntervalSince1970]; - } - [[DDUserModule shareInstance] addMaintanceUser:user]; - [[DDUserModule shareInstance] addRecentUser:user]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"SentMessageSuccessfull" object:sessionID]; - } - }]; - }else - { - DDGroupEntity *group = [[DDGroupModule instance] getGroupByGId:sessionID]; - group.lastUpdateTime = [[NSDate date] timeIntervalSince1970]; - // [[DDGroupModule instance] addRecentlyGroup:@[group]]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"SentMessageSuccessfull" object:sessionID]; - } - [[UnAckMessageManager instance] addMessageToUnAckQueue:message]; - [sendMessageAPI requestWithObject:object Completion:^(id response, NSError *error) { - if (!error) - { - uint32_t returnSeqNo = [response intValue]; - if (returnSeqNo == nowSeqNo) - { - - NSUInteger messageTime = [[NSDate date] timeIntervalSince1970]; - message.msgTime=messageTime; - message.seqNo=returnSeqNo; - message.state=DDmessageSendSuccess; - [[UnAckMessageManager instance] removeMessageFromUnAckQueue:message]; - completion(message,nil); - - } - else - { - message.state=DDMessageSendFailure; - NSError* error = [NSError errorWithDomain:@"发送消息失败,seqNo对不上" code:0 userInfo:nil]; - completion(message,error); - } - - } - else - { - message.state=DDMessageSendFailure; - NSError* error = [NSError errorWithDomain:@"发送消息失败" code:0 userInfo:nil]; - completion(message,error); - } - }]; - - }); -} - -- (void)sendVoiceMessage:(NSData*)voice filePath:(NSString*)filePath forSessionID:(NSString*)sessionID isGroup:(BOOL)isGroup completion:(DDSendMessageCompletion)completion -{ - dispatch_async(self.sendMessageSendQueue, ^{ - DDSendVoiceMessageAPI* sendVoiceMessageAPI = [[DDSendVoiceMessageAPI alloc] init]; - uint32_t nowSeqNo = ++seqNo; - NSString* myUserID = [RuntimeStatus instance].user.objID; - - NSArray* object = @[myUserID,sessionID,@(nowSeqNo),isGroup?@(DDGroup_MessageTypeVoice):@(DDMessageTypeVoice),@(1),voice,@""]; - [sendVoiceMessageAPI requestWithObject:object Completion:^(id response, NSError *error) { - if (!error) - { - uint32_t returnSeqNo = [response intValue]; - if (returnSeqNo == nowSeqNo) - { - NSUInteger messageTime = [[NSDate date] timeIntervalSince1970]; - - DDMessageEntity* message = [[DDMessageEntity alloc] initWithMsgID:0 msgType:MESSAGE_TYPE_TEMP_GROUP msgTime:messageTime sessionID:sessionID senderID:myUserID msgContent:filePath toUserID:sessionID]; - if (isGroup) { - message.msgContentType=DDGroup_MessageTypeVoice; - }else - { - message.msgContentType = DDMessageTypeVoice; - } - completion(message,nil); - } - else - { - NSError* error = [NSError errorWithDomain:@"发送消息失败,seqNo对不上" code:0 userInfo:nil]; - completion(nil,error); - } - - } - else - { - NSError* error = [NSError errorWithDomain:@"发送消息失败" code:0 userInfo:nil]; - completion(nil,error); - } - }]; - - }); -} - -//- (void)sendMessage:(NSAttributedString*)content forSession:(SessionEntity*)session success:(void(^)(NSString* sendedContent))success failure:(void(^)(NSString*))failure -//{ -// MessageType messageType = [content messageType]; -// if (messageType == AllString) -// { -// [self sendSimpleMessage:content forSession:session success:^(NSString *sendedContent) { -// success(sendedContent); -// } failure:^(NSString *content) { -// failure(content); -// } ]; -// } -// else if (messageType == HasImage) -// { -// [self sendMixMessage:content forSession:session success:^(NSString *sendedContent) { -// success(sendedContent); -// } failure:^(NSString *content){ -// failure(content); -// }]; -// } -//} - -#pragma mark Private API - -- (NSString* )toSendmessageContentFromContent:(NSString*)content -{ - EmotionsModule* emotionModule = [EmotionsModule shareInstance]; - NSDictionary* unicodeDic = emotionModule.unicodeEmotionDic; - NSArray* allEmotions = emotionModule.emotions; - NSMutableString* newContent = [NSMutableString stringWithString:content]; - [allEmotions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString* emotion = (NSString*)obj; - if ([newContent rangeOfString:emotion].length > 0) - { - NSString* placeholder = unicodeDic[emotion]; - NSRange range = NSMakeRange(0, newContent.length); - [newContent replaceOccurrencesOfString:emotion withString:placeholder options:0 range:range]; - } - }]; - return newContent; -} - -//- (void)sendMixMessage:(NSAttributedString *)content forSession:(SessionEntity *)session success:(void (^)(NSString *))success failure:(void(^)(NSString* ))failure -//{ -// dispatch_async(self.sendMessageSendQueue, ^{ -// NSString* string = [content getHasImageContentFromInput]; -// DDUserlistModule* userListModule = getDDUserlistModule(); -// -// DDSendMessageAPI* sendMessageAPI = [[DDSendMessageAPI alloc] init]; -// uint32_t nowSeqNo = ++seqNo; -// NSArray* object = @[userListModule.myUserId,session.orginId,string,[NSNumber numberWithInt:nowSeqNo],[NSNumber numberWithInt:session.type]]; -// -// [sendMessageAPI requestWithObject:object Completion:^(id response, NSError *error) { -// if (!error) -// { -// uint32_t returnSeqNo = [response intValue]; -// if (returnSeqNo == nowSeqNo) -// { -// success(string); -// } -// else -// { -// failure(@"seqNo不同"); -// DDLog(@"different seqNo"); -// } -// -// } -// else -// { -// failure(@"发送超时"); -// } -// }]; -// }); -//} - -@end diff --git a/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.h b/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.h deleted file mode 100644 index 8c4fe98..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// UnAckMessageManage.h -// TeamTalk -// -// Created by Michael Scofield on 2014-10-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDMessageEntity.h" -@interface UnAckMessageManager : NSObject -+ (instancetype)instance; --(void)removeMessageFromUnAckQueue:(DDMessageEntity *)message; --(void)addMessageToUnAckQueue:(DDMessageEntity *)message; --(BOOL)isInUnAckQueue:(DDMessageEntity *)message; -@end - - -@interface MessageAndTime : NSObject -@property(strong)DDMessageEntity *msg; -@property(assign)NSUInteger nowDate; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.m b/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.m deleted file mode 100644 index d3afc75..0000000 --- a/TeamTalk/IOSDuoduo/Module/Messages/UnAckMessageManager.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// UnAckMessageManage.m -// TeamTalk -// -// Created by Michael Scofield on 2014-10-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "UnAckMessageManager.h" -#import "DDMessageEntity.h" -#import "DDDatabaseUtil.h" -#define MESSAGE_TIMEOUT_SEC 5 -@interface UnAckMessageManager() -@property(strong)NSMutableDictionary *msgDic; -@property(strong)NSTimer *ack_Timer; -@end -@implementation UnAckMessageManager -+ (instancetype)instance -{ - static UnAckMessageManager* unackManage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - unackManage = [[UnAckMessageManager alloc] init]; - - }); - return unackManage; -} -- (instancetype)init -{ - self = [super init]; - if (self) { - self.msgDic = [NSMutableDictionary new]; - self.ack_Timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(checkMessageTimeout) userInfo:nil repeats:YES]; - - } - return self; -} --(BOOL)isInUnAckQueue:(DDMessageEntity *)message -{ - if ([[self.msgDic allKeys] containsObject:message.msgID]) { - return YES; - } - return NO; - -} --(void)removeMessageFromUnAckQueue:(DDMessageEntity *)message -{ - if ([[self.msgDic allKeys] containsObject:message.msgID]) { - [self.msgDic removeObjectForKey:message.msgID]; - } -} --(void)addMessageToUnAckQueue:(DDMessageEntity *)message -{ - NSLog(@"add message to %d,%@",message.msgID,[message description]); - MessageAndTime *msgAndTime = [MessageAndTime new]; - msgAndTime.msg=message; - msgAndTime.nowDate =[[NSDate date] timeIntervalSince1970]; - NSLog(@"%d",msgAndTime.nowDate); - if (self.msgDic) { - [self.msgDic setObject:msgAndTime forKey:message.msgID]; - } -} --(void)checkMessageTimeout -{ - [[self.msgDic allValues] enumerateObjectsUsingBlock:^(MessageAndTime *obj, NSUInteger idx, BOOL *stop) { - NSUInteger timeNow = [[NSDate date] timeIntervalSince1970]; - NSUInteger msgTimeOut = obj.nowDate+MESSAGE_TIMEOUT_SEC; - if (timeNow >= msgTimeOut) { - NSLog(@"timeout time is %d,msg id is %d",msgTimeOut,obj.msg.msgID); - obj.msg.state=DDMessageSendFailure; - [[DDDatabaseUtil instance] updateMessageForMessage:obj.msg completion:^(BOOL result) { - - }]; - [self removeMessageFromUnAckQueue:obj.msg]; - } - }]; -} -@end - -@implementation MessageAndTime -@end; \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.h b/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.h deleted file mode 100644 index a014b30..0000000 --- a/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// DDUserModule.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDUserEntity.h" - -typedef void(^DDLoadRecentUsersCompletion)(); - - -@interface DDUserModule : NSObject - -@property (nonatomic,strong)NSString* currentUserID; -@property (nonatomic,strong)NSMutableDictionary* recentUsers; -+ (instancetype)shareInstance; - -//- (void)replaceUsers:(NSArray*)users; -- (void)addMaintanceUser:(DDUserEntity*)user; -- (void )getUserForUserID:(NSString*)userID Block:(void(^)(DDUserEntity *user))block; -- (void)addRecentUser:(DDUserEntity*)user; -- (void)sortRecentUsers; -- (void)p_saveLocalRecentContacts; -- (void)loadAllRecentUsers:(DDLoadRecentUsersCompletion)completion; --(void)clearRecentUser; --(NSArray *)getAllMaintanceUser; -@end diff --git a/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.m b/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.m deleted file mode 100644 index b1fe339..0000000 --- a/TeamTalk/IOSDuoduo/Module/Users/DDUserModule.m +++ /dev/null @@ -1,164 +0,0 @@ -// -// DDUserModule.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDUserModule.h" -#import "DDDatabaseUtil.h" -#import "RecentConactsAPI.h" -@interface DDUserModule(PrivateAPI) - -- (void)n_receiveUserLogoutNotification:(NSNotification*)notification; -- (void)n_receiveUserLoginNotification:(NSNotification*)notification; -- (void)p_saveLocalRecentContacts; - -@end - -@implementation DDUserModule -{ - NSMutableDictionary* _allUsers; -} - -+ (instancetype)shareInstance -{ - static DDUserModule* g_userModule; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_userModule = [[DDUserModule alloc] init]; - }); - return g_userModule; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _allUsers = [[NSMutableDictionary alloc] init]; - _recentUsers = [[NSMutableDictionary alloc] init]; - -// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUserLogoutNotification:) name:MGJUserDidLogoutNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUserLoginNotification:) name:DDNotificationUserLoginSuccess object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUserLoginNotification:) name:DDNotificationUserReloginSuccess object:nil]; - - - } - return self; -} - -#pragma mark - Public -//- (void)replaceUsers:(NSArray*)users -//{ -// _recentUsers = nil; -// _recentUsers = [[NSMutableArray alloc] init]; -// -// [users enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { -// DDUserEntity* user = (DDUserEntity*)obj; -// [_recentUsers addObject:user.userId]; -// [_allUsers setValue:user forKey:user.userId]; -// }]; -//} - -- (void)addMaintanceUser:(DDUserEntity*)user -{ - if (!user) - { - return; - } - if (!_allUsers) - { - _allUsers = [[NSMutableDictionary alloc] init]; - } - NSArray* allKeys = [_allUsers allKeys]; - if (![allKeys containsObject:user.objID]) - { - [_allUsers setValue:user forKey:user.objID]; - } -} --(NSArray *)getAllMaintanceUser -{ - return [_allUsers allValues]; -} -- (void )getUserForUserID:(NSString*)userID Block:(void(^)(DDUserEntity *user))block -{ - if (_allUsers[userID]) { - return block(_allUsers[userID]); - }else - { - [[DDDatabaseUtil instance] getUserFromID:userID completion:^(DDUserEntity *user) { - if (user) { - block(user); - } - }]; - - } -} - -- (void)addRecentUser:(DDUserEntity*)user -{ - if (!user) - { - return; - } - if (!self.recentUsers) - { - self.recentUsers = [[NSMutableDictionary alloc] init]; - } - NSArray* allKeys = [self.recentUsers allKeys]; - if (![allKeys containsObject:user.objID]) - { - [self.recentUsers setValue:user forKey:user.objID]; - [[DDDatabaseUtil instance] insertUsers:@[user] completion:^(NSError *error) { - - }]; - } - -} - - -- (void)loadAllRecentUsers:(DDLoadRecentUsersCompletion)completion -{ - - //加载本地最近联系人 - } - -#pragma mark - -#pragma mark PrivateAPI -- (void)n_receiveUserLogoutNotification:(NSNotification*)notification -{ - //用户登出 - _recentUsers = nil; -} - -- (void)n_receiveUserLoginNotification:(NSNotification*)notification -{ - if (!_recentUsers) - { - _recentUsers = [[NSMutableArray alloc] init]; - [self loadAllRecentUsers:^{ - [DDNotificationHelp postNotification:DDNotificationRecentContactsUpdate userInfo:nil object:nil]; - }]; - } -} - -- (void)p_saveLocalRecentContacts -{ - NSMutableArray* users = [[NSMutableArray alloc] init]; - DDUserModule* userModule = [DDUserModule shareInstance]; - [[userModule recentUsers] enumerateKeysAndObjectsUsingBlock:^(id key, DDUserEntity *obj, BOOL *stop) { - DDUserEntity* user = (DDUserEntity*)obj; - [users addObject:user]; - }]; - [[DDDatabaseUtil instance] updateContacts:users inDBCompletion:^(NSError *error) { - - }]; -} --(void)clearRecentUser -{ - DDUserModule* userModule = [DDUserModule shareInstance]; - [[userModule recentUsers] removeAllObjects]; -} -@end diff --git a/TeamTalk/IOSDuoduo/SpellLibrary.h b/TeamTalk/IOSDuoduo/SpellLibrary.h deleted file mode 100755 index d37c6db..0000000 --- a/TeamTalk/IOSDuoduo/SpellLibrary.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// SpellLibrary.h -// Duoduo -// -// Created by 独嘉 on 14-2-27. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDUserEntity.h" -#import "DDGroupEntity.h" -/** - * 在搜索中用于拼音搜索 - */ -@interface SpellLibrary : NSObject - -+ (SpellLibrary*)instance; - -/** - * 清除所有数据 - */ -- (void)clearAllSpell; - -/** - * 添加一个用户名称的拼音数据 - * - * @param sender user or group - */ -- (void)addSpellForObject:(id)sender; -- (void)addDeparmentSpellForObject:(id)sender; --(BOOL)isEmpty; -/** - * 根据给出拼音找出相关的用户名 - * - * @param spell 拼音 - */ -- (NSMutableArray*)checkoutForWordsForSpell:(NSString*)spell; -- (NSMutableArray*)checkoutForWordsForSpell_Deparment:(NSString*)spell; - -/** - * 获得某个词的拼音 - * - * @param word 某个词 - * - * @return 词的拼音 - */ -- (NSString*)getSpellForWord:(NSString*)word; - -/** - * 将拼音进行简全缩写 - * - * @param sender 完整拼音的数组 - * @param count 完整拼音的个数 - * - * @return 结果 - */ -- (NSString*)briefSpellWordFromSpellArray:(NSArray*)sender fullWord:(int)count; - -@end diff --git a/TeamTalk/IOSDuoduo/SpellLibrary.m b/TeamTalk/IOSDuoduo/SpellLibrary.m deleted file mode 100755 index ca0f70d..0000000 --- a/TeamTalk/IOSDuoduo/SpellLibrary.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// SpellLibrary.m -// Duoduo -// -// Created by 独嘉 on 14-2-27. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "SpellLibrary.h" -#import "NSString+Additions.h" - -@implementation SpellLibrary -{ - NSMutableDictionary* _spellLibrary; - NSMutableDictionary *_spellLibrary_Deparment; - NSDictionary* _saucerManDic; - -} -+ (SpellLibrary*)instance -{ - static SpellLibrary* g_spellLibrary; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_spellLibrary = [[SpellLibrary alloc] init]; - }); - return g_spellLibrary; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _spellLibrary = [[NSMutableDictionary alloc] init]; - _spellLibrary_Deparment = [NSMutableDictionary new]; - _saucerManDic = @{@"长卿" : @"chang qing", - @"朝夕" : @"zhao xi"}; - } - return self; -} - -- (void)clearAllSpell -{ - -} --(BOOL)isEmpty -{ - return ![[_spellLibrary allKeys] count]; -} -- (void)addDeparmentSpellForObject:(id)sender -{ - NSString* word = nil; - if ([sender isKindOfClass:[DDUserEntity class]]) - { - word = [(DDUserEntity*)sender department]; - } - else - { - return; - } - if (!word) - { - return; - } - - NSMutableString* spell = _saucerManDic[word]; - if (!spell) - { - spell = [NSMutableString stringWithString:word]; - CFRange range = CFRangeMake(0, spell.length); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformMandarinLatin, NO); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformStripCombiningMarks, NO); - } - NSString* key = [spell lowercaseString]; - if (![[_spellLibrary_Deparment allKeys] containsObject:spell]) - { - NSMutableArray* objects = [[NSMutableArray alloc] init]; - - [objects addObject:sender]; - [_spellLibrary_Deparment setObject:objects forKey:key]; - } - else - { - NSMutableArray* objects = _spellLibrary_Deparment[key]; - if (![objects containsObject:sender]) - { - [objects addObject:sender]; - } - } -} -- (void)addSpellForObject:(id)sender -{ - NSString* word = nil; - if ([sender isKindOfClass:[DDUserEntity class]]) - { - word = [(DDUserEntity*)sender nick]; - } - else if ([sender isKindOfClass:[DDGroupEntity class]]) - { - word = [(DDGroupEntity*)sender name]; - } - else - { - return; - } - if (!word) - { - return; - } - - NSMutableString* spell = _saucerManDic[word]; - if (!spell) - { - spell = [NSMutableString stringWithString:word]; - CFRange range = CFRangeMake(0, spell.length); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformMandarinLatin, NO); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformStripCombiningMarks, NO); - } - NSString* key = [spell lowercaseString]; - if (![[_spellLibrary allKeys] containsObject:spell]) - { - NSMutableArray* objects = [[NSMutableArray alloc] init]; - - [objects addObject:sender]; - [_spellLibrary setObject:objects forKey:key]; - } - else - { - NSMutableArray* objects = _spellLibrary[key]; - if (![objects containsObject:sender]) - { - [objects addObject:sender]; - } - } -} - -- (NSMutableArray*)checkoutForWordsForSpell:(NSString*)spell -{ - NSMutableArray* result = [[NSMutableArray alloc] init]; - - [_spellLibrary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - // - NSString* withoutSpaceSpellKey = [(NSString*)key removeAllSpace]; - if ([withoutSpaceSpellKey rangeOfString:spell].length > 0) - { - [result addObjectsFromArray:(NSArray*)obj]; - } - - //拼音简写搜索 - NSArray* spellWords = [(NSString*)key componentsSeparatedByString:@" "]; - for (int index = 0; index < [spellWords count]; index ++) - { - NSString* briefSpell = [self briefSpellWordFromSpellArray:spellWords fullWord:index]; - if ([briefSpell rangeOfString:spell].length > 0) - { - [(NSArray*)obj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if (![result containsObject:obj]) - { - [result addObject:obj]; - } - }]; - } - } - }]; - return result; -} -- (NSMutableArray*)checkoutForWordsForSpell_Deparment:(NSString*)spell -{ - NSMutableArray* result = [[NSMutableArray alloc] init]; - - [_spellLibrary_Deparment enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - // - NSString* withoutSpaceSpellKey = [(NSString*)key removeAllSpace]; - if ([withoutSpaceSpellKey rangeOfString:spell].length > 0) - { - [result addObjectsFromArray:(NSArray*)obj]; - } - - //拼音简写搜索 - NSArray* spellWords = [(NSString*)key componentsSeparatedByString:@" "]; - for (int index = 0; index < [spellWords count]; index ++) - { - NSString* briefSpell = [self briefSpellWordFromSpellArray:spellWords fullWord:index]; - if ([briefSpell rangeOfString:spell].length > 0) - { - [(NSArray*)obj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if (![result containsObject:obj]) - { - [result addObject:obj]; - } - }]; - } - } - }]; - return result; - -} -- (NSString*)getSpellForWord:(NSString*)word -{ - NSMutableString *spell = [NSMutableString stringWithString:word]; - CFRange range = CFRangeMake(0, spell.length); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformMandarinLatin, NO); - CFStringTransform((CFMutableStringRef)spell, &range, kCFStringTransformStripCombiningMarks, NO); - spell = (NSMutableString*)[spell removeAllSpace]; - return spell; -} - -- (NSString*)briefSpellWordFromSpellArray:(NSArray*)sender fullWord:(int)count -{ - NSMutableString* briefSpell = [[NSMutableString alloc] init]; - for (int index = 0; index < [sender count]; index ++) - { - NSString* fullSpell = sender[index]; - if ([fullSpell length] == 0) - { - continue; - } - if (index < count) - { - [briefSpell appendString:fullSpell]; - } - else - { - NSString* briefSpellAtIndex = [fullSpell substringToIndex:1]; - [briefSpell appendString:briefSpellAtIndex]; - } - } - return briefSpell; -} - -@end diff --git a/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.h b/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.h deleted file mode 100644 index 59e58b4..0000000 --- a/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.h +++ /dev/null @@ -1,118 +0,0 @@ -// -// DDClientState.h -// Duoduo -// -// Created by 独嘉 on 14-4-14. -// Copyright (c) 2014年 mogujie. All rights reserved. -// - -#import <Foundation/Foundation.h> - -/** - * 用户状态 - */ -typedef NS_ENUM(NSUInteger, DDUserState) -{ - /** - * 用户在线 - */ - DDUserOnline, - /** - * 用户被挤下线 - */ - DDUserKickout, - /** - * 用户离线 - */ - DDUserOffLine, - /** - * 用户主动下线 - */ - DDUserOffLineInitiative, - /** - * 用户正在连接 - */ - DDUserLogining -}; - -/** - * 客户端网络状态 - */ -typedef NS_ENUM(NSUInteger, DDNetWorkState) -{ - /** - * wifi - */ - DDNetWorkWifi, - /** - * 3G - */ - DDNetWork3G, - /** - * 2G - */ - DDNetWork2G, - /** - * 无网 - */ - DDNetWorkDisconnect -}; - -/** - * Socket 连接状态 - */ -typedef NS_ENUM(NSUInteger, DDSocketState) -{ - /** - * Socket连接登录服务器 - */ - DDSocketLinkLoginServer, - /** - * Socket连接消息服务器 - */ - DDSocketLinkMessageServer, - /** - * Socket没有连接 - */ - DDSocketDisconnect -}; - -#define DD_USER_STATE_KEYPATH @"userState" -#define DD_NETWORK_STATE_KEYPATH @"networkState" -#define DD_SOCKET_STATE_KEYPATH @"socketState" -#define DD_USER_ID_KEYPATH @"userID" -@class DDReachability; -@interface DDClientState : NSObject -{ - DDReachability* _reachability; -} -/** - * 当前登录用户的状态 - */ -@property(nonatomic,assign)DDUserState userState; - -/** - * 网络连接状态 - */ -@property(nonatomic,assign)DDNetWorkState networkState; - -/** - * Socket连接状态 - */ -@property(nonatomic,assign)DDSocketState socketState; - -/** - * 当前登录用户的ID - */ -@property (nonatomic,retain)NSString* userID; - -/** - * 单例 - * - * @return 客户端状态机 - */ -+ (instancetype)shareInstance; - -- (void)setUseStateWithoutObserver:(DDUserState)userState; - -@end diff --git a/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.m b/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.m deleted file mode 100644 index 801abe4..0000000 --- a/TeamTalk/IOSDuoduo/StateMaintance/DDClientState.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// DDClientState.m -// Duoduo -// -// Created by 独嘉 on 14-4-14. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDClientState.h" -#import "DDReachability.h" -@interface DDClientState(PrivateAPI) - -- (void)n_receiveReachabilityChangedNotification:(NSNotification*)notification; - -@end - -@implementation DDClientState -+ (instancetype)shareInstance -{ - static DDClientState* g_clientState; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_clientState = [[DDClientState alloc] init]; - }); - return g_clientState; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _userState = DDUserOffLine; - _socketState = DDSocketDisconnect; - _reachability = [DDReachability reachabilityForInternetConnection]; - [_reachability startNotifier]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveReachabilityChangedNotification:) - name:kDDReachabilityChangedNotification - object:nil]; - } - return self; -} - - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)setUseStateWithoutObserver:(DDUserState)userState -{ - _userState = userState; -} - -#pragma mark - privateAPI -- (void)n_receiveReachabilityChangedNotification:(NSNotification*)notification -{ - DDReachability * reach = [notification object]; - NetworkStatus netWorkStatus = [reach currentReachabilityStatus]; - switch (netWorkStatus) - { - case NotReachable: - [self setValue:@(DDNetWorkDisconnect) forKeyPath:DD_NETWORK_STATE_KEYPATH]; - break; - case ReachableViaWiFi: - [self setValue:@(DDNetWorkWifi) forKeyPath:DD_NETWORK_STATE_KEYPATH]; - break; - case ReachableViaWWAN: - [self setValue:@(DDNetWork3G) forKeyPath:DD_NETWORK_STATE_KEYPATH]; - break; - } -} -@end diff --git a/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.h b/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.h deleted file mode 100644 index 2d3c497..0000000 --- a/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDClientStateMaintenanceManager.h -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 mogujie. All rights reserved. -// - -#import <Foundation/Foundation.h> - -/** - * 自身状态的维护 - */ -@interface DDClientStateMaintenanceManager : NSObject - -+ (instancetype)shareInstance; --(void)startHeartBeatTimer; --(BOOL)heartBeatTimerIsValid; -@end diff --git a/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.m b/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.m deleted file mode 100644 index f5f763d..0000000 --- a/TeamTalk/IOSDuoduo/StateMaintance/DDClientStateMaintenanceManager.m +++ /dev/null @@ -1,302 +0,0 @@ -// -// DDClientStateMaintenanceManager.m -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDClientStateMaintenanceManager.h" -#import "DDTcpClientManager.h" -#import "DDClientState.h" -#import "DDReachability.h" -#import "DDHeartbeatAPI.h" -#import "DDLoginServer.h" -#import "LoginModule.h" -#import "NetwrokStatusNotifyUI.h" -#import "RecentUsersViewController.h" -static NSInteger const heartBeatTimeinterval = 30; -static NSInteger const serverHeartBeatTimeinterval = 60; -static NSInteger const reloginTimeinterval = 4; - -@interface DDClientStateMaintenanceManager(PrivateAPI) - -//注册KVO -- (void)p_registerClientStateObserver; - -//检验服务器端的心跳 -- (void)p_startCheckServerHeartBeat; -- (void)p_stopCheckServerHeartBeat; -- (void)p_onCheckServerHeartTimer:(NSTimer*)timer; -- (void)n_receiveServerHeartBeat; - -//客户端心跳 -- (void)p_onSendHeartBeatTimer:(NSTimer*)timer; - -//断线重连 -- (void)p_startRelogin; -- (void)p_onReloginTimer:(NSTimer*)timer; -- (void)p_onReserverHeartTimer:(NSTimer*)timer; - -@end - -@implementation DDClientStateMaintenanceManager -{ - NSTimer* _sendHeartTimer; - NSTimer* _reloginTimer; - NSTimer* _serverHeartBeatTimer; - - BOOL _receiveServerHeart; - NSUInteger _reloginInterval; -} -+ (instancetype)shareInstance -{ - static DDClientStateMaintenanceManager* g_clientStateManintenanceManager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_clientStateManintenanceManager = [[DDClientStateMaintenanceManager alloc] init]; - }); - return g_clientStateManintenanceManager; -} - -- (id)init -{ - self = [super init]; - if (self) - { - [self p_registerClientStateObserver]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveServerHeartBeat) name:DDNotificationServerHeartBeat object:nil]; - } - return self; -} - -- (void)dealloc -{ - DDLog(@"DDClientStateMaintenanceManager release"); - [[DDClientState shareInstance] removeObserver:self - forKeyPath:DD_NETWORK_STATE_KEYPATH]; - - [[DDClientState shareInstance] removeObserver:self - forKeyPath:DD_USER_STATE_KEYPATH]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationServerHeartBeat" object:nil]; -} - -#pragma mark KVO -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - DDClientState* clientState = [DDClientState shareInstance]; - //网络状态变化 - if ([keyPath isEqualToString:DD_NETWORK_STATE_KEYPATH]) - { - if ([DDClientState shareInstance].networkState != DDNetWorkDisconnect) - { - [RecentUsersViewController shareInstance].title=@"Team Talk"; - // - BOOL shouldRelogin = !_reloginTimer && ![_reloginTimer isValid] && clientState.userState != DDUserOnline && clientState.userState != DDUserKickout && clientState.userState != DDUserOffLineInitiative; - - if (shouldRelogin) - { - NSLog(@"进入重连"); - _reloginTimer = [NSTimer scheduledTimerWithTimeInterval:reloginTimeinterval target:self selector:@selector(p_onReloginTimer:) userInfo:nil repeats:YES]; - _reloginInterval = 0; - [_reloginTimer fire]; - } - }else - { - [RecentUsersViewController shareInstance].title=@"连接失败"; - - } - } - //用户状态变化 - else if ([keyPath isEqualToString:DD_USER_STATE_KEYPATH]) - { - switch ([DDClientState shareInstance].userState) - { - case DDUserKickout: - [RecentUsersViewController shareInstance].title=@"未连接"; - [self p_stopCheckServerHeartBeat]; - [self p_stopHeartBeat]; - break; - case DDUserOffLine: - [RecentUsersViewController shareInstance].title=@"未连接"; - [self p_stopCheckServerHeartBeat]; - [self p_stopHeartBeat]; - [self p_startRelogin]; - break; - case DDUserOffLineInitiative: - [RecentUsersViewController shareInstance].title=@"未连接"; - [self p_stopCheckServerHeartBeat]; - [self p_stopHeartBeat]; - break; - case DDUserOnline: - [RecentUsersViewController shareInstance].title=@"Team Talk"; - [self p_startCheckServerHeartBeat]; - [self p_startHeartBeat]; - break; - case DDUserLogining: - [RecentUsersViewController shareInstance].title=@"收取中"; - break; - } - } -} - -#pragma mark private API - -//注册KVO -- (void)p_registerClientStateObserver -{ - //网络状态 - [[DDClientState shareInstance] addObserver:self - forKeyPath:DD_NETWORK_STATE_KEYPATH - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld - context:nil]; - - //用户状态 - [[DDClientState shareInstance] addObserver:self - forKeyPath:DD_USER_STATE_KEYPATH - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld - context:nil]; -} - -//开启发送心跳的Timer --(void)p_startHeartBeat{ - - DDLog(@"begin heart beat"); - if (!_sendHeartTimer && ![_sendHeartTimer isValid]) - { - _sendHeartTimer = [NSTimer scheduledTimerWithTimeInterval: heartBeatTimeinterval - target: self - selector: @selector(p_onSendHeartBeatTimer:) - userInfo: nil - repeats: YES]; - } -} - -//关闭发送心跳的Timer -- (void)p_stopHeartBeat -{ - if (_sendHeartTimer) - { - [_sendHeartTimer invalidate]; - _sendHeartTimer = nil; - } -} - -//开启检验服务器端心跳的Timer -- (void)p_startCheckServerHeartBeat -{ - //delete by kuaidao 20141022,In order to save mobile power,remove server heart beat - if (!_serverHeartBeatTimer) - { - DDLog(@"begin maintenance _serverHeartBeatTimer"); - _serverHeartBeatTimer = [NSTimer scheduledTimerWithTimeInterval:serverHeartBeatTimeinterval target:self selector:@selector(p_onCheckServerHeartTimer:) userInfo:nil repeats:YES]; - [_serverHeartBeatTimer fire]; - } -} - -//停止检验服务器端心跳的Timer -- (void)p_stopCheckServerHeartBeat -{ - if (_serverHeartBeatTimer) - { - [_serverHeartBeatTimer invalidate]; - _serverHeartBeatTimer = nil; - } -} - -//开启重连Timer -- (void)p_startRelogin -{ - if (!_reloginTimer) - { - - _reloginTimer = [NSTimer scheduledTimerWithTimeInterval:reloginTimeinterval target:self selector:@selector(p_onReloginTimer:) userInfo:nil repeats:YES]; - [_reloginTimer fire]; - } -} - -//运行在发送心跳的Timer上 -- (void)p_onSendHeartBeatTimer:(NSTimer*)timer -{ - DDLog(@" *********嘣*********"); - DDHeartbeatAPI* heartBeatAPI = [[DDHeartbeatAPI alloc] init]; - [heartBeatAPI requestWithObject:nil Completion:nil]; -} - -//收到服务器端的数据包 -- (void)n_receiveServerHeartBeat -{ - _receiveServerHeart = YES; -} - -//运行在检验服务器端心跳的Timer上 -- (void)p_onCheckServerHeartTimer:(NSTimer *)timer -{ - DDLog(@"check server heart"); - if (_receiveServerHeart) - { - _receiveServerHeart = NO; - } - else - { - [_serverHeartBeatTimer invalidate]; - _serverHeartBeatTimer = nil; - //太久没收到服务器端数据包了 - DDLog(@"太久没收到服务器端数据包了~"); - [DDClientState shareInstance].userState = DDUserOffLine; - } -} - -//运行在断线重连的Timer上 -- (void)p_onReloginTimer:(NSTimer*)timer -{ - static NSUInteger time = 0; - static NSUInteger powN = 0; - time ++; - if (time >= _reloginInterval) - { - - [[LoginModule instance] reloginSuccess:^{ - [_reloginTimer invalidate]; - _reloginTimer = nil; - time = 0; - _reloginInterval = 0; - powN = 0; - [RecentUsersViewController shareInstance].title=@"Team Talk"; - [DDNotificationHelp postNotification:DDNotificationUserReloginSuccess userInfo:nil object:nil]; - [DDClientState shareInstance].userState=DDUserOnline; - DDLog(@"relogin success"); - } failure:^(NSString *error) { - DDLog(@"relogin failure:%@",error); - if ([error isEqualToString:@"未登录"]) { - [_reloginTimer invalidate]; - _reloginTimer = nil; - time = 0; - _reloginInterval = 0; - powN = 0; - [RecentUsersViewController shareInstance].title=@"Team Talk"; - }else{ - [NetwrokStatusNotifyUI showErrorWithStatus:@"重新连接失败"]; - [RecentUsersViewController shareInstance].title=@"未连接"; - powN ++; - time = 0; - _reloginInterval = pow(2, powN); - } - - }]; - } -} --(void)startHeartBeatTimer -{ - [_serverHeartBeatTimer invalidate]; - _serverHeartBeatTimer = nil; - //太久没收到服务器端数据包了 - DDLog(@"太久没收到服务器端数据包了~"); - [DDClientState shareInstance].userState = DDUserOffLine; - -} --(BOOL)heartBeatTimerIsValid -{ - return _serverHeartBeatTimer.isValid; -} -@end diff --git a/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.h b/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.h deleted file mode 100644 index c5a3425..0000000 --- a/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// NotificationHelp.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -typedef void(^Failure)(NSError* error); - -extern NSString* const DDNotificationTcpLinkConnectComplete; //tcp连接建立完成 -extern NSString* const DDNotificationTcpLinkConnectFailure; //tcp连接建立失败 -extern NSString* const DDNotificationTcpLinkDisconnect; //tcp断开连接 - -extern NSString* const DDNotificationStartLogin; //用户开始登录 -extern NSString* const DDNotificationUserLoginFailure; //用户登录失败 -extern NSString* const DDNotificationUserLoginSuccess; //用户登录成功 -extern NSString* const DDNotificationUserReloginSuccess; //用户断线重连成功 -extern NSString* const DDNotificationUserOffline; //用户离线 -extern NSString* const DDNotificationUserKickouted; //用户被挤下线 -extern NSString* const DDNotificationUserInitiativeOffline; //用户主动离线 - -extern NSString* const DDNotificationRemoveSession; //移除会话成功之后的通知 - -extern NSString* const DDNotificationServerHeartBeat; //接收到服务器端的心跳 - -//extern NSString* const notificationGetAllUsers; //获得所有用户 - -extern NSString* const DDNotificationReceiveMessage; //收到一条消息 -extern NSString* const DDNotificationUpdateUnReadMessage; //更新未读消息 - -extern NSString* const DDNotificationReloadTheRecentContacts; //刷新最近联系人界面 -extern NSString* const DDNotificationReceiveP2PShakeMessage; //收到P2P消息 -extern NSString* const DDNotificationReceiveP2PInputingMessage; //收到正在输入消息 -extern NSString* const DDNotificationReceiveP2PStopInputingMessage; //收到停止输入消息 -extern NSString *const DDNotificationLoadLocalGroupFinish; //本地最近联系群加载完成 - -//----------------------------------------------------------------------------- -extern NSString* const DDNotificationRecentContactsUpdate; //最近联系人更新 - -@interface DDNotificationHelp : NSObject - -+ (void)postNotification:(NSString*)notification userInfo:(NSDictionary*)userInfo object:(id)object; - -@end diff --git a/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.m b/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.m deleted file mode 100644 index 1e1cffa..0000000 --- a/TeamTalk/IOSDuoduo/SundriesCenter/DDNotificationHelp.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// NotificationHelp.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDNotificationHelp.h" - -//NSString* const notificationLoginMsgServerSuccess = @"Notification_Login_Msg_Server_Success"; -//NSString* const notificationLoginMsgServerFailure = @"Notification_Login_Msg_Server_Success"; -NSString* const DDNotificationRemoveSession = @"Notification_Remove_Session"; -//NSString* const notificationLoginLoginServerSuccess = @"Notification_login_login_server_success"; -//NSString* const notificationLoginLoginServerFailure = @"Notification_login_login_server_failure"; -NSString* const DDNotificationTcpLinkConnectComplete = @"Notification_Tcp_Link_connect_complete"; -NSString* const DDNotificationTcpLinkConnectFailure = @"Notification_Tcp_Link_conntect_Failure"; -NSString* const DDNotificationTcpLinkDisconnect = @"Notification_Tcp_link_Disconnect"; -NSString* const DDNotificationStartLogin = @"Notification_Start_login"; -NSString* const DDNotificationServerHeartBeat = @"Notification_Server_heart_beat"; -NSString* const DDNotificationUserLoginSuccess = @"Notification_user_login_success"; -NSString* const DDNotificationUserLoginFailure = @"Notification_user_login_failure"; -NSString* const DDNotificationUserReloginSuccess = @"Notification_user_relogin_success"; -NSString* const DDNotificationUserOffline = @"Notification_user_off_line"; -NSString* const DDNotificationUserKickouted = @"Notification_user_kick_out"; -NSString* const DDNotificationUserInitiativeOffline = @"Notification_user_initiative_Offline"; -NSString* const DDNotificationReloadTheRecentContacts = @"Notification_reload_recent_contacts"; - -//NSString* const notificationGetAllUsers = @"Notification_get_all_Users"; -NSString* const DDNotificationReceiveMessage = @"Notification_receive_message"; -NSString* const DDNotificationUpdateUnReadMessage = @"Notification_update_Unread_message"; - -NSString* const DDNotificationReceiveP2PShakeMessage = @"Notification_receive_P2P_Shake_message"; -NSString* const DDNotificationReceiveP2PInputingMessage = @"Notifictaion_receive_P2P_Inputing_message"; -NSString* const DDNotificationReceiveP2PStopInputingMessage = @"Notification_receive_P2P_StopInputing_message"; -NSString* const DDNotificationLoadLocalGroupFinish = @"Notification_local_group"; - -//--------------------------------------------------------------------------------------------------- -NSString* const DDNotificationRecentContactsUpdate = @"Notification_RecentContactsUpdate"; -@implementation DDNotificationHelp -+ (void)postNotification:(NSString*)notification userInfo:(NSDictionary*)userInfo object:(id)object -{ - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:notification object:object userInfo:userInfo]; - }); -} -@end diff --git a/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.h b/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.h deleted file mode 100644 index 59ac390..0000000 --- a/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DDSundriesCenter.h -// Duoduo -// -// Created by 独嘉 on 14-4-23. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -typedef void(^Task)(); - -@interface DDSundriesCenter : NSObject - -@property (nonatomic,readonly)dispatch_queue_t serialQueue; -@property (nonatomic,readonly)dispatch_queue_t parallelQueue; - -+ (instancetype)instance; -- (void)pushTaskToSerialQueue:(Task)task; -- (void)pushTaskToParallelQueue:(Task)task; -- (void)pushTaskToSynchronizationSerialQUeue:(Task)task; -@end diff --git a/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.m b/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.m deleted file mode 100644 index 4e651bc..0000000 --- a/TeamTalk/IOSDuoduo/SundriesCenter/DDSundriesCenter.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// DDSundriesCenter.m -// Duoduo -// -// Created by 独嘉 on 14-4-23. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSundriesCenter.h" - -@implementation DDSundriesCenter -+ (instancetype)instance -{ - static DDSundriesCenter* g_ddSundriesCenter; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_ddSundriesCenter = [[DDSundriesCenter alloc] init]; - }); - return g_ddSundriesCenter; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _serialQueue = dispatch_queue_create("com.mogujie.SundriesSerial", NULL); - _parallelQueue = dispatch_queue_create("com.mogujie.SundriesParallel", NULL); - } - return self; -} - -- (void)pushTaskToSerialQueue:(Task)task -{ - dispatch_async(self.serialQueue, ^{ - task(); - }); -} - -- (void)pushTaskToParallelQueue:(Task)task -{ - dispatch_async(self.parallelQueue, ^{ - task(); - }); -} - -- (void)pushTaskToSynchronizationSerialQUeue:(Task)task -{ - dispatch_sync(self.serialQueue, ^{ - task(); - }); -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.h b/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.h deleted file mode 100644 index 1ff607b..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// DDAPISchedule.h -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDAPIScheduleProtocol.h" -#import "DDAPIUnrequestScheduleProtocol.h" -typedef struct Response_Server_Data_Head { - int serviceID; - int commandID; - int seqNo; -}ServerDataType; - -NS_INLINE ServerDataType DDMakeServerDataType(int serviceID, int commendID,int seqNo) -{ - ServerDataType type; - type.serviceID = serviceID; - type.commandID = commendID; - type.seqNo = seqNo; - return type; -} - - -//TODO:应该有自己的专属线程 - -@interface DDAPISchedule : NSObject - -@property (nonatomic,readonly)dispatch_queue_t apiScheduleQueue; - -+ (instancetype)instance; - -/** - * 注册接口,此接口只应该在DDSuperAPI中被使用 - * - * @param api 接口 - */ -- (BOOL)registerApi:(id<DDAPIScheduleProtocol>)api; - -/** - * 注册超时的查询表,此接口只应该在DDSuperAPI中被使用 - * - * @param api 接口 - */ -- (void)registerTimeoutApi:(id<DDAPIScheduleProtocol>)api; - -/** - * 接收到服务器端的数据进行解析,对外的接口 - * - * @param data 服务器端的数据 - */ -- (void)receiveServerData:(NSData*)data forDataType:(ServerDataType)dataType; - -/** - * 注册没有请求,只有返回的api - * - * @param api api - */ -- (BOOL)registerUnrequestAPI:(id<DDAPIUnrequestScheduleProtocol>)api; - -/** - * 发送数据包 - * - * @param data 数据包 - */ -- (void)sendData:(NSMutableData*)data; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.m b/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.m deleted file mode 100644 index 5dac6f0..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAPISchedule.m +++ /dev/null @@ -1,230 +0,0 @@ -// -// DDAPISchedule.m -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDAPISchedule.h" -#import "DDSuperAPI.h" -#import "DDUnrequestSuperAPI.h" - -#define MAP_REQUEST_KEY(api) [NSString stringWithFormat:@"%i-%i-%i",[api requestServiceID],[api requestCommendID],[(DDSuperAPI*)api seqNo]] - -#define MAP_RESPONSE_KEY(api) [NSString stringWithFormat:@"response_%i-%i-%i",[api responseServiceID],[api responseCommendID],[(DDSuperAPI*)api seqNo]] - -#define MAP_DATA_RESPONSE_KEY(serverData) [NSString stringWithFormat:@"response_%i-%i-%i",serverData.serviceID,serverData.commandID,serverData.seqNo] - -#define MAP_UNREQUEST_KEY(api) [NSString stringWithFormat:@"%i-%i",[api responseServiceID],[api responseCommandID]] - -#define MAP_DATA_UNREQUEST_KEY(serverData) [NSString stringWithFormat:@"%i-%i",serverData.serviceID,serverData.commandID] - -typedef NS_ENUM(NSInteger, APIErrorCode){ - Timeout = 1001, - Result = 1002 -}; - -static NSInteger const timeInterval = 1; - -@interface DDAPISchedule(PrivateAPI) - -- (void)p_requestCompletion:(id<DDAPIScheduleProtocol>)api; -- (void)p_timeoutOnTimer:(id)timer; - -@end - -@implementation DDAPISchedule -{ - NSMutableDictionary* _apiRequestMap; - NSMutableDictionary* _apiResponseMap; - - NSMutableDictionary* _unrequestMap; - NSMutableDictionary* _timeoutMap; - - NSTimer* _timeOutTimer; -} -+ (instancetype)instance -{ - static DDAPISchedule* g_apiSchedule; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_apiSchedule = [[DDAPISchedule alloc] init]; - }); - return g_apiSchedule; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _apiRequestMap = [[NSMutableDictionary alloc] init]; - _apiResponseMap = [[NSMutableDictionary alloc] init]; - _unrequestMap = [[NSMutableDictionary alloc] init]; - _timeoutMap = [[NSMutableDictionary alloc] init]; - _apiScheduleQueue = dispatch_queue_create("com.mogujie.duoduo.apiSchedule", NULL); -// _timeOutTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(p_timeoutOnTimer:) userInfo:nil repeats:YES]; - } - return self; -} - -#pragma mark public -- (BOOL)registerApi:(id<DDAPIScheduleProtocol>)api -{ - __block BOOL registSuccess = NO; - dispatch_sync(self.apiScheduleQueue, ^{ - if (![api analysisReturnData]) - { - registSuccess = YES; - } - if (![[_apiRequestMap allKeys] containsObject:MAP_REQUEST_KEY(api)]) - { - [_apiRequestMap setObject:api forKey:MAP_REQUEST_KEY(api)]; - registSuccess = YES; - } - else - { - registSuccess = NO; - } - - //注册返回数据处理 - if (![[_apiResponseMap allKeys] containsObject:MAP_RESPONSE_KEY(api)]) - { - [_apiResponseMap setObject:api forKey:MAP_RESPONSE_KEY(api)]; - } - }); - return registSuccess; -} - -- (void)registerTimeoutApi:(id<DDAPIScheduleProtocol>)api -{ - double delayInSeconds = [api requestTimeOutTimeInterval]; - if (delayInSeconds == 0) - { - return; - } - -// [_timeoutMap setObject:api forKey:[NSDate date]]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - if ([[_apiRequestMap allKeys] containsObject:MAP_REQUEST_KEY(api)]) - { - [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - RequestCompletion completion = [(DDSuperAPI*)api completion]; - NSError* error = [NSError errorWithDomain:@"请求超时" code:Timeout userInfo:nil]; - dispatch_sync(dispatch_get_main_queue(), ^{ - completion(nil,error); - }); - [self p_requestCompletion:api]; - }]; - } - }); -} - - -- (void)receiveServerData:(NSData*)data forDataType:(ServerDataType)dataType -{ - dispatch_async(self.apiScheduleQueue, ^{ - NSString* key = MAP_DATA_RESPONSE_KEY(dataType); - - //根据key去调用注册api的completion - id<DDAPIScheduleProtocol> api = _apiResponseMap[key]; - if (api) - { - RequestCompletion completion = [(DDSuperAPI*)api completion]; - Analysis analysis = [api analysisReturnData]; - id response = analysis(data); - [self p_requestCompletion:api]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(response,nil); - }); - } - else - { - NSString* unrequestKey = MAP_DATA_UNREQUEST_KEY(dataType); - id<DDAPIUnrequestScheduleProtocol> unrequestAPI = _unrequestMap[unrequestKey]; - if (unrequestAPI) - { - UnrequestAPIAnalysis unrequestAnalysis = [unrequestAPI unrequestAnalysis]; - id object = unrequestAnalysis(data); - ReceiveData received = [(DDUnrequestSuperAPI*)unrequestAPI receivedData]; - dispatch_async(dispatch_get_main_queue(), ^{ - received(object,nil); - - }); - } - } - }); - -} - -- (BOOL)registerUnrequestAPI:(id<DDAPIUnrequestScheduleProtocol>)api -{ - __block BOOL registerSuccess = NO; - dispatch_sync(self.apiScheduleQueue, ^{ - NSString* key = MAP_UNREQUEST_KEY(api); - if ([[_unrequestMap allKeys] containsObject:key]) - { - registerSuccess = NO; - } - else - { - [_unrequestMap setObject:api forKey:key]; - registerSuccess = YES; - } - }); - return registerSuccess; -} - -- (void)sendData:(NSMutableData*)data -{ - dispatch_async(self.apiScheduleQueue, ^{ - [[DDTcpClientManager instance] writeToSocket:data]; - }); -} - -#pragma mark - privateAPI - -- (void)p_requestCompletion:(id<DDAPIScheduleProtocol>)api -{ - [_apiRequestMap removeObjectForKey:MAP_REQUEST_KEY(api)]; - - [_apiResponseMap removeObjectForKey:MAP_RESPONSE_KEY(api)]; -} - -- (void)p_timeoutOnTimer:(id)timer -{ - NSDate* date = [NSDate date]; - NSInteger count = [_timeoutMap count]; - if (count == 0) - { - return; - } - NSArray* allKeys = [_timeoutMap allKeys]; - for (int index = 0; index < count; index ++) - { - NSDate* key = allKeys[index]; - id<DDAPIScheduleProtocol> api = (id<DDAPIScheduleProtocol>)[_timeoutMap objectForKey:key]; - NSDate* beginDate = (NSDate*)key; - NSInteger gap = [date timeIntervalSinceDate:beginDate]; - - NSInteger apitimeval = [api requestTimeOutTimeInterval]; - if (gap > apitimeval) - { - if ([[_apiRequestMap allKeys] containsObject:MAP_REQUEST_KEY(api)]) - { - RequestCompletion completion = [(DDSuperAPI*)api completion]; - NSError* error = [NSError errorWithDomain:@"请求超时" code:Timeout userInfo:nil]; - completion(nil,error); -// [self p_requestCompletion:obj]; - } - - } - } - [_timeoutMap enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - - }]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAPIScheduleProtocol.h b/TeamTalk/IOSDuoduo/TCPAPI/DDAPIScheduleProtocol.h deleted file mode 100644 index 4d6da4e..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAPIScheduleProtocol.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// DDNetworkAPIProtocol.h -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -typedef id(^Analysis)(NSData* data); -typedef NSMutableData*(^Package)(id object,uint16_t seqNO); - -@protocol DDAPIScheduleProtocol <NSObject> -@required - -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval; - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID; - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID; - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID; - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID; - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData; - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAPIUnrequestScheduleProtocol.h b/TeamTalk/IOSDuoduo/TCPAPI/DDAPIUnrequestScheduleProtocol.h deleted file mode 100644 index 283e960..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAPIUnrequestScheduleProtocol.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// DDAPIUnrequestScheduleProtocol.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -typedef id(^UnrequestAPIAnalysis)(NSData* data); - -@protocol DDAPIUnrequestScheduleProtocol <NSObject> -@required -/** - * 数据包中的serviceID - * - * @return serviceID - */ -- (int)responseServiceID; - -/** - * 数据包中的commandID - * - * @return commandID - */ -- (int)responseCommandID; - -/** - * 解析数据包 - * - * @return 解析数据包的block - */ -- (UnrequestAPIAnalysis)unrequestAnalysis; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.h deleted file mode 100644 index 5037686..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDAddMemberToGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -/** - * 添加用户到讨论组,object 为数组,index1:groupId,index2:userIdList - */ -@interface DDAddMemberToGroupAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m deleted file mode 100644 index e99a2c8..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// DDAddMemberToGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDAddMemberToGroupAPI.h" -#import "DDGroupModule.h" -#import "DDGroupEntity.h" -#import "RuntimeStatus.h" -@implementation DDAddMemberToGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_CHANGE_GROUP_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_CHANGE_GROUP_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t result = [bodyData readInt]; - DDGroupEntity *groupEntity = nil; - if (result != 0) - { - return groupEntity; - } - NSString *groupId = [bodyData readUTF]; - uint32_t userCnt = [bodyData readInt]; - groupEntity = [[DDGroupModule instance] getGroupByGId:[NSString stringWithFormat:@"%@",groupId]]; - for (uint32_t i = 0; i < userCnt; i++) { - NSString* userId = [bodyData readUTF]; - if (![groupEntity.groupUserIds containsObject:userId]) { - [groupEntity.groupUserIds addObject:userId]; - [groupEntity addFixOrderGroupUserIDS:userId]; - } - } - - return groupEntity; - - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSArray* array = (NSArray*)object; - NSString* groupId = array[0]; - NSArray* userList = array[1]; - int changeType=0; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(groupId) + 8; - - NSUInteger userCnt = [userList count]; - for (NSUInteger i = 0; i < userCnt; i++) { - NSString *userId = [userList objectAtIndex:i]; - totalLen += 4 + strLen(userId); - } - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP cId:CMD_ID_GROUP_CHANGE_GROUP_REQ seqNo:seqNo]; - [dataout writeUTF:groupId]; - [dataout writeInt:changeType]; - [dataout writeInt:(uint32_t)userCnt]; - [dataout writeDataCount]; - for (NSUInteger i = 0; i < userCnt; i++) { - NSString *userId = [userList objectAtIndex:i]; - [dataout writeUTF:userId]; - } - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.h deleted file mode 100644 index 84c65d6..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDAllUserAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDAllUserAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.m deleted file mode 100644 index 82feba1..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDAllUserAPI.m +++ /dev/null @@ -1,137 +0,0 @@ -// -// DDAllUserAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDAllUserAPI.h" -#import "DDUserEntity.h" - -@implementation DDAllUserAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 2; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_FRI; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_FRI; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_FRI_ALL_USER_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_FRI_ALL_USER_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - - uint32_t userCnt = [bodyData readInt]; - NSMutableArray *userList = [[NSMutableArray alloc] init]; - - for (uint32_t i = 0; i < userCnt; i++) { - - NSString *userId =[bodyData readUTF]; - NSString *username = [bodyData readUTF]; - NSString *nickName = [bodyData readUTF]; - NSString *avatar = [bodyData readUTF]; - NSString *title = [bodyData readUTF]; - NSString *position = [bodyData readUTF]; - NSInteger roleStatus = [bodyData readInt]; - NSInteger sex = [bodyData readInt]; - NSString *departId = [bodyData readUTF]; - NSInteger jobNum = [bodyData readInt]; - NSString *telphone = [bodyData readUTF]; - NSString *email = [bodyData readUTF]; - NSDictionary* result = nil; - result = @{ - @"name":username, - @"nickName":nickName, - @"userId":userId, - @"title":title, - @"position":position, - @"roleStatus":@(roleStatus), - @"sex":@(sex), - @"departId":departId, - @"jobNum":@(jobNum), - @"telphone":telphone, - @"avatar":avatar, - @"email":email, - }; - DDUserEntity *user = [DDUserEntity dicToUserEntity:result]; - [userList addObject:user]; - - } - return userList; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:DDSERVICE_FRI - cId:CMD_FRI_ALL_USER_REQ - seqNo:seqNo]; - [dataout writeDataCount]; - // log4CInfo(@"serviceID:%i cmdID:%i --> get all user",MODULE_ID_FRIENDLIST,CMD_FRI_ALL_USER_REQ); - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.h deleted file mode 100644 index 0287c13..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDCreateGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -/** - * 创建讨论组,object为数组,index1:groupName,index2:groupAvatar,index3:userlist - */ -@interface DDCreateGroupAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.m deleted file mode 100644 index f8251ff..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDCreateGroupAPI.m +++ /dev/null @@ -1,142 +0,0 @@ -// -// DDCreateGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDCreateGroupAPI.h" -#import "DDTcpProtocolHeader.h" -#import "DDGroupEntity.h" -@implementation DDCreateGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_CREATE_TMP_GROUP_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_CREATE_TMP_GROUP_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t result = [bodyData readInt]; - - - DDGroupEntity* group = nil; - if (result != 0) - { - return group; - } - else - { - NSString *groupId = [bodyData readUTF]; - NSString *groupName = [bodyData readUTF]; - uint32_t userCnt = [bodyData readInt]; - group = [[DDGroupEntity alloc] init]; - group.objID = groupId; - group.name = groupName; - group.groupUserIds = [[NSMutableArray alloc] init]; - - for (uint32_t i = 0; i < userCnt; i++) { - NSString* userId = [bodyData readUTF]; - [group.groupUserIds addObject:userId]; - [group addFixOrderGroupUserIDS:userId]; - } - - return group; - } - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSArray* array = (NSArray*)object; - NSString* groupName = array[0]; - NSString* groupAvatar = array[1]; - NSArray* groupUserList = array[2]; - - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + strLen(groupName) + strLen(groupAvatar) + 12; - - NSUInteger totalUserCnt = [groupUserList count]; - for (NSUInteger i = 0; i < totalUserCnt; i++) { - NSString *userId = [groupUserList objectAtIndex:i]; - totalLen += 4 + strLen(userId); - } - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_CREATE_TMP_GROUP_REQ - seqNo:seqNo]; - [dataout writeUTF:groupName]; - [dataout writeUTF:groupAvatar]; - [dataout writeInt:(uint32_t)totalUserCnt]; - for (NSUInteger i = 0; i < totalUserCnt; i++) { - NSString *userId = [groupUserList objectAtIndex:i]; - [dataout writeUTF:userId]; - } - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.h b/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.h deleted file mode 100644 index 4ca3f73..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// DataInputStream.h -// mtalk -// -// Created by maye on 13-10-24. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -// 从输入流读取基本数据类型的方法,以便解组自定义值类型 -@interface DDDataInputStream : NSObject { - NSData *data; - NSInteger length; -} - -// -- (id)initWithData:(NSData *)data; - -// -+ (id)dataInputStreamWithData:(NSData *)aData; - -// 从输入流读取 char 值。 -- (int8_t)readChar; - -//从输入流读取 short 值。 -- (int16_t)readShort; - -//从输入流读取 int 值。 -- (int32_t)readInt; - -//从输入流读取 long 值。 -- (int64_t)readLong; - -//从输入流读取 NSString 字符串。 -- (NSString *)readUTF; - -//取得可读的长度 --(NSUInteger)getAvailabledLen; - --(NSData *)readDataWithLength:(int)len; - -//取得剩下的数据 --(NSData *)readLeftData; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.m b/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.m deleted file mode 100644 index b2be68d..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDataInputStream.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// DataInputStream.m -// mtalk -// -// Created by maye on 13-10-24. -// Copyright (c) 2013年 zuoye. All rights reserved. -// -#import "DDDataInputStream.h" - -@interface DDDataInputStream (PrivateMethods) -- (int32_t)read; -@end - -@implementation DDDataInputStream - -- (id)initWithData:(NSData *)aData { - self = [self init]; - if(self != nil){ - data = [[NSData alloc] initWithData:aData]; - } - return self; -} - -- (id)init{ - self = [super init]; - if(self != nil){ - length = 0; - } - return self; -} - -+ (id)dataInputStreamWithData:(NSData *)aData { - DDDataInputStream *dataInputStream = [[self alloc] initWithData:aData]; - return dataInputStream ; -} - --(NSUInteger)getAvailabledLen{ - return [data length]; -} - -- (int32_t)read{ - int8_t v; - [data getBytes:&v range:NSMakeRange(length,1)]; - length++; - return ((int32_t)v & 0x0ff); -} - -- (int8_t)readChar { - int8_t v; - [data getBytes:&v range:NSMakeRange(length,1)]; - length++; - return (v & 0x0ff); -} - -- (int16_t)readShort { - int32_t ch1 = [self read]; - int32_t ch2 = [self read]; - if ((ch1 | ch2) < 0){ - @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; - } - return (int16_t)((ch1 << 8) + (ch2 << 0)); - -} - -- (int32_t)readInt { - int32_t ch1 = [self read]; - int32_t ch2 = [self read]; - int32_t ch3 = [self read]; - int32_t ch4 = [self read]; - if ((ch1 | ch2 | ch3 | ch4) < 0){ - @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; - } - return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); -} - -- (int64_t)readLong { - int8_t ch[8]; - [data getBytes:&ch range:NSMakeRange(length,8)]; - length = length + 8; - - return (((int64_t)ch[0] << 56) + - ((int64_t)(ch[1] & 255) << 48) + - ((int64_t)(ch[2] & 255) << 40) + - ((int64_t)(ch[3] & 255) << 32) + - ((int64_t)(ch[4] & 255) << 24) + - ((ch[5] & 255) << 16) + - ((ch[6] & 255) << 8) + - ((ch[7] & 255) << 0)); - -} - -- (NSString *)readUTF { - //short utfLength = [self readShort]; - int32_t utfLength = [self readInt]; - NSData *d = [data subdataWithRange:NSMakeRange(length,utfLength)]; - NSString *str = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]; - length = length + utfLength; - return str; -} - --(NSData *)readDataWithLength:(int)len{ - DDLog(@"================>>>> lenght: %ld len:%d",(long)length,len); - NSData *d =[data subdataWithRange:NSMakeRange(length, len)]; - length = length +len; - return d; -} - --(NSData *)readLeftData{ - DDLog(@"=====>>> length %ld data's length %ld",(long)length,(unsigned long)[data length]); - if ([data length]>length) { - NSData *d =[data subdataWithRange:NSMakeRange(length, [data length])]; - length = [data length]; - return d; - } - return nil; - -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.h b/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.h deleted file mode 100644 index 0707d67..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// DataOutputStream.h -// mtalk -// -// Created by maye on 13-10-24. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -// 数据输出流允许应用程序以适当方式将基本数据类型写入输出流中 -@interface DDDataOutputStream : NSObject{ - NSMutableData *data; - NSInteger length; -} -// 将一个 char 值以 1-byte 值形式写入基础输出流中,先写入高字节。 -- (void)writeChar:(int8_t)v; - -//将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。 -- (void)writeShort:(int16_t)v; - -//将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 -- (void)writeInt:(int32_t)v; - -//将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 -- (void)writeLong:(int64_t)v; - -//以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 -- (void)writeUTF:(NSString *)v; - -//将一个 NSData byte数组写入输出流中,先写入高字节。 -- (void)writeBytes:(NSData *)v; - --(void)writeDataCount; -//将此转换为 byte 序列。 -- (NSMutableData *)toByteArray; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.m b/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.m deleted file mode 100644 index 09bdeb3..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDataOutputStream.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// DataOutputStream.m -// mtalk -// -// Created by maye on 13-10-24. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import "DDDataOutputStream.h" - -@implementation DDDataOutputStream -- (id)init{ - self = [super init]; - if(self != nil){ - data = [[NSMutableData alloc] init]; - length = 0; - } - return self; -} - -- (void)writeChar:(int8_t)v { - int8_t ch[1]; - ch[0] = (v & 0x0ff); - [data appendBytes:ch length:1]; - length++; -} - -- (void)writeShort:(int16_t)v { - int8_t ch[2]; - ch[0] = (v & 0x0ff00)>>8; - ch[1] = (v & 0x0ff); - [data appendBytes:ch length:2]; - length = length + 2; -} - -- (void)writeInt:(int32_t)v { - int8_t ch[4]; - for(int32_t i = 0;i<4;i++){ - ch[i] = ((v >> ((3 - i)*8)) & 0x0ff); - } - [data appendBytes:ch length:4]; - length = length + 4; -} - -- (void)writeLong:(int64_t)v { - int8_t ch[8]; - for(int32_t i = 0;i<8;i++){ - ch[i] = ((v >> ((7 - i)*8)) & 0x0ff); - } - [data appendBytes:ch length:8]; - length = length + 8; -} - -- (void)writeUTF:(NSString *)v { - NSData *d = [v dataUsingEncoding:NSUTF8StringEncoding]; - uint32_t len = (uint32_t)[d length]; - - [self writeInt:len]; - [data appendData:d]; - length = length + len; -} - -- (void)writeBytes:(NSData *)v { - int32_t len = (int32_t)[v length]; - [self writeInt:len]; - [data appendData:v]; - - length = length + len; -} - --(void)writeDataCount -{ - int8_t ch[4]; - for(int32_t i = 0;i<4;i++){ - ch[i] = ((length >> ((3 - i)*8)) & 0x0ff); - } - - [data replaceBytesInRange:NSMakeRange(0, 4) withBytes:ch]; -} - -- (NSMutableData *)toByteArray{ - return [[NSMutableData alloc] initWithData:data]; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.h deleted file mode 100644 index e216a1c..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDDeleteMemberFromGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" -/** - * 移除讨论组中的某个用户,index1:groupId,index2:userlist - */ -@interface DDDeleteMemberFromGroupAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m deleted file mode 100644 index 21e2af6..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// DDDeleteMemberFromGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDDeleteMemberFromGroupAPI.h" -#import "DDGroupEntity.h" -#import "DDGroupModule.h" -@implementation DDDeleteMemberFromGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_CHANGE_GROUP_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_CHANGE_GROUP_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t result = [bodyData readInt]; - __block DDGroupEntity *groupEntity = nil; - if (result != 0) - { - return groupEntity; - } - NSString *groupId = [bodyData readUTF]; - uint32_t userCnt = [bodyData readInt]; - groupEntity =[[DDGroupModule instance] getGroupByGId:[NSString stringWithFormat:@"%@",groupId]]; - if (groupEntity) { - for (uint32_t i = 0; i < userCnt; i++) { - NSString* userId = [bodyData readUTF]; - if ([groupEntity.groupUserIds containsObject:userId]) - { - [groupEntity.groupUserIds removeObject:userId]; - } - } - } - return groupEntity; - - }; - return analysis; -} - - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSArray* array = (NSArray*)object; - NSString* groupId = array[0]; - NSArray* userList = array[1]; - int changeType = 1; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(groupId) + 8; - - NSUInteger userCnt = [userList count]; - for (NSUInteger i = 0; i < userCnt; i++) { - NSString *userId = [userList objectAtIndex:i]; - totalLen += 4 + strLen(userId); - } - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP cId:CMD_ID_GROUP_CHANGE_GROUP_REQ seqNo:seqNo]; - [dataout writeUTF:groupId]; - [dataout writeInt:changeType]; - [dataout writeInt:(uint32_t)userCnt]; - for (NSUInteger i = 0; i < userCnt; i++) { - NSString *userId = [userList objectAtIndex:i]; - [dataout writeUTF:userId]; - } - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.h deleted file mode 100644 index b0b9f8a..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDDepartment.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-05. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDDepartmentAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.m deleted file mode 100644 index e67c198..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDDepartmentAPI.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// DDDepartment.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-05. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDDepartmentAPI.h" - -@implementation DDDepartmentAPI - -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 2; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return 2; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return 2; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return 18; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return 19; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSInteger departCount = [bodyData readInt]; - NSMutableArray *array = [NSMutableArray new]; - for (int i = 0 ; i<departCount; i++) { - NSString *departID = [bodyData readUTF]; - NSString *title = [bodyData readUTF]; - NSString *description = [bodyData readUTF]; - NSString *parentID = [bodyData readUTF]; - NSString *leader = [bodyData readUTF]; - NSInteger isDelete = [bodyData readInt]; - NSDictionary *result = @{@"departCount": @(departCount), - @"departID":departID, - @"title":title, - @"description":description, - @"parentID":parentID, - @"leader":leader, - @"isDelete":@(isDelete) - }; - [array addObject:result]; - - } - - return array; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:2 - cId:18 - seqNo:seqNo]; - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.h deleted file mode 100644 index a472cc6..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDFixedGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDFixedGroupAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.m deleted file mode 100644 index a4d1b58..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDFixedGroupAPI.m +++ /dev/null @@ -1,128 +0,0 @@ -// -// DDFixedGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDFixedGroupAPI.h" -#import "DDGroupEntity.h" -@implementation DDFixedGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_LIST_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_LIST_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* object) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:object]; - NSMutableArray* recentlyGroup = [[NSMutableArray alloc] init]; - uint32_t groupCnt = [bodyData readInt]; - for (uint32_t i = 0; i < groupCnt; i++) - { - NSString* groupId = [bodyData readUTF]; - NSString* groupName = [bodyData readUTF]; - NSString* groupAvatar = [bodyData readUTF]; - NSString* groupCreator = [bodyData readUTF]; - - int groupType = [bodyData readInt]; - DDGroupEntity* group = [[DDGroupEntity alloc] init]; - group.objID = groupId; - group.name = groupName; - group.avatar = groupAvatar; - group.groupCreatorId = groupCreator; - group.groupType = groupType; - - uint32_t groupMemberCnt = [bodyData readInt]; - if(groupMemberCnt > 0) - group.groupUserIds = [[NSMutableArray alloc] init]; - for (uint32_t i = 0; i < groupMemberCnt; i++) - { - NSString *userId = [bodyData readUTF]; - [group.groupUserIds addObject:userId]; - [group addFixOrderGroupUserIDS:userId]; - } - - [recentlyGroup addObject:group]; - } - //log4CInfo(@"get recently group count:%i",[recentlyGroup count]); - return recentlyGroup; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_LIST_REQ - seqNo:seqNo]; - [dataout writeDataCount]; -// log4CInfo(@"serviceID:%i cmdID:%i --> about group",MODULE_ID_GROUP,CMD_ID_GROUP_LIST_REQ); - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.h deleted file mode 100644 index 0aba2ba..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGroupInfoAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGroupInfoAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.m deleted file mode 100644 index e9a9d75..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupInfoAPI.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// DDGroupInfoAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDGroupInfoAPI.h" -#import "DDGroupEntity.h" -@implementation DDGroupInfoAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_USER_LIST_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_USER_LIST_RES; -} -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSString *groupId = [bodyData readUTF]; - uint32_t result = [bodyData readInt]; - DDGroupEntity* group = nil; - if (result != 0) - { - return group; - } - group = [[DDGroupEntity alloc] init]; - NSString *groupName = [bodyData readUTF]; - NSString *groupAvatar = [bodyData readUTF]; - NSString *groupCreator = [bodyData readUTF]; - int groupType = [bodyData readInt]; - group.objID = groupId; - group.name = groupName; - group.avatar = groupAvatar; - group.groupCreatorId = groupCreator; - group.groupType = groupType; - uint32_t groupMemberCnt = [bodyData readInt]; - if(groupMemberCnt > 0) - group.groupUserIds = [[NSMutableArray alloc] init]; - for (uint32_t i = 0; i < groupMemberCnt; i++) - { - NSString *userId = [bodyData readUTF]; - [group.groupUserIds addObject:userId]; - [group addFixOrderGroupUserIDS:userId]; - } - return group; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(object); - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_USER_LIST_REQ - seqNo:seqNo]; - [dataout writeUTF:object]; -// log4CInfo(@"serviceID:%i cmdID:%i --> get group user list req",MODULE_ID_GROUP,CMD_ID_GROUP_USER_LIST_REQ); - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.h deleted file mode 100644 index 70a50b0..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGroupMsgReadACKAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGroupMsgReadACKAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.m deleted file mode 100644 index a0718cf..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReadACKAPI.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// DDGroupMsgReadACKAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDGroupMsgReadACKAPI.h" - -@implementation DDGroupMsgReadACKAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 0; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return 0; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_MSG_READ_ACK; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return 0; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - return nil; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSString* groupId = (NSString*)object; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(groupId); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP cId:CMD_ID_GROUP_MSG_READ_ACK seqNo:seqNo]; - [dataout writeUTF:groupId]; - NSLog(@"i will send"); -// log4CInfo(@"serviceID:%i cmdID:%i --> group msg read ACK group ID:%@",MODULE_ID_GROUP,CMD_ID_GROUP_MSG_READ_ACK,groupId); - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.h deleted file mode 100644 index f42e088..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGroupMsgReceivedACKAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGroupMsgReceivedACKAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.m deleted file mode 100644 index 67eaff3..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupMsgReceivedACKAPI.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGroupMsgReceivedACKAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDGroupMsgReceivedACKAPI.h" - -@implementation DDGroupMsgReceivedACKAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.h deleted file mode 100644 index 5942173..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDDDGroupsUnreadMessageAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -/** - * 根据groupID获取相应的未读群消息,object是groupID - */ -@interface DDGroupsUnreadMessageAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m deleted file mode 100644 index 7641a21..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m +++ /dev/null @@ -1,176 +0,0 @@ -// -// DDDDGroupsUnreadMessageAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDGroupsUnreadMessageAPI.h" -#import "DDMessageEntity.h" -#import "Encapsulator.h" -#import "RuntimeStatus.h" -#import "DDMessageModule.h" -@implementation DDGroupsUnreadMessageAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 5; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_UNREAD_MSG_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_UNREAD_MSG_RES; -} -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSMutableArray* msgArray = [[NSMutableArray alloc] init]; - NSMutableDictionary* msgDict = [[NSMutableDictionary alloc] init]; - NSString *groupId = [bodyData readUTF]; - uint32_t msgCnt = [bodyData readInt]; - for (uint32_t i = 0; i < msgCnt; i++) - { - - NSString *fromUserId = [bodyData readUTF]; - uint32_t createTime = [bodyData readInt]; - DDMessageContentType msgType = [bodyData readChar]; - NSString* messageContent = nil; - - NSMutableDictionary* info = [[NSMutableDictionary alloc] init]; - if ( msgType == DDGroup_Message_TypeText ) { - messageContent = [bodyData readUTF]; - }else if (msgType == DDGroup_MessageTypeVoice) - { - - int32_t dataLength = [bodyData readInt]; - if (dataLength != 0) { - NSData* data = [bodyData readDataWithLength:dataLength]; - NSData* voiceData = [data subdataWithRange:NSMakeRange(4, [data length] - 4)]; - NSString* filename = [NSString stringWithString:[Encapsulator defaultFileName]]; - if ([voiceData writeToFile:filename atomically:YES]) - { - messageContent = filename; - } - - NSData* voiceLengthData = [data subdataWithRange:NSMakeRange(0, 4)]; - - int8_t ch1; - [voiceLengthData getBytes:&ch1 range:NSMakeRange(0,1)]; - ch1 = ch1 & 0x0ff; - - int8_t ch2; - [voiceLengthData getBytes:&ch2 range:NSMakeRange(1,1)]; - ch2 = ch2 & 0x0ff; - - int32_t ch3; - [voiceLengthData getBytes:&ch3 range:NSMakeRange(2,1)]; - ch3 = ch3 & 0x0ff; - - int32_t ch4; - [voiceLengthData getBytes:&ch4 range:NSMakeRange(3,1)]; - ch4 = ch4 & 0x0ff; - - if ((ch1 | ch2 | ch3 | ch4) < 0){ - @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; - } - int voiceLength = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); - [info setObject:@(voiceLength) forKey:VOICE_LENGTH]; - [info setObject:@(0) forKey:DDVOICE_PLAYED]; - } - - } - if ([messageContent hasPrefix:DD_MESSAGE_IMAGE_PREFIX]) - { - msgType = DDMessageTypeImage; - } - DDMessageEntity *msg = nil; - if (msgType == 0) - { - break; - } - else - { - NSString *messageID = [DDMessageModule getMessageID]; - msg = [[DDMessageEntity alloc ] initWithMsgID:messageID msgType:MESSAGE_TYPE_TEMP_GROUP msgTime:createTime sessionID:groupId senderID:fromUserId msgContent:messageContent toUserID:[RuntimeStatus instance].user.objID]; - msg.msgContentType=msgType; - [msg setInfo:info]; - } - - [msgArray addObject:msg]; - } - [msgDict setObject:groupId forKey:@"sessionId"]; - [msgDict setObject:msgArray forKey:@"msgArray"]; - return msgDict; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - NSString* groupId = (NSString*)object; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(groupId); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP cId:CMD_ID_GROUP_UNREAD_MSG_REQ seqNo:seqNo]; - - [dataout writeUTF:groupId]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.h b/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.h deleted file mode 100644 index 11049f0..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright (c) 2011, Tony Million. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> -#import <SystemConfiguration/SystemConfiguration.h> - -#import <sys/socket.h> -#import <netinet/in.h> -#import <netinet6/in6.h> -#import <arpa/inet.h> -#import <ifaddrs.h> -#import <netdb.h> - -/** - * Does ARC support GCD objects? - * It does if the minimum deployment target is iOS 6+ or Mac OS X 8+ - * - * @see http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h - **/ -#if OS_OBJECT_USE_OBJC -#define NEEDS_DISPATCH_RETAIN_RELEASE 0 -#else -#define NEEDS_DISPATCH_RETAIN_RELEASE 1 -#endif - -/** - * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. - * - * @see http://nshipster.com/ns_enum-ns_options/ - **/ -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -extern NSString *const kDDReachabilityChangedNotification; - -typedef NS_ENUM(NSInteger, NetworkStatus) { - // Apple NetworkStatus Compatible Names. - NotReachable = 0, - ReachableViaWiFi = 2, - ReachableViaWWAN = 1 -}; - -@class DDReachability; - -typedef void (^NetworkReachable)(DDReachability * reachability); -typedef void (^NetworkUnreachable)(DDReachability * reachability); - -@interface DDReachability : NSObject - -@property (nonatomic, copy) NetworkReachable reachableBlock; -@property (nonatomic, copy) NetworkUnreachable unreachableBlock; - - -@property (nonatomic, assign) BOOL reachableOnWWAN; - -+(DDReachability*)reachabilityWithHostname:(NSString*)hostname; -+(DDReachability*)reachabilityForInternetConnection; -+(DDReachability*)reachabilityWithAddress:(const struct sockaddr_in*)hostAddress; -+(DDReachability*)reachabilityForLocalWiFi; - --(DDReachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref; - --(BOOL)startNotifier; --(void)stopNotifier; - --(BOOL)isReachable; --(BOOL)isReachableViaWWAN; --(BOOL)isReachableViaWiFi; - -// WWAN may be available, but not active until a connection has been established. -// WiFi may require a connection for VPN on Demand. --(BOOL)isConnectionRequired; // Identical DDG variant. --(BOOL)connectionRequired; // Apple's routine. -// Dynamic, on demand connection? --(BOOL)isConnectionOnDemand; -// Is user intervention required? --(BOOL)isInterventionRequired; - --(NetworkStatus)currentReachabilityStatus; --(SCNetworkReachabilityFlags)reachabilityFlags; --(NSString*)currentReachabilityString; --(NSString*)currentReachabilityFlags; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.m b/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.m deleted file mode 100644 index d3efdc8..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReachability.m +++ /dev/null @@ -1,527 +0,0 @@ -/* - Copyright (c) 2011, Tony Million. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ - -#import "DDReachability.h" - - -NSString *const kDDReachabilityChangedNotification = @"kDDReachabilityChangedNotification"; - -@interface DDReachability () - -@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; - - -#if NEEDS_DISPATCH_RETAIN_RELEASE -@property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue; -#else -@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; -#endif - - -@property (nonatomic, strong) id reachabilityObject; - --(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags; --(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags; - -@end - -static NSString *reachabilityFlags(SCNetworkReachabilityFlags flags) -{ - return [NSString stringWithFormat:@"%c%c %c%c%c%c%c%c%c", -#if TARGET_OS_IPHONE - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', -#else - 'X', -#endif - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-']; -} - -// Start listening for reachability notifications on the current run loop -static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) -{ -#pragma unused (target) -#if __has_feature(objc_arc) - DDReachability *reachability = ((__bridge DDReachability*)info); -#else - DDReachability *reachability = ((DDReachability*)info); -#endif - - // We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool, - // but what the heck eh? - @autoreleasepool - { - [reachability reachabilityChanged:flags]; - } -} - - -@implementation DDReachability - -@synthesize reachabilityRef; -@synthesize reachabilitySerialQueue; - -@synthesize reachableOnWWAN; - -@synthesize reachableBlock; -@synthesize unreachableBlock; - -@synthesize reachabilityObject; - -#pragma mark - Class Constructor Methods - -+(DDReachability*)reachabilityWithHostName:(NSString*)hostname -{ - return [DDReachability reachabilityWithHostname:hostname]; -} - -+(DDReachability*)reachabilityWithHostname:(NSString*)hostname -{ - SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); - if (ref) - { - id reachability = [[self alloc] initWithReachabilityRef:ref]; - -#if __has_feature(objc_arc) - return reachability; -#else - return [reachability autorelease]; -#endif - - } - - return nil; -} - -+(DDReachability *)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress -{ - SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); - if (ref) - { - id reachability = [[self alloc] initWithReachabilityRef:ref]; - -#if __has_feature(objc_arc) - return reachability; -#else - return [reachability autorelease]; -#endif - } - - return nil; -} - -+(DDReachability *)reachabilityForInternetConnection -{ - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - return [self reachabilityWithAddress:&zeroAddress]; -} - -+(DDReachability*)reachabilityForLocalWiFi -{ - struct sockaddr_in localWifiAddress; - bzero(&localWifiAddress, sizeof(localWifiAddress)); - localWifiAddress.sin_len = sizeof(localWifiAddress); - localWifiAddress.sin_family = AF_INET; - // IN_LINKLOCALNETNUM is defined in <netinet/in.h> as 169.254.0.0 - localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - - return [self reachabilityWithAddress:&localWifiAddress]; -} - - -// Initialization methods - --(DDReachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref -{ - self = [super init]; - if (self != nil) - { - self.reachableOnWWAN = YES; - self.reachabilityRef = ref; - } - - return self; -} - --(void)dealloc -{ - [self stopNotifier]; - - if(self.reachabilityRef) - { - CFRelease(self.reachabilityRef); - self.reachabilityRef = nil; - } - - self.reachableBlock = nil; - self.unreachableBlock = nil; - -#if !(__has_feature(objc_arc)) - [super dealloc]; -#endif - - -} - -#pragma mark - Notifier Methods - -// Notifier -// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD -// - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS. -// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want) - --(BOOL)startNotifier -{ - SCNetworkReachabilityContext context = { 0, NULL, NULL, NULL, NULL }; - - // this should do a retain on ourself, so as long as we're in notifier mode we shouldn't disappear out from under ourselves - // woah - self.reachabilityObject = self; - - - - // First, we need to create a serial queue. - // We allocate this once for the lifetime of the notifier. - self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); - if(!self.reachabilitySerialQueue) - { - return NO; - } - -#if __has_feature(objc_arc) - context.info = (__bridge void *)self; -#else - context.info = (void *)self; -#endif - - if (!SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context)) - { -#ifdef DEBUG - NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError())); -#endif - - // Clear out the dispatch queue - if(self.reachabilitySerialQueue) - { -#if NEEDS_DISPATCH_RETAIN_RELEASE - dispatch_release(self.reachabilitySerialQueue); -#endif - self.reachabilitySerialQueue = nil; - } - - self.reachabilityObject = nil; - - return NO; - } - - // Set it as our reachability queue, which will retain the queue - if(!SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) - { -#ifdef DEBUG - NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); -#endif - - // UH OH - FAILURE! - - // First stop, any callbacks! - SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); - - // Then clear out the dispatch queue. - if(self.reachabilitySerialQueue) - { -#if NEEDS_DISPATCH_RETAIN_RELEASE - dispatch_release(self.reachabilitySerialQueue); -#endif - self.reachabilitySerialQueue = nil; - } - - self.reachabilityObject = nil; - - return NO; - } - - return YES; -} - --(void)stopNotifier -{ - // First stop, any callbacks! - SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); - - // Unregister target from the GCD serial dispatch queue. - SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); - - if(self.reachabilitySerialQueue) - { -#if NEEDS_DISPATCH_RETAIN_RELEASE - dispatch_release(self.reachabilitySerialQueue); -#endif - self.reachabilitySerialQueue = nil; - } - - self.reachabilityObject = nil; -} - -#pragma mark - reachability tests - -// This is for the case where you flick the airplane mode; -// you end up getting something like this: -//Reachability: WR ct----- -//Reachability: -- ------- -//Reachability: WR ct----- -//Reachability: -- ------- -// We treat this as 4 UNREACHABLE triggers - really apple should do better than this - -#define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection) - --(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags -{ - BOOL connectionUP = YES; - - if(!(flags & kSCNetworkReachabilityFlagsReachable)) - connectionUP = NO; - - if( (flags & testcase) == testcase ) - connectionUP = NO; - -#if TARGET_OS_IPHONE - if(flags & kSCNetworkReachabilityFlagsIsWWAN) - { - // We're on 3G. - if(!self.reachableOnWWAN) - { - // We don't want to connect when on 3G. - connectionUP = NO; - } - } -#endif - - return connectionUP; -} - --(BOOL)isReachable -{ - SCNetworkReachabilityFlags flags; - - if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - return NO; - - return [self isReachableWithFlags:flags]; -} - --(BOOL)isReachableViaWWAN -{ -#if TARGET_OS_IPHONE - - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - // Check we're REACHABLE - if(flags & kSCNetworkReachabilityFlagsReachable) - { - // Now, check we're on WWAN - if(flags & kSCNetworkReachabilityFlagsIsWWAN) - { - return YES; - } - } - } -#endif - - return NO; -} - --(BOOL)isReachableViaWiFi -{ - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - // Check we're reachable - if((flags & kSCNetworkReachabilityFlagsReachable)) - { -#if TARGET_OS_IPHONE - // Check we're NOT on WWAN - if((flags & kSCNetworkReachabilityFlagsIsWWAN)) - { - return NO; - } -#endif - return YES; - } - } - - return NO; -} - - -// WWAN may be available, but not active until a connection has been established. -// WiFi may require a connection for VPN on Demand. --(BOOL)isConnectionRequired -{ - return [self connectionRequired]; -} - --(BOOL)connectionRequired -{ - SCNetworkReachabilityFlags flags; - - if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - - return NO; -} - -// Dynamic, on demand connection? --(BOOL)isConnectionOnDemand -{ - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && - (flags & (kSCNetworkReachabilityFlagsConnectionOnTraffic | kSCNetworkReachabilityFlagsConnectionOnDemand))); - } - - return NO; -} - -// Is user intervention required? --(BOOL)isInterventionRequired -{ - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && - (flags & kSCNetworkReachabilityFlagsInterventionRequired)); - } - - return NO; -} - - -#pragma mark - reachability status stuff - --(NetworkStatus)currentReachabilityStatus -{ - if([self isReachable]) - { - if([self isReachableViaWiFi]) - return ReachableViaWiFi; - -#if TARGET_OS_IPHONE - return ReachableViaWWAN; -#endif - } - - return NotReachable; -} - --(SCNetworkReachabilityFlags)reachabilityFlags -{ - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - return flags; - } - - return 0; -} - --(NSString*)currentReachabilityString -{ - NetworkStatus temp = [self currentReachabilityStatus]; - - if(temp == reachableOnWWAN) - { - // Updated for the fact that we have CDMA phones now! - return NSLocalizedString(@"Cellular", @""); - } - if (temp == ReachableViaWiFi) - { - return NSLocalizedString(@"WiFi", @""); - } - - return NSLocalizedString(@"No Connection", @""); -} - --(NSString*)currentReachabilityFlags -{ - return reachabilityFlags([self reachabilityFlags]); -} - -#pragma mark - Callback function calls this method - --(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags -{ - if([self isReachableWithFlags:flags]) - { - if(self.reachableBlock) - { - self.reachableBlock(self); - } - } - else - { - if(self.unreachableBlock) - { - self.unreachableBlock(self); - } - } - - // this makes sure the change notification happens on the MAIN THREAD - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:kDDReachabilityChangedNotification - object:self]; - }); -} - -#pragma mark - Debug Description - -- (NSString *) description; -{ - NSString *description = [NSString stringWithFormat:@"<%@: %#x>", - NSStringFromClass([self class]), (unsigned int) self]; - return description; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.h b/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.h deleted file mode 100644 index 82827d5..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDReceiveFixedGroupMemberChanged.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-13. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDUnrequestSuperAPI.h" - -@interface DDReceiveFixedGroupMemberChanged : DDUnrequestSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.m b/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.m deleted file mode 100644 index 5fb0484..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveFixedGroupMemberChanged.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// DDReceiveFixedGroupMemberChanged.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-13. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDReceiveFixedGroupMemberChanged.h" -#import "DDGroupEntity.h" -#import "DDGroupModule.h" -#import "RuntimeStatus.h" -@implementation DDReceiveFixedGroupMemberChanged -/** - * 数据包中的serviceID - * - * @return serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 数据包中的commandID - * - * @return commandID - */ -- (int)responseCommandID -{ - return CMD_ID_FIXED_GROUP_CHANGED; -} - -/** - * 解析数据包 - * - * @return 解析数据包的block - */ -- (UnrequestAPIAnalysis)unrequestAnalysis -{ - UnrequestAPIAnalysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t result = [bodyData readInt]; - DDGroupEntity* groupEntity = nil; - if (result != 0) - { - // log4CInfo(@"change group member failure"); - return groupEntity; - } - NSString *groupId = [bodyData readUTF]; - uint32_t userCnt = [bodyData readInt]; - groupEntity = [[DDGroupModule instance] getGroupByGId:groupId]; - if (groupEntity) { - for (uint32_t i = 0; i < userCnt; i++) { - NSString* userId = [bodyData readUTF]; - if (![groupEntity.groupUserIds containsObject:userId]) { - [groupEntity.groupUserIds addObject:userId]; - [groupEntity addFixOrderGroupUserIDS:userId]; - } - } - } - return groupEntity; - }; - return analysis; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.h deleted file mode 100644 index 4f2dd78..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDReceiveGroupAddMemberAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDUnrequestSuperAPI.h" - -@interface DDReceiveGroupAddMemberAPI : DDUnrequestSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.m deleted file mode 100644 index a92b8fb..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDReceiveGroupAddMemberAPI.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// DDReceiveGroupAddMemberAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDReceiveGroupAddMemberAPI.h" -#import "DDGroupModule.h" -#import "RuntimeStatus.h" -#import "DDGroupEntity.h" -@implementation DDReceiveGroupAddMemberAPI -/** - * 数据包中的serviceID - * - * @return serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 数据包中的commandID - * - * @return commandID - */ -- (int)responseCommandID -{ - return CMD_ID_GROUP_CHANGE_GROUP_RES; -} - -/** - * 解析数据包 - * - * @return 解析数据包的block - */ -- (UnrequestAPIAnalysis)unrequestAnalysis -{ - UnrequestAPIAnalysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t result = [bodyData readInt]; - DDGroupEntity* groupEntity = nil; - if (result != 0) - { - // log4CInfo(@"change group member failure"); - return groupEntity; - } - NSString *groupId = [bodyData readUTF]; - uint32_t userCnt = [bodyData readInt]; - groupEntity = [[DDGroupModule instance] getGroupByGId:groupId]; -// if (!groupEntity) -// { -// [groupModule tcpGetUnkownGroupInfo:groupId]; -// } - if (groupEntity) { - for (uint32_t i = 0; i < userCnt; i++) { - NSString* userId = [bodyData readUTF]; - if (![groupEntity.groupUserIds containsObject:userId]) { - [groupEntity.groupUserIds addObject:userId]; - [groupEntity addFixOrderGroupUserIDS:userId]; - } - //log4CInfo(@"group add member success,member userID:%@",userId); - } - } - - NSLog(@"result: %d, goupId: %@", result, groupId); - return groupEntity; - }; - return analysis; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.h deleted file mode 100644 index e6bef73..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDRecentGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDRecentGroupAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.m deleted file mode 100644 index e94251f..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDRecentGroupAPI.m +++ /dev/null @@ -1,127 +0,0 @@ -// -// DDRecentGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDRecentGroupAPI.h" -#import "DDGroupEntity.h" -@implementation DDRecentGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 10; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_DIALOG_LIST_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_DIALOG_LIST_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSMutableArray* recentlyGroup = [[NSMutableArray alloc] init]; - uint32_t groupCnt = [bodyData readInt]; - for (uint32_t i = 0; i < groupCnt; i++) - { - NSString* groupId = [bodyData readUTF]; - NSString* groupName = [bodyData readUTF]; - NSString* groupAvatar = [bodyData readUTF]; - NSString* groupCreator = [bodyData readUTF]; - - UInt32 groupType = [bodyData readInt]; - DDGroupEntity* group = [[DDGroupEntity alloc] init]; - group.objID = groupId; - group.name = groupName; - group.avatar = groupAvatar; - group.groupCreatorId = groupCreator; - group.groupType = groupType; - group.lastUpdateTime = [bodyData readInt]; - uint32_t groupMemberCnt = [bodyData readInt]; - if(groupMemberCnt > 0) - group.groupUserIds = [[NSMutableArray alloc] init]; - for (uint32_t i = 0; i < groupMemberCnt; i++) - { - NSString *userId = [bodyData readUTF]; - [group.groupUserIds addObject:userId]; - [group addFixOrderGroupUserIDS:userId]; - } - - [recentlyGroup addObject:group]; - } - - return recentlyGroup; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_DIALOG_LIST_REQ - seqNo:seqNo]; - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.h b/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.h deleted file mode 100644 index 6bf9996..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// SendBuffer.h -// mtalk -// -// Created by maye on 13-10-23. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface DDSendBuffer : NSMutableData{ - @private - NSMutableData *embeddedData; - NSInteger sendPos; -} - -@property (readonly) NSInteger sendPos; - -+ (id)dataWithNSData:(NSData *)newdata; - -- (id)initWithData:(NSData *)newdata; -- (void)consumeData:(NSInteger)length; - -- (const void *)bytes; -- (NSUInteger)length; - -- (void *)mutableBytes; -- (void)setLength:(NSUInteger)length; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.m b/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.m deleted file mode 100644 index bafe599..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDSendBuffer.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// SendBuffer.m -// mtalk -// -// Created by maye on 13-10-23. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import "DDSendBuffer.h" - -@implementation DDSendBuffer -@synthesize sendPos; - -+ (id)dataWithNSData:(NSData *)newData; -{ - DDSendBuffer *obj = [DDSendBuffer alloc]; - return [obj initWithData:newData]; -} - -- (id)initWithData:(NSData *)newData -{ - self = [super init]; - if (self) { - embeddedData = [NSMutableData dataWithData:newData]; - sendPos = 0; - } - - return self; -} - -- (void)consumeData:(NSInteger)length { - sendPos += length; -} - - - -- (const void *)bytes -{ - return [embeddedData bytes]; -} - -- (NSUInteger)length -{ - return [embeddedData length]; -} - -- (void *)mutableBytes -{ - return [embeddedData mutableBytes]; -} - -- (void)setLength:(NSUInteger)length -{ - [embeddedData setLength:length]; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.h deleted file mode 100644 index 7174585..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// DDSuperAPI.h -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDAPIScheduleProtocol.h" -#import "DDTcpClientManager.h" -#import "DDDataOutputStream.h" -#import "DDDataInputStream.h" -#import "DataOutputStream+Addition.h" -#import "DDTcpProtocolHeader.h" -typedef void(^RequestCompletion)(id response,NSError* error); - - -static uint32_t strLen(NSString *aString) -{ - if (aString) { - return (uint32_t)[[aString dataUsingEncoding:NSUTF8StringEncoding] length]; - } - return 0; -} - -/** - * 这是一个超级类,不能被直接使用 - */ -#define TimeOutTimeInterval 10 -@interface DDSuperAPI : NSObject -@property (nonatomic,copy)RequestCompletion completion; -@property (nonatomic,readonly)uint16_t seqNo; - -- (void)requestWithObject:(id)object Completion:(RequestCompletion)completion; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.m deleted file mode 100644 index d1f37ae..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDSuperAPI.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// DDSuperAPI.m -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" -#import "DDAPISchedule.h" -//#import "DDSeqNoManager.h" - -static uint16_t theSeqNo = 0; - -@implementation DDSuperAPI -- (void)requestWithObject:(id)object Completion:(RequestCompletion)completion -{ - //seqNo - theSeqNo ++; - - if ([(id<DDAPIScheduleProtocol>)self requestServiceID] == DDSERVICE_FRI && [(id<DDAPIScheduleProtocol>)self requestCommendID] == DDCMD_FRI_USER_SERVICE_REQ) - { - _seqNo = 0; - } - else - { - _seqNo = theSeqNo; - } - - //注册接口 - BOOL registerAPI = [[DDAPISchedule instance] registerApi:(id<DDAPIScheduleProtocol>)self]; - - if (!registerAPI) - { - return; - } - - //注册请求超时 - if ([(id<DDAPIScheduleProtocol>)self requestTimeOutTimeInterval] > 0) - { - [[DDAPISchedule instance] registerTimeoutApi:(id<DDAPIScheduleProtocol>)self]; - } - - //保存完成块 - self.completion = completion; - - - //数据打包 - Package package = [(id<DDAPIScheduleProtocol>)self packageRequestObject]; - NSMutableData* requestData = package(object,_seqNo); - - //发送 - if (requestData) - { - [[DDAPISchedule instance] sendData:requestData]; -// [[DDTcpClientManager instance] writeToSocket:requestData]; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.h b/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.h deleted file mode 100644 index 2dd96af..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DDTcpClientManager.h -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -@class DDSendBuffer; -@interface DDTcpClientManager : NSObject<NSStreamDelegate> -{ -@private - NSInputStream *_inStream; - NSOutputStream *_outStream; - NSLock *_receiveLock; - NSMutableData *_receiveBuffer; - NSLock *_sendLock; - NSMutableArray *_sendBuffers; - DDSendBuffer *_lastSendBuffer; - BOOL _noDataSent; - int32_t cDataLen; - -} - -+ (instancetype)instance; - --(void)connect:(NSString *)ipAdr port:(NSInteger)port status:(NSInteger)status; --(void)disconnect; --(void)writeToSocket:(NSMutableData *)data; - - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.m b/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.m deleted file mode 100644 index 46eb983..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpClientManager.m +++ /dev/null @@ -1,321 +0,0 @@ -// -// DDTcpClientManager.m -// Duoduo -// -// Created by 独嘉 on 14-4-12. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDTcpClientManager.h" -#import "NSStream+NSStreamAddition.h" -#import "DDSendBuffer.h" -#import "DDTcpProtocolHeader.h" -//#import "DDDispatchTask.h" -#import "DDDataInputStream.h" -#import "DDAPISchedule.h" - -@interface DDTcpClientManager(PrivateAPI) - -- (void)p_handleConntectOpenCompletedStream:(NSStream *)aStream; -- (void)p_handleEventErrorOccurredStream:(NSStream *)aStream; -- (void)p_handleEventEndEncounteredStream:(NSStream *)aStream; -- (void)p_handleEventHasBytesAvailableStream:(NSStream *)aStream; -- (void)p_handleEventHasSpaceAvailableStream:(NSStream *)aStream; -@end - -@implementation DDTcpClientManager -+ (instancetype)instance -{ - static DDTcpClientManager* g_tcpClientManager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_tcpClientManager = [[DDTcpClientManager alloc] init]; - }); - return g_tcpClientManager; -} - -#pragma mark - PublicAPI --(void)connect:(NSString *)ipAdr port:(NSInteger)port status:(NSInteger)status -{ - DDLog(@"mogujie mtalk client :connect ipAdr:%@ port:%ld",ipAdr,(long)port); - cDataLen = 0; - - _receiveBuffer = [NSMutableData data]; - _sendBuffers = [NSMutableArray array]; - _noDataSent = NO; - - _receiveLock = [[NSLock alloc] init]; - _sendLock = [[NSLock alloc] init]; - - NSInputStream *tempInput = nil; - NSOutputStream *tempOutput = nil; - - [NSStream getStreamsToHostNamed:ipAdr port:port inputStream:&tempInput outputStream:&tempOutput]; - _inStream = tempInput; - _outStream = tempOutput; - - [_inStream setDelegate:self]; - [_outStream setDelegate:self]; - - [_inStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - [_outStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - - [_inStream open]; - [_outStream open]; -} - --(void)disconnect -{ - DDLog(@"MTalk Client:disconnect"); - - cDataLen = 0; - - _receiveLock = nil; - _sendLock = nil; - - [_inStream close]; - [_inStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - _inStream = nil; - - [_outStream close]; - [_outStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - _outStream = nil; - - _receiveBuffer = nil; - _sendBuffers = nil; - _lastSendBuffer = nil; - - [DDNotificationHelp postNotification:DDNotificationTcpLinkDisconnect userInfo:nil object:nil]; - -} - --(void)writeToSocket:(NSMutableData *)data{ - [_sendLock lock]; - - @try { - if (_noDataSent ==YES) { - - NSInteger len; - len = [_outStream write:[data mutableBytes] maxLength:[data length]]; - _noDataSent = NO; - DDLog(@"WRITE - Written directly to outStream len:%li", (long)len); - if (len < [data length]) { - DDLog(@"WRITE - Creating a new buffer for remaining data len:%u", [data length] - len); - _lastSendBuffer = [DDSendBuffer dataWithNSData:[data subdataWithRange:NSMakeRange([data length]-len, [data length])]]; - [_sendBuffers addObject:_lastSendBuffer]; - - } - return; - } - - if (_lastSendBuffer) { - NSInteger lastSendBufferLength; - NSInteger newDataLength; - lastSendBufferLength = [_lastSendBuffer length]; - newDataLength = [data length]; - if (lastSendBufferLength<1024) { - DDLog(@"WRITE - Have a buffer with enough space, appending data to it"); - [_lastSendBuffer appendData:data]; - return; - } - } - DDLog(@"WRITE - Creating a new buffer"); - _lastSendBuffer = [DDSendBuffer dataWithNSData:data]; - [_sendBuffers addObject:_lastSendBuffer]; - - } - @catch (NSException *exception) { - DDLog(@" ***** NSException:%@ in writeToSocket of MGJMTalkClient *****",exception); - } - @finally { - [_sendLock unlock]; - } -} - -#pragma mark - NSStream Delegate -- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode -{ - switch(eventCode) { - case NSStreamEventNone: - DDLog(@"Event type: EventNone"); - break; - case NSStreamEventOpenCompleted: - [self p_handleConntectOpenCompletedStream:aStream]; - break; - case NSStreamEventHasSpaceAvailable: //发送数据 - DDLog(@"Event type: EventHasSpaceAvailable"); - [self p_handleEventHasSpaceAvailableStream:aStream]; - break; - case NSStreamEventErrorOccurred: - DDLog(@"Event type: EventErrorOccured"); - [self p_handleEventErrorOccurredStream:aStream]; - break; - case NSStreamEventEndEncountered: - DDLog(@"Event type: EventEndOccured"); - [self p_handleEventEndEncounteredStream:aStream]; - break; - case NSStreamEventHasBytesAvailable: - DDLog(@"Event type: EventHasBytesAvailable"); - [self p_handleEventHasBytesAvailableStream:aStream]; - break; - } -} - -#pragma mark - PrivateAPI -- (void)p_handleConntectOpenCompletedStream:(NSStream *)aStream -{ - DDLog(@"handleConntectOpenCompleted"); - if (aStream == _outStream) { - [DDNotificationHelp postNotification:DDNotificationTcpLinkConnectComplete userInfo:nil object:nil]; - } -} - -- (void)p_handleEventHasSpaceAvailableStream:(NSStream *)aStream -{ - [_sendLock lock]; - - @try { - - if (![_sendBuffers count]) { - DDLog(@"WRITE - No data to send"); - _noDataSent = YES; - - return; - } - - DDSendBuffer *sendBuffer = [_sendBuffers objectAtIndex:0]; - - NSInteger sendBufferLength = [sendBuffer length]; - - if (!sendBufferLength) { - if (sendBuffer == _lastSendBuffer) { - _lastSendBuffer = nil; - } - - [_sendBuffers removeObjectAtIndex:0]; - - DDLog(@"WRITE - No data to send"); - - _noDataSent = YES; - - return; - } - - NSInteger len = ((sendBufferLength - [sendBuffer sendPos] >= 1024) ? 1024 : (sendBufferLength - [sendBuffer sendPos])); - if (!len) { - if (sendBuffer == _lastSendBuffer) { - _lastSendBuffer = nil; - } - - [_sendBuffers removeObjectAtIndex:0]; - - DDLog(@"WRITE - No data to send"); - - _noDataSent = YES; - - return; - } - - // DDLog(@"write %ld bytes", len); - len = [_outStream write:((const uint8_t *)[sendBuffer mutableBytes] + [sendBuffer sendPos]) maxLength:len]; - DDLog(@"WRITE - Written directly to outStream len:%lid", (long)len); - [sendBuffer consumeData:len]; - - if (![sendBuffer length]) { - if (sendBuffer == _lastSendBuffer) { - _lastSendBuffer = nil; - } - - [_sendBuffers removeObjectAtIndex:0]; - } - - _noDataSent = NO; - - - return; - } - @catch (NSException *exception) { - DDLog(@" ***** NSException in MGJMTalkCleint :%@ ******* ",exception); - } - @finally { - [_sendLock unlock]; - } -} - -- (void)p_handleEventErrorOccurredStream:(NSStream *)aStream -{ - DDLog(@"handle eventErrorOccurred"); -} - -- (void)p_handleEventEndEncounteredStream:(NSStream *)aStream -{ - DDLog(@"handle eventEndEncountered"); - cDataLen = 0; - -} - -- (void)p_handleEventHasBytesAvailableStream:(NSStream *)aStream -{ - DDLog(@"handle eventHasBytesAvailable"); - uint8_t buf[1024]; - NSInteger len = 0; - len = [(NSInputStream *)aStream read:buf maxLength:1024]; - if (len < 0) { - [self disconnect]; - return; - } - - if (len > 0) { - - - [_receiveLock lock]; - [_receiveBuffer appendBytes:(const void *)buf length:len]; - - while ([_receiveBuffer length] >= IM_PDU_HEADER_LEN) { - NSRange range = NSMakeRange(0, IM_PDU_HEADER_LEN); - // [[DDAPISchedule instance] receiveServerData:_receiveBuffer]; - - NSData *headerData = [_receiveBuffer subdataWithRange:range]; - - DDDataInputStream *inputData = [DDDataInputStream dataInputStreamWithData:headerData]; - - uint32_t pduLen = [inputData readInt]; - if (pduLen > (uint32_t)[_receiveBuffer length]) { - DDLog(@"not enough data received"); - break; - } - - DDTcpProtocolHeader* tcpHeader = [[DDTcpProtocolHeader alloc] init]; - tcpHeader.serviceId = [inputData readShort]; - tcpHeader.commandId = [inputData readShort]; - tcpHeader.version = [inputData readShort]; - tcpHeader.reserved = [inputData readShort]; - - DDLog(@"receive a packet serviceId=%d, commandId=%d", tcpHeader.serviceId, tcpHeader.commandId); - - range = NSMakeRange(IM_PDU_HEADER_LEN, pduLen - IM_PDU_HEADER_LEN); - NSData *payloadData = [_receiveBuffer subdataWithRange:range]; - - NSString *string = [[NSString alloc] initWithData:payloadData encoding:NSUTF8StringEncoding]; - NSLog(@"%@----->",string); - - uint32_t remainLen = (int)[_receiveBuffer length] - pduLen; - range = NSMakeRange(pduLen, remainLen); - NSData *remainData = [_receiveBuffer subdataWithRange:range]; - [_receiveBuffer setData:remainData]; - ServerDataType dataType = DDMakeServerDataType(tcpHeader.serviceId, tcpHeader.commandId, tcpHeader.reserved); - [[DDAPISchedule instance] receiveServerData:payloadData forDataType:dataType]; - - //收到心跳 - [DDNotificationHelp postNotification:DDNotificationServerHeartBeat userInfo:nil object:nil]; - - } - - [_receiveLock unlock]; - } - else { - DDLog(@"No buffer!"); - } - -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.h b/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.h deleted file mode 100644 index d520bbf..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// DDTcpProtocolHeader.h -// -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// -#import <Foundation/Foundation.h> -#import <stdint.h> - -enum -{ - DDSERVICE_LOGIN = 1, //登录相关 - DDSERVICE_FRI = 2, //好友相关 - DDSERVICE_MESSAGE = 3, //消息相关 - CMD_FRI_ALL_USER_REQ = 14, // 获取公司全部员工信息 - CMD_FRI_ALL_USER_RES = 15, - DDSERVICE_USER = 7 -}; -// 心跳包 -enum -{ - DDHEARTBEAT_REQ = 1, - DDHEARTBEAT_SID =7, - REQ_CID =1, - RES_CID =1 -}; - -//MODULE_ID_LOGIN = 2 登陆相关 -enum -{ - DDCMD_LOGIN_REQ_MSGSERVER = 1, //获取消息服务器信息接口请求 - DDCMD_LOGIN_RES_MSGSERVER = 2, //返回一个消息服务器的IP和端口 - DDCMD_LOGIN_REQ_USERLOGIN = 3, //用户登录请求 - DDCMD_LOGIN_RES_USERLOGIN = 4, //登陆消息服务器验证结果 - DDCMD_LOGIN_RES_USERLOGOUT = 6, //这个目前不用实现 - DDCMD_LOGIN_KICK_USER = 7, //踢出用户提示. - -}; - -//MODULE_ID_FRIENDLIST = 3 成员列表相关 -enum -{ - DDCMD_FRI_RECENT_CONTACTS_REQ = 1, //请求最近联系人 - DDCMD_FRI_SERVICE_LIST = 2, //店铺客服列表 - DDCMD_FRI_RECENT_CONTACTS_RES = 3, //最近联系人列表 - DDCMD_FRI_USERLIST_ONLINE_STATE = 4, //在线好友状态列表 - DDCMD_FRI_USER_STATE_CHANGE = 5, //好友状态更新通知 - DDCMD_FRI_USER_SERVICE_REQ = 6, //请求一个客服 - DDCMD_FRI_USER_SERVICE_RES = 7, //返回一个客服 - DDCMD_FRI_USER_ONLINE_STATE_REQ = 8, //获取某个用户的在线状态 - DDCMD_FRI_USER_ONLINE_STATE_RES = 9, //返回某个用户的在线状态 - DDCMD_FRI_LIST_DETAIL_INFO_REQ = 18, //批量获取用户详细资料 - DDCMD_FRI_LIST_DETAIL_INFO_RES = 19 //批量放回用户详细资料 - -}; - -//MODULE_ID_SESSION = 80 消息会话相关 -enum -{ - DDCMD_MSG_DATA = 1, //收到聊天消息 - DDCMD_MSG_RECEIVE_DATA_ACK = 2, //消息收到确认. 这是收 - DDCMD_MSG_READ_ACK = 3, //消息已读确认 - DDCMD_MSG_UNREAD_CNT_REQ = 7, //请求未读消息计数 - DDCMD_MSG_UNREAD_CNT_RES = 8, //返回自己的未读消息计数 - DDCMD_MSG_UNREAD_MSG_REQ = 9, //请求两人之间的未读消息 - DDCMD_MSG_HISTORY_MSG_REQ = 10, //请求两人之间的历史消息 - DDCMD_MSG_GET_2_UNREAD_MSG = 14, //返回两人之间的未读消息 - DDCMD_MSG_GET_2_HISTORY_MSG = 15, //查询两人之间的历史消息 -}; - -//MODULE_ID_USERINFO = 1000 -enum -{ - DDCMD_USER_INFO_REQ = 11, //查询用户详情 - DDCMD_USER_INFO_RES = 10, //返回用户详情 - -}; - -//群 -enum -{ - CMD_ID_GROUP_LIST_REQ = 1, // 固定群 - CMD_ID_GROUP_LIST_RES = 2, - CMD_ID_GROUP_USER_LIST_REQ = 3, - CMD_ID_GROUP_USER_LIST_RES = 4, - CMD_ID_GROUP_UNREAD_CNT_REQ = 5, - CMD_ID_GROUP_UNREAD_CNT_RES = 6, - CMD_ID_GROUP_UNREAD_MSG_REQ = 7, - CMD_ID_GROUP_UNREAD_MSG_RES = 8, - CMD_ID_GROUP_HISTORY_MSG_REQ = 9, - CMD_ID_GROUP_HISTORY_MSG_RES = 10, - CMD_ID_GROUP_MSG_READ_ACK = 11, - CMD_ID_GROUP_CREATE_TMP_GROUP_REQ = 12, - CMD_ID_GROUP_CREATE_TMP_GROUP_RES = 13, - CMD_ID_GROUP_CHANGE_GROUP_REQ = 14, - CMD_ID_GROUP_CHANGE_GROUP_RES = 15, - CMD_ID_GROUP_DIALOG_LIST_REQ = 16, // 最近联系群 - CMD_ID_GROUP_DIALOG_LIST_RES = 17, - CMD_ID_FIXED_GROUP_CHANGED =19, - MODULE_ID_GROUP = 5 -}; -@interface DDTcpProtocolHeader : NSObject - -@property (nonatomic,assign) UInt16 version; -@property (nonatomic,assign) UInt16 flag; -@property (nonatomic,assign) UInt16 serviceId; -@property (nonatomic,assign) UInt16 commandId; -@property (nonatomic,assign) UInt16 reserved; -@property (nonatomic,assign) UInt16 error; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.m b/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.m deleted file mode 100644 index e715c77..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDTcpProtocolHeader.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDTcpProtocolHeader.m -// -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDTcpProtocolHeader.h" - -@implementation DDTcpProtocolHeader - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.h deleted file mode 100644 index d1a51fc..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDUnreadMessageGroupAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -/** - * 获得有未读消息的group - */ -@interface DDUnreadMessageGroupAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.m deleted file mode 100644 index 1cca8b4..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUnreadMessageGroupAPI.m +++ /dev/null @@ -1,109 +0,0 @@ -// -// DDUnreadMessageGroupAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDUnreadMessageGroupAPI.h" - -@implementation DDUnreadMessageGroupAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 2; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_UNREAD_CNT_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_UNREAD_CNT_RES; -} - - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSMutableArray *unreadGroupList = [[NSMutableArray alloc] init]; - uint32_t unreadGroupCnt = [bodyData readInt]; - for (uint32_t i = 0; i < unreadGroupCnt; i++) - { - NSString *groupId = [bodyData readUTF]; - /*uint32_t unreadMsgCnt = */[bodyData readInt]; - - [unreadGroupList addObject:groupId]; - } - DDLog(@"receive group unread msg cnt:%i",unreadGroupCnt); - return unreadGroupList; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_UNREAD_CNT_REQ - seqNo:seqNo]; - //log4CInfo(@"serviceID:%i cmdID:%i --> get group unread cnt ",MODULE_ID_GROUP,CMD_ID_GROUP_UNREAD_CNT_REQ); - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.h deleted file mode 100644 index fa75c8a..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DDUnrequestSuperAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDDataInputStream.h" -#import "DDAPIUnrequestScheduleProtocol.h" -#import "DDTcpClientManager.h" -#import "DDDataOutputStream.h" -#import "DataOutputStream+Addition.h" -#import "DDTcpProtocolHeader.h" -typedef void(^ReceiveData)(id object,NSError* error); - -@interface DDUnrequestSuperAPI : NSObject -@property (nonatomic,copy)ReceiveData receivedData; -- (BOOL)registerAPIInAPIScheduleReceiveData:(ReceiveData)received; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.m deleted file mode 100644 index 5a7faf7..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUnrequestSuperAPI.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// DDUnrequestSuperAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-7. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDUnrequestSuperAPI.h" -#import "DDAPISchedule.h" -@implementation DDUnrequestSuperAPI -- (BOOL)registerAPIInAPIScheduleReceiveData:(ReceiveData)received -{ - BOOL registerSuccess = [[DDAPISchedule instance] registerUnrequestAPI:(id<DDAPIUnrequestScheduleProtocol>)self]; - if (registerSuccess) - { - self.receivedData = received; - return YES; - } - else - { - return NO; - } -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.h deleted file mode 100644 index e038825..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDUserDetailInfoAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-22. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDUserDetailInfoAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.m deleted file mode 100644 index 5293578..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDUserDetailInfoAPI.m +++ /dev/null @@ -1,142 +0,0 @@ -// -// DDUserDetailInfoAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-22. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDUserDetailInfoAPI.h" - -@implementation DDUserDetailInfoAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_FRI; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_FRI; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_USER_INFO_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_USER_INFO_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t userCnt = [bodyData readInt]; - NSMutableArray* userList = [[NSMutableArray alloc] init]; - for (uint32_t i = 0; i < userCnt; i ++) - { - NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; - NSString* userID = [bodyData readUTF]; - [dictionary setValue:userID forKey:@"userId"]; - NSString* realName = [bodyData readUTF]; - [dictionary setValue:realName forKey:@"name"]; - NSString* userName = [bodyData readUTF]; - [dictionary setValue:userName forKey:@"nickName"]; - NSString* avatar = [bodyData readUTF]; - [dictionary setValue:avatar forKey:@"avatar"]; - NSString *title = [bodyData readUTF]; - [dictionary setValue:title forKey:@"title"]; - NSString *position = [bodyData readUTF]; - [dictionary setValue:position forKey:@"position"]; - NSInteger roleStatus = [bodyData readInt]; - [dictionary setValue:@(roleStatus) forKey:@"roleStatus"]; - NSInteger sex = [bodyData readInt]; - [dictionary setValue:@(sex) forKey:@"sex"]; - NSString* department = [bodyData readUTF]; - [dictionary setValue:department forKey:@"department"]; - NSInteger jobNum = [bodyData readInt]; - [dictionary setValue:@(jobNum) forKey:@"jobNum"]; - NSString* tel = [bodyData readUTF]; - [dictionary setValue:tel forKey:@"telphone"]; - NSString* email = [bodyData readUTF]; - [dictionary setValue:email forKey:@"email"]; - [userList addObject:dictionary]; - } - return userList; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSArray* users = (NSArray*)object; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - int totalLen = IM_PDU_HEADER_LEN; - totalLen += 4; - uint32_t userCnt = (uint32_t)[users count]; - for (uint32_t i = 0; i < userCnt; i++) { - totalLen += 4 + strLen((NSString*)[users objectAtIndex:i]); - } - - [dataout writeInt:0]; - - [dataout writeTcpProtocolHeader:DDSERVICE_FRI - cId:DDCMD_USER_INFO_REQ - seqNo:seqNo]; - - [dataout writeInt:(int)[users count]]; - for (uint32_t i = 0; i < userCnt; i++) { - NSString *userId = (NSString*)[users objectAtIndex:i]; - [dataout writeUTF:userId]; - } - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.h b/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.h deleted file mode 100644 index c51206d..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DDepartment.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-06. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface DDepartment : NSObject -@property(strong)NSString *ID; -@property(strong)NSString *parentID; -@property(strong)NSString *title; -@property(strong)NSString *descriptionText; -@property(strong)NSString *leader; -@property(assign)NSInteger status; -@property(assign)NSInteger count; -+(id)departmentFromDic:(NSDictionary *)dic; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.m b/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.m deleted file mode 100644 index 35d83f0..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DDepartment.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// DDepartment.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-06. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDepartment.h" - -@implementation DDepartment -- (instancetype)init -{ - self = [super init]; - if (self) { - self.ID = @""; - self.parentID=@""; - self.title=@""; - self.descriptionText=@""; - self.leader=@""; - self.status=0; - self.count=0; - - } - return self; -} -+(id)departmentFromDic:(NSDictionary *)dic -{ - DDepartment *department = [DDepartment new]; - department.ID = [dic objectForKey:@"departID"]; - department.title = [dic objectForKey:@"title"]; - department.descriptionText = [dic objectForKey:@"description"]; - department.leader = [dic objectForKey:@"leader"]; - department.parentID = [dic objectForKey:@"parentID"]; - department.status = [[dic objectForKey:@"status"] integerValue]; - department.count = [[dic objectForKey:@"departCount"] integerValue]; - return department; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.h b/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.h deleted file mode 100644 index 325f690..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DataOutputStream+Addition.h -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDDataOutputStream.h" - -@interface DDDataOutputStream (Addition) --(void)writeTcpProtocolHeader:(int16_t)sId cId:(int16_t)cId seqNo:(uint16_t)seqNo; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.m b/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.m deleted file mode 100644 index 1fd32b6..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/DataOutputStream+Addition.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DataOutputStream+Addition.m -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DataOutputStream+Addition.h" -#import "NSStream+NSStreamAddition.h" -@implementation DDDataOutputStream (Addition) --(void)writeTcpProtocolHeader:(int16_t)sId cId:(int16_t)cId seqNo:(uint16_t)seqNo -{ - [self writeShort:sId]; - [self writeShort:cId]; - [self writeShort:IM_PDU_VERSION]; - [self writeShort:seqNo]; //默认值 -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.h deleted file mode 100644 index e133d0b..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// LogoutAPI.h -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface LogoutAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.m deleted file mode 100644 index 2071e0a..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/LogoutAPI.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// LogoutAPI.m -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "LogoutAPI.h" - -@implementation LogoutAPI -- (int)requestTimeOutTimeInterval -{ - return 5; -} - -- (int)requestServiceID -{ - return DDSERVICE_LOGIN; -} - -- (int)responseServiceID -{ - return DDSERVICE_LOGIN; -} - -- (int)requestCommendID -{ - return DDSERVICE_LOGIN; -} - -- (int)responseCommendID -{ - return DDSERVICE_LOGIN; -} - -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* dataInputStream = [DDDataInputStream dataInputStreamWithData:data]; - int isok = [dataInputStream readInt]; - return isok; - }; - return analysis; -} - -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - [dataout writeInt:IM_PDU_HEADER_LEN]; - [dataout writeTcpProtocolHeader:DDSERVICE_LOGIN cId:DDSERVICE_LOGIN seqNo:seqNo]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.h b/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.h deleted file mode 100644 index 85f5e9b..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// NSStream+NSStreamAddition.h -// mtalk -// -// Created by maye on 13-10-23. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import <CFNetwork/CFNetwork.h> - -@interface NSStream (NSStreamAddition) -+ (void)getStreamsToHostNamed:(NSString *)hostName port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream; -@end - -@interface NSMutableData (NSMutableDataExtension) - --(void)writeBool:(BOOL)value; --(void)writeByte:(uint8_t)value; --(void)writeShort:(short)value; --(void)writeInt:(int)value; --(void)writeLong:(long long)value; --(void)writeFloat:(float)value; --(void)writeDouble:(double)value; --(void)writeUTF:(NSString *)value; - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.m b/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.m deleted file mode 100644 index bdb4190..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/NSStream+NSStreamAddition.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// NSStream+NSStreamAddition.m -// mtalk -// -// Created by maye on 13-10-23. -// Copyright (c) 2013年 zuoye. All rights reserved. -// - - -#import "NSStream+NSStreamAddition.h" -//TODO we need to check this code later..by zouye -@implementation NSStream (NSStreamAddition) -+ (void)getStreamsToHostNamed:(NSString *)hostName port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream -{ - CFHostRef host; - CFReadStreamRef readStream; - CFWriteStreamRef writeStream; - - readStream = NULL; - writeStream = NULL; - - host = CFHostCreateWithName(NULL, (__bridge CFStringRef) hostName); - if (host != NULL) { - (void) CFStreamCreatePairWithSocketToCFHost(NULL, host, (SInt32)port, &readStream, &writeStream); - CFRelease(host); - } - - if (inputStream == NULL) { - if (readStream != NULL) { - CFRelease(readStream); - } - } else { - *inputStream = (__bridge NSInputStream *) readStream; - } - if (outputStream == NULL) { - if (writeStream != NULL) { - CFRelease(writeStream); - } - } else { - *outputStream =(__bridge NSOutputStream *) writeStream; - } -} - -@end - -@implementation NSMutableData(NSMutableDataExtension) - --(void)writeBool:(BOOL)value{ -} --(void)writeByte:(uint8_t)value{ -} --(void)writeShort:(short)v{ - int8_t ch[2]; - ch[0] = (v & 0x0ff00)>>8; - ch[1] = (v & 0x0ff); - [self appendBytes:ch length:2]; -} --(void)writeInt:(int)aint{ - char tag='I'; - [self appendBytes:&tag length:1]; - //NSString * stringcontent=[NSString stringWithFormat:@"%c", 'I']; - unsigned char b32 = aint >> 24; - unsigned char b24 = (aint >> 16) & 0x000000FF; - unsigned char b16 = (aint >> 8) & 0x000000FF; - unsigned char b8 = aint & 0x000000FF; - [self appendBytes:&b32 length:1]; - [self appendBytes:&b24 length:1]; - [self appendBytes:&b16 length:1]; - [self appendBytes:&b8 length:1]; -} --(void)writeLong:(long long)value{ -} - --(void)writeFloat:(float)value{ - -} --(void)writeDouble:(double)value{ -} --(void)writeUTF:(NSString *)value{ -} - - - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.h deleted file mode 100644 index beef9fd..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDHeartbeatAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDHeartbeatAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.m deleted file mode 100644 index 9d51b12..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDHeartbeatAPI.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// DDHeartbeatAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDHeartbeatAPI.h" - -@implementation DDHeartbeatAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 0; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDHEARTBEAT_SID; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDHEARTBEAT_SID; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return REQ_CID; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return RES_CID; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - return nil; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,UInt32 seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - [dataout writeInt:IM_PDU_HEADER_LEN]; - [dataout writeTcpProtocolHeader:DDHEARTBEAT_SID cId:REQ_CID seqNo:seqNo]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.h deleted file mode 100644 index 74bde0f..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// DDLoginAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" -@interface DDLoginAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m deleted file mode 100644 index bbe0086..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m +++ /dev/null @@ -1,146 +0,0 @@ -// -// DDLoginAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDLoginAPI.h" -#import "DDUserEntity.h" -@implementation DDLoginAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 5; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_LOGIN; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_LOGIN; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_LOGIN_REQ_USERLOGIN; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_LOGIN_RES_USERLOGIN; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - //NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - NSInteger serverTime = [bodyData readInt]; - NSInteger loginResult = [bodyData readInt]; - NSDictionary* result = nil; - if (loginResult !=0) { - return result; - }else - { - NSInteger onlineStatus = [bodyData readInt]; - NSString *userId =[bodyData readUTF]; - NSString *nickName = [bodyData readUTF]; - NSString *avatar = [bodyData readUTF]; - NSString *title = [bodyData readUTF]; - NSString *position = [bodyData readUTF]; - NSInteger isDeleted = [bodyData readInt]; - NSInteger sex = [bodyData readInt]; - NSString *departId = [bodyData readUTF]; - NSInteger jobNum = [bodyData readInt]; - NSString *telphone = [bodyData readUTF]; - NSString *email = [bodyData readUTF]; - NSString *token = [bodyData readUTF]; - result = @{@"serverTime":@(serverTime), - @"result":@(loginResult), - @"state":@(onlineStatus), - @"nickName":nickName, - @"userId":userId, - @"title":title, - @"position":position, - @"isDeleted":@(isDeleted), - @"sex":@(sex), - @"departId":departId, - @"jobNum":@(jobNum), - @"telphone":telphone, - @"avatar":avatar, - @"email":email, - @"token":token, - }; - return result; - } - - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - NSArray* array = (NSArray*)object; - NSString* userID = array[0]; - NSString *password = array[1]; - NSString *clientVersion = @"1.1"; - NSInteger status = [array[2] intValue]; - NSInteger clientType = [array[3] intValue]; - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:DDSERVICE_LOGIN - cId:DDCMD_LOGIN_REQ_USERLOGIN - seqNo:seqNo]; - [dataout writeUTF:userID]; - [dataout writeUTF:password]; - [dataout writeInt:(uint32_t)status]; - [dataout writeInt:(uint32_t)clientType]; - [dataout writeUTF:clientVersion]; - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.h deleted file mode 100644 index 74b9cb8..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDMsgServerIPAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDMsgServerIPAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.m deleted file mode 100644 index 9d4fe74..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// DDMsgServerIPAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-6. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDMsgServerIPAPI.h" -@implementation DDMsgServerIPAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 2; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_LOGIN; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_LOGIN; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_LOGIN_REQ_MSGSERVER; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_LOGIN_RES_MSGSERVER; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSInteger result = [bodyData readInt]; - NSDictionary* resultDic = nil; - if (result == 0) - { - NSString* ip1 = [bodyData readUTF]; - NSString* ip2 = [bodyData readUTF]; - int port = [bodyData readShort]; - resultDic = @{@"ip1":ip1, - @"ip2":ip2, - @"port":@(port)}; - } - return resultDic; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = 12; - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:DDSERVICE_LOGIN cId:DDCMD_LOGIN_REQ_MSGSERVER seqNo:seqNo]; - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.h deleted file mode 100644 index 195b7f5..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGetUnreadMessageAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGetUnreadMessageUsersAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.m deleted file mode 100644 index 845b6a9..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUnreadMessageUsersAPI.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// DDGetUnreadMessageAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDGetUnreadMessageUsersAPI.h" - -@implementation DDGetUnreadMessageUsersAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 2; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_MSG_UNREAD_CNT_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_MSG_UNREAD_CNT_RES; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSMutableArray* unReadMsgUserIds = [[NSMutableArray alloc] init]; - uint32_t unreadUserCnt = [bodyData readInt]; - for (uint32_t i = 0; i < unreadUserCnt; i++) - { - NSString *fromId = [bodyData readUTF]; - /*uint32_t unreadCnt = */[bodyData readInt]; - [unReadMsgUserIds addObject:fromId]; - } - DDLog(@"receive un read msg count:%i",[unReadMsgUserIds count]); - return unReadMsgUserIds; - - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - - [dataout writeInt:IM_PDU_HEADER_LEN]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE cId:DDCMD_MSG_UNREAD_CNT_REQ seqNo:seqNo]; - DDLog(@"serviceID:%i cmdID:%i --> get unread msg cnt",DDSERVICE_MESSAGE,DDCMD_MSG_UNREAD_CNT_REQ); - return [dataout toByteArray]; - }; - return package; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.h deleted file mode 100644 index b6df07d..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGetUserUnreadMessagesAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGetUserUnreadMessagesAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m deleted file mode 100644 index dd432e0..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// DDGetUserUnreadMessagesAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDGetUserUnreadMessagesAPI.h" -#import "DDMessageEntity.h" -#import "Encapsulator.h" -#import "DDUserModule.h" -#import "DDMessageModule.h" -#import "RuntimeStatus.h" -@implementation DDGetUserUnreadMessagesAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 20; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_MSG_UNREAD_MSG_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_MSG_GET_2_UNREAD_MSG; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSMutableDictionary* msgDict = [[NSMutableDictionary alloc] init]; - NSMutableArray* msgArray = [[NSMutableArray alloc] init]; - NSString *sessionId = [bodyData readUTF]; - uint32_t msgCnt = [bodyData readInt]; - DDLog(@"msgList for session: %@", sessionId); - - for (uint32_t i = 0; i < msgCnt; i++) - { - NSString *fromUserId = [bodyData readUTF]; - /*NSString *fromUserName = */[bodyData readUTF]; - /*NSString *fromNickName = */[bodyData readUTF]; - /*NSString *fromAvatar = */[bodyData readUTF]; - uint32_t createTime = [bodyData readInt]; - uint8_t msgContentType = [bodyData readChar]; - NSString *msgContent = @""; - NSMutableDictionary* info = [[NSMutableDictionary alloc] init]; - DDMessageEntity *msg = [[DDMessageEntity alloc ] init]; - msg.msgType = MESSAGE_TYPE_SINGLE; - msg.msgContentType=DDMessageTypeText; - if (msgContentType == DDMessageTypeVoice || msgContentType == DDGroup_MessageTypeVoice) { - - msg.msgContentType=msgContentType; - int32_t dataLength = [bodyData readInt]; - if (dataLength) { - NSData* data = [bodyData readDataWithLength:dataLength]; - NSData* voiceData = [data subdataWithRange:NSMakeRange(4, [data length] - 4)]; - NSString* filename = [NSString stringWithString:[Encapsulator defaultFileName]]; - if ([voiceData writeToFile:filename atomically:YES]) - { - msgContent = filename; - } - else - { - msgContent = @"语音存储出错"; - } - NSData* voiceLengthData = [data subdataWithRange:NSMakeRange(0, 4)]; - - int8_t ch1; - [voiceLengthData getBytes:&ch1 range:NSMakeRange(0,1)]; - ch1 = ch1 & 0x0ff; - - int8_t ch2; - [voiceLengthData getBytes:&ch2 range:NSMakeRange(1,1)]; - ch2 = ch2 & 0x0ff; - - int32_t ch3; - [voiceLengthData getBytes:&ch3 range:NSMakeRange(2,1)]; - ch3 = ch3 & 0x0ff; - - int32_t ch4; - [voiceLengthData getBytes:&ch4 range:NSMakeRange(3,1)]; - ch4 = ch4 & 0x0ff; - - if ((ch1 | ch2 | ch3 | ch4) < 0){ - @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; - } - int voiceLength = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); - [info setObject:@(voiceLength) forKey:VOICE_LENGTH]; - [info setObject:@(0) forKey:DDVOICE_PLAYED]; - } - - }else - { - msgContent = [bodyData readUTF]; - ; - if ([msgContent hasPrefix:DD_MESSAGE_IMAGE_PREFIX]) - { - msg.msgContentType = DDMessageTypeImage; - }else{ - msg.msgContentType = DDMessageTypeText; - } - - } - msg.msgTime = createTime; - msg.msgContent = msgContent; - msg.sessionId = fromUserId; - msg.senderId = fromUserId; - msg.info=info; - msg.msgID = [DDMessageModule getMessageID]; - [msgArray addObject:msg]; - - } - - - [msgDict setObject:sessionId forKey:@"sessionId"]; - [msgDict setObject:msgArray forKey:@"msgArray"]; - - return msgDict; - - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(object); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE - cId:DDCMD_MSG_UNREAD_MSG_REQ - seqNo:seqNo]; - [dataout writeUTF:object]; - - DDLog(@"serviceID:%i cmdID:%i --> get unread msg from user:%@",DDSERVICE_MESSAGE,DDCMD_MSG_UNREAD_MSG_REQ,object); - - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.h deleted file mode 100644 index 09c7b59..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDSendMessageAPI.h -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" - -/** - * 发送消息,object 为一个数组,index1:fromID,index2:toID,index3:messageSeqNo,index4:messageType,index5:messageSenderType,index6:messageContent,index7:messageAttachContent - */ -@interface DDSendMessageAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m deleted file mode 100644 index a5e3631..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// DDSendMessageAPI.m -// Duoduo -// -// Created by 独嘉 on 14-5-8. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSendMessageAPI.h" - -@implementation DDSendMessageAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 10; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_MSG_DATA; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_MSG_RECEIVE_DATA_ACK; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t seqNo = [bodyData readInt]; - return [NSNumber numberWithInt:seqNo]; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - - NSArray* array = (NSArray*)object; - NSString* fromId = array[0]; - NSString* toId = array[1]; - NSString* messageContent = array[2];//消息内容 - int messageSeqNo = [array[3] intValue]; - char messageTpye = [array[4] intValue];//消息类型 - NSString *messageAttachContent=nil; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = strLen(fromId) + strLen(toId) + strLen(messageContent) + strLen(messageAttachContent) + 24 + 12+sizeof(messageTpye); - DDLog(@" getSendMsgData: 消息长度:%d",totalLen); - [dataout writeInt:0]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE cId:DDCMD_MSG_DATA seqNo:seqNo]; - [dataout writeInt:messageSeqNo]; - [dataout writeUTF:fromId]; - [dataout writeUTF:toId]; - [dataout writeInt:0]; //createTime.由msgserver生成 - [dataout writeChar:messageTpye]; - [dataout writeUTF:messageContent]; - [dataout writeUTF:nil]; - [dataout writeDataCount]; - return [dataout toByteArray]; - }; - return package; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.h deleted file mode 100644 index 7b99842..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDSendMessageReadACKAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDSendMessageReadACKAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.m deleted file mode 100644 index c68a7ea..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// DDSendMessageReadACKAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSendMessageReadACKAPI.h" - -@implementation DDSendMessageReadACKAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 0; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_MSG_READ_ACK; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return 0; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - return nil; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(object); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE cId:DDCMD_MSG_READ_ACK seqNo:seqNo]; - [dataout writeUTF:object]; - - DDLog(@"serviceID:%i cmdID:%i --> send msg read ack from userID:%@",DDSERVICE_MESSAGE,DDCMD_MSG_READ_ACK,object); - - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.h deleted file mode 100644 index f6a16b4..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDSendPhotoMessageAPI.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDSendPhotoMessageAPI : NSObject -+ (DDSendPhotoMessageAPI *)sharedPhotoCache; -- (void)uploadImage:(NSString*)imagePath success:(void(^)(NSString* imageURL))success failure:(void(^)(id error))failure; -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m deleted file mode 100644 index 0be776b..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// DDSendPhotoMessageAPI.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSendPhotoMessageAPI.h" -#import "AFHTTPRequestOperationManager.h" -#import "Photo.h" -#import "std.h" -#import "DDCONSTANT.h" -#import "DDMessageEntity.h" -#import "PhotosCache.h" -#import "NSDictionary+Safe.h" -static int max_try_upload_times = 5; -@interface DDSendPhotoMessageAPI () -@property(nonatomic,strong)AFHTTPRequestOperationManager *manager; -@property(nonatomic,strong)NSOperationQueue *queue; -@property(assign)bool isSending; -@end -@implementation DDSendPhotoMessageAPI -+ (DDSendPhotoMessageAPI *)sharedPhotoCache -{ - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} -- (instancetype)init -{ - self = [super init]; - if (self) { - self.manager = [AFHTTPRequestOperationManager manager]; - self.manager.responseSerializer.acceptableContentTypes - = [NSSet setWithObject:@"text/html"]; - self.queue = [NSOperationQueue new]; - self.queue.maxConcurrentOperationCount = 1; - - } - return self; -} -- (void)uploadImage:(NSString*)imagekey success:(void(^)(NSString* imageURL))success failure:(void(^)(id error))failure -{ - - NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){ - NSURL *url = [NSURL URLWithString:IMAGE_UPLOAD_IP]; - NSString *urlString = [url.absoluteString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - @autoreleasepool - { - __block NSData *imageData = [[PhotosCache sharedPhotoCache] photoFromDiskCacheForKey:imagekey]; - if (imageData == nil) { - failure(@"data is emplty"); - return; - } - __block UIImage *image = [UIImage imageWithData:imageData]; - NSString *imageName = [NSString stringWithFormat:@"image.png_%dx%d.png",image.size.width,image.size.height]; - NSDictionary *params =[NSDictionary dictionaryWithObjectsAndKeys:@"im_image",@"type", nil]; - [self.manager POST:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { - [formData appendPartWithFileData:imageData name:@"image" fileName:imageName mimeType:@"image/jpeg"]; - } success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"%@------>+++",[DDSendPhotoMessageAPI imageUrl:operation.responseObject[@"url"]]); - imageData =nil; - image=nil; - NSInteger statusCode = [operation.response statusCode]; - if (statusCode == 200) { - NSString *imageURL=nil; - if ([responseObject isKindOfClass:[NSDictionary class]]) { - if ([[responseObject safeObjectForKey:@"error_code"] intValue]==0) { - imageURL = [responseObject safeObjectForKey:@"url"]; - }else{ - failure([responseObject safeObjectForKey:@"error_msg"]); - } - - } - - - NSMutableString *url = [NSMutableString stringWithFormat:@"%@",DD_MESSAGE_IMAGE_PREFIX]; - if (!imageURL) - { - max_try_upload_times --; - if (max_try_upload_times > 0) - { - - [self uploadImage:imagekey success:^(NSString *imageURL) { - success(imageURL); - } failure:^(id error) { - failure(error); - }]; - } - else - { - failure(nil); - } - - } - if (imageURL) { - [url appendString:imageURL]; - [url appendString:@":}]&$~@#@"]; - success(url); - return ; - } - } - else - { - self.isSending=NO; - failure(nil); - } - - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - self.isSending=NO; - NSDictionary* userInfo = error.userInfo; - NSHTTPURLResponse* response = userInfo[AFNetworkingOperationFailingURLResponseErrorKey]; - NSInteger stateCode = response.statusCode; - if (!(stateCode >= 300 && stateCode <=307)) - { - failure(@"断网"); - } - }]; - } - }]; - [self.queue addOperation:operation]; - -} -+(NSString *)imageUrl:(NSString *)content{ - NSRange range = [content rangeOfString:@"path="]; - NSString* url = nil; - if ([content length] > range.location + range.length) - { - url = [content substringFromIndex:range.location+range.length]; - } - url = [(NSString *)url stringByReplacingOccurrencesOfString:@"+" withString:@" "]; - url = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - return url; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.h deleted file mode 100644 index 6c3185f..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDSendVoiceMessageAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDSendVoiceMessageAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m deleted file mode 100644 index 3454516..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// DDSendVoiceMessageAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDSendVoiceMessageAPI.h" - -@implementation DDSendVoiceMessageAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return 20; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return DDCMD_MSG_DATA; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return DDCMD_MSG_RECEIVE_DATA_ACK; -} - - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t seqNo = [bodyData readInt]; - // NSString *fromUserId = [bodyData readUTF]; - - return [NSNumber numberWithInt:seqNo]; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - - NSArray* array = (NSArray*)object; - NSString* fromId = array[0]; - NSString* toId = array[1]; - int messageSeqNo = [array[2] intValue]; - int messageTpye = [array[3] intValue];//消息类型 - int messageRenderType = [array[4] intValue];//消息内容类型 - NSData* messageContent = array[5];//消息内容 - NSString* messageAttachContent = array[6];//消息附件内容 - - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = strLen(fromId) + strLen(toId) + [messageContent length] + strLen(messageAttachContent) + IM_PDU_HEADER_LEN + 25; - DDLog(@" getSendMsgData: 消息长度:%d",totalLen); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE cId:DDCMD_MSG_DATA seqNo:seqNo]; - [dataout writeInt:messageSeqNo]; - [dataout writeUTF:fromId]; - [dataout writeUTF:toId]; - [dataout writeInt:0]; //createTime.由msgserver生成 - [dataout writeChar:messageTpye]; - //[dataout writeChar:messageRenderType]; - [dataout writeBytes:messageContent]; - [dataout writeUTF:messageAttachContent]; - return [dataout toByteArray]; - }; - return package; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.h deleted file mode 100644 index 3893da4..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDAllotServiceAPI.h -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-17. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDAllotServiceAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.m deleted file mode 100644 index 83a9cba..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDAllotServiceAPI.m +++ /dev/null @@ -1,85 +0,0 @@ -// -// DDAllotServiceAPI.m -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-17. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "DDAllotServiceAPI.h" -#import "DDUserEntity.h" -@implementation DDAllotServiceAPI -#pragma mark - DDAPIScheduleProtocol - -- (int)requestTimeOutTimeInterval -{ - return 5; -} - -- (int)requestServiceID -{ - return DDSERVICE_FRI; -} - -- (int)responseServiceID -{ - return DDSERVICE_FRI; -} - -- (int)requestCommendID -{ - return DDCMD_FRI_USER_SERVICE_REQ; -} - -- (int)responseCommendID -{ - return DDCMD_FRI_USER_SERVICE_RES; -} - -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* dataInputStream = [DDDataInputStream dataInputStreamWithData:data]; - NSString* shopID = [dataInputStream readUTF]; - int result = [dataInputStream readInt]; - DDUserEntity* user = nil; - if (result == 0) - { - int status = [dataInputStream readInt];//在线状态 - NSString* userID = [dataInputStream readUTF];//客服ID - NSString* name = [dataInputStream readUTF];//name - NSString* nickName = [dataInputStream readUTF];//nickname - NSString* avatar = [dataInputStream readUTF];//头像 - NSUInteger userType = [dataInputStream readInt]; - NSUInteger updated = [[NSDate date] timeIntervalSince1970]; - user = [[DDUserEntity alloc] initWithUserID:userID name:name nick:nickName avatar:avatar userRole:userType userUpdated:updated]; - if (shopID) - { - [user.info setValue:shopID forKeyPath:DD_USER_INFO_SHOP_ID_KEY]; - } - } - return user; - - }; - return analysis; -} - -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - NSString* shopID = object[0]; - int type = [object[1] intValue]; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = 24 + strLen(shopID); - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_FRI cId:DDCMD_FRI_USER_SERVICE_REQ seqNo:seqNo]; - [dataout writeUTF:shopID]; - [dataout writeInt:type]; - return [dataout toByteArray]; - }; - return package; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.h deleted file mode 100644 index 7197c59..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDGetUserInfoAPI.h -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-24. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDGetUserInfoAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.m deleted file mode 100644 index c582c4c..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/DDGetUserInfoAPI.m +++ /dev/null @@ -1,107 +0,0 @@ -// -// DDGetUserInfoAPI.m -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-24. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "DDGetUserInfoAPI.h" -#import "DDUserEntity.h" -@implementation DDGetUserInfoAPI -- (int)requestTimeOutTimeInterval -{ - return 5; -} - -- (int)requestServiceID -{ - return DDSERVICE_FRI; -} - -- (int)responseServiceID -{ - return DDSERVICE_FRI; -} - -- (int)requestCommendID -{ - return DDCMD_USER_INFO_REQ; -} - -- (int)responseCommendID -{ - return DDCMD_USER_INFO_RES; -} - -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - uint32_t userCnt = [bodyData readInt]; - NSMutableArray *userList = [[NSMutableArray alloc] init]; - - for (uint32_t i = 0; i < userCnt; i++) { - NSString *userId =[bodyData readUTF]; - NSString *username = [bodyData readUTF]; - NSString *nickName = [bodyData readUTF]; - NSString *avatar = [bodyData readUTF]; - NSString *title = [bodyData readUTF]; - NSString *position = [bodyData readUTF]; - NSInteger roleStatus = [bodyData readInt]; - NSInteger sex = [bodyData readInt]; - NSString *departId = [bodyData readUTF]; - NSInteger jobNum = [bodyData readInt]; - NSString *telphone = [bodyData readUTF]; - NSString *email = [bodyData readUTF]; - NSDictionary* result = nil; - result = @{ - @"name":username, - @"nickName":nickName, - @"userId":userId, - @"title":title, - @"position":position, - @"roleStatus":@(roleStatus), - @"sex":@(sex), - @"departId":departId, - @"jobNum":@(jobNum), - @"telphone":telphone, - @"avatar":avatar, - @"email":email, - }; - DDUserEntity *user = [DDUserEntity dicToUserEntity:result]; - [userList addObject:user]; - } - DDLog(@"userListHandler, userCnt=%u", userCnt); - return userList; - }; - return analysis; -} - -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - NSArray* userList = (NSArray*)object; - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4; - uint32_t userCnt = (uint32_t)[userList count]; - for (uint32_t i = 0; i < userCnt; i++) { - totalLen += 4 + strLen((NSString*)[userList objectAtIndex:i]); - } - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_FRI - cId:DDCMD_USER_INFO_REQ - seqNo:seqNo]; - [dataout writeInt:userCnt]; - for (uint32_t i = 0; i < userCnt; i++) { - NSString *userId = (NSString*)[userList objectAtIndex:i]; - [dataout writeUTF:userId]; - } - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.h deleted file mode 100644 index 318330e..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// GetGroupInfoAPi.h -// TeamTalk -// -// Created by Michael Scofield on 2014-09-18. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface GetGroupInfoAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m deleted file mode 100644 index b74521e..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// GetGroupInfoAPi.m -// TeamTalk -// -// Created by Michael Scofield on 2014-09-18. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "GetGroupInfoAPI.h" -#import "DDGroupEntity.h" -@implementation GetGroupInfoAPI -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return CMD_ID_GROUP_USER_LIST_REQ; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return CMD_ID_GROUP_USER_LIST_RES; -} -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - NSString *groupId = [bodyData readUTF]; - uint32_t result = [bodyData readInt]; - DDGroupEntity* group = nil; - if (result != 0) - { - return group; - } - group = [[DDGroupEntity alloc] init]; - NSString *groupName = [bodyData readUTF]; - NSString *groupAvatar = [bodyData readUTF]; - NSString *groupCreator = [bodyData readUTF]; - UInt32 groupType = [bodyData readInt]; - group.objID = groupId; - group.name = groupName; - group.avatar = groupAvatar; - group.groupCreatorId = groupCreator; - group.groupType = groupType; - UInt32 groupMemberCnt = [bodyData readInt]; - if(groupMemberCnt > 0) - group.groupUserIds = [[NSMutableArray alloc] init]; - for (uint32_t i = 0; i < groupMemberCnt; i++) - { - NSString *userId = [bodyData readUTF]; - [group.groupUserIds addObject:userId]; - [group addFixOrderGroupUserIDS:userId]; - } - return group; - }; - return analysis; -} - -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(object); - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:CMD_ID_GROUP_USER_LIST_REQ - seqNo:seqNo]; - [dataout writeUTF:object]; - return [dataout toByteArray]; - - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.h deleted file mode 100644 index d37fc41..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// DDRecentConactsAPI.h -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "DDSuperAPI.h" -@interface RecentConactsAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.m deleted file mode 100644 index c15a1ba..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/RequestAPI/Users/RecentConactsAPI.m +++ /dev/null @@ -1,89 +0,0 @@ -// -// DDRecentConactsAPI.m -// Duoduo -// -// Created by 独嘉 on 14-4-24. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "RecentConactsAPI.h" -#import "DDUserEntity.h" -#import "DDDatabaseUtil.h" -#import "DDUserModule.h" -@implementation RecentConactsAPI - -#pragma mark - DDAPIScheduleProtocol - -- (int)requestTimeOutTimeInterval -{ - return 10; -} - -- (int)requestServiceID -{ - return DDSERVICE_FRI; -} - -- (int)responseServiceID -{ - return DDSERVICE_FRI; -} - -- (int)requestCommendID -{ - return DDCMD_FRI_RECENT_CONTACTS_REQ; -} - -- (int)responseCommendID -{ - return DDCMD_FRI_RECENT_CONTACTS_RES; -} - -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* dataInputStream = [DDDataInputStream dataInputStreamWithData:data]; - NSInteger userCnt = [dataInputStream readInt]; - DDLog(@" **** 返回最近联系人列表,有%d个最近联系人.",userCnt); - NSMutableArray* recentlyContactContent = [[NSMutableArray alloc] init]; - dispatch_semaphore_t sema = dispatch_semaphore_create(0); - if (userCnt == 0) { - dispatch_semaphore_signal(sema); - }else - { - for (int i=0; i<userCnt; i++) { - NSString *userId = [dataInputStream readUTF]; - NSInteger userUpdated = [dataInputStream readInt]; - [[DDUserModule shareInstance] getUserForUserID:userId Block:^(DDUserEntity *user) { - user.lastUpdateTime=userUpdated; - if (user) { - [recentlyContactContent addObject:user]; - } - - }]; - if (userCnt == i+1) { - dispatch_semaphore_signal(sema); - } - } - } - dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); - return recentlyContactContent; - }; - return analysis; -} - -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4; - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_FRI cId:DDCMD_FRI_RECENT_CONTACTS_REQ seqNo:seqNo]; - [dataout writeInt:0]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.h deleted file mode 100644 index 855be1e..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ShieldGroupMessageAPI.h -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface ShieldGroupMessageAPI : DDSuperAPI - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.m deleted file mode 100644 index a922a91..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/ShieldGroupMessageAPI.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// ShieldGroupMessageAPI.m -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ShieldGroupMessageAPI.h" - -@implementation ShieldGroupMessageAPI -/** - * 请求超时时间 - * - * @return 超时时间 - */ -- (int)requestTimeOutTimeInterval -{ - return TimeOutTimeInterval; -} - -/** - * 请求的serviceID - * - * @return 对应的serviceID - */ -- (int)requestServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的serviceID - * - * @return 对应的serviceID - */ -- (int)responseServiceID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求的commendID - * - * @return 对应的commendID - */ -- (int)requestCommendID -{ - return MODULE_ID_GROUP; -} - -/** - * 请求返回的commendID - * - * @return 对应的commendID - */ -- (int)responseCommendID -{ - return MODULE_ID_GROUP; -} - -/** - * 解析数据的block - * - * @return 解析数据的block - */ -- (Analysis)analysisReturnData -{ - Analysis analysis = (id)^(NSData* data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - int isOk = [bodyData readInt]; - return nil; - }; - return analysis; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint16_t seqNo) - { - NSArray* array = (NSArray*)object; - NSString* groupID = array[0]; - uint32_t isShield = [array[1] intValue]; - - - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - uint32_t totalLen = IM_PDU_HEADER_LEN + strLen(groupID) + 8; - - - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:MODULE_ID_GROUP - cId:MODULE_ID_GROUP - seqNo:seqNo]; - [dataout writeUTF:groupID]; - [dataout writeInt:isShield]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.h deleted file mode 100644 index 5933cbb..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDReceiveKickoffAPI.h -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-29. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "DDUnrequestSuperAPI.h" - -@interface ReceiveKickoffAPI : DDUnrequestSuperAPI<DDAPIUnrequestScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.m deleted file mode 100644 index 38641bc..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Kickoff/ReceiveKickoffAPI.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// DDReceiveKickoffAPI.m -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-29. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "ReceiveKickoffAPI.h" - -@implementation ReceiveKickoffAPI -- (int)responseServiceID -{ - return DDSERVICE_LOGIN; -} - -/** - * 数据包中的commandID - * - * @return commandID - */ -- (int)responseCommandID -{ - return DDCMD_LOGIN_KICK_USER; -} - -/** - * 解析数据包 - * - * @return 解析数据包的block - */ -- (UnrequestAPIAnalysis)unrequestAnalysis -{ - UnrequestAPIAnalysis analysis = (id)^(NSData* data) - { - return nil; - }; - return analysis; -} - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.h deleted file mode 100644 index 0de9712..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDReceiveMessageACKAPI.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-09. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDSuperAPI.h" - -@interface DDReceiveMessageACKAPI : DDSuperAPI<DDAPIScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.m deleted file mode 100644 index f4859cb..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageACKAPI.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// DDReceiveMessageACKAPI.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-09. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDReceiveMessageACKAPI.h" - -@implementation DDReceiveMessageACKAPI - -- (int)requestTimeOutTimeInterval -{ - return 0; -} - -- (int)requestServiceID -{ - return DDSERVICE_MESSAGE; -} - -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -- (int)requestCommendID -{ - return 2; -} - -- (int)responseCommendID -{ - return 2; -} - -- (Analysis)analysisReturnData -{ - return nil; -} - -/** - * 打包数据的block - * - * @return 打包数据的block - */ -- (Package)packageRequestObject -{ - Package package = (id)^(id object,uint32_t seqNo) - { - DDDataOutputStream *dataout = [[DDDataOutputStream alloc] init]; - int seqNum =[object[1] intValue]; - uint32_t totalLen = IM_PDU_HEADER_LEN + 4 + strLen(object[0])+sizeof(seqNum); - [dataout writeInt:totalLen]; - [dataout writeTcpProtocolHeader:DDSERVICE_MESSAGE cId:2 seqNo:seqNo]; - [dataout writeInt:seqNum]; - [dataout writeUTF:object[0]]; - return [dataout toByteArray]; - }; - return package; -} -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.h b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.h deleted file mode 100644 index 55f14f8..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDReceiveMessageAPI.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDUnrequestSuperAPI.h" - -@interface DDReceiveMessageAPI : DDUnrequestSuperAPI<DDAPIUnrequestScheduleProtocol> - -@end diff --git a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.m b/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.m deleted file mode 100644 index 7d58e05..0000000 --- a/TeamTalk/IOSDuoduo/TCPAPI/UnrequestAPI/Msg/DDReceiveMessageAPI.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// DDReceiveMessageAPI.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDReceiveMessageAPI.h" -#import "DDMessageEntity.h" -#import "Encapsulator.h" -#import "DDMessageModule.h" -#import "RuntimeStatus.h" -@implementation DDReceiveMessageAPI -- (int)responseServiceID -{ - return DDSERVICE_MESSAGE; -} - -- (int)responseCommandID -{ - return DDCMD_MSG_DATA; -} - -- (UnrequestAPIAnalysis)unrequestAnalysis -{ - UnrequestAPIAnalysis analysis = (id)^(NSData *data) - { - DDDataInputStream* bodyData = [DDDataInputStream dataInputStreamWithData:data]; - DDMessageEntity *msg = [DDMessageEntity makeMessageFromStream:bodyData]; - return msg; - }; - return analysis; -} -@end diff --git a/TeamTalk/IOSDuoduo/TeamTalk-Prefix.pch b/TeamTalk/IOSDuoduo/TeamTalk-Prefix.pch deleted file mode 100644 index ad6ba6b..0000000 --- a/TeamTalk/IOSDuoduo/TeamTalk-Prefix.pch +++ /dev/null @@ -1,21 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import <Availability.h> - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iOS SDK 3.0 and later." -#endif - -#ifdef __OBJC__ - #import <UIKit/UIKit.h> - #import <Foundation/Foundation.h> - #import <SystemConfiguration/SystemConfiguration.h> - #import <MobileCoreServices/MobileCoreServices.h> - #import "DDCONSTANT.h" - #import "DDSundriesCenter.h" - #import "DDNotificationHelp.h" -#endif diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLayout.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLayout.h deleted file mode 100755 index 3a16317..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLayout.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * AQGridView+CellLayout.h - * AQGridView - * - * Created by Jim Dovey on 8/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <UIKit/UIKit.h> -#import "AQGridView.h" - -// used by AQGridViewUpdateInfo -@interface AQGridView (AQCellLayout) -- (CGRect) fixCellFrame: (CGRect) cellFrame forGridRect: (CGRect) gridRect; -- (void) updateGridViewBoundsForNewGridData: (AQGridViewData *) newGridData; -- (AQGridViewCell *) createPreparedCellForIndex: (NSUInteger) index; -- (AQGridViewCell *) createPreparedCellForIndex: (NSUInteger) index usingGridData: (AQGridViewData *) gridData; -- (void) insertVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex; -- (void) deleteVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex appendingNewCell: (AQGridViewCell *) newCell; -- (void) ensureCellInVisibleList: (AQGridViewCell *) cell; -- (void) animationWillRevealItemsAtIndices: (NSRange) indices; -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLocationDelegation.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLocationDelegation.h deleted file mode 100755 index d16ea58..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView+CellLocationDelegation.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * AQGridView+CellLocationDelegation.h - * AQGridView - * - * Created by Jim Dovey on 11/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <Foundation/Foundation.h> -#import "AQGridView.h" - -@interface AQGridView (CellLocationDelegation) -- (void) delegateWillDisplayCell: (AQGridViewCell *) cell atIndex: (NSUInteger) index; -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.h deleted file mode 100755 index 2f8d460..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * AQGridView.h - * AQGridView - * - * Created by Jim Dovey on 10/2/2010. - * Copyright 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <UIKit/UIKit.h> -#import "AQGridViewCell.h" - -typedef enum { - AQGridViewScrollPositionNone, - AQGridViewScrollPositionTop, - AQGridViewScrollPositionMiddle, - AQGridViewScrollPositionBottom -} AQGridViewScrollPosition; - -typedef enum { - AQGridViewItemAnimationFade, - AQGridViewItemAnimationRight, - AQGridViewItemAnimationLeft, - AQGridViewItemAnimationTop, - AQGridViewItemAnimationBottom, - AQGridViewItemAnimationNone -} AQGridViewItemAnimation; - -typedef enum { - AQGridViewLayoutDirectionVertical, - AQGridViewLayoutDirectionHorizontal -} AQGridViewLayoutDirection; - -@protocol AQGridViewDataSource; -@class AQGridView, AQGridViewData, AQGridViewUpdateInfo; - -@protocol AQGridViewDelegate <NSObject, UIScrollViewDelegate> - -@optional - -// Display customization - -- (void) gridView: (AQGridView *) gridView willDisplayCell: (AQGridViewCell *) cell forItemAtIndex: (NSUInteger) index; - -// Selection - -// Called before selection occurs. Return a new index, or NSNotFound, to change the proposed selection. -- (NSUInteger) gridView: (AQGridView *) gridView willSelectItemAtIndex: (NSUInteger) index; -- (NSUInteger) gridView: (AQGridView *) gridView willSelectItemAtIndex: (NSUInteger) index numFingersTouch:(NSUInteger) numFingers; -- (NSUInteger) gridView: (AQGridView *) gridView willDeselectItemAtIndex: (NSUInteger) index; -// Called after the user changes the selection -- (void) gridView: (AQGridView *) gridView didSelectItemAtIndex: (NSUInteger) index; -- (void) gridView: (AQGridView *) gridView didSelectItemAtIndex: (NSUInteger) index numFingersTouch:(NSUInteger)numFingers; -- (void) gridView: (AQGridView *) gridView didDeselectItemAtIndex: (NSUInteger) index; - -// Called after animated updates finished -- (void) gridViewDidEndUpdateAnimation:(AQGridView *) gridView; - -// NOT YET IMPLEMENTED -- (void) gridView: (AQGridView *) gridView gestureRecognizer: (UIGestureRecognizer *) recognizer activatedForItemAtIndex: (NSUInteger) index; - -- (CGRect) gridView: (AQGridView *) gridView adjustCellFrame: (CGRect) cellFrame withinGridCellFrame: (CGRect) gridCellFrame; - -// Editing -- (void)gridView:(AQGridView *)aGridView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndex:(NSUInteger)index; - -@end - -extern NSString * const AQGridViewSelectionDidChangeNotification; - -@interface AQGridView : UIScrollView -{ - id<AQGridViewDataSource> __unsafe_unretained _dataSource; - - AQGridViewData * _gridData; - NSMutableArray * _updateInfoStack; - NSInteger _animationCount; - - CGRect _visibleBounds; - NSRange _visibleIndices; - NSMutableArray * _visibleCells; - NSMutableDictionary * _reusableGridCells; - - NSSet * _animatingCells; - NSIndexSet * _animatingIndices; - - NSMutableIndexSet * _highlightedIndices; - UIView * __unsafe_unretained _touchedContentView; // weak reference - - UIView * _backgroundView; - UIColor * _separatorColor; - - NSInteger _reloadingSuspendedCount; - NSInteger _displaySuspendedCount; - - NSInteger _updateCount; - - NSUInteger _selectedIndex; - NSUInteger _pendingSelectionIndex; - - CGPoint _touchBeganPosition; - - UIView * _headerView; - UIView * _footerView; - - struct - { - unsigned resizesCellWidths:1; - unsigned numColumns:6; - unsigned separatorStyle:3; - unsigned allowsSelection:1; - unsigned backgroundViewExtendsUp:1; - unsigned backgroundViewExtendsDown:1; - unsigned usesPagedHorizontalScrolling:1; - unsigned updating:1; // unused - unsigned ignoreTouchSelect:1; - unsigned needsReload:1; - unsigned allCellsNeedLayout:1; - unsigned isRotating:1; - unsigned clipsContentWidthToBounds:1; - unsigned isAnimatingUpdates:1; // unused, see _animationCount instead - unsigned requiresSelection:1; - unsigned contentSizeFillsBounds:1; - - unsigned delegateWillDisplayCell:1; - unsigned delegateWillSelectItem:1; - unsigned delegateWillSelectItemMultiTouch:1; - unsigned delegateWillDeselectItem:1; - unsigned delegateDidSelectItem:1; - unsigned delegateDidSelectItemMultiTouch:1; - unsigned delegateDidDeselectItem:1; - unsigned delegateGestureRecognizerActivated:1; - unsigned delegateAdjustGridCellFrame:1; - unsigned delegateDidEndUpdateAnimation:1; - - unsigned dataSourceGridCellSize:1; - - unsigned int isEditing:1; - - unsigned __RESERVED__:1; - } _flags; -} - -@property (nonatomic, unsafe_unretained) IBOutlet id<AQGridViewDataSource> dataSource; -@property (nonatomic, unsafe_unretained) IBOutlet id<AQGridViewDelegate> delegate; - -@property (nonatomic, assign) AQGridViewLayoutDirection layoutDirection; - -// Data - -- (void) reloadData; - -// Info - -@property (nonatomic, readonly) NSUInteger numberOfItems; -@property (nonatomic, readonly) NSUInteger numberOfColumns; -@property (nonatomic, readonly) NSUInteger numberOfRows; - -@property (nonatomic, readonly) CGSize gridCellSize; - -- (void)doAddVisibleCell: (UIView *)cell; - -- (CGRect) rectForItemAtIndex: (NSUInteger) index; -- (CGRect) gridViewVisibleBounds; -- (AQGridViewCell *) cellForItemAtIndex: (NSUInteger) index; -- (NSUInteger) indexForItemAtPoint: (CGPoint) point; -- (NSUInteger) indexForCell: (AQGridViewCell *) cell; -- (AQGridViewCell *) cellForItemAtPoint: (CGPoint) point; - -- (NSArray *) visibleCells; -- (NSIndexSet *) visibleCellIndices; - -- (void) scrollToItemAtIndex: (NSUInteger) index atScrollPosition: (AQGridViewScrollPosition) scrollPosition animated: (BOOL) animated; - -// Insertion/deletion/reloading - -- (void) beginUpdates; // allow multiple insert/delete of items to be animated simultaneously. Nestable. -- (void) endUpdates; // only call insert/delete/reload calls inside an update block. - -- (void) insertItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation; -- (void) deleteItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation; -- (void) reloadItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation; - -- (void) moveItemAtIndex: (NSUInteger) index toIndex: (NSUInteger) newIndex withAnimation: (AQGridViewItemAnimation) animation; - -// Selection - -@property (nonatomic) BOOL allowsSelection; // default is YES -@property (nonatomic) BOOL requiresSelection; // if YES, tapping on a selected cell will not de-select it - -- (NSUInteger) indexOfSelectedItem; // returns NSNotFound if no item is selected -- (void) selectItemAtIndex: (NSUInteger) index animated: (BOOL) animated scrollPosition: (AQGridViewScrollPosition) scrollPosition; -- (void) deselectItemAtIndex: (NSUInteger) index animated: (BOOL) animated; - -// Appearance - -@property (nonatomic, assign) BOOL resizesCellWidthToFit; // default is NO. Set to YES if the view should resize cells to fill all available space in their grid square. Ignored if separatorStyle == AQGridViewCellSeparatorStyleEmptySpace. - -// this property is now officially deprecated -- it will instead set the layout direction to horizontal if -// this property is set to YES, or to vertical otherwise. -@property (nonatomic, assign) BOOL clipsContentWidthToBounds __attribute__((deprecated)); // default is YES. If you want to enable horizontal scrolling, set this to NO. - -@property (nonatomic, retain) UIView * backgroundView; // specifies a view to place behind the cells -@property (nonatomic) BOOL backgroundViewExtendsUp; // default is NO. If YES, the background view extends upward and is visible during a bounce. -@property (nonatomic) BOOL backgroundViewExtendsDown; // default is NO. If YES, the background view extends downward and is visible during a bounce. -@property (nonatomic) BOOL usesPagedHorizontalScrolling; // default is NO, and scrolls verticalls only. Set to YES to have horizontal-only scrolling by page. - -@property (nonatomic) AQGridViewCellSeparatorStyle separatorStyle; // default is AQGridViewCellSeparatorStyleEmptySpace -@property (nonatomic, retain) UIColor * separatorColor; // ignored unless separatorStyle == AQGridViewCellSeparatorStyleSingleLine. Default is standard separator gray. - -- (AQGridViewCell *) dequeueReusableCellWithIdentifier: (NSString *) reuseIdentifier; - -// Headers and Footers - -@property (nonatomic, retain) UIView * gridHeaderView; -@property (nonatomic, retain) UIView * gridFooterView; - -@property (nonatomic, assign) CGFloat leftContentInset; -@property (nonatomic, assign) CGFloat rightContentInset; - -@property (nonatomic, assign) BOOL contentSizeGrowsToFillBounds; // default is YES. Prior to iPhone OS 3.2, pattern colors tile from the bottom-left, necessitating that this be set to NO to avoid specially-constructed background patterns falling 'out of sync' with the cells displayed on top of it. - -@property (nonatomic, readonly) BOOL isAnimatingUpdates; - -// Editing - -@property(nonatomic,getter=isEditing) BOOL editing; // default is NO. setting is not animated. -- (void)setEditing:(BOOL)editing animated:(BOOL)animated; - -@end - -@protocol AQGridViewDataSource <NSObject> - -@required - -- (NSUInteger) numberOfItemsInGridView: (AQGridView *) gridView; -- (AQGridViewCell *) gridView: (AQGridView *) gridView cellForItemAtIndex: (NSUInteger) index; - -@optional - -// all cells are placed in a logical 'grid cell', all of which are the same size. The default size is 96x128 (portrait). -// The width/height values returned by this function will be rounded UP to the nearest denominator of the screen width. -- (CGSize) portraitGridCellSizeForGridView: (AQGridView *) gridView; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.m deleted file mode 100755 index cb011a2..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridView.m +++ /dev/null @@ -1,2197 +0,0 @@ -/* - * AQGridView.m - * AQGridView - * - * Created by Jim Dovey on 10/2/2010. - * Copyright 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridView.h" -#import "AQGridViewUpdateItem.h" -#import "AQGridViewAnimatorItem.h" -#import "AQGridViewData.h" -#import "AQGridViewUpdateInfo.h" -#import "AQGridViewCell+AQGridViewCellPrivate.h" -#import "AQGridView+CellLocationDelegation.h" -#import "NSIndexSet+AQIsSetContiguous.h" -#import "NSIndexSet+AQIndexesOutsideSet.h" - -#import <libkern/OSAtomic.h> - -// see _basicHitTest:withEvent: below -#import <objc/objc.h> -#import <objc/runtime.h> - -// Lightweight object class for touch selection parameters -@interface UserSelectItemIndexParams : NSObject -{ - NSUInteger _indexNum; - NSUInteger _numFingers; -}; - -@property (nonatomic, assign) NSUInteger indexNum; -@property (nonatomic, assign) NSUInteger numFingers; -@end - -@implementation UserSelectItemIndexParams - -@synthesize indexNum = _indexNum; -@synthesize numFingers = _numFingers; - -@end - - -NSString * const AQGridViewSelectionDidChangeNotification = @"AQGridViewSelectionDidChangeNotification"; - -@interface AQGridView (AQCellGridMath) -- (NSUInteger) visibleCellListIndexForItemIndex: (NSUInteger) itemIndex; -@end - -@interface AQGridView (AQCellLayout) -- (void) layoutCellsInVisibleCellRange: (NSRange) range; -- (void) layoutAllCells; -- (CGRect) fixCellFrame: (CGRect) cellFrame forGridRect: (CGRect) gridRect; -- (void) updateVisibleGridCellsNow; -//- (void) updateForwardCellsForVisibleIndices: (NSIndexSet *) newVisibleIndices; -- (AQGridViewCell *) createPreparedCellForIndex: (NSUInteger) index; -- (void) insertVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex; -- (void) deleteVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex appendingNewCell: (AQGridViewCell *) newLastCell; -@end - -@interface AQGridView () -@property (nonatomic, copy) NSIndexSet * animatingIndices; -@end - - -@implementation AQGridView - -@synthesize dataSource=_dataSource, backgroundView=_backgroundView, separatorColor=_separatorColor, animatingCells=_animatingCells, animatingIndices=_animatingIndices; - -- (void) _sharedGridViewInit -{ - _gridData = [[AQGridViewData alloc] initWithGridView: self]; - [_gridData setDesiredCellSize: CGSizeMake(96.0, 128.0)]; - - _visibleBounds = self.bounds; - _visibleCells = [[NSMutableArray alloc] init]; - _reusableGridCells = [[NSMutableDictionary alloc] init]; - _highlightedIndices = [[NSMutableIndexSet alloc] init]; - _updateInfoStack = [[NSMutableArray alloc] init]; - - self.clipsToBounds = YES; - self.separatorColor = [UIColor colorWithWhite: 0.85 alpha: 1.0]; - self.canCancelContentTouches = YES; - - _selectedIndex = NSNotFound; - _pendingSelectionIndex = NSNotFound; - - _flags.resizesCellWidths = 0; - _flags.numColumns = [_gridData numberOfItemsPerRow]; - _flags.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace; - _flags.allowsSelection = 1; - _flags.usesPagedHorizontalScrolling = NO; - _flags.contentSizeFillsBounds = 1; -} - -- (id)initWithFrame: (CGRect) frame -{ - self = [super initWithFrame:frame]; - if ( self == nil ) - return ( nil ); - - [self _sharedGridViewInit]; - - return ( self ); -} - -- (id) initWithCoder: (NSCoder *) aDecoder -{ - self = [super initWithCoder: aDecoder]; - if ( self == nil ) - return ( nil ); - - [self _sharedGridViewInit]; - - return ( self ); -} - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - - -#pragma mark - -#pragma mark Properties - -- (void) setDelegate: (id<AQGridViewDelegate>) obj -{ - if ( (obj != nil) && ([obj conformsToProtocol: @protocol(AQGridViewDelegate)] == NO )) - [NSException raise: NSInvalidArgumentException format: @"Argument to -setDelegate must conform to the AQGridViewDelegate protocol"]; - [super setDelegate: obj]; - - _flags.delegateWillDisplayCell = [obj respondsToSelector: @selector(gridView:willDisplayCell:forItemAtIndex:)]; - _flags.delegateWillSelectItem = [obj respondsToSelector: @selector(gridView:willSelectItemAtIndex:)]; - _flags.delegateWillSelectItemMultiTouch = [obj respondsToSelector: @selector(gridView:willSelectItemAtIndex:numFingersTouch:)]; - _flags.delegateWillDeselectItem = [obj respondsToSelector: @selector(gridView:willDeselectItemAtIndex:)]; - _flags.delegateDidSelectItem = [obj respondsToSelector: @selector(gridView:didSelectItemAtIndex:)]; - _flags.delegateDidSelectItemMultiTouch = [obj respondsToSelector: @selector(gridView:didSelectItemAtIndex:numFingersTouch:)]; - _flags.delegateDidDeselectItem = [obj respondsToSelector: @selector(gridView:didDeselectItemAtIndex:)]; - _flags.delegateGestureRecognizerActivated = [obj respondsToSelector: @selector(gridView:gestureRecognizer:activatedForItemAtIndex:)]; - _flags.delegateAdjustGridCellFrame = [obj respondsToSelector: @selector(gridView:adjustCellFrame:withinGridCellFrame:)]; - _flags.delegateDidEndUpdateAnimation = [obj respondsToSelector:@selector(gridViewDidEndUpdateAnimation:)]; -} - -- (id<AQGridViewDelegate>) delegate -{ - id obj = [super delegate]; - if ( [obj conformsToProtocol: @protocol(AQGridViewDelegate)] == NO ) - return ( nil ); - return ( obj ); -} - -- (void) setDataSource: (id<AQGridViewDataSource>) obj -{ - if ((obj != nil) && ([obj conformsToProtocol: @protocol(AQGridViewDataSource)] == NO )) - [NSException raise: NSInvalidArgumentException format: @"Argument to -setDataSource must conform to the AQGridViewDataSource protocol"]; - - _dataSource = obj; - - _flags.dataSourceGridCellSize = [obj respondsToSelector: @selector(portraitGridCellSizeForGridView:)]; -} - -- (AQGridViewLayoutDirection) layoutDirection -{ - return ( _gridData.layoutDirection ); -} - -- (void) setLayoutDirection: (AQGridViewLayoutDirection) direction -{ - _gridData.layoutDirection = direction; -} - -- (NSUInteger) numberOfItems -{ - return ( _gridData.numberOfItems ); -} - -- (NSUInteger) numberOfColumns -{ - if ( _flags.numColumns == 0 ) - _flags.numColumns = 1; - return ( _flags.numColumns ); -} - -- (NSUInteger) numberOfRows -{ - return ( _gridData.numberOfItems / _flags.numColumns ); -} - -- (BOOL) allowsSelection -{ - return ( _flags.allowsSelection ); -} - -- (void) setAllowsSelection: (BOOL) value -{ - _flags.allowsSelection = (value ? 1 : 0); -} - -- (BOOL) backgroundViewExtendsDown -{ - return ( _flags.backgroundViewExtendsDown); -} - -- (void) setBackgroundViewExtendsDown: (BOOL) value -{ - _flags.backgroundViewExtendsDown = (value ? 1 : 0); -} - -- (BOOL) backgroundViewExtendsUp -{ - return ( _flags.backgroundViewExtendsUp); -} - -- (void) setBackgroundViewExtendsUp: (BOOL) value -{ - _flags.backgroundViewExtendsUp = (value ? 1 : 0); -} - -- (BOOL) requiresSelection -{ - return ( _flags.requiresSelection ); -} - -- (void) setRequiresSelection: (BOOL) value -{ - _flags.requiresSelection = (value ? 1 : 0); -} - -- (BOOL) resizesCellWidthToFit -{ - return ( _flags.resizesCellWidths ); -} - -- (void) setResizesCellWidthToFit: (BOOL) value -{ - int i = (value ? 1 : 0); - if ( _flags.resizesCellWidths == i ) - return; - - _flags.resizesCellWidths = i; - [self setNeedsLayout]; -} - -- (BOOL) clipsContentWidthToBounds -{ - return ( self.layoutDirection == AQGridViewLayoutDirectionVertical ); -} - -- (void) setClipsContentWidthToBounds: (BOOL) value -{ - self.layoutDirection = (value ? AQGridViewLayoutDirectionVertical : AQGridViewLayoutDirectionHorizontal); -} - -- (BOOL) usesPagedHorizontalScrolling -{ - return ( _flags.usesPagedHorizontalScrolling ); -} - -- (void) setUsesPagedHorizontalScrolling: (BOOL) value -{ - int i = (value ? 1 : 0); - if ( _flags.usesPagedHorizontalScrolling == i ) - return; - - _flags.usesPagedHorizontalScrolling = i; - [self setNeedsLayout]; -} - -- (AQGridViewCellSeparatorStyle) separatorStyle -{ - return ( _flags.separatorStyle ); -} - -- (void) setSeparatorStyle: (AQGridViewCellSeparatorStyle) style -{ - if ( style == _flags.separatorStyle ) - return; - - _flags.separatorStyle = style; - - for ( AQGridViewCell * cell in _visibleCells ) - { - cell.separatorStyle = style; - } - - [self setNeedsLayout]; -} - -- (CGFloat) leftContentInset -{ - return ( _gridData.leftPadding ); -} - -- (void) setLeftContentInset: (CGFloat) inset -{ - _gridData.leftPadding = inset; -} - -- (CGFloat) rightContentInset -{ - return ( _gridData.rightPadding ); -} - -- (void) setRightContentInset: (CGFloat) inset -{ - _gridData.rightPadding = inset; -} - -- (CGSize) gridCellSize -{ - return ( [_gridData cellSize] ); -} - -- (UIView *) gridHeaderView -{ - return ( _headerView ); -} - -- (void) setGridHeaderView: (UIView *) newHeaderView -{ - if ( newHeaderView == _headerView ) - return; - - [_headerView removeFromSuperview]; - - _headerView = newHeaderView; - if ( _headerView == nil ) - { - _gridData.topPadding = 0.0; - } - else - { - [self addSubview: _headerView]; - _gridData.topPadding = _headerView.frame.size.height; - } - - [self setNeedsLayout]; -} - -- (UIView *) gridFooterView -{ - return ( _footerView ); -} - -- (void) setGridFooterView: (UIView *) newFooterView -{ - if ( newFooterView == _footerView ) - return; - - [_footerView removeFromSuperview]; - - _footerView = newFooterView; - if ( _footerView == nil ) - { - _gridData.bottomPadding = 0.0; - } - else - { - [self addSubview: _footerView]; - _gridData.bottomPadding = _footerView.frame.size.height; - } - - [self setNeedsLayout]; -} - -- (BOOL) contentSizeGrowsToFillBounds -{ - return ( _flags.contentSizeFillsBounds == 1 ); -} - -- (void) setContentSizeGrowsToFillBounds: (BOOL) value -{ - _flags.contentSizeFillsBounds = (value ? 1 : 0); -} - -- (void) setAnimatingCells: (NSSet *) set -{ - _animatingCells = set; - - NSMutableIndexSet * indices = [[NSMutableIndexSet alloc] init]; - for ( AQGridViewAnimatorItem * item in set ) - { - if ( item.index != NSNotFound ) - [indices addIndex: item.index]; - } - - self.animatingIndices = indices; -} - -- (BOOL) isAnimatingUpdates -{ - return ( _animationCount > 0 ); -} - -- (void) updateContentRectWithOldMaxLocation: (CGPoint) oldMaxLocation gridSize: (CGSize) gridSize -{ - // The following line prevents an update leading to unneccessary auto-scrolling - // Before this fix, AQGridView animation always caused scrolling to the most bottom line - if (CGSizeEqualToSize(self.contentSize, gridSize)) return; - - // update content size - self.contentSize = gridSize; - - // fix content offset if applicable - CGPoint offset = self.contentOffset; - CGPoint oldOffset = offset; - - if ( offset.y + self.bounds.size.height > gridSize.height ) - { - offset.y = MAX(0.0, self.contentSize.height - self.bounds.size.height); - } - else if ( !CGPointEqualToPoint(oldOffset, CGPointZero) ) // stick-to-top takes precedence - { - if ( [_gridData pointIsInLastRow: oldMaxLocation] ) - { - // we were scrolled to the bottom-- stay there as our height decreases - if ( self.layoutDirection == AQGridViewLayoutDirectionVertical ) - offset.y = MAX(0.0, self.contentSize.height - self.bounds.size.height); - else - offset.x = MAX(0.0, self.contentSize.width - self.bounds.size.width); - } - } - - //NSLog( @"Resetting offset from %@ to %@", NSStringFromCGPoint(oldOffset), NSStringFromCGPoint(offset) ); - self.contentOffset = offset; -} - -- (void) handleGridViewBoundsChanged: (CGRect) oldBounds toNewBounds: (CGRect) bounds -{ - CGSize oldGridSize = [_gridData sizeForEntireGrid]; - BOOL wasAtBottom = ((oldGridSize.height != 0.0) && (CGRectGetMaxY(oldBounds) == oldGridSize.height)); - - [_gridData gridViewDidChangeBoundsSize: bounds.size]; - _flags.numColumns = [_gridData numberOfItemsPerRow]; - CGSize newGridSize = [_gridData sizeForEntireGrid]; - - CGPoint oldMaxLocation = CGPointMake(CGRectGetMaxX(oldBounds), CGRectGetMaxY(oldBounds)); - [self updateContentRectWithOldMaxLocation: oldMaxLocation gridSize: newGridSize]; - - if ( (wasAtBottom) && (!CGPointEqualToPoint(oldBounds.origin, CGPointZero)) && (newGridSize.height > oldGridSize.height) ) - { - CGRect contentRect = self.bounds; - if ( CGRectGetMaxY(contentRect) < newGridSize.height ) - { - contentRect.origin.y += (newGridSize.height - oldGridSize.height); - self.contentOffset = contentRect.origin; - } - } - - [self updateVisibleGridCellsNow]; - _flags.allCellsNeedLayout = 1; -} - -- (void) setContentOffset:(CGPoint) offset -{ - [super setContentOffset: offset]; -} - -- (void)setContentOffset: (CGPoint) contentOffset animated: (BOOL) animate -{ - // Call our super duper method - [super setContentOffset: contentOffset animated: animate]; - - // for long grids, ensure there are visible cells when scrolled to - if (!animate) - { - [self updateVisibleGridCellsNow]; - /*if (![_visibleCells count]) - { - NSIndexSet * newIndices = [_gridData indicesOfCellsInRect: [self gridViewVisibleBounds]]; - [self updateForwardCellsForVisibleIndices: newIndices]; - }*/ - } -} - -- (void) setContentSize: (CGSize) newSize -{ - if ( (_flags.contentSizeFillsBounds == 1) && (newSize.height < self.bounds.size.height) ) - newSize.height = self.bounds.size.height; - - if (self.gridFooterView) - { - // In-call status bar influences footer position - CGRect statusRect = [UIApplication sharedApplication].statusBarFrame; - CGFloat statusHeight = MIN(CGRectGetWidth(statusRect), CGRectGetHeight(statusRect)) - 20; - - CGFloat footerHeight = CGRectGetHeight(self.gridFooterView.bounds); - CGFloat minimumHeight = statusHeight + CGRectGetHeight(self.bounds) + footerHeight; - if (newSize.height < footerHeight + minimumHeight) - newSize.height = minimumHeight; - } - - newSize.height = fmax(newSize.height, self.frame.size.height); - - CGSize oldSize = self.contentSize; - [super setContentSize: newSize]; - - if ( oldSize.width != newSize.width ) - [_gridData gridViewDidChangeBoundsSize: newSize]; - - if ( CGRectGetMaxY(self.bounds) > newSize.height ) - { - CGRect b = self.bounds; - CGFloat diff = CGRectGetMaxY(b) - newSize.height; - b.origin.y = MAX(0.0, b.origin.y - diff); - self.bounds = b; - } -} - -- (void) setFrame: (CGRect) newFrame -{ - CGRect oldBounds = self.bounds; - [super setFrame: newFrame]; - CGRect newBounds = self.bounds; - - if ( newBounds.size.width != oldBounds.size.width ) - [self handleGridViewBoundsChanged: oldBounds toNewBounds: newBounds]; -} - -- (void) setBounds: (CGRect) bounds -{ - CGRect oldBounds = self.bounds; - [super setBounds: bounds]; - bounds = self.bounds; // in case it was modified - - if ( !CGSizeEqualToSize(bounds.size, oldBounds.size) ) - [self handleGridViewBoundsChanged: oldBounds toNewBounds: bounds]; -} - -- (BOOL) isEditing -{ - return ( _flags.isEditing == 1 ); -} - -- (void) setEditing: (BOOL) value -{ - [self setEditing:value animated:NO]; -} - -#pragma mark - -#pragma mark Data Management - -- (AQGridViewCell *) dequeueReusableCellWithIdentifier: (NSString *) reuseIdentifier -{ - NSMutableSet * cells = [_reusableGridCells objectForKey: reuseIdentifier]; - AQGridViewCell * cell = [cells anyObject]; - if ( cell == nil ) - return ( nil ); - - [cell prepareForReuse]; - - [cells removeObject: cell]; - return ( cell ); -} - -- (void) enqueueReusableCells: (NSArray *) reusableCells -{ - for ( AQGridViewCell * cell in reusableCells ) - { - NSMutableSet * reuseSet = [_reusableGridCells objectForKey: cell.reuseIdentifier]; - if ( reuseSet == nil ) - { - reuseSet = [[NSMutableSet alloc] initWithCapacity: 32]; - [_reusableGridCells setObject: reuseSet forKey: cell.reuseIdentifier]; - } - else if ( [reuseSet member: cell] == cell ) - { - NSLog( @"Warning: tried to add duplicate gridview cell" ); - continue; - } - - [reuseSet addObject: cell]; - } -} - -- (CGRect) gridViewVisibleBounds -{ - CGRect result = CGRectZero; - result.origin = self.contentOffset; - result.size = self.bounds.size; - return ( result ); -} - -- (void) reloadData -{ - if ( _reloadingSuspendedCount != 0 ) - return; - - if ( _flags.dataSourceGridCellSize == 1 ) - { - [_gridData setDesiredCellSize: [_dataSource portraitGridCellSizeForGridView: self]]; - _flags.numColumns = [_gridData numberOfItemsPerRow]; - } - - _gridData.numberOfItems = [_dataSource numberOfItemsInGridView: self]; - - // update our content size as appropriate - self.contentSize = [_gridData sizeForEntireGrid]; - - // fix up the visible index list - NSUInteger cutoff = MAX(0, _gridData.numberOfItems-_visibleIndices.length); - _visibleIndices.location = MIN(_visibleIndices.location, cutoff); - _visibleIndices.length = 0; - - // remove all existing cells - [_visibleCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - [self enqueueReusableCells: _visibleCells]; - [_visibleCells removeAllObjects]; - - // -layoutSubviews will update the visible cell list - - // layout -- no animation - [self setNeedsLayout]; - _flags.allCellsNeedLayout = 1; -} - -#define MAX_BOUNCE_DISTANCE (500.0f) - -- (void) layoutSubviews -{ - if ( (_flags.needsReload == 1) && (_animationCount == 0) && (_reloadingSuspendedCount == 0) ) - [self reloadData]; - - if ( (_reloadingSuspendedCount == 0) && (!CGRectIsEmpty([self gridViewVisibleBounds])) ) - { - [self updateVisibleGridCellsNow]; - } - - if ( _flags.allCellsNeedLayout == 1 ) - { - _flags.allCellsNeedLayout = 0; - if ( _visibleIndices.length != 0 ) - [self layoutAllCells]; - } - - CGRect rect = CGRectZero; - rect.size.width = self.bounds.size.width; - rect.size.height = self.contentSize.height - (_gridData.topPadding + _gridData.bottomPadding); - rect.origin.y += _gridData.topPadding; - - // Make sure background is an integral number of rows tall. That way, it draws patterned colours correctly on all OSes. - CGRect backgroundRect = rect; - - if ([self backgroundViewExtendsUp]) { - backgroundRect.origin.y = backgroundRect.origin.y - MAX_BOUNCE_DISTANCE; - backgroundRect.size.height += MAX_BOUNCE_DISTANCE; // don't just move it, grow it - } - - if ([self backgroundViewExtendsDown]) { - backgroundRect.size.height = backgroundRect.size.height + MAX_BOUNCE_DISTANCE; - } - - CGFloat minimumHeight = rect.size.height, - actualHeight = 0; - - if (([_gridData numberOfItems] == 0) || ([_gridData numberOfItemsPerRow] == 0)) { - - actualHeight = [_gridData cellSize].height; - - } else { - - actualHeight = [_gridData cellSize].height * ([_gridData numberOfItems] / [_gridData numberOfItemsPerRow] + 1); - - } - for (; actualHeight < minimumHeight; actualHeight += [_gridData cellSize].height) { - } - backgroundRect.size.height = actualHeight; - - - self.backgroundView.frame = backgroundRect; - - if ( _headerView != nil ) - { - rect = _headerView.frame; - rect.origin = CGPointZero; - rect.size.width = self.bounds.size.width; - _headerView.frame = rect; - } - - if ( _footerView != nil ) - { - rect = _footerView.frame; - rect.origin.x = 0.0; - rect.origin.y = self.contentSize.height - rect.size.height; - rect.size.width = self.bounds.size.width; - _footerView.frame = rect; - [self bringSubviewToFront:_footerView]; - } -} - -- (CGRect) rectForItemAtIndex: (NSUInteger) index -{ - // simple case -- there's a cell already, we can just ask for its frame - if ( NSLocationInRange(index, _visibleIndices) ) - return ( [[_visibleCells objectAtIndex: [self visibleCellListIndexForItemIndex: index]] frame] ); - - // complex case-- compute the frame manually - return ( [self fixCellFrame: CGRectZero forGridRect: [_gridData cellRectAtIndex: index]] ); -} - -- (AQGridViewCell *) cellForItemAtIndex: (NSUInteger) index -{ - //if ( NSLocationInRange(index, _visibleIndices) == NO ) - // return ( nil ); - - // we don't clip to visible range-- when animating edits the visible cell list can contain extra items - NSUInteger visibleCellListIndex = [self visibleCellListIndexForItemIndex: index]; - if ( visibleCellListIndex < [_visibleCells count] ) - return ( [_visibleCells objectAtIndex: visibleCellListIndex] ); - return ( nil ); -} - -- (NSUInteger) indexForItemAtPoint: (CGPoint) point -{ - return ( [_gridData itemIndexForPoint: point] ); -} - -- (NSUInteger) indexForCell: (AQGridViewCell *) cell -{ - NSUInteger index = [_visibleCells indexOfObject:cell]; - if (index == NSNotFound) - return NSNotFound; - - return _visibleIndices.location + index; -} - -- (AQGridViewCell *) cellForItemAtPoint: (CGPoint) point -{ - return ( [self cellForItemAtIndex: [_gridData itemIndexForPoint: point]] ); -} - -- (NSArray *) visibleCells -{ - return ( [_visibleCells copy] ); -} - -- (NSIndexSet *) visibleCellIndices -{ - return ( [NSIndexSet indexSetWithIndexesInRange: _visibleIndices] ); -} - -- (void) scrollToItemAtIndex: (NSUInteger) index atScrollPosition: (AQGridViewScrollPosition) scrollPosition - animated: (BOOL) animated -{ - CGRect gridRect = [_gridData cellRectAtIndex: index]; - CGRect targetRect = self.bounds; - - switch ( scrollPosition ) - { - case AQGridViewScrollPositionNone: - default: - targetRect = gridRect; // no special coordinate handling - break; - - case AQGridViewScrollPositionTop: - targetRect.origin.y = gridRect.origin.y; // set target y origin to cell's y origin - break; - - case AQGridViewScrollPositionMiddle: - targetRect.origin.y = MAX(gridRect.origin.y - (CGFloat)ceilf((targetRect.size.height - gridRect.size.height) * 0.5), 0.0); - break; - - case AQGridViewScrollPositionBottom: - targetRect.origin.y = MAX((CGFloat)floorf(gridRect.origin.y - (targetRect.size.height - gridRect.size.height)), 0.0); - break; - } - - [self scrollRectToVisible: targetRect animated: animated]; - - // for long grids, ensure there are visible cells when scrolled to - if (!animated) { - [self updateVisibleGridCellsNow]; - /*if (![_visibleCells count]) { - NSIndexSet * newIndices = [_gridData indicesOfCellsInRect: [self gridViewVisibleBounds]]; - [self updateForwardCellsForVisibleIndices: newIndices]; - }*/ - } -} - -#pragma mark - -#pragma mark Cell Updates - -- (BOOL) isRectVisible: (CGRect) frameRect -{ - return ( CGRectIntersectsRect(frameRect, self.bounds) ); -} - -- (void) fixCellsFromAnimation -{ - // the visible cell list might contain hidden cells-- make them visible now - for ( AQGridViewCell * cell in _visibleCells ) - { - if ( cell.hiddenForAnimation ) - { - cell.hiddenForAnimation = NO; - - if ( _flags.delegateWillDisplayCell == 1 ) - [self delegateWillDisplayCell: cell atIndex: cell.displayIndex]; - - cell.hidden = NO; - } - } - - // update the visible item list appropriately - NSIndexSet * indices = [_gridData indicesOfCellsInRect: self.bounds]; - if ( [indices count] == 0 ) - { - _visibleIndices.location = 0; - _visibleIndices.length = 0; - - [_visibleCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - [self enqueueReusableCells: _visibleCells]; - [_visibleCells removeAllObjects]; - - // update the content size/offset based on the new grid data - CGPoint oldMaxLocation = CGPointMake(CGRectGetMaxX(self.bounds), CGRectGetMaxY(self.bounds)); - [self updateContentRectWithOldMaxLocation: oldMaxLocation gridSize: [_gridData sizeForEntireGrid]]; - return; - } - - _visibleIndices.location = [indices firstIndex]; - _visibleIndices.length = [indices count]; - - NSMutableArray * newVisibleCells = [[NSMutableArray alloc] initWithCapacity: _visibleIndices.length]; - for ( AQGridViewAnimatorItem * item in self.animatingCells ) - { - if ( [item.animatingView isKindOfClass: [AQGridViewCell class]] == NO ) - { - [item.animatingView removeFromSuperview]; - continue; - } - - if ( [self isRectVisible: [_gridData cellRectForPoint: item.animatingView.center]] == NO ) - { - [item.animatingView removeFromSuperview]; - continue; - } - - [newVisibleCells addObject: item.animatingView]; - } - - //NSAssert([newVisibleCells count] == _visibleIndices.length, @"visible cell count after animation doesn't match visible indices"); - - [newVisibleCells sortUsingSelector: @selector(compareOriginAgainstCell:)]; - [_visibleCells removeObjectsInArray: newVisibleCells]; - [_visibleCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - [_visibleCells setArray: newVisibleCells]; - self.animatingCells = nil; - - NSMutableSet * removals = [[NSMutableSet alloc] init]; - for ( UIView * view in self.subviews ) - { - if ( [view isKindOfClass: [AQGridViewCell class]] == NO ) - continue; - - if ( [_visibleCells containsObject: view] == NO ) - [removals addObject: view]; - } - - [removals makeObjectsPerformSelector: @selector(removeFromSuperview)]; - - // update the content size/offset based on the new grid data - CGPoint oldMaxLocation = CGPointMake(CGRectGetMaxX(self.bounds), CGRectGetMaxY(self.bounds)); - [self updateContentRectWithOldMaxLocation: oldMaxLocation gridSize: [_gridData sizeForEntireGrid]]; -} - -- (void) setupUpdateAnimations -{ - _reloadingSuspendedCount++; - - AQGridViewUpdateInfo * info = [[AQGridViewUpdateInfo alloc] initWithOldGridData: _gridData forGridView: self]; - [_updateInfoStack addObject: info]; -} - -- (void) endUpdateAnimations -{ - NSAssert([_updateInfoStack lastObject] != nil, @"_updateInfoStack should not be empty at this point" ); - - __block AQGridViewUpdateInfo * info = [_updateInfoStack lastObject]; - - if ( info.numberOfUpdates == 0 ) - { - [_updateInfoStack removeObject: info]; - _reloadingSuspendedCount--; - return; - } - - NSUInteger expectedItemCount = [info numberOfItemsAfterUpdates]; - NSUInteger actualItemCount = [_dataSource numberOfItemsInGridView: self]; - if ( expectedItemCount != actualItemCount ) - { - NSUInteger numAdded = [[info sortedInsertItems] count]; - NSUInteger numDeleted = [[info sortedDeleteItems] count]; - - [_updateInfoStack removeObject: info]; - _reloadingSuspendedCount--; - - [NSException raise: NSInternalInconsistencyException format: @"Invalid number of items in AQGridView: Started with %u, added %u, deleted %u. Expected %u items after changes, but got %u", (unsigned)_gridData.numberOfItems, (unsigned)numAdded, (unsigned)numDeleted, (unsigned)expectedItemCount, (unsigned)actualItemCount]; - } - - [info cleanupUpdateItems]; - _animationCount++; - //NSAssert(_animationCount == 1, @"Stacked animations occurring!!"); - - [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut - animations:^(void) { - self.animatingCells = [info animateCellUpdatesUsingVisibleContentRect: [self gridViewVisibleBounds]]; - - - _gridData = [info newGridViewData]; - if ( _selectedIndex != NSNotFound ) - _selectedIndex = [info newIndexForOldIndex: _selectedIndex]; - - _reloadingSuspendedCount--; - } - completion:^(BOOL finished) { - // if nothing was animated, we don't have to do anything at all - // if ( self.animatingCells.count != 0 ) - [self fixCellsFromAnimation]; - - // NB: info becomes invalid at this point - [_updateInfoStack removeObject: info]; - _animationCount--; - - //_reloadingSuspendedCount--; - if ( _flags.delegateDidEndUpdateAnimation == 1 ) - [self.delegate gridViewDidEndUpdateAnimation: self]; - }]; -} - -- (void) beginUpdates -{ - if ( _updateCount++ == 0 ) - [self setupUpdateAnimations]; -} - -- (void) endUpdates -{ - if ( --_updateCount == 0 ) - [self endUpdateAnimations]; -} - -- (void) _updateItemsAtIndices: (NSIndexSet *) indices updateAction: (AQGridViewUpdateAction) action withAnimation: (AQGridViewItemAnimation) animation -{ - BOOL needsAnimationSetup = ([_updateInfoStack count] <= _animationCount); - - // not in the middle of an update loop -- start animations here - if ( needsAnimationSetup ) - [self setupUpdateAnimations]; - - [[_updateInfoStack lastObject] updateItemsAtIndices: indices updateAction: action withAnimation: animation]; - - // not in the middle of an update loop -- commit animations here - if ( needsAnimationSetup ) - [self endUpdateAnimations]; -} - -- (void) insertItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation -{ - [self _updateItemsAtIndices: indices updateAction: AQGridViewUpdateActionInsert withAnimation: animation]; -} - -- (void) deleteItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation -{ - [self _updateItemsAtIndices: indices updateAction: AQGridViewUpdateActionDelete withAnimation: animation]; -} - -- (void) reloadItemsAtIndices: (NSIndexSet *) indices withAnimation: (AQGridViewItemAnimation) animation -{ - [self _updateItemsAtIndices: indices updateAction: AQGridViewUpdateActionReload withAnimation: animation]; -} - -- (void) moveItemAtIndex: (NSUInteger) index toIndex: (NSUInteger) newIndex withAnimation: (AQGridViewItemAnimation) animation -{ - BOOL needsAnimationSetup = ([_updateInfoStack count] <= _animationCount); - - if ( needsAnimationSetup ) - [self setupUpdateAnimations]; - - [[_updateInfoStack lastObject] moveItemAtIndex: index toIndex: newIndex withAnimation: animation]; - - if ( needsAnimationSetup ) - [self endUpdateAnimations]; -} - -- (void)setEditing:(BOOL)editing animated:(BOOL)animated -{ - _flags.isEditing = (editing ? 1 : 0); - - NSArray *visibleCells = [self visibleCells]; - for (AQGridViewCell *aCell in visibleCells) { - [aCell setEditing:editing animated:animated]; - } -} - -#pragma mark - -#pragma mark Selection - -- (NSUInteger) indexOfSelectedItem -{ - return ( _selectedIndex ); -} - -- (void) highlightItemAtIndex: (NSUInteger) index animated: (BOOL) animated scrollPosition: (AQGridViewScrollPosition) position -{ - if ( [_highlightedIndices containsIndex: index] ) - { - if ( position != AQGridViewScrollPositionNone ) - [self scrollToItemAtIndex: index atScrollPosition: position animated: animated]; - return; - } - - if ( index == NSNotFound ) - { - NSUInteger i = [_highlightedIndices firstIndex]; - while ( i != NSNotFound ) - { - AQGridViewCell * cell = [self cellForItemAtIndex: i]; - [cell setHighlighted: NO animated: animated]; - i = [_highlightedIndices indexGreaterThanIndex: i]; - } - - [_highlightedIndices removeAllIndexes]; - return; - } - - AQGridViewCell * cell = [self cellForItemAtIndex: index]; - [cell setHighlighted: YES animated: animated]; - [_highlightedIndices addIndex: index]; - - if ( position != AQGridViewScrollPositionNone ) - [self scrollToItemAtIndex: index atScrollPosition: position animated: animated]; -} - -- (void) unhighlightItemAtIndex: (NSUInteger) index animated: (BOOL) animated -{ - if ( [_highlightedIndices containsIndex: index] == NO ) - return; - - [_highlightedIndices removeIndex: index]; - - // don't remove highlighting if the cell is actually the selected cell - if ( index == _selectedIndex ) - return; - - AQGridViewCell * cell = [self cellForItemAtIndex: index]; - if ( cell != nil ) - [cell setHighlighted: NO animated: animated]; -} - -- (void) _deselectItemAtIndex: (NSUInteger) index animated: (BOOL) animated notifyDelegate: (BOOL) notifyDelegate -{ - if ( _selectedIndex != index ) - return; - - if ( notifyDelegate && _flags.delegateWillDeselectItem ) - [self.delegate gridView: self willDeselectItemAtIndex: index]; - - _selectedIndex = NSNotFound; - [[self cellForItemAtIndex: index] setSelected: NO animated: animated]; - - if ( notifyDelegate && _flags.delegateDidDeselectItem ) - [self.delegate gridView: self didDeselectItemAtIndex: index]; - - if ( notifyDelegate ) - { - [[NSNotificationCenter defaultCenter] postNotificationName: AQGridViewSelectionDidChangeNotification - object: self]; - } -} - -- (void) _selectItemAtIndex: (NSUInteger) index animated: (BOOL) animated - scrollPosition: (AQGridViewScrollPosition) position notifyDelegate: (BOOL) notifyDelegate - numFingersTouch: (NSUInteger) numFingers -{ - if ( _selectedIndex == index ) - return; // already selected this item - - if ( _selectedIndex != NSNotFound ) - [self _deselectItemAtIndex: _selectedIndex animated: animated notifyDelegate: notifyDelegate]; - - if ( _flags.allowsSelection == 0 ) - return; - - if ( notifyDelegate && _flags.delegateWillSelectItem ) - index = [self.delegate gridView: self willSelectItemAtIndex: index]; - - if ( notifyDelegate && _flags.delegateWillSelectItemMultiTouch ) - index = [self.delegate gridView: self willSelectItemAtIndex: index - numFingersTouch:numFingers]; - - _selectedIndex = index; - [[self cellForItemAtIndex: index] setSelected: YES animated: animated]; - - if ( position != AQGridViewScrollPositionNone ) - [self scrollToItemAtIndex: index atScrollPosition: position animated: animated]; - - if ( notifyDelegate ) - { - [[NSNotificationCenter defaultCenter] postNotificationName: AQGridViewSelectionDidChangeNotification - object: self]; - } - - if ( notifyDelegate && _flags.delegateDidSelectItem ) - [self.delegate gridView: self didSelectItemAtIndex: index]; - - if ( notifyDelegate && _flags.delegateDidSelectItemMultiTouch ) - [self.delegate gridView: self didSelectItemAtIndex: index numFingersTouch:numFingers]; - - // ensure that the selected item is no longer marked as just 'highlighted' (that's an intermediary state) - [_highlightedIndices removeIndex: index]; -} - -- (void) selectItemAtIndex: (NSUInteger) index animated: (BOOL) animated - scrollPosition: (AQGridViewScrollPosition) scrollPosition -{ - [self _selectItemAtIndex: index animated: animated scrollPosition: scrollPosition notifyDelegate: NO - numFingersTouch: 1]; -} - -- (void) deselectItemAtIndex: (NSUInteger) index animated: (BOOL) animated -{ - [self _deselectItemAtIndex: index animated: animated notifyDelegate: NO]; -} - -#pragma mark - -#pragma mark Appearance - -- (UIView *) backgroundView -{ - return ( _backgroundView ); -} - -- (void) setBackgroundView: (UIView *) newView -{ - if ( newView == _backgroundView ) - return; - - [_backgroundView removeFromSuperview]; - - _backgroundView = newView; - _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - CGRect frame = self.bounds; - frame.size = self.contentSize; - - CGRect backgroundRect = CGRectMake(0.0f, 0.0f, self.bounds.size.width, self.bounds.size.height); - - if ([self backgroundViewExtendsUp]) { - backgroundRect.origin.y = backgroundRect.origin.y - MAX_BOUNCE_DISTANCE; - backgroundRect.size.height += MAX_BOUNCE_DISTANCE; // don't just move it, grow it - } - - if ([self backgroundViewExtendsDown]) { - backgroundRect.size.height = backgroundRect.size.height + MAX_BOUNCE_DISTANCE; - } - - _backgroundView.frame = backgroundRect; - - [self insertSubview: _backgroundView atIndex: 0]; - - // this view is already laid out nicely-- no need to call -setNeedsLayout at all -} - -- (UIColor *) separatorColor -{ - return ( _separatorColor ); -} - -- (void) setSeparatorColor: (UIColor *) color -{ - if ( color == _separatorColor ) - return; - - _separatorColor = color; - - for ( AQGridViewCell * cell in _visibleCells ) - { - cell.separatorColor = _separatorColor; - } -} - -#pragma mark - -#pragma mark Touch Events - -- (UIView *) _basicHitTest: (CGPoint) point withEvent: (UIEvent *) event -{ - // STUPID STUPID RAT CREATURES - // =========================== - // - // Problem: we want to do a default hit-test without UIScrollView's processing getting in the way. - // UIScrollView implements _defaultHitTest:withEvent: for this, but we can't call that due to it - // being a private API. - // Instead, we have to manufacture a call to our super-super class here, grr - Method method = class_getInstanceMethod( [UIView class], @selector(hitTest:withEvent:) ); - IMP imp = method_getImplementation( method ); - return ( (UIView *)imp(self, @selector(hitTest:withEvent:), point, event) ); // -[UIView hitTest:withEvent:] -} - -- (BOOL) _canSelectItemContainingHitView: (UIView *) hitView -{ - if ( [hitView isKindOfClass: [UIControl class]] ) - return ( NO ); - - -// Simply querying the superview will not work if the hit view is a subview of the contentView, e.g. its superview is a plain UIView *inside* a cell - - if ( [[hitView superview] isKindOfClass: [AQGridViewCell class]] ) - return ( YES ); - - if ( [hitView isKindOfClass: [AQGridViewCell class]] ) - return ( YES ); - - CGPoint hitCenter = [self convertPoint:[hitView center] fromView:hitView]; - - for ( AQGridViewCell *aCell in [[self visibleCells] copy]) - { - - if ( CGRectContainsPoint( aCell.frame, hitCenter ) ) - return ( YES ); - - } - - return ( NO ); -} - -- (void) _gridViewDeferredTouchesBegan: (NSNumber *) indexNum -{ - if ( (self.dragging == NO) && (_flags.ignoreTouchSelect == 0) && (_pendingSelectionIndex != NSNotFound) ) - [self highlightItemAtIndex: _pendingSelectionIndex animated: NO scrollPosition: AQGridViewScrollPositionNone]; - //_pendingSelectionIndex = NSNotFound; -} - -- (void) _userSelectItemAtIndex: (UserSelectItemIndexParams*) params -{ - NSUInteger index = params.indexNum; - NSUInteger numFingersCount = params.numFingers; - [self unhighlightItemAtIndex: index animated: NO]; - if ( ([[self cellForItemAtIndex: index] isSelected]) && (self.requiresSelection == NO) ) - [self _deselectItemAtIndex: index animated: NO notifyDelegate: YES]; - else - [self _selectItemAtIndex: index animated: NO scrollPosition: AQGridViewScrollPositionNone notifyDelegate: YES - numFingersTouch: numFingersCount]; - _pendingSelectionIndex = NSNotFound; -} - -- (BOOL) _gestureRecognizerIsHandlingTouches: (NSSet *) touches -{ - // see if the touch is (possibly) being tracked by a gesture recognizer - for ( UIGestureRecognizer *recognizer in self.gestureRecognizers ) - { - switch ( [recognizer state] ) - { - case UIGestureRecognizerStateEnded: - case UIGestureRecognizerStateCancelled: - case UIGestureRecognizerStateFailed: - continue; - - default: - break; - } - - if ( [recognizer numberOfTouches] == [touches count] ) - { - // simple version: - // pick a touch from our event's set, and see if it's in the recognizer's set - UITouch * touch = [touches anyObject]; - CGPoint touchLocation = [touch locationInView: self]; - - for ( NSUInteger i = 0; i < [recognizer numberOfTouches]; i++ ) - { - CGPoint test = [recognizer locationOfTouch: i inView: self]; - if ( CGPointEqualToPoint(test, touchLocation) ) - { - return ( YES ); - } - } - } - } - - return ( NO ); -} - -- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event -{ - _flags.ignoreTouchSelect = ([self isDragging] ? 1 : 0); - - UITouch * touch = [touches anyObject]; - _touchBeganPosition = [touch locationInView: nil]; - if ( (touch != nil) && (_pendingSelectionIndex == NSNotFound) ) - { - CGPoint pt = [touch locationInView: self]; - UIView * hitView = [self _basicHitTest: pt withEvent: event]; - _touchedContentView = hitView; - - // unhighlight anything not here - if ( hitView != self ) - [self highlightItemAtIndex: NSNotFound animated: NO scrollPosition: AQGridViewScrollPositionNone]; - - if ( [self _canSelectItemContainingHitView: hitView] ) - { - NSUInteger index = [self indexForItemAtPoint: pt]; - if ( index != NSNotFound ) - { - if ( _flags.allowsSelection == 1 ) - { - _pendingSelectionIndex = index; - - // NB: In UITableView: - // if ( [self usesGestureRecognizers] && [self isDragging] ) skip next line - [self performSelector: @selector(_gridViewDeferredTouchesBegan:) - withObject: [NSNumber numberWithUnsignedInteger: index] - afterDelay: 0.0]; - } - } - } - } - - [super touchesBegan: touches withEvent: event]; -} -/* -- (void) _cancelContentTouchUsingEvent: (UIEvent *) event forced: (BOOL) forced -{ - static char * name = "_cancelContentTouchWithEvent:forced:"; - - // more manual ObjC runtime calls... - SEL selector = sel_getUid( name ); - objc_msgSend( self, selector, event, forced ); -} -*/ -- (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event -{ - if ( _flags.ignoreTouchSelect == 0 ) - { - Class cls = NSClassFromString(@"UILongPressGestureRecognizer"); - if ( (cls != Nil) && ([cls instancesRespondToSelector: @selector(setNumberOfTouchesRequired:)]) ) - { - if ( [self _gestureRecognizerIsHandlingTouches: touches] ) - goto passToSuper; // I feel all icky now - } - - //[self _cancelContentTouchUsingEvent: event forced: NO]; - [self highlightItemAtIndex: NSNotFound animated: NO scrollPosition: AQGridViewScrollPositionNone]; - _flags.ignoreTouchSelect = 1; - _touchedContentView = nil; - } - -passToSuper: - [super touchesMoved: touches withEvent: event]; -} - -- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event -{ - [[self class] cancelPreviousPerformRequestsWithTarget: self - selector: @selector(_gridViewDeferredTouchesBegan:) - object: nil]; - - UIView * hitView = _touchedContentView; - _touchedContentView = nil; - - [super touchesEnded: touches withEvent: event]; - if ( _touchedContentView != nil ) - { - hitView = _touchedContentView; - } - - if ( [hitView superview] == nil ) - { - hitView = nil; - } - - // poor-man's goto - do - { - if ( self.dragging ) - break; - - UITouch * touch = [touches anyObject]; - if ( touch == nil ) - break; - - CGPoint pt = [touch locationInView: self]; - if ( (hitView != nil) && ([self _canSelectItemContainingHitView: hitView] == NO) ) - break; - - if ( _pendingSelectionIndex != [self indexForItemAtPoint: pt] ) - break; - - if ( _flags.allowsSelection == 0 ) - break; - - NSSet *touchEventSet = [event allTouches]; - - // run this on the next runloop tick - UserSelectItemIndexParams* selectorParams = [[UserSelectItemIndexParams alloc] init]; - selectorParams.indexNum = _pendingSelectionIndex; - selectorParams.numFingers = [touchEventSet count]; - [self performSelector: @selector(_userSelectItemAtIndex:) - withObject: selectorParams - afterDelay:0.0]; - - - } while (0); - - if ( _pendingSelectionIndex != NSNotFound ) - [self unhighlightItemAtIndex: _pendingSelectionIndex animated: NO]; - _pendingSelectionIndex = NSNotFound; -} - -- (void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event -{ - _pendingSelectionIndex = NSNotFound; - [self highlightItemAtIndex: NSNotFound animated: NO scrollPosition: AQGridViewScrollPositionNone]; - [super touchesCancelled: touches withEvent: event]; - - _touchedContentView = nil; -} - -- (void)doAddVisibleCell: (UIView *)cell -{ - [_visibleCells addObject: cell]; - // updated: if we're adding it to our visibleCells collection, really it should be in the gridview. - if ( cell.superview == nil ) - { - NSLog( @"Visible cell not in gridview - adding" ); - if ( _backgroundView.superview == self ) - [self insertSubview: cell aboveSubview: _backgroundView]; - else - [self insertSubview: cell atIndex: 0]; - } -} - - -@end - -#pragma mark - - -@implementation AQGridView (AQCellGridMath) - -- (NSUInteger) visibleCellListIndexForItemIndex: (NSUInteger) itemIndex -{ - return ( itemIndex - _visibleIndices.location ); -} - -@end - -#pragma mark - - -@implementation AQGridView (AQCellLayout) - -NSArray * __sortDescriptors; - -- (void) sortVisibleCellList -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - __sortDescriptors = [[NSArray alloc] initWithObjects: [[NSSortDescriptor alloc] initWithKey: @"displayIndex" ascending: YES], nil]; - }); - - [_visibleCells sortUsingDescriptors: __sortDescriptors]; -} - -- (void) updateGridViewBoundsForNewGridData: (AQGridViewData *) newGridData -{ - CGPoint oldMaxLocation = CGPointMake(CGRectGetMaxX(self.bounds), CGRectGetMaxY(self.bounds)); - [self updateContentRectWithOldMaxLocation: oldMaxLocation gridSize: [newGridData sizeForEntireGrid]]; -} - -- (void) updateVisibleGridCellsNow -{ - if ( _reloadingSuspendedCount > 0 ) - return; - - _reloadingSuspendedCount++; - - @autoreleasepool { - - NSIndexSet * newVisibleIndices = [_gridData indicesOfCellsInRect: [self gridViewVisibleBounds]]; - - BOOL enableAnim = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled: NO]; - - @try - { - // a couple of simple tests - // TODO: if we replace _visibleIndices with an index set, this comparison will have to change - if ( ([_visibleCells count] != [newVisibleIndices count]) || - ([newVisibleIndices countOfIndexesInRange: _visibleIndices] != _visibleIndices.length) ) - { - // something has changed. Compute intersections and remove/add cells as required - NSIndexSet * currentVisibleIndices = [NSIndexSet indexSetWithIndexesInRange: _visibleIndices]; - - // index sets for removed and inserted items - NSMutableIndexSet * removedIndices = nil, * insertedIndices = nil; - - // handle the simple case first - // TODO: if we replace _visibleIndices with an index set, this comparison will have to change - if ( [currentVisibleIndices intersectsIndexesInRange: _visibleIndices] == NO ) - { - removedIndices = [currentVisibleIndices mutableCopy]; - insertedIndices = [newVisibleIndices mutableCopy]; - } - else // more complicated -- compute negative intersections - { - removedIndices = [[currentVisibleIndices aq_indexesOutsideIndexSet: newVisibleIndices] mutableCopy]; - insertedIndices = [[newVisibleIndices aq_indexesOutsideIndexSet: currentVisibleIndices] mutableCopy]; - } - - if ( [removedIndices count] != 0 ) - { - NSMutableIndexSet * shifted = [removedIndices mutableCopy]; - - // get an index set for everything being removed relative to items' locations within the visible cell list - [shifted shiftIndexesStartingAtIndex: [removedIndices firstIndex] by: 0 - (NSInteger)_visibleIndices.location]; - //NSLog( @"Removed indices relative to visible cell list: %@", shifted ); - - NSUInteger index=[shifted firstIndex]; - while(index != NSNotFound){ - //NSLog(@"%i >= %i ?", index, [_visibleCells count]); - if (index >= [_visibleCells count]) { - [shifted removeIndex:index]; - } - index=[shifted indexGreaterThanIndex: index]; - } - - // pull out the cells for manipulation - NSMutableArray * removedCells = [[_visibleCells objectsAtIndexes: shifted] mutableCopy]; - - // remove them from the visible list - [_visibleCells removeObjectsInArray: removedCells]; - //NSLog( @"After removals, visible cells count = %lu", (unsigned long)[_visibleCells count] ); - - // don't need this any more - shifted = nil; - - // remove cells from the view hierarchy -- but only if they're not being animated by something else - NSArray * animating = [[self.animatingCells valueForKey: @"animatingView"] allObjects]; - if ( animating != nil ) - [removedCells removeObjectsInArray: animating]; - - // these are not being displayed or animated offscreen-- take them off the screen immediately - [removedCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - - // put them into the cell reuse queue - [self enqueueReusableCells: removedCells]; - - } - - if ( [insertedIndices count] != 0 ) - { - // some items are going in -- put them at the end and the sort function will move them to the right index during layout - // if any of these new indices correspond to animating cells (NOT UIImageViews) then copy them into the visible cell list - NSMutableIndexSet * animatingInserted = [insertedIndices mutableCopy]; - - // compute the intersection of insertedIndices and _animatingIndices - NSUInteger idx = [insertedIndices firstIndex]; - while ( idx != NSNotFound ) - { - if ( [_animatingIndices containsIndex: idx] == NO ) - [animatingInserted removeIndex: idx]; - - idx = [insertedIndices indexGreaterThanIndex: idx]; - } - - if ( [animatingInserted count] != 0 ) - { - for ( AQGridViewAnimatorItem * item in _animatingCells ) - { - if ( [newVisibleIndices containsIndex: item.index] == NO ) - continue; - - if ( [item.animatingView isKindOfClass: [AQGridViewCell class]] ) - { - // ensure this is in the visible cell list - if ( [_visibleCells containsObject: item.animatingView] == NO ) - //[_visibleCells addObject: item.animatingView]; - [self doAddVisibleCell: item.animatingView]; - } - else - { - // it's an image that's being moved, likely because it *was* going offscreen before - // the user scrolled. Create a real cell, but hide it until the animation is complete. - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - //[_visibleCells addObject: cell]; - [self doAddVisibleCell: cell]; - - // we don't tell the delegate yet, we just hide it - cell.hiddenForAnimation = YES; - } - } - - // remove these from the set of indices for which we will generate new cells - [insertedIndices removeIndexes: animatingInserted]; - } - - - // insert cells for these indices - idx = [insertedIndices firstIndex]; - while ( idx != NSNotFound ) - { - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - //[_visibleCells addObject: cell]; - [self doAddVisibleCell: cell]; - - // tell the delegate - [self delegateWillDisplayCell: cell atIndex: idx]; - - idx = [insertedIndices indexGreaterThanIndex: idx]; - } - } - - if ( [_visibleCells count] > [newVisibleIndices count] ) - { - //NSLog( @"Have to prune visible cell list, I've still got extra cells in there!" ); - NSMutableIndexSet * animatingDestinationIndices = [[NSMutableIndexSet alloc] init]; - for ( AQGridViewAnimatorItem * item in _animatingCells ) - { - [animatingDestinationIndices addIndex: item.index]; - } - - NSMutableIndexSet * toRemove = [[NSMutableIndexSet alloc] init]; - NSMutableIndexSet * seen = [[NSMutableIndexSet alloc] init]; - NSUInteger i, count = [_visibleCells count]; - for ( i = 0; i < count; i++ ) - { - AQGridViewCell * cell = [_visibleCells objectAtIndex: i]; - if ( [newVisibleIndices containsIndex: cell.displayIndex] == NO && - [animatingDestinationIndices containsIndex: cell.displayIndex] == NO ) - { - NSLog( @"Cell for index %lu is still in visible list, removing...", (unsigned long)cell.displayIndex ); - [cell removeFromSuperview]; - [toRemove addIndex: i]; - } - else if ( [seen containsIndex: cell.displayIndex] ) - { - NSLog( @"Multiple cells with index %lu found-- removing duplicate...", (unsigned long)cell.displayIndex ); - [cell removeFromSuperview]; - [toRemove addIndex: i]; - } - - [seen addIndex: cell.displayIndex]; - } - - // all removed from superview, just need to remove from the list now - [_visibleCells removeObjectsAtIndexes: toRemove]; - } - - if ( [_visibleCells count] < [newVisibleIndices count] ) - { - NSLog( @"Visible cell list is missing some items!" ); - - NSMutableIndexSet * visibleSet = [[NSMutableIndexSet alloc] init]; - for ( AQGridViewCell * cell in _visibleCells ) - { - [visibleSet addIndex: cell.displayIndex]; - } - - NSMutableIndexSet * missingSet = [newVisibleIndices mutableCopy]; - [missingSet removeIndexes: visibleSet]; - - NSLog( @"Got %lu missing indices", (unsigned long)[missingSet count] ); - - NSUInteger idx = [missingSet firstIndex]; - while ( idx != NSNotFound ) - { - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - //[_visibleCells addObject: cell]; - [self doAddVisibleCell: cell]; - - // tell the delegate - [self delegateWillDisplayCell: cell atIndex: idx]; - - idx = [missingSet indexGreaterThanIndex: idx]; - } - - } - - // everything should match up now, so update the visible range - _visibleIndices.location = [newVisibleIndices firstIndex]; - _visibleIndices.length = [newVisibleIndices count]; - - // layout these cells -- this will also sort the visible cell list - [self layoutAllCells]; - } - } - @catch (id exception) - { - } - @finally - { - [UIView setAnimationsEnabled: enableAnim]; - _reloadingSuspendedCount--; - } - - } -} -/* -- (void) updateVisibleGridCellsNow -{ - if ( _reloadingSuspendedCount > 0 ) - return; - - _reloadingSuspendedCount++; - - - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - NSIndexSet * newVisibleIndices = [_gridData indicesOfCellsInRect: [self gridViewVisibleBounds]]; - - BOOL enableAnim = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled: NO]; - - @try - { - // a couple of simple tests - // TODO: if we replace _visibleIndices with an index set, this comparison will have to change - if ( ([_visibleCells count] != [newVisibleIndices count]) || - ([newVisibleIndices countOfIndexesInRange: _visibleIndices] != _visibleIndices.length) ) - { - //NSLog( @"\n\n----------BEGIN CELL UPDATES----------" ); - - // something has changed. Compute intersections and remove/add cells as required - NSIndexSet * currentVisibleIndices = [NSIndexSet indexSetWithIndexesInRange: _visibleIndices]; - - // index sets for removed and inserted items - NSIndexSet * removedIndices = nil, * insertedIndices = nil; - - // handle the simple case first - // TODO: if we replace _visibleIndices with an index set, this comparison will have to change - if ( [currentVisibleIndices intersectsIndexesInRange: _visibleIndices] == NO ) - { - removedIndices = currentVisibleIndices; - insertedIndices = newVisibleIndices; - } - else // more complicated -- compute negative intersections - { - removedIndices = [currentVisibleIndices aq_indexesOutsideIndexSet: newVisibleIndices]; - insertedIndices = [newVisibleIndices aq_indexesOutsideIndexSet: currentVisibleIndices]; - } - - //NSLog( @"Removing indices: %@, inserting indices: %@", removedIndices, insertedIndices ); - //NSLog( @"Visible cells count = %lu", (unsigned long)[_visibleCells count] ); - - if ( ([removedIndices count] != 0) || ([insertedIndices count] != 0) ) - { - if ( [removedIndices count] != 0 ) - { - NSMutableIndexSet * shifted = [removedIndices mutableCopy]; - - // get an index set for everything being removed relative to items' locations within the visible cell list - [shifted shiftIndexesStartingAtIndex: [removedIndices firstIndex] by: 0 - (NSInteger)_visibleIndices.location]; - //NSLog( @"Removed indices relative to visible cell list: %@", shifted ); - - // pull out the cells for manipulation - NSArray * removedCells = [_visibleCells objectsAtIndexes: shifted]; - - // remove them from the visible list - [_visibleCells removeObjectsAtIndexes: shifted]; - //NSLog( @"After removals, visible cells count = %lu", (unsigned long)[_visibleCells count] ); - - // don't need this any more - [shifted release]; shifted = nil; - - // remove cells from the view hierarchy -- but only if they're not being animated by something else - NSArray * animating = [[self.animatingCells valueForKey: @"animatingView"] allObjects]; - if ( [animating firstObjectCommonWithArray: removedCells] != nil ) - { - NSMutableArray * mutable = [removedCells mutableCopy]; - [mutable removeObjectsInArray: animating]; - removedCells = [[mutable copy] autorelease]; - [mutable release]; - } - - //NSLog( @"Removing %lu cells from screen", (unsigned long)[removedCells count] ); - [removedCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - - // put them into the cell reuse queue - [self enqueueReusableCells: removedCells]; - } - - if ( [insertedIndices count] != 0 ) - { - // now we do the insertions - NSUInteger first = [newVisibleIndices firstIndex]; - NSLog( @"New starting index = %lu", (unsigned long)first ); - NSLog( @"Visible cell count = %lu", (unsigned long)[_visibleCells count] ); - - // if there are cells being animated into place, skip them-- the animation has them already - if ( self.animatingCells.count != 0 ) - { - NSMutableIndexSet * tmp = [insertedIndices mutableCopy]; - for ( AQGridViewAnimatorItem * item in self.animatingCells ) - { - // remove each animating item from the list we'll insert - [tmp removeIndex: item.index]; - } - - insertedIndices = [[tmp copy] autorelease]; - [tmp release]; - } - - NSUInteger idx = [insertedIndices firstIndex]; - while ( idx != NSNotFound ) - { - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - [self delegateWillDisplayCell: cell atIndex: idx]; - - NSLog( @"Inserting cell for index %lu at visible list index %lu", (unsigned long)idx, (unsigned long)(idx - first) ); - [_visibleCells insertObject: cell atIndex: idx-first]; - - idx = [insertedIndices indexGreaterThanIndex: idx]; - } - } - - // sort the visible cell list so everything is in global-index order - [self sortVisibleCellList]; - - // remove anything from _visibleCells whose index isn't in the visible range - NSMutableIndexSet * removeVisibleCells = [[NSMutableIndexSet alloc] init]; - NSUInteger i = 0; - for ( AQGridViewCell * cell in _visibleCells ) - { - if ( [newVisibleIndices containsIndex: cell.displayIndex] == NO ) - [removeVisibleCells addIndex: i]; - i++; - } - - if ( [removeVisibleCells count] != 0 ) - { - NSLog( @"Missed some cells which need to be pruned from the visible cell list: %@", removeVisibleCells ); - [_visibleCells removeObjectsAtIndexes: removeVisibleCells]; - } - - [removeVisibleCells release]; - - if ( [_visibleCells count] < [newVisibleIndices count] ) - { - // some items are missing-- stick them in - - } - - // this assertion is only valid if we have ownership of everything on screen - // if an animation is going on, then some cells are owned by the animation list instead - if ( self.animatingCells.count == 0 ) - NSAssert( [_visibleCells count] == [newVisibleIndices count], @"Cell count doesn't match what was expected" ); - - // need to have _visibleIndices setup before calling layout - _visibleIndices.location = [newVisibleIndices firstIndex]; - _visibleIndices.length = [newVisibleIndices count]; - - // layout the new cells - [self layoutCellsInVisibleCellRange: NSMakeRange(0, [_visibleCells count])]; - } - - //NSLog( @"----------END CELL UPDATES----------\n\n" ); - } - } - @finally - { - [UIView setAnimationsEnabled: enableAnim]; - [pool drain]; - _reloadingSuspendedCount--; - } -} -*/ -/* -- (void) updateVisibleGridCellsNow -{ - if ( _reloadingSuspendedCount > 0 ) - return; - - if ( _flags.isAnimatingUpdates || _flags.updating ) - return; - - _reloadingSuspendedCount++; - NSIndexSet * newVisibleIndices = [_gridData indicesOfCellsInRect: [self gridViewVisibleBounds]]; - - NSUInteger beforeTest = (_visibleIndices.location == 0 ? NSNotFound : _visibleIndices.location - 1); - NSUInteger afterTest = MIN(_visibleIndices.location+_visibleIndices.length, _gridData.numberOfItems); - - //NSLog( @"New Visible Indices = %@, _visibleIndices = %@", newVisibleIndices, NSStringFromRange(_visibleIndices) ); - - // do we need to remove anything? - if ( [newVisibleIndices countOfIndexesInRange: _visibleIndices] < _visibleIndices.length ) - { - NSMutableIndexSet * indicesToRemove = [[NSMutableIndexSet alloc] initWithIndexesInRange: _visibleIndices]; - [indicesToRemove removeIndexes: newVisibleIndices]; - if ( [indicesToRemove aq_isSetContiguous] ) - { - // nice simple optimized version - // front or back? - BOOL removeFromFront = NO; - if ( [indicesToRemove containsIndex: _visibleIndices.location] ) - removeFromFront = YES; - - NSUInteger numToRemove = [indicesToRemove count]; - NSRange arrayRange = {0, 0}; - if ( removeFromFront ) - arrayRange = NSMakeRange(0, numToRemove); - else - arrayRange = NSMakeRange([_visibleCells count] - numToRemove, numToRemove); - - //NSLog( @"Removing cells in visible range: %@", NSStringFromRange(arrayRange) ); - - // grab the removed cells (retains them) - NSMutableArray * removedCells = [[[_visibleCells subarrayWithRange: arrayRange] mutableCopy] autorelease]; - - // don't remove cells which are animating right now - if ( self.animatingCells.count != 0 ) - { - [removedCells removeObjectsInArray: self.animatingCells]; - numToRemove = [removedCells count]; - arrayRange.length = numToRemove; - } - - // remove from the visible list - [_visibleCells removeObjectsInRange: arrayRange]; - - // trim the visible cell index range - _visibleIndices.length -= numToRemove; - - if ( removeFromFront ) - _visibleIndices.location += numToRemove; - - // remove cells from superview - [removedCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - - // put them into the recycled cell list - [self enqueueReusableCells: removedCells]; - - // done removing cells - } - else - { - // we need to be much more thorough-- a large number of items have been removed from all over - NSMutableArray * removedCells = [[_visibleCells mutableCopy] autorelease]; - if ( self.animatingCells.count != 0 ) - [removedCells removeObjectsInArray: self.animatingCells]; - - // remove any cells which aren't animating to new positions - [_visibleCells removeObjectsInArray: removedCells]; - [removedCells makeObjectsPerformSelector: @selector(removeFromSuperview)]; - [self enqueueReusableCells: removedCells]; - - // update visible indices as appropriate-- brute force this time - _visibleIndices.location = [newVisibleIndices firstIndex]; - _visibleIndices.length = [newVisibleIndices count]; - - // load the new cells - NSUInteger idx = [newVisibleIndices firstIndex]; - while ( idx != NSNotFound ) - { - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - [self delegateWillDisplayCell: cell atIndex: idx]; - [_visibleCells addObject: cell]; - idx = [newVisibleIndices indexGreaterThanIndex: idx]; - } - - [self layoutCellsInVisibleCellRange: NSMakeRange(0, [_visibleCells count])]; - - // all done - } - - [indicesToRemove release]; - } - - // no animations on automatic cell layout - [UIView setAnimationsEnabled: NO]; - - if ( (beforeTest != NSNotFound) && ([newVisibleIndices containsIndex: beforeTest]) ) - { - // moving backwards - NSMutableIndexSet * newIndices = [[newVisibleIndices mutableCopy] autorelease]; - - // prune the ones we know about already, so we have a list of only the new ones - [newIndices removeIndexesInRange: _visibleIndices]; - [newIndices removeIndexesInRange: _revealingIndices]; - - // insert any new cells, in reverse order (so we always insert at index zero) - NSUInteger idx = [newIndices lastIndex]; - while ( idx != NSNotFound ) - { - AQGridViewCell * cell = [self createPreparedCellForIndex: idx]; - [self delegateWillDisplayCell: cell atIndex: idx]; - [_visibleCells insertObject: cell atIndex: _revealingIndices.length]; - - idx = [newIndices indexLessThanIndex: idx]; - } - - // update the visibleCell index range - _visibleIndices.length += [newIndices count]; - _visibleIndices.location = [newVisibleIndices firstIndex]; - - // get the range of the new items - NSRange newCellRange = NSMakeRange([newIndices firstIndex], [newIndices lastIndex] - [newIndices firstIndex] + 1); - - // map this range onto the current visible cell array - newCellRange.location = MIN(newCellRange.location - _visibleIndices.location, 0); - - // now update their locations - [self layoutCellsInVisibleCellRange: newCellRange]; - } - else if ( (NSLocationInRange(afterTest, _visibleIndices) == NO) && ([newVisibleIndices containsIndex: afterTest]) ) - { - [self updateForwardCellsForVisibleIndices: newVisibleIndices]; - } - - [UIView setAnimationsEnabled: YES]; - _reloadingSuspendedCount--; -} -*/ - -- (void) layoutCellsInVisibleCellRange: (NSRange) range -{ - NSParameterAssert(range.location + range.length <= [_visibleCells count]); - - @autoreleasepool { - - NSArray * layoutList = [_visibleCells subarrayWithRange: range]; - for ( AQGridViewCell * cell in layoutList ) - { - if ( [_animatingIndices containsIndex: cell.displayIndex] ) - continue; // don't adjust layout of something that is animating around - - CGRect gridRect = [_gridData cellRectAtIndex: cell.displayIndex]; - CGRect cellFrame = cell.frame; - - cell.frame = [self fixCellFrame: cellFrame forGridRect: gridRect]; - cell.selected = (cell.displayIndex == _selectedIndex); - } - - } -} - -- (void) layoutAllCells -{ - [self sortVisibleCellList]; - - NSRange range = NSMakeRange(0, _visibleIndices.length); - [self layoutCellsInVisibleCellRange: range]; -} - -- (CGRect) fixCellFrame: (CGRect) cellFrame forGridRect: (CGRect) gridRect -{ - if ( _flags.resizesCellWidths == 1 ) - { - cellFrame = gridRect; - } - else - { - if ( cellFrame.size.width > gridRect.size.width ) - cellFrame.size.width = gridRect.size.width; - if ( cellFrame.size.height > gridRect.size.height ) - cellFrame.size.height = gridRect.size.height; - cellFrame.origin.x = gridRect.origin.x + floorf( (gridRect.size.width - cellFrame.size.width) * 0.5 ); - cellFrame.origin.y = gridRect.origin.y + floorf( (gridRect.size.height - cellFrame.size.height) * 0.5 ); - } - - // let the delegate update it if appropriate - if ( _flags.delegateAdjustGridCellFrame ) - cellFrame = [self.delegate gridView: self adjustCellFrame: cellFrame withinGridCellFrame: gridRect]; - - return ( cellFrame ); -} - -- (AQGridViewCell *) createPreparedCellForIndex: (NSUInteger) index usingGridData: (AQGridViewData *) gridData -{ - [UIView setAnimationsEnabled: NO]; - AQGridViewCell * cell = [_dataSource gridView: self cellForItemAtIndex: index]; - cell.separatorStyle = _flags.separatorStyle; - cell.editing = self.editing; - cell.displayIndex = index; - - cell.frame = [self fixCellFrame: cell.frame forGridRect: [gridData cellRectAtIndex: index]]; - if ( _backgroundView.superview == self ) - [self insertSubview: cell aboveSubview: _backgroundView]; - else - [self insertSubview: cell atIndex: 0]; - [UIView setAnimationsEnabled: YES]; - - return ( cell ); -} - -- (AQGridViewCell *) createPreparedCellForIndex: (NSUInteger) index -{ - return ( [self createPreparedCellForIndex: index usingGridData: _gridData] ); -} - -- (void) insertVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex -{ - if ( visibleCellListIndex >= [_visibleCells count] ) - return; - - [_visibleCells insertObject: cell atIndex: visibleCellListIndex]; -} - -- (void) deleteVisibleCell: (AQGridViewCell *) cell atIndex: (NSUInteger) visibleCellListIndex appendingNewCell: (AQGridViewCell *) newCell -{ - if ( visibleCellListIndex >= [_visibleCells count] ) - return; - - [_visibleCells removeObjectAtIndex: visibleCellListIndex]; - //[_visibleCells addObject: newCell]; - [self doAddVisibleCell: newCell]; -} - -- (void) ensureCellInVisibleList: (AQGridViewCell *) cell -{ - if ( [_visibleCells containsObject: cell] == NO ) - //[_visibleCells addObject: cell]; - [self doAddVisibleCell: cell]; - [_visibleCells sortUsingSelector: @selector(compareOriginAgainstCell:)]; -} - -@end - -@implementation AQGridView (AQGridViewPrivate) - -- (void) viewWillRotateToInterfaceOrientation: (UIInterfaceOrientation) orientation -{ - // to avoid cell pop-in or pop-out: - // if we're switching to landscape, don't update cells until after the transition. - // if we're switching to portrait, update cells first. - //if ( UIInterfaceOrientationIsLandscape(orientation) ) - // _reloadingSuspendedCount++; -} - -- (void) viewDidRotate -{ - if ( _reloadingSuspendedCount == 0 ) - return; - - if ( --_reloadingSuspendedCount == 0 ) - [self updateVisibleGridCellsNow]; -} - -@end - -@implementation AQGridView (CellLocationDelegation) - -- (void) delegateWillDisplayCell: (AQGridViewCell *) cell atIndex: (NSUInteger) index -{ - if ( cell.separatorStyle == AQGridViewCellSeparatorStyleSingleLine ) - { - // determine which edges need a separator - AQGridViewCellSeparatorEdge edge = 0; - if ( (index % self.numberOfColumns) != self.numberOfColumns-1 ) - { - edge |= AQGridViewCellSeparatorEdgeRight; - } - //if ( index <= (_gridData.numberOfItems - self.numberOfColumns) ) - { - edge |= AQGridViewCellSeparatorEdgeBottom; - } - - cell.separatorEdge = edge; - } - - //NSLog( @"Displaying cell at index %lu", (unsigned long) index ); - - if ( _flags.delegateWillDisplayCell == 0 ) - return; - - [self.delegate gridView: self willDisplayCell: cell forItemAtIndex: index]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.h deleted file mode 100755 index a6449ef..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// AQGridViewAnimatorItem.h -// Kobov3 -// -// Created by Jim Dovey on 10-06-29. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface AQGridViewAnimatorItem : NSObject - -+ (AQGridViewAnimatorItem *) itemWithView: (UIView *) aView index: (NSUInteger) anIndex; - -@property (nonatomic, retain) UIView * animatingView; // probably an AQGridViewCell, maybe a UIImageView -@property (nonatomic, assign) NSUInteger index; // the DESTINATION index -- use NSNotFound if this is being deleted - -- (NSUInteger) hash; -- (BOOL) isEqual: (AQGridViewAnimatorItem *) o; -- (NSComparisonResult) compare: (id) obj; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.m deleted file mode 100755 index 2b4391c..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewAnimatorItem.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// AQGridViewAnimatorItem.m -// Kobov3 -// -// Created by Jim Dovey on 10-06-29. -// Copyright 2010 Kobo Inc. All rights reserved. -// - -#import "AQGridViewAnimatorItem.h" - -@implementation AQGridViewAnimatorItem - -@synthesize animatingView, index; - -+ (AQGridViewAnimatorItem *) itemWithView: (UIView *) aView index: (NSUInteger) anIndex -{ - AQGridViewAnimatorItem * result = [[self alloc] init]; - result.animatingView = aView; - result.index = anIndex; - return ( result ); -} - - -- (NSUInteger) hash -{ - return ( self.index ); -} - -- (BOOL) isEqual: (AQGridViewAnimatorItem *) o -{ - if ( [o isKindOfClass: [self class]] == NO ) - return ( NO ); - - return ( o.index == self.index ); -} - -- (NSComparisonResult) compare: (id) obj -{ - if ( [obj isKindOfClass: [self class]] == NO ) - { - if ( (void *)objc_unretainedPointer(self) < (void *)objc_unretainedPointer(obj) ) - return ( NSOrderedAscending ); - if ( (void *)objc_unretainedPointer(self) > (void *)objc_unretainedPointer(obj) ) - return ( NSOrderedDescending ); - return ( NSOrderedSame ); // how ??!?!? - } - - AQGridViewAnimatorItem * item = (AQGridViewAnimatorItem *) obj; - if ( self.index < item.index ) - return ( NSOrderedAscending ); - if ( self.index > item.index ) - return ( NSOrderedDescending ); - - return ( NSOrderedSame ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell+AQGridViewCellPrivate.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell+AQGridViewCellPrivate.h deleted file mode 100755 index 627f64b..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell+AQGridViewCellPrivate.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * AQGridViewCell+AQGridViewCellPrivate.h - * AQGridView - * - * Created by Jim Dovey on 01/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewCell.h" - -enum -{ - AQGridViewCellSeparatorEdgeBottom = (1 << 0), - AQGridViewCellSeparatorEdgeRight = (1 << 1) -}; -typedef NSUInteger AQGridViewCellSeparatorEdge; - -@interface AQGridViewCell (AQGridViewCellPrivate) - -@property (nonatomic, retain) UIColor * separatorColor; -@property (nonatomic, assign) AQGridViewCellSeparatorStyle separatorStyle; -@property (nonatomic, assign) AQGridViewCellSeparatorEdge separatorEdge; - -@property (nonatomic, assign) NSUInteger displayIndex; - -@property (nonatomic, assign) BOOL hiddenForAnimation; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.h deleted file mode 100755 index e23f978..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * AQGridViewCell.h - * AQGridView - * - * Created by Jim Dovey on 25/2/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <UIKit/UIKit.h> - -typedef enum { - AQGridViewCellSeparatorStyleNone, - AQGridViewCellSeparatorStyleEmptySpace, - AQGridViewCellSeparatorStyleSingleLine -} AQGridViewCellSeparatorStyle; - -typedef enum { - AQGridViewCellSelectionStyleNone, - AQGridViewCellSelectionStyleBlue, - AQGridViewCellSelectionStyleGray, - AQGridViewCellSelectionStyleBlueGray, - AQGridViewCellSelectionStyleGreen, - AQGridViewCellSelectionStyleRed, -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2 - AQGridViewCellSelectionStyleGlow // see also 'selectionGlowColor' property -#endif -} AQGridViewCellSelectionStyle; - -@interface AQGridViewCell : UIView -{ - NSString * _reuseIdentifier; - UIView * _contentView; - UIView * _backgroundView; - UIView * _selectedBackgroundView; - UIView * _selectedOverlayView; - CGFloat _selectionFadeDuration; - UIColor * _backgroundColor; - UIColor * _separatorColor; - UIColor * _selectionGlowColor; - CGFloat _selectionGlowShadowRadius; - UIView * _bottomSeparatorView; - UIView * _rightSeparatorView; - NSTimer * _fadeTimer; - CFMutableDictionaryRef _selectionColorInfo; - NSUInteger _displayIndex; // le sigh... - struct { - unsigned int separatorStyle:3; - unsigned int selectionStyle:3; - unsigned int separatorEdge:2; - unsigned int animatingSelection:1; - unsigned int backgroundColorSet:1; - unsigned int selectionGlowColorSet:1; - unsigned int usingDefaultSelectedBackgroundView:1; - unsigned int selected:1; - unsigned int highlighted:1; - unsigned int becomingHighlighted:1; - unsigned int setShadowPath:1; - unsigned int editing:1; - unsigned int hiddenForAnimation:1; - unsigned int __RESERVED__:14; - } _cellFlags; -} - -- (id) initWithFrame: (CGRect) frame reuseIdentifier: (NSString *) reuseIdentifier; - -// If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transitions into and out of editing mode. -@property (nonatomic, readonly, retain) UIView * contentView; - -// default is nil. The background view will be added as a subview behind all other views -@property (nonatomic, retain) UIView * backgroundView; - -// The 'selectedBackgroundView' will be added as a subview directly above the backgroundView if not nil, or behind all other views. It is added as a subview only when the cell is selected. Calling -setSelected:animated: will cause the 'selectedBackgroundView' to animate in and out with an alpha fade. -@property (nonatomic, retain) UIView * selectedBackgroundView; - -@property (nonatomic, readonly, copy) NSString * reuseIdentifier; -- (void) prepareForReuse; // if the cell is reusable (has a reuse identifier), this is called just before the cell is returned from the grid view method dequeueReusableCellWithIdentifier:. If you override, you MUST call super. - -@property (nonatomic) AQGridViewCellSelectionStyle selectionStyle; // default is AQGridViewCellSelectionStyleGlow -@property (nonatomic, getter=isSelected) BOOL selected; // default is NO -@property (nonatomic, getter=isHighlighted) BOOL highlighted; // default is NO -@property (nonatomic, retain) UIColor * selectionGlowColor; // default is dark grey, ignored if selectionStyle != AQGridViewCellSelectionStyleGlow -@property (nonatomic) CGFloat selectionGlowShadowRadius; // default is 12.0, ignored if selectionStyle != AQGridViewCellSelectionStyleGlow - -// this can be overridden by subclasses to return a subview's layer to which to add the glow -// the default implementation returns the contentView's layer -@property (nonatomic, readonly) CALayer * glowSelectionLayer; - -- (void) setSelected: (BOOL) selected animated: (BOOL) animated; -- (void) setHighlighted: (BOOL) highlighted animated: (BOOL) animated; - -// Editing - -@property(nonatomic,getter=isEditing) BOOL editing; // show appropriate edit controls (+/- & reorder). By default -setEditing: calls setEditing:animated: with NO for animated. -- (void)setEditing:(BOOL)editing animated:(BOOL)animated; - -// Sorting -- (NSComparisonResult) compareOriginAgainstCell: (AQGridViewCell *) otherCell; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.m deleted file mode 100755 index 7cc9b68..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewCell.m +++ /dev/null @@ -1,706 +0,0 @@ -/* - * AQGridViewCell.m - * AQGridView - * - * Created by Jim Dovey on 25/2/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewCell.h" -#import "AQGridViewCell+AQGridViewCellPrivate.h" -#import "UIColor+AQGridView.h" -#import <QuartzCore/QuartzCore.h> -#import <objc/runtime.h> - -#ifdef BUILTIN_IMAGES -#import "AQGridViewCell_png.h" -#endif - -@interface AQGridViewCell () -@property (nonatomic, retain) UIView * contentView; -@property (nonatomic, copy) NSString * reuseIdentifier; -- (void) flipHighlightTimerFired: (NSTimer *) timer; -@end - -@implementation AQGridViewCell - -@synthesize contentView=_contentView, backgroundView=_backgroundView, selectedBackgroundView=_selectedBackgroundView; -@synthesize reuseIdentifier=_reuseIdentifier, selectionGlowColor=_selectionGlowColor; -@synthesize selectionGlowShadowRadius=_selectionGlowShadowRadius; - -- (id) initWithFrame: (CGRect) frame reuseIdentifier: (NSString *) reuseIdentifier -{ - self = [super initWithFrame: frame]; - if ( self == nil ) - return ( nil ); - - self.reuseIdentifier = reuseIdentifier; - _cellFlags.usingDefaultSelectedBackgroundView = 1; - _cellFlags.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace; - - if ( [CALayer instancesRespondToSelector: @selector(shadowPath)] ) - _cellFlags.selectionStyle = AQGridViewCellSelectionStyleGlow; - else - _cellFlags.selectionStyle = AQGridViewCellSelectionStyleGray; - _cellFlags.setShadowPath = 0; - _selectionColorInfo = CFDictionaryCreateMutable( kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks ); - self.backgroundColor = [UIColor whiteColor]; - - _selectionGlowShadowRadius = 12.0f; - - return ( self ); -} - -- (void) awakeFromNib -{ - _cellFlags.usingDefaultSelectedBackgroundView = 1; - _cellFlags.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace; - - if ( [CALayer instancesRespondToSelector: @selector(shadowPath)] ) - _cellFlags.selectionStyle = AQGridViewCellSelectionStyleGlow; - else - _cellFlags.selectionStyle = AQGridViewCellSelectionStyleGray; - _selectionColorInfo = CFDictionaryCreateMutable( kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks ); - self.backgroundColor = [UIColor whiteColor]; - - [super awakeFromNib]; -} - -- (void) dealloc -{ - if ( _selectionColorInfo != NULL ) - CFRelease( _selectionColorInfo ); -} - -- (NSComparisonResult) compareOriginAgainstCell: (AQGridViewCell *) otherCell -{ - CGPoint myOrigin = self.frame.origin; - CGPoint theirOrigin = otherCell.frame.origin; - - if ( myOrigin.y > theirOrigin.y ) - return ( NSOrderedDescending ); - else if ( myOrigin.y < theirOrigin.y ) - return ( NSOrderedAscending ); - - if ( myOrigin.x > theirOrigin.x ) - return ( NSOrderedDescending ); - else if ( myOrigin.x < theirOrigin.x ) - return ( NSOrderedAscending ); - - return ( NSOrderedSame ); -} - -- (UIView *) contentView -{ - if ( _contentView == nil ) - { - _contentView = [[UIView alloc] initWithFrame: self.bounds]; - _contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _contentView.autoresizesSubviews = YES; - self.autoresizesSubviews = YES; - _contentView.backgroundColor = [UIColor whiteColor]; - [_contentView.layer setValue: [NSNumber numberWithBool: YES] forKey: @"KoboHackInterestingLayer"]; - [self addSubview: _contentView]; - } - return ( _contentView ); -} - -- (CALayer *) glowSelectionLayer -{ - return ( _contentView.layer ); -} - -- (AQGridViewCellSelectionStyle) selectionStyle -{ - return ( _cellFlags.selectionStyle ); -} - -- (void) setSelectionStyle: (AQGridViewCellSelectionStyle) style -{ - if ( (style == AQGridViewCellSelectionStyleGlow) && ([CALayer instancesRespondToSelector: @selector(shadowPath)] == NO) ) - style = AQGridViewCellSelectionStyleGray; - _cellFlags.selectionStyle = style; -} - -- (AQGridViewCellSeparatorEdge) separatorEdge -{ - return ( _cellFlags.separatorEdge ); -} - -- (void) setSeparatorEdge: (AQGridViewCellSeparatorEdge) value -{ - if ( _cellFlags.separatorEdge == value ) - return; - - _cellFlags.separatorEdge = value; - [self setNeedsLayout]; -} - -- (BOOL) isSelected -{ - return ( _cellFlags.selected ); -} - -- (void) setSelected: (BOOL) value -{ - [self setSelected: value animated: NO]; -} - -- (void) setSelected: (BOOL) value animated: (BOOL) animated -{ - _cellFlags.selected = (value ? 1 : 0); - [self setHighlighted: value animated: animated]; -} - -- (BOOL) isHighlighted -{ - return ( _cellFlags.highlighted ); -} - -- (void) setHighlighted: (BOOL) value -{ - [self setHighlighted: value animated: NO]; -} - -- (void) makeSubviewsOfView: (UIView *) aView nonOpaqueWithBackgroundColor: (UIColor *) color -{ - for ( UIView * view in aView.subviews ) - { - if ( view.opaque ) - { - NSMutableDictionary * info = (NSMutableDictionary *) objc_unretainedObject(CFDictionaryGetValue( _selectionColorInfo, objc_unretainedPointer(view) )); - if ( info == nil ) - { - info = [NSMutableDictionary dictionaryWithCapacity: 2]; - CFDictionarySetValue( _selectionColorInfo, objc_unretainedPointer(view), objc_unretainedPointer(info) ); - } - - id value = view.backgroundColor; - if ( value == nil ) - value = [NSNull null]; - [info setObject: value forKey: @"backgroundColor"]; - - view.opaque = NO; - view.backgroundColor = color; - } - - [self makeSubviewsOfView: view nonOpaqueWithBackgroundColor: color]; - } -} - -- (void) makeSubviewsOfViewOpaqueAgain: (UIView *) aView -{ - for ( UIView * view in aView.subviews ) - { - NSMutableDictionary * info = (NSMutableDictionary *) objc_unretainedObject(CFDictionaryGetValue( _selectionColorInfo, objc_unretainedPointer(view) )); - if ( info != nil ) - { - id value = [info objectForKey: @"backgroundColor"]; - if ( value == nil ) - continue; - - if ( value == [NSNull null] ) - value = nil; - - view.opaque = YES; - view.backgroundColor = value; - } - - [self makeSubviewsOfViewOpaqueAgain: view]; - } -} - -//- (void) setTextColor: (UIColor *) color forSubviewsOfView: (UIView *) aView -- (void) highlightSubviewsOfView: (UIView *) aView -{ - for ( UIView * view in aView.subviews ) - { - if ( [view respondsToSelector: @selector(setHighlighted:)] ) - { - NSMutableDictionary * info = (NSMutableDictionary *) objc_unretainedObject(CFDictionaryGetValue( _selectionColorInfo, objc_unretainedPointer(view) )); - if ( info == nil ) - { - info = [NSMutableDictionary dictionaryWithCapacity: 2]; - CFDictionarySetValue( _selectionColorInfo, objc_unretainedPointer(view), objc_unretainedPointer(info) ); - } - - // don't overwrite any prior cache of a view's original highlighted state. - // this is because 'highlighted' will be set, then 'selected', which can perform 'highlight' again before the animation completes - if ( [info objectForKey: @"highlighted"] == nil ) - { - id value = [view valueForKey: @"highlighted"]; - if ( value == nil ) - value = [NSNumber numberWithBool: NO]; - [info setObject: value forKey: @"highlighted"]; - } - - [view setValue: [NSNumber numberWithBool: YES] - forKey: @"highlighted"]; - } - - [self highlightSubviewsOfView: view]; - } -} - -- (void) resetHighlightForSubviewsOfView: (UIView *) aView -{ - for ( UIView * view in aView.subviews ) - { - if ([view respondsToSelector:@selector(setHighlighted:)]) { - NSMutableDictionary * info = (NSMutableDictionary *) objc_unretainedObject(CFDictionaryGetValue( _selectionColorInfo, objc_unretainedPointer(view) )); - if ( info != nil ) - { - id value = [info objectForKey: @"highlighted"]; - [view setValue: value forKey: @"highlighted"]; - } - } - [self resetHighlightForSubviewsOfView: view]; - } -} - -- (void) _beginBackgroundHighlight: (BOOL) highlightOn animated: (BOOL) animated -{ - if ( (_cellFlags.usingDefaultSelectedBackgroundView == 1) && (_selectedBackgroundView == nil) ) - { - NSString *imageName = nil; -#ifdef BUILTIN_IMAGES - unsigned char * pngBytes = AQGridSelection_png; - NSUInteger pngLength = AQGridSelection_png_len; - - switch ( _cellFlags.selectionStyle ) - { - case AQGridViewCellSelectionStyleBlue: - default: - break; - - case AQGridViewCellSelectionStyleGray: - imageName = @"AQGridSelectionGray.png"; - break; - - case AQGridViewCellSelectionStyleBlueGray: - imageName = @"AQGridSelectionGrayBlue.png"; - break; - - case AQGridViewCellSelectionStyleGreen: - imageName = @"AQGridSelectionGreen.png"; - break; - - case AQGridViewCellSelectionStyleRed: - imageName = @"AQGridSelectionRed.png"; - break; - } - - NSData *pngData = [NSData dataWithBytesNoCopy: pngBytes length: pngLength freeWhenDone: NO]; - _selectedBackgroundView = [[UIImageView alloc] initWithImage: [UIImage imageWithData: pngData]]; -#else - imageName = @"AQGridSelection.png"; - switch ( _cellFlags.selectionStyle ) - { - case AQGridViewCellSelectionStyleBlue: - default: - break; - - case AQGridViewCellSelectionStyleGray: - imageName = @"AQGridSelectionGray.png"; - break; - - case AQGridViewCellSelectionStyleBlueGray: - imageName = @"AQGridSelectionGrayBlue.png"; - break; - - case AQGridViewCellSelectionStyleGreen: - imageName = @"AQGridSelectionGreen.png"; - break; - - case AQGridViewCellSelectionStyleRed: - imageName = @"AQGridSelectionRed.png"; - break; - } - - _selectedBackgroundView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: imageName]]; -#endif - _selectedBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _selectedBackgroundView.contentMode = UIViewContentModeScaleToFill; - } - - // we'll set the text color to something here - if ( highlightOn ) - { - // start it invisible - [UIView setAnimationsEnabled: NO]; - _selectedBackgroundView.alpha = 0.0; - - // find all opaque subviews and make non-opaque with clear backgrounds - [self makeSubviewsOfView: self nonOpaqueWithBackgroundColor: [UIColor clearColor]]; - - if ( _backgroundView != nil ) - [self insertSubview: _selectedBackgroundView aboveSubview: _backgroundView]; - else - [self insertSubview: _selectedBackgroundView atIndex: 0]; - _selectedBackgroundView.frame = self.bounds; - - [UIView setAnimationsEnabled: YES]; - - // now the animating bit -- make the selection fade in - _selectedBackgroundView.alpha = 1.0; - } - else - { - _selectedBackgroundView.alpha = 0.0; - } - - if ( animated ) - { - if ( _fadeTimer != nil ) - { - [_fadeTimer invalidate]; - } - - _fadeTimer = [[NSTimer alloc] initWithFireDate: [NSDate dateWithTimeIntervalSinceNow: 0.1] - interval: 0.1 - target: self - selector: @selector(flipHighlightTimerFired:) - userInfo: [NSNumber numberWithBool: highlightOn] - repeats: NO]; - [[NSRunLoop currentRunLoop] addTimer: _fadeTimer forMode: NSDefaultRunLoopMode]; - } - else - { - if ( highlightOn ) - [self highlightSubviewsOfView: self]; - else - [self resetHighlightForSubviewsOfView: self]; - } -} - -- (void) flipHighlightTimerFired: (NSTimer *) timer -{ - if ( [[timer userInfo] boolValue] ) - [self highlightSubviewsOfView: self]; - else - [self resetHighlightForSubviewsOfView: self]; -} - -- (void) highlightAnimationStopped: (NSString * __unused) animationID context: (void * __unused) context -{ - BOOL isHighlighting = (_cellFlags.becomingHighlighted ? YES : NO); - - if ( isHighlighting ) - { - _cellFlags.highlighted = 1; - } - else - { - [UIView setAnimationsEnabled: NO]; - // find all non-opaque subviews and make opaque again, with original background colors - [self makeSubviewsOfViewOpaqueAgain: self]; - [UIView setAnimationsEnabled: YES]; - - _cellFlags.highlighted = 0; - [_selectedBackgroundView removeFromSuperview]; - CFDictionaryRemoveAllValues( _selectionColorInfo ); - } - - _cellFlags.animatingSelection = 0; -} - -- (void) setHighlighted: (BOOL) value animated: (BOOL) animated -{ - if ( _cellFlags.selectionStyle == AQGridViewCellSelectionStyleNone ) - { - _cellFlags.highlighted = (value ? 1 : 0); - return; - } - - _cellFlags.becomingHighlighted = (value ? 1 : 0); - - if ( (animated) && ([UIView areAnimationsEnabled]) ) - { - [UIView beginAnimations: @"AQGridCellViewHighlightAnimation" context: NULL]; - [UIView setAnimationCurve: UIViewAnimationCurveLinear]; - [UIView setAnimationBeginsFromCurrentState: YES]; - [UIView setAnimationDidStopSelector: @selector(highlightAnimationStopped:context:)]; - _cellFlags.animatingSelection = 1; - } - - switch ( _cellFlags.selectionStyle ) - { - case AQGridViewCellSelectionStyleNone: - default: - break; - - case AQGridViewCellSelectionStyleBlue: - case AQGridViewCellSelectionStyleGray: - case AQGridViewCellSelectionStyleBlueGray: - case AQGridViewCellSelectionStyleGreen: - case AQGridViewCellSelectionStyleRed: - { - [self _beginBackgroundHighlight: value animated: animated]; - break; - } - - case AQGridViewCellSelectionStyleGlow: - { - CALayer * theLayer = self.glowSelectionLayer; - - if ([theLayer respondsToSelector: @selector(setShadowPath:)] && [theLayer respondsToSelector: @selector(shadowPath)]) - { - if ( _cellFlags.setShadowPath == 0 ) - { - CGMutablePathRef path = CGPathCreateMutable(); - CGPathAddRect( path, NULL, theLayer.bounds ); - theLayer.shadowPath = path; - CGPathRelease( path ); - _cellFlags.setShadowPath = 1; - } - - theLayer.shadowOffset = CGSizeZero; - - if ( _cellFlags.selectionGlowColorSet == 1 ) - theLayer.shadowColor = self.selectionGlowColor.CGColor; - else - theLayer.shadowColor = [[UIColor darkGrayColor] CGColor]; - - theLayer.shadowRadius = self.selectionGlowShadowRadius; - - // add or remove the 'shadow' as appropriate - if ( value ) - theLayer.shadowOpacity = 1.0; - else - theLayer.shadowOpacity = 0.0; - } - - break; - } - } - - if ( (animated) && ([UIView areAnimationsEnabled]) ) - [UIView commitAnimations]; - else - [self highlightAnimationStopped: @"" context: NULL]; -} - -- (void) setBackgroundView: (UIView *) aView -{ - if ( aView == _backgroundView ) - return; - - if ( _backgroundView.superview == self ) - [_backgroundView removeFromSuperview]; - - _backgroundView = aView; - - _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - - CGRect bgFrame = self.bounds; - if ( _cellFlags.separatorStyle == AQGridViewCellSeparatorStyleSingleLine ) - { - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeBottom ) - bgFrame.size.height -= 1.0; - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeRight ) - bgFrame.size.width -= 1.0; - } - - _backgroundView.frame = bgFrame; - [self insertSubview: _backgroundView atIndex: 0]; -} - -- (void) layoutSubviews -{ - [super layoutSubviews]; - - _cellFlags.setShadowPath = 0; - - CGRect cFrame = self.bounds; - if ( _cellFlags.separatorStyle == AQGridViewCellSeparatorStyleSingleLine ) - { - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeBottom ) - { - if ( _bottomSeparatorView == nil ) - { - _bottomSeparatorView = [[UIView alloc] initWithFrame: CGRectMake(0.0, self.bounds.size.height - 1.0, self.bounds.size.width, 1.0)]; - _bottomSeparatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin; - [self insertSubview: _bottomSeparatorView atIndex: 0]; - } - - _bottomSeparatorView.backgroundColor = (_separatorColor == nil ? [UIColor AQDefaultGridCellSeparatorColor] : _separatorColor); - - cFrame.size.height -= 1.0; - } - else if ( _bottomSeparatorView != nil ) - { - [_bottomSeparatorView removeFromSuperview]; - _bottomSeparatorView = nil; - } - - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeRight ) - { - if ( _rightSeparatorView == nil ) - { - _rightSeparatorView = [[UIView alloc] initWithFrame: CGRectMake(self.bounds.size.width - 1.0, 0.0, 1.0, self.bounds.size.height)]; - _rightSeparatorView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleLeftMargin; - [self insertSubview: _rightSeparatorView atIndex: 0]; - } - - _rightSeparatorView.backgroundColor = (_separatorColor == nil ? [UIColor AQDefaultGridCellSeparatorColor] : _separatorColor); - - cFrame.size.width -= 1.0; - } - else if ( _rightSeparatorView != nil ) - { - [_rightSeparatorView removeFromSuperview]; - _rightSeparatorView = nil; - } - } - - self.contentView.frame = cFrame; - self.backgroundView.frame = cFrame; - self.selectedBackgroundView.frame = cFrame; -} - -- (void) setSelectionGlowColor: (UIColor *) aColor -{ - _selectionGlowColor = aColor; - - _cellFlags.selectionGlowColorSet = (aColor == nil ? 0 : 1); -} - -- (void) setSelectedBackgroundView: (UIView *) aView -{ - if ( aView == _selectedBackgroundView ) - return; - - if ( _selectedBackgroundView.superview == self ) - [_selectedBackgroundView removeFromSuperview]; - - _selectedBackgroundView = aView; - - _selectedBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - - CGRect bgFrame = self.bounds; - if ( _cellFlags.separatorStyle == AQGridViewCellSeparatorStyleSingleLine ) - { - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeBottom ) - bgFrame.size.height -= 1.0; - if ( _cellFlags.separatorEdge & AQGridViewCellSeparatorEdgeRight ) - bgFrame.size.width -= 1.0; - } - - _selectedBackgroundView.frame = bgFrame; - [self insertSubview: _selectedBackgroundView atIndex: 0]; - - _cellFlags.usingDefaultSelectedBackgroundView = (aView == nil ? 1 : 0); -} - -- (void) prepareForReuse -{ - _cellFlags.setShadowPath = 0; -} - -- (BOOL) isEditing -{ - return ( _cellFlags.editing == 1 ); -} - -- (void) setEditing: (BOOL) value -{ - [self setEditing:value animated:NO]; -} - -- (void)setEditing:(BOOL)editing animated:(BOOL)animated -{ - _cellFlags.editing = (editing ? 1 : 0); -} - -@end - -@implementation AQGridViewCell (AQGridViewCellPrivate) - -- (UIColor *) separatorColor -{ - return ( _separatorColor ); -} - -- (void) setSeparatorColor: (UIColor *) color -{ - if ( _separatorColor == color ) - return; - - _separatorColor = color; - - _bottomSeparatorView.backgroundColor = _separatorColor; - _rightSeparatorView.backgroundColor = _separatorColor; -} - -- (AQGridViewCellSeparatorStyle) separatorStyle -{ - return ( _cellFlags.separatorStyle ); -} - -- (void) setSeparatorStyle: (AQGridViewCellSeparatorStyle) style -{ - if ( style == _cellFlags.separatorStyle ) - return; - - _cellFlags.separatorStyle = style; - [self setNeedsLayout]; -} - -- (NSUInteger) displayIndex -{ - return ( _displayIndex ); -} - -- (void) setDisplayIndex: (NSUInteger) index -{ - _displayIndex = index; -} - -- (BOOL) hiddenForAnimation -{ - return ( _cellFlags.hiddenForAnimation == 1 ); -} - -- (void) setHiddenForAnimation: (BOOL) value -{ - if ( value ) - { - self.hidden = YES; - _cellFlags.hiddenForAnimation = 1; - } - else - { - // don't make visible here-- might still be hidden by something else. Caller should un-hide if appropriate - _cellFlags.hiddenForAnimation = 0; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.h deleted file mode 100755 index e23fb80..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * AQGridViewController.h - * AQGridView - * - * Created by Jim Dovey on 24/2/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <UIKit/UIKit.h> -#import "AQGridView.h" - -#define POPOVER_SIZE CGSizeMake( 345, 525 ) - -@interface AQGridViewController : UIViewController <AQGridViewDelegate, AQGridViewDataSource, UIPopoverControllerDelegate> -{ - @private - BOOL _clearsSelectionOnViewWillAppear; - @protected - BOOL _popoverShowing; -} - -@property (nonatomic, retain) AQGridView * gridView; -@property (nonatomic) BOOL clearsSelectionOnViewWillAppear; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.m deleted file mode 100755 index 13bdadd..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewController.m +++ /dev/null @@ -1,177 +0,0 @@ -/* - * AQGridViewController.m - * AQGridView - * - * Created by Jim Dovey on 24/2/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewController.h" - -@interface AQGridView (AQGridViewPrivate) -- (void) viewWillRotateToInterfaceOrientation: (UIInterfaceOrientation) orientation; -- (void) viewDidRotate; -@end - -@implementation AQGridViewController - -@synthesize clearsSelectionOnViewWillAppear=_clearsSelectionOnViewWillAppear; - -- (void) _sharedGridViewDefaultSetup -{ - self.gridView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - self.gridView.autoresizesSubviews = YES; - self.gridView.delegate = self; - self.gridView.dataSource = self; -} - -- (void) loadView -{ - AQGridView * aView = [[AQGridView alloc] initWithFrame: CGRectZero]; - self.gridView = aView; - - [self _sharedGridViewDefaultSetup]; -} - -- (void) awakeFromNib -{ - [self _sharedGridViewDefaultSetup]; -} - -- (void) viewDidLoad -{ - [super viewDidLoad]; - [self.gridView reloadData]; - - _popoverShowing = NO; -} - -- (AQGridView *) gridView -{ - return ( (AQGridView *) self.view ); -} - -- (void) setGridView: (AQGridView *) value -{ - if ( [value isKindOfClass: [AQGridView class]] == NO ) - { - [NSException raise: NSInvalidArgumentException format: @"-setGridView: called with non-AQGridView argument '%@'", NSStringFromClass([value class])]; - } - - self.view = value; -} - -/* - // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { - // Custom initialization - } - return self; -} -*/ - -/* -// Implement loadView to create a view hierarchy programmatically, without using a nib. -- (void)loadView { -} -*/ - -/* -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - [super viewDidLoad]; -} -*/ - -- (void) viewWillAppear: (BOOL) animated -{ - if ( (_clearsSelectionOnViewWillAppear) && ([self.gridView indexOfSelectedItem] != NSNotFound) ) - { - [self.gridView deselectItemAtIndex: [self.gridView indexOfSelectedItem] animated: NO]; - } -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - // Overriden to allow any orientation. - return YES; -} - -- (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation - duration: (NSTimeInterval) duration -{ - [self.gridView viewWillRotateToInterfaceOrientation: toInterfaceOrientation]; -} - -- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation -{ - [self.gridView viewDidRotate]; -} - -- (void)didReceiveMemoryWarning { - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - - -- (void)viewDidUnload { - [super viewDidUnload]; - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; -} - - - -#pragma mark - -#pragma mark Grid View Data Source - -- (NSUInteger) numberOfItemsInGridView: (AQGridView *) gridView -{ - return ( 0 ); -} - - -- (AQGridViewCell *) gridView: (AQGridView *) gridView cellForItemAtIndex: (NSUInteger) index -{ - return ( nil ); -} - -#pragma mark - -#pragma mark UIPopoverControllerDelegate methods - -- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController -{ - _popoverShowing = NO; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.h deleted file mode 100755 index f2d3aad..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * AQGridViewData.h - * AQGridView - * - * Created by Jim Dovey on 1/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <Foundation/Foundation.h> -#import <UIKit/UIKit.h> -#import "AQGridView.h" - -@interface AQGridViewData : NSObject <NSCopying, NSMutableCopying> -{ - AQGridView * __unsafe_unretained _gridView; // weak reference - CGSize _boundsSize; - AQGridViewLayoutDirection _layoutDirection; - CGSize _desiredCellSize; // NB: 'cell' here means a grid cell -- i.e. constant size, tessellating - CGSize _actualCellSize; - - CGFloat _topPadding; - CGFloat _bottomPadding; - CGFloat _leftPadding; - CGFloat _rightPadding; - - NSUInteger _numberOfItems; - NSUInteger _reorderedIndex; -} - -- (id) initWithGridView: (AQGridView *) gridView; - -@property (nonatomic) NSUInteger numberOfItems; - -@property (nonatomic) CGFloat topPadding, bottomPadding, leftPadding, rightPadding; -@property (nonatomic) AQGridViewLayoutDirection layoutDirection; - -// notify this object of changes to the layout parameters -- (void) gridViewDidChangeBoundsSize: (CGSize) boundsSize; - -// nabbed from UITableViewRowData-- will we need something like this? -@property (nonatomic) NSUInteger reorderedIndex; - -// Turning view locations into item indices -- (NSUInteger) itemIndexForPoint: (CGPoint) point; -- (BOOL) pointIsInLastRow: (CGPoint) point; - -// grid cell sizes-- for the layout calculations -- (void) setDesiredCellSize: (CGSize) desiredCellSize; -- (CGSize) cellSize; - -// metrics used within the scroll view -- (CGRect) rectForEntireGrid; -- (CGSize) sizeForEntireGrid; -- (NSUInteger) numberOfItemsPerRow; - -- (CGRect) cellRectAtIndex: (NSUInteger) index; -- (CGRect) cellRectForPoint: (CGPoint) point; -- (NSIndexSet *) indicesOfCellsInRect: (CGRect) rect; // NB: Grid Cells only-- AQGridViewCells might not actually intersect - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.m deleted file mode 100755 index 7e0a2da..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewData.m +++ /dev/null @@ -1,252 +0,0 @@ -/* - * AQGridViewData.h - * AQGridView - * - * Created by Jim Dovey on 1/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewData.h" -#import "AQGridView.h" - -@interface AQGridViewData (AQGridViewDataPrivate) -- (void) fixDesiredCellSizeForWidth: (CGFloat) width; -@end - -@implementation AQGridViewData - -@synthesize reorderedIndex=_reorderedIndex, numberOfItems=_numberOfItems, topPadding=_topPadding, bottomPadding=_bottomPadding, leftPadding=_leftPadding, rightPadding=_rightPadding, layoutDirection=_layoutDirection; - -- (id) initWithGridView: (AQGridView *) gridView -{ - self = [super init]; - if ( self == nil ) - return ( nil ); - - _gridView = gridView; - _boundsSize = gridView.bounds.size; - - return ( self ); -} - -- (id) copyWithZone: (NSZone *) zone -{ - AQGridViewData * theCopy = [[AQGridViewData allocWithZone: zone] initWithGridView: _gridView]; - theCopy->_desiredCellSize = _desiredCellSize; - theCopy->_actualCellSize = _actualCellSize; - theCopy->_layoutDirection = _layoutDirection; - theCopy->_topPadding = _topPadding; - theCopy->_bottomPadding = _bottomPadding; - theCopy->_leftPadding = _leftPadding; - theCopy->_rightPadding = _rightPadding; - theCopy->_numberOfItems = _numberOfItems; - theCopy->_reorderedIndex = _reorderedIndex; - return ( theCopy ); -} - -- (id) mutableCopyWithZone: (NSZone *) zone -{ - return ( [self copyWithZone: zone] ); -} - -- (void) gridViewDidChangeBoundsSize: (CGSize) boundsSize -{ - _boundsSize = boundsSize; - if ( _layoutDirection == AQGridViewLayoutDirectionVertical ) - [self fixDesiredCellSizeForWidth: boundsSize.width]; -} - -- (NSUInteger) itemIndexForPoint: (CGPoint) point -{ - // adjust for top padding - point.y -= _topPadding; - point.x -= _leftPadding; - - // get a count of all rows before the one containing the point - NSUInteger y = (NSUInteger)floorf(point.y); - NSUInteger row = y / (NSUInteger)_actualCellSize.height; - - // now column - NSUInteger x = (NSUInteger)floorf(point.x); - NSUInteger col = x / (NSUInteger)_actualCellSize.width; - - NSUInteger result = (row * [self numberOfItemsPerRow]) + col; - if ( result >= self.numberOfItems ) - result = NSNotFound; - - return ( result ); -} - -- (BOOL) pointIsInLastRow: (CGPoint) point -{ - CGRect rect = [self rectForEntireGrid]; - if ( _layoutDirection == AQGridViewLayoutDirectionVertical ) - return ( point.y >= (rect.size.height - _actualCellSize.height) ); - - // 'else' - return ( point.x >= (rect.size.width - _actualCellSize.width) ); -} - -- (CGRect) cellRectForPoint: (CGPoint) point -{ - return ( [self cellRectAtIndex: [self itemIndexForPoint: point]] ); -} - -- (void) setDesiredCellSize: (CGSize) desiredCellSize -{ - _desiredCellSize = desiredCellSize; - if ( _layoutDirection == AQGridViewLayoutDirectionVertical ) - [self fixDesiredCellSizeForWidth: _boundsSize.width]; - else - _actualCellSize = _desiredCellSize; -} - -- (void) setLayoutDirection: (AQGridViewLayoutDirection) direction -{ - if ( direction == AQGridViewLayoutDirectionVertical ) - [self fixDesiredCellSizeForWidth: _boundsSize.width]; - else - _actualCellSize = _desiredCellSize; - _layoutDirection = direction; -} - -- (CGSize) cellSize -{ - return ( _actualCellSize ); -} - -- (CGRect) rectForEntireGrid -{ - CGRect rect; - rect.origin.x = _leftPadding; - rect.origin.y = _topPadding; - rect.size = [self sizeForEntireGrid]; - return ( rect ); -} - -- (CGSize) sizeForEntireGrid -{ - NSUInteger numPerRow = [self numberOfItemsPerRow]; - if ( numPerRow == 0 ) // avoid a divide-by-zero exception - return ( CGSizeZero ); - NSUInteger numRows = _numberOfItems / numPerRow; - if ( _numberOfItems % numPerRow != 0 ) - numRows++; - - CGFloat height = ( ((CGFloat)ceilf((CGFloat)numRows * _actualCellSize.height)) + _topPadding + _bottomPadding ); - if (height < _gridView.bounds.size.height) - height = _gridView.bounds.size.height; - - return ( CGSizeMake(((CGFloat)ceilf(_actualCellSize.width * numPerRow)) + _leftPadding + _rightPadding, height) ); -} - -- (NSUInteger) numberOfItemsPerRow -{ - if ( _layoutDirection == AQGridViewLayoutDirectionVertical ) - return ( (NSUInteger)floorf(_boundsSize.width / _actualCellSize.width) ); - - // work out how many rows we can fit - NSUInteger rows = (NSUInteger)floorf(_boundsSize.height / _actualCellSize.height); - if (0 == rows) { - rows = 1; - } - NSUInteger cols = _numberOfItems / rows; - if ( _numberOfItems % rows != 0 ) - cols++; - - return ( cols ); -} - -- (CGRect) cellRectAtIndex: (NSUInteger) index -{ - NSUInteger numPerRow = [self numberOfItemsPerRow]; - if ( numPerRow == 0 ) // avoid a divide-by-zero exception - return ( CGRectZero ); - NSUInteger skipRows = index / numPerRow; - NSUInteger skipCols = index % numPerRow; - - CGRect result = CGRectZero; - result.origin.x = _actualCellSize.width * (CGFloat)skipCols + _leftPadding; - result.origin.y = (_actualCellSize.height * (CGFloat)skipRows) + _topPadding; - result.size = _actualCellSize; - - return ( result ); -} - -- (NSIndexSet *) indicesOfCellsInRect: (CGRect) aRect -{ - NSMutableIndexSet * result = [NSMutableIndexSet indexSet]; - NSUInteger numPerRow = [self numberOfItemsPerRow]; - - for ( NSUInteger i = 0; i < _numberOfItems; i++ ) - { - CGRect cellRect = [self cellRectAtIndex: i]; - - // numPerRow must be > 0 or you get an infinite loop - // (i becomes 0 - 1 => UINT_MAX; loop UINT_MAX+1 => 0, etc.) - if ( CGRectGetMaxY(cellRect) < CGRectGetMinY(aRect) && numPerRow > 0 ) - { - // jump forward to the next row - i += (numPerRow - 1); - continue; - } - - if ( CGRectIntersectsRect(cellRect, aRect) ) - { - [result addIndex: i]; - if ( (CGRectGetMaxY(cellRect) > CGRectGetMaxY(aRect)) && - (CGRectGetMaxX(cellRect) > CGRectGetMaxX(aRect)) ) - { - // passed the bottom-right edge of the given rect - break; - } - } - } - - return ( result ); -} - -@end - -@implementation AQGridViewData (AQGridViewDataPrivate) - -- (void) fixDesiredCellSizeForWidth: (CGFloat) width -{ - // Much thanks to Brandon Sneed (@bsneed) for the following new algorithm, reduced to two floating-point divisions -- that's O(1) folks! - CGFloat w = floorf(width - _leftPadding - _rightPadding); - CGFloat dw = floorf(_desiredCellSize.width); - CGFloat multiplier = floorf( w / dw ); - - _actualCellSize.width = floorf( w / multiplier ); - _actualCellSize.height = _desiredCellSize.height; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.h deleted file mode 100755 index c29e0ad..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * AQGridViewUpdateInfo.h - * AQGridView - * - * Created by Jim Dovey on 3/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <Foundation/Foundation.h> -#import "AQGridViewUpdateItem.h" -#import "AQGridView.h" - -// used internally by AQGridView and AQGridViewUpdateInfo -@interface AQGridView () -@property (nonatomic, copy) NSSet * animatingCells; -@end - -@interface AQGridViewUpdateInfo : NSObject -{ - // NB: These are never cleared, only sorted & modified. - // It is assumed that a deferred update info object will be created in -beginUpdates - // and released in -endUpdates, and will not need to last across multiple suspended update sequences - NSMutableArray * _insertItems; - NSMutableArray * _deleteItems; - NSMutableArray * _moveItems; - NSMutableArray * _reloadItems; - - // index sets, cached for handiness - NSMutableIndexSet * _insertedIndices; - NSMutableIndexSet * _deletedIndices; - NSMutableIndexSet * _oldMovedIndices; - NSMutableIndexSet * _newMovedIndices; - NSMutableIndexSet * _reloadedIndices; - - // old and new grid data -- for bounds calculations - AQGridViewData * _oldGridData; - AQGridViewData * _newGridData; - - // mapping tables, used to map from old indices to new ones - NSUInteger * _oldToNewIndexMap; - NSUInteger * _newToOldIndexMap; - - // indices of all items which were simply shuffled around as a result of other operations - NSMutableIndexSet * _onlyMovedIndices; - - // needs to ask the grid view for cells - AQGridView * __unsafe_unretained _gridView; // weak reference - - NSMutableSet * _animatingCells; -} - -- (id) initWithOldGridData: (AQGridViewData *) oldGridData forGridView: (AQGridView *) gridView; - -- (void) updateItemsAtIndices: (NSIndexSet *) indices - updateAction: (AQGridViewUpdateAction) action - withAnimation: (AQGridViewItemAnimation) animation; -- (void) moveItemAtIndex: (NSUInteger) index - toIndex: (NSUInteger) index - withAnimation: (AQGridViewItemAnimation) animation; - -@property (nonatomic, readonly) NSUInteger numberOfUpdates; - -// This function assumed a certain ordering in which items will be inserted/deleted etc. -// Specifically, it will assume deletions happen FIRST, then insertions SECOND, and reloads LAST. -// The indices provided are all assumed to refer to the content index set as it existed prior -// to ANY inserts/deletes occurring. -// Needless to say: this is therefore quite private, since AQGridView must conform to and rely -// on this behaviour -- (void) cleanupUpdateItems; - -// the returned values are not guaranteed to be correct prior to invocation of -cleanupUpdateItems above -- (NSArray *) sortedInsertItems; -- (NSArray *) sortedDeleteItems; -- (NSArray *) sortedMoveItems; -- (NSArray *) sortedReloadItems; - -- (AQGridViewData *) newGridViewData; -- (NSUInteger) numberOfItemsAfterUpdates; - -- (NSUInteger) newIndexForOldIndex: (NSUInteger) oldIndex; - -// returns a list of all the views being animated -- (NSSet *) animateCellUpdatesUsingVisibleContentRect: (CGRect) contentRect; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.m deleted file mode 100755 index 9bf5148..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateInfo.m +++ /dev/null @@ -1,915 +0,0 @@ -/* - * AQGridViewUpdateInfo.m - * AQGridView - * - * Created by Jim Dovey on 3/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewUpdateInfo.h" -#import "AQGridViewData.h" -#import "AQGridView+CellLayout.h" -#import "AQGridView+CellLocationDelegation.h" -#import "AQGridViewCell+AQGridViewCellPrivate.h" -#import "AQGridViewAnimatorItem.h" -#import <UIKit/UIView.h> -#import <QuartzCore/CALayer.h> - -@implementation AQGridViewUpdateInfo - -- (id) initWithOldGridData: (AQGridViewData *) oldGridData forGridView: (AQGridView *) gridView -{ - self = [super init]; - if ( self == nil ) - return ( nil ); - - _insertItems = [[NSMutableArray alloc] init]; - _deleteItems = [[NSMutableArray alloc] init]; - _moveItems = [[NSMutableArray alloc] init]; - _reloadItems = [[NSMutableArray alloc] init]; - - _oldGridData = [oldGridData copy]; - _newGridData = [oldGridData copy]; - - _gridView = gridView; - - return ( self ); -} - -- (void) dealloc -{ - if ( _oldToNewIndexMap != NULL ) - free( _oldToNewIndexMap ); - if ( _newToOldIndexMap != NULL ) - free( _newToOldIndexMap ); -} - -- (NSMutableArray *) updateItemArrayForAction: (AQGridViewUpdateAction) action -{ - switch ( action ) - { - case AQGridViewUpdateActionInsert: - return ( _insertItems ); - - case AQGridViewUpdateActionDelete: - return ( _deleteItems ); - - case AQGridViewUpdateActionMove: - return ( _moveItems ); - - case AQGridViewUpdateActionReload: - return ( _reloadItems ); - - default: - break; - } - - return ( nil ); -} - -- (void) updateItemsAtIndices: (NSIndexSet *) indices - updateAction: (AQGridViewUpdateAction) action - withAnimation: (AQGridViewItemAnimation) animation -{ - NSMutableArray * array = [self updateItemArrayForAction: action]; - NSUInteger i = [indices firstIndex]; - while ( i != NSNotFound ) - { - AQGridViewUpdateItem * item = [[AQGridViewUpdateItem alloc] initWithIndex: i - action: action - animation: animation]; - [array addObject: item]; - - i = [indices indexGreaterThanIndex: i]; - } -} - -- (void) moveItemAtIndex: (NSUInteger) index - toIndex: (NSUInteger) newIndex - withAnimation: (AQGridViewItemAnimation) animation -{ - NSMutableArray * array = [self updateItemArrayForAction: AQGridViewUpdateActionMove]; - AQGridViewUpdateItem * item = [[AQGridViewUpdateItem alloc] initWithIndex: index - action: AQGridViewUpdateActionMove - animation: animation]; - item.newIndex = newIndex; - [array addObject: item]; -} - -- (NSUInteger) numberOfUpdates -{ - return ( [_insertItems count] + [_deleteItems count] + [_moveItems count] + [_reloadItems count] ); -} - -- (void) updateNewGridDataAndCreateMappingTables -{ -#define GUARD_ITEMS 1 -#if GUARD_ITEMS -# define TEST_GUARD(array,count) \ - for ( int j = 0; j < 8; j++ ) \ - { \ - NSAssert((array)[(count)+j] == 0x55555555, @"Overwrote the guard area!" ); \ - } \ - do {} while (0) -#else -# define TEST_GUARD(array,count) -#endif - - NSUInteger numberOfItems = _oldGridData.numberOfItems; - numberOfItems += [_insertItems count]; - numberOfItems -= [_deleteItems count]; - - _newGridData.numberOfItems = numberOfItems; - - NSArray * sortedInserts = [_insertItems sortedArrayUsingSelector: @selector(compare:)]; - NSArray * sortedDeletes = [_deleteItems sortedArrayUsingSelector: @selector(compare:)]; - - NSMutableIndexSet * oldToNewIndices = [[NSMutableIndexSet alloc] initWithIndexesInRange: NSMakeRange(0, _oldGridData.numberOfItems)]; - NSMutableIndexSet * newToOldIndices = [[NSMutableIndexSet alloc] initWithIndexesInRange: NSMakeRange(0, _newGridData.numberOfItems)]; - - // Shift indices based on insertions/deletions - for ( AQGridViewUpdateItem * item in sortedInserts ) - { - [oldToNewIndices shiftIndexesStartingAtIndex: item.originalIndex by: 1]; - [newToOldIndices shiftIndexesStartingAtIndex: item.originalIndex by: -1]; - } - - for ( AQGridViewUpdateItem * item in sortedDeletes ) - { - [newToOldIndices shiftIndexesStartingAtIndex: item.originalIndex by: 1]; - } - - NSUInteger stamp = NSNotFound; - - if ( _oldGridData.numberOfItems > 0 ) - { -#if GUARD_ITEMS - NSUInteger count = _oldGridData.numberOfItems + 8; -#else - NSUInteger count = _oldGridData.numberOfItems; -#endif - _oldToNewIndexMap = malloc( count * sizeof(NSUInteger) ); -#if GUARD_ITEMS - memset(_oldToNewIndexMap, 0x55, count * sizeof(NSUInteger)); -#endif - memset_pattern4( _oldToNewIndexMap, &stamp, _oldGridData.numberOfItems * sizeof(NSUInteger) ); -#if GUARD_ITEMS - NSAssert(_oldToNewIndexMap[_oldGridData.numberOfItems] == 0x55555555, @"Eeek! Scribbling on guards didn't work!"); -#endif - } - else - { - _oldToNewIndexMap = NULL; // won't be used, no old indices - } - - if ( _newGridData.numberOfItems > 0 ) - { -#if GUARD_ITEMS - NSUInteger count = _newGridData.numberOfItems + 8; -#else - NSUInteger count = _newGridData.numberOfItems; -#endif - _newToOldIndexMap = malloc( count * sizeof(NSUInteger) ); -#if GUARD_ITEMS - memset(_newToOldIndexMap, 0x55, count * sizeof(NSUInteger)); -#endif - memset_pattern4( _newToOldIndexMap, &stamp, _newGridData.numberOfItems * sizeof(NSUInteger) ); -#if GUARD_ITEMS - NSAssert(_newToOldIndexMap[_newGridData.numberOfItems] == 0x55555555, @"Eeek! Scribbling on guards didn't work!"); -#endif - } - else - { - _newToOldIndexMap = NULL; - } - - // create map contents from our indices - if ( _oldToNewIndexMap != NULL ) - { - // set mappings - NSUInteger idx = [oldToNewIndices firstIndex]; - for ( NSUInteger i = 0; i < _oldGridData.numberOfItems && idx != NSNotFound; i++ ) - { - if ( [newToOldIndices containsIndex: i] == NO ) - { - _oldToNewIndexMap[i] = NSNotFound; - TEST_GUARD(_oldToNewIndexMap, _oldGridData.numberOfItems); - continue; - } - - _oldToNewIndexMap[i] = idx; - idx = [oldToNewIndices indexGreaterThanIndex: idx]; - } - - for ( AQGridViewUpdateItem * item in _moveItems ) - { - _oldToNewIndexMap[item.index] = item.newIndex; - TEST_GUARD(_oldToNewIndexMap, _oldGridData.numberOfItems); - - if ( _moveItems.count == 1 ) - { - if ( item.index < item.newIndex ) - { - // moving forwards-- shuffle middle items down one place - for ( NSInteger i = item.index+1; i <= item.newIndex && i < _oldGridData.numberOfItems; i++ ) - { - if ( _oldToNewIndexMap[i] != NSNotFound ) - { - if ( i < _oldGridData.numberOfItems-1 ) - { - _oldToNewIndexMap[i] = _oldToNewIndexMap[i]-1; - TEST_GUARD(_oldToNewIndexMap, _oldGridData.numberOfItems); - } - } - else - { - break; // stop when we reach a gap - } - } - } - else if ( item.index > item.newIndex ) - { - // moving backwards-- shuffle middle items up one place - for ( NSInteger i = MIN(item.index-1, (_oldGridData.numberOfItems-1)); i >= item.newIndex; i-- ) - { - if ( _oldToNewIndexMap[i] != NSNotFound ) - { - if ( i >= 0 ) - { - _oldToNewIndexMap[i] = _oldToNewIndexMap[i]+1; - TEST_GUARD(_oldToNewIndexMap, _oldGridData.numberOfItems); - } - } - else - { - break; // stop when we reach a gap - } - } - } - } - } - } - - if ( _newToOldIndexMap != NULL ) - { - NSUInteger idx = [newToOldIndices firstIndex]; - for ( NSUInteger i = 0; i < _newGridData.numberOfItems && idx != NSNotFound; i++ ) - { - if ( [oldToNewIndices containsIndex: i] == NO ) - { - _newToOldIndexMap[i] = NSNotFound; - TEST_GUARD(_newToOldIndexMap, _newGridData.numberOfItems); - continue; - } - - _newToOldIndexMap[i] = idx; - idx = [newToOldIndices indexGreaterThanIndex: idx]; - } - - for ( AQGridViewUpdateItem * item in _moveItems ) - { - _newToOldIndexMap[item.newIndex] = item.index; - TEST_GUARD(_newToOldIndexMap, _newGridData.numberOfItems); - - if ( _moveItems.count == 1 ) - { - if ( item.index < item.newIndex ) - { - // moving forwards-- shuffle middle items down one place - for ( NSInteger i = item.index; i <= item.newIndex && i < _newGridData.numberOfItems; i++ ) - { - if ( _newToOldIndexMap[i] != NSNotFound ) - { - if ( i < _newGridData.numberOfItems-1 ) - { - _newToOldIndexMap[i] = _newToOldIndexMap[i]+1; - TEST_GUARD(_newToOldIndexMap, _newGridData.numberOfItems); - } - } - else - { - break; // stop when we reach a gap - } - } - } - else - { - // moving backwards-- shuffle middle items up one place - for ( NSInteger i = MIN(item.newIndex, (_newGridData.numberOfItems-1)); (i < item.index && i < _newGridData.numberOfItems); i++ ) - { - if ( _newToOldIndexMap[i] != NSNotFound ) - { - if ( i >= 0 ) - { - _newToOldIndexMap[i] = _newToOldIndexMap[i]-1; - TEST_GUARD(_newToOldIndexMap, _newGridData.numberOfItems); - } - } - else - { - break; // stop when we reach a gap - } - } - } - } - } - } - -} - -- (void) cleanupUpdateItems -{ - // sort the lists in ascending order - [_insertItems sortUsingSelector: @selector(inverseCompare:)]; - [_deleteItems sortUsingSelector: @selector(inverseCompare:)]; - [_moveItems sortUsingSelector: @selector(inverseCompare:)]; - [_reloadItems sortUsingSelector: @selector(inverseCompare:)]; - - // _deleteItems will be processed first, in reverse order, so we don't need to modify that particular array - // we do however need to modify the others based on the contents of the delete list - - // step one: get a list of all indices to be deleted - _insertedIndices = [[NSMutableIndexSet alloc] init]; - _reloadedIndices = [[NSMutableIndexSet alloc] init]; - _deletedIndices = [[NSMutableIndexSet alloc] init]; - _oldMovedIndices = [[NSMutableIndexSet alloc] init]; - _newMovedIndices = [[NSMutableIndexSet alloc] init]; - - for ( AQGridViewUpdateItem * item in _deleteItems ) - { - [_deletedIndices addIndex: item.index]; - } - - for ( AQGridViewUpdateItem * item in _moveItems ) - { - [_oldMovedIndices addIndex: item.index]; - [_newMovedIndices addIndex: item.newIndex]; - } - - // create a range to query the delete indices - - // now update insertItems by appropriate offsets - NSRange range = NSMakeRange(0, 0); - for ( AQGridViewUpdateItem * item in _insertItems ) - { - [_insertedIndices addIndex: item.index]; - - range.length = item.index; - // decrement index by number of deleted items prior to this insertion - NSUInteger numIndices = [_deletedIndices countOfIndexesInRange: range]; - if ( numIndices != 0 ) - { - // set the item's index offset - item.offset = -((NSInteger)numIndices); - } - } - - // now update reloadItems by delete offsets - for ( AQGridViewUpdateItem * item in _reloadItems ) - { - [_reloadedIndices addIndex: item.index]; - - range.length = item.index; - NSUInteger numIndices = [_deletedIndices countOfIndexesInRange: range]; - if ( numIndices != 0 ) - { - item.offset = -((NSInteger)numIndices); - } - } - - // now update reloadItems by insert offsets - for ( AQGridViewUpdateItem * item in _reloadItems ) - { - range.length = item.index; // modified index - NSUInteger numIndices = [_insertedIndices countOfIndexesInRange: range]; - if ( numIndices == 0 ) - break; // none left - - item.offset = item.offset + numIndices; - - [_reloadedIndices addIndex: item.index]; - } - - // all indices are now consistent for the assumed implementation order of delete, insert, reload - // update the new grid data to match the insertions/deletions now - [self updateNewGridDataAndCreateMappingTables]; -} - -- (NSUInteger) newIndexForOldIndex: (NSUInteger) oldIndex -{ - if ( _oldToNewIndexMap == NULL ) - return ( oldIndex ); - - return ( _oldToNewIndexMap[oldIndex] ); -} - -- (NSArray *) sortedInsertItems -{ - return ( [_insertItems copy] ); -} - -- (NSArray *) sortedDeleteItems -{ - return ( [_deleteItems copy] ); -} - -- (NSArray *) sortedMoveItems -{ - return ( [_moveItems copy] ); -} - -- (NSArray *) sortedReloadItems -{ - return ( [_reloadItems copy] ); -} - -- (AQGridViewData *) newGridViewData -{ - return ( _newGridData ); -} - -- (NSUInteger) numberOfItemsAfterUpdates -{ - return ( _newGridData.numberOfItems + [_insertItems count] - [_deleteItems count] ); -} - -- (UIImageView *) _imageViewForView: (UIView *) view -{ - UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [[UIScreen mainScreen] scale]); - [view.layer renderInContext: UIGraphicsGetCurrentContext()]; - - UIImageView * result = [[UIImageView alloc] initWithImage: UIGraphicsGetImageFromCurrentImageContext()]; - - UIGraphicsEndImageContext(); - - return ( result ); -} - -- (UIImageView *) animateDeletionForCell: (AQGridViewCell *) cell withAnimation: (AQGridViewItemAnimation) animation -{ - if ( animation == AQGridViewItemAnimationNone ) - { - [cell removeFromSuperview]; - return ( nil ); - } - - [UIView setAnimationsEnabled: NO]; - - UIImageView * imageView = [self _imageViewForView: cell]; - imageView.frame = cell.frame; - CGSize cellSize = cell.frame.size; - [_animatingCells addObject: imageView]; - - // swap 'em around - // image view goes underneath all real cells - if ( _gridView.backgroundView != nil ) - [_gridView insertSubview: imageView aboveSubview: _gridView.backgroundView]; - else - [_gridView insertSubview: imageView atIndex: 0]; - [cell removeFromSuperview]; - - [UIView setAnimationsEnabled: YES]; - - // fade is implicit - imageView.alpha = 0.0; - - // this is what we'll animate - switch ( animation ) - { - case AQGridViewItemAnimationFade: - // nothing else left for the fade animation - break; - - case AQGridViewItemAnimationRight: - { - CGPoint center = imageView.center; - center.x += cellSize.width; - imageView.center = center; - break; - } - - case AQGridViewItemAnimationLeft: - { - CGPoint center = imageView.center; - center.x -= cellSize.width; - imageView.center = center; - break; - } - - case AQGridViewItemAnimationTop: - { - CGPoint center = imageView.center; - center.y -= cellSize.height; - imageView.center = center; - break; - } - - case AQGridViewItemAnimationBottom: - { - CGPoint center = imageView.center; - center.y += cellSize.height; - imageView.center = center; - break; - } - - default: - break; - } - - return ( imageView ); -} - -- (void) animateInsertionForCell: (AQGridViewCell *) cell withAnimation: (AQGridViewItemAnimation) animation -{ - [UIView setAnimationsEnabled: NO]; - [_gridView addSubview: cell]; - [UIView setAnimationsEnabled: YES]; - - if ( animation == AQGridViewItemAnimationNone ) - return; - - // this is what we'll animate - NSMutableDictionary * itemsToSetBeforeAnimation = [[NSMutableDictionary alloc] init]; - NSMutableDictionary * itemsToAnimate = [[NSMutableDictionary alloc] init]; - - CGSize cellSize = cell.frame.size; - - [itemsToSetBeforeAnimation setObject: [NSNumber numberWithFloat: 0.0] forKey: @"alpha"]; - [itemsToAnimate setObject: [NSNumber numberWithFloat: 1.0] forKey: @"alpha"]; - - switch ( animation ) - { - case AQGridViewItemAnimationFade: - { - // nothing left to do-- fade is implicit - break; - } - - case AQGridViewItemAnimationRight: - { - CGPoint center = cell.center; - [itemsToAnimate setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - center.x += cellSize.width; - [itemsToSetBeforeAnimation setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - break; - } - - case AQGridViewItemAnimationLeft: - { - CGPoint center = cell.center; - [itemsToAnimate setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - center.x -= cellSize.width; - [itemsToSetBeforeAnimation setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - break; - } - - case AQGridViewItemAnimationTop: - { - CGPoint center = cell.center; - [itemsToAnimate setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - center.y -= cellSize.height; - [itemsToSetBeforeAnimation setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - break; - } - - case AQGridViewItemAnimationBottom: - { - CGPoint center = cell.center; - [itemsToAnimate setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - center.y += cellSize.height; - [itemsToSetBeforeAnimation setObject: [NSValue valueWithCGPoint: center] forKey: @"center"]; - break; - } - - default: - break; - } - - [UIView setAnimationsEnabled: NO]; - for ( NSString * keyPath in itemsToSetBeforeAnimation ) - { - [cell setValue: [itemsToSetBeforeAnimation objectForKey: keyPath] forKey: keyPath]; - } - [UIView setAnimationsEnabled: YES]; - - for ( NSString * keyPath in itemsToAnimate ) - { - [cell setValue: [itemsToAnimate objectForKey: keyPath] forKey: keyPath]; - } - -} - -- (void) animateReloadForCell: (AQGridViewCell *) newCell originalCell: (AQGridViewCell *) originalCell withAnimation: (AQGridViewItemAnimation) animation -{ - if ( animation == AQGridViewItemAnimationNone ) - { - // just remove the original cell - [originalCell removeFromSuperview]; - return; - } - - [UIView setAnimationsEnabled: NO]; - - // get an image of the original cell to animate out - UIImageView * imageView = [self _imageViewForView: originalCell]; - imageView.frame = originalCell.frame; - CGSize cellSize = originalCell.frame.size; - [_animatingCells addObject: imageView]; - - // swap 'em aroundAQGrid - // image view goes underneath all real cells - if ( _gridView.backgroundView != nil ) - [_gridView insertSubview: imageView aboveSubview: _gridView.backgroundView]; - else - [_gridView insertSubview: imageView atIndex: 0]; - [originalCell removeFromSuperview]; - - CGRect cellStartFrame = imageView.frame; - CGRect cellEndFrame = imageView.frame; - CGRect imageEndFrame = imageView.frame; - - newCell.alpha = 0.0; - - switch ( animation ) - { - case AQGridViewItemAnimationFade: - default: - break; // fade always happens - - case AQGridViewItemAnimationTop: - imageEndFrame.origin.y += cellSize.height; - cellStartFrame.origin.y -= cellSize.height; - break; - - case AQGridViewItemAnimationBottom: - imageEndFrame.origin.y -= cellSize.height; - cellStartFrame.origin.y += cellSize.height; - break; - - case AQGridViewItemAnimationLeft: - imageEndFrame.origin.x += cellSize.width; - cellStartFrame.origin.x -= cellSize.width; - break; - - case AQGridViewItemAnimationRight: - imageEndFrame.origin.x -= cellSize.width; - cellStartFrame.origin.x += cellSize.width; - break; - } - - // set starting frames outside the animation - newCell.frame = cellStartFrame; - - // re-enable animations - [UIView setAnimationsEnabled: YES]; - - // animate fade - imageView.alpha = 0.0; - newCell.alpha = 1.0; - - // animate end location - imageView.frame = imageEndFrame; - newCell.frame = cellEndFrame; -} - -- (NSSet *) animateCellUpdatesUsingVisibleContentRect: (CGRect) contentRect -{ - // we might need to change the new visible indices and content rect, if we're looking at the last row and it's going to disappear - CGSize gridSize = [_newGridData sizeForEntireGrid]; - CGFloat maxX = CGRectGetMaxX(contentRect); - CGFloat maxY = CGRectGetMaxY(contentRect); - BOOL isVertical = (_newGridData.layoutDirection == AQGridViewLayoutDirectionVertical); - - // indices of items visible from old grid - NSIndexSet * oldVisibleIndices = [_oldGridData indicesOfCellsInRect: contentRect]; - - // The line below is commented because it produces too many logs - // NSLog( @"Updating from original content rect %@", NSStringFromCGRect(contentRect) ); - - if ( (isVertical) && (maxY > gridSize.height) ) - { - CGFloat diff = maxY - gridSize.height; - - // grow its height so both incoming and outgoing items get animated - contentRect.origin.y = MAX(0.0, contentRect.origin.y - diff); - contentRect.size.height += diff; - - // this will set the bounds for us, and it'll animate thanks to our animation block - _gridView.contentSize = CGSizeMake(contentRect.size.width, gridSize.height); - } - else if ( (!isVertical) && (maxX > gridSize.width) ) - { - CGFloat diff = maxX - gridSize.width; - - // grow its width so both incoming and outgoing items get animated - contentRect.origin.x = MAX(0.0, contentRect.origin.x - diff); - contentRect.size.width += diff; - - // this will set the bounds for us, and it'll animate thanks to our animation block - _gridView.contentSize = CGSizeMake(gridSize.width, contentRect.size.height); - } - else - { - [_gridView updateGridViewBoundsForNewGridData: _newGridData]; - } - - // The line below is fixed because it produces too many logs - //NSLog( @"Updated content rect: %@", NSStringFromCGRect(contentRect) ); - NSIndexSet * newVisibleIndices = [_newGridData indicesOfCellsInRect: contentRect]; - - NSMutableSet * newVisibleCells = [[NSMutableSet alloc] initWithSet: _gridView.animatingCells]; - - // make a lookup table for all currently-animating cells, indexed by their new location's index - // we use CF because our keys are integers - CFMutableDictionaryRef animatingCellTable = CFDictionaryCreateMutable( kCFAllocatorDefault, (CFIndex)_gridView.animatingCells.count, NULL, &kCFTypeDictionaryValueCallBacks ); - for ( AQGridViewAnimatorItem * item in newVisibleCells ) - { - // only store real cells here - if ( [item.animatingView isKindOfClass: [AQGridViewCell class]] ) - CFDictionaryAddValue( animatingCellTable, (void *)item.index, objc_unretainedPointer(item) ); - } - - // a set of the indices (in old grid data) for all currently-known cells which are now or will become visible - NSMutableIndexSet * oldIndicesOfAllVisibleCells = [oldVisibleIndices mutableCopy]; - for ( NSUInteger idx = [newVisibleIndices firstIndex]; idx != NSNotFound; idx = [newVisibleIndices indexGreaterThanIndex: idx] ) - { - NSUInteger oldIndex = _newToOldIndexMap[idx]; - if ( oldIndex != NSNotFound ) - [oldIndicesOfAllVisibleCells addIndex: oldIndex]; - } - - NSMutableIndexSet * movingSet = [[NSMutableIndexSet alloc] initWithIndexSet: oldVisibleIndices]; - [movingSet addIndexes: oldIndicesOfAllVisibleCells]; - - // most items were just moved from one location to another - for ( NSUInteger oldIndex = [movingSet firstIndex]; oldIndex != NSNotFound; oldIndex = [movingSet indexGreaterThanIndex: oldIndex] ) - { - NSUInteger newIndex = _oldToNewIndexMap[oldIndex]; - AQGridViewAnimatorItem * animatingItem = (AQGridViewAnimatorItem *)objc_unretainedObject(CFDictionaryGetValue( animatingCellTable, (void *)oldIndex )); - - AQGridViewCell * cell = (AQGridViewCell *)animatingItem.animatingView; - if ( cell == nil ) - cell = [_gridView cellForItemAtIndex: oldIndex]; - - // don't do this -- we could be revealing things which weren't previously on screen - /* - if ( newIndex == oldIndex ) - { - if ( cell != nil ) - [newVisibleCells addObject: [AQGridViewAnimatorItem itemWithView: cell index: newIndex]]; - continue; - } - */ - if ( newIndex == NSNotFound ) - { - continue; - } - - if ( cell == nil ) - { - // create a new cell - cell = [_gridView createPreparedCellForIndex: newIndex]; - // in its old location - [UIView setAnimationsEnabled: NO]; - cell.frame = [_gridView fixCellFrame: cell.frame forGridRect: [_oldGridData cellRectAtIndex: oldIndex]]; - [UIView setAnimationsEnabled: YES]; - } - else - { - cell.displayIndex = newIndex; - } - - // keep the cell in our internal list - if ( animatingItem != nil ) - animatingItem.index = newIndex; // just update the index on the existing item - else - [newVisibleCells addObject: [AQGridViewAnimatorItem itemWithView: cell index: newIndex]]; - - // animate it into its new location - CGRect frame = [_gridView fixCellFrame: cell.frame forGridRect: [_newGridData cellRectAtIndex: newIndex]]; - //if ( CGRectEqualToRect(frame, cell.frame) == NO ) - // NSLog( @"Moving frame from %@ to %@", NSStringFromCGRect(cell.frame), NSStringFromCGRect(frame) ); - cell.frame = frame; - - // tell the grid view's delegate about it - [_gridView delegateWillDisplayCell: cell atIndex: newIndex]; - } - - - // delete old items first - if ( _deleteItems.count != 0 ) - { - // animate deletion of currently-visible items - for ( AQGridViewUpdateItem * item in _deleteItems ) - { - if ( [oldVisibleIndices containsIndex: item.originalIndex] ) - { - AQGridViewAnimatorItem * animatingItem = (AQGridViewAnimatorItem *)objc_unretainedObject(CFDictionaryGetValue( animatingCellTable, (void *)item.originalIndex )); - - AQGridViewCell * deletingCell = (AQGridViewCell *)animatingItem.animatingView; - if ( deletingCell == nil ) - deletingCell = [_gridView cellForItemAtIndex: item.originalIndex]; - - UIImageView * imageView = [self animateDeletionForCell: deletingCell withAnimation: item.animation]; - if ( imageView != nil ) - { - if ( animatingItem != nil ) - { - animatingItem.animatingView = imageView; - animatingItem.index = NSNotFound; - CFDictionaryRemoveValue( animatingCellTable, (void *)item.originalIndex ); - } - else - { - [newVisibleCells addObject: [AQGridViewAnimatorItem itemWithView: imageView index: NSNotFound]]; - } - } - } - } - } - - // now insert new items -- no need to take already-animating cells into account here - for ( AQGridViewUpdateItem * item in _insertItems ) - { - if ( [newVisibleIndices containsIndex: item.index] ) - { - AQGridViewCell * cell = [_gridView createPreparedCellForIndex: item.index usingGridData: _newGridData]; - if ( cell != nil ) - { - [self animateInsertionForCell: cell withAnimation: item.animation]; - [_gridView delegateWillDisplayCell: cell atIndex: item.index]; - [newVisibleCells addObject: [AQGridViewAnimatorItem itemWithView: cell index: item.index]]; - } - } - } - - // now reload items - for ( AQGridViewUpdateItem * item in _reloadItems ) - { - if ( [newVisibleIndices containsIndex: item.index] == NO ) - continue; - - AQGridViewAnimatorItem * animatingItem = (AQGridViewAnimatorItem *)objc_unretainedObject(CFDictionaryGetValue( animatingCellTable, (void *)item.originalIndex )); - - AQGridViewCell * origCell = (AQGridViewCell *)animatingItem.animatingView; - if ( origCell == nil ) - origCell = [_gridView cellForItemAtIndex: item.originalIndex]; - - // create a new cell with the latest data - AQGridViewCell * newCell = [_gridView createPreparedCellForIndex: item.index]; - [_gridView delegateWillDisplayCell: newCell atIndex: item.index]; - [self animateReloadForCell: newCell originalCell: origCell withAnimation: item.animation]; - - if ( animatingItem != nil ) - { - animatingItem.animatingView = newCell; - animatingItem.index = item.originalIndex; - } - else - { - AQGridViewAnimatorItem * tmp = [AQGridViewAnimatorItem itemWithView: newCell index: item.index]; - - // newVisibleCells is a set, meaning that it will probably not actually insert the new item - // if there is something matching this index, let's just update that value - animatingItem = [newVisibleCells member: tmp]; - if ( animatingItem == nil ) - [newVisibleCells addObject: tmp]; - else - animatingItem.animatingView = newCell; - } - } - - CFRelease( animatingCellTable ); - - return ( newVisibleCells ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.h b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.h deleted file mode 100755 index d9a249a..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * AQGridViewUpdateItem.h - * AQGridView - * - * Created by Jim Dovey on 1/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <Foundation/Foundation.h> -#import "AQGridView.h" - -typedef enum { - AQGridViewUpdateActionInsert, - AQGridViewUpdateActionDelete, - AQGridViewUpdateActionMove, - AQGridViewUpdateActionReload -} AQGridViewUpdateAction; - -@interface AQGridViewUpdateItem : NSObject -{ - NSUInteger _index; - NSUInteger _newIndex; - AQGridViewUpdateAction _action; - AQGridViewItemAnimation _animation; - NSInteger _offset; -} - -- (id) initWithIndex: (NSUInteger) index action: (AQGridViewUpdateAction) action animation: (AQGridViewItemAnimation) animation; - -- (NSComparisonResult) compare: (AQGridViewUpdateItem *) other; -- (NSComparisonResult) inverseCompare: (AQGridViewUpdateItem *) other; - -@property (nonatomic, readonly) NSUInteger index; -@property (nonatomic) NSUInteger newIndex; // only valid for AQGridViewUpdateActionMove -@property (nonatomic, readonly) AQGridViewUpdateAction action; -@property (nonatomic, readonly) AQGridViewItemAnimation animation; - -// this is an offset to apply to the index, due to other changes in the list which occurred since this index was chosen -@property (nonatomic) NSInteger offset; -@property (nonatomic, readonly) NSUInteger originalIndex; // returns index without offset - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.m b/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.m deleted file mode 100755 index edbdc50..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/AQ/AQGridViewUpdateItem.m +++ /dev/null @@ -1,137 +0,0 @@ -/* - * AQGridViewUpdateItem.m - * AQGridView - * - * Created by Jim Dovey on 1/3/2010. - * Copyright (c) 2010 Kobo Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "AQGridViewUpdateItem.h" - -@implementation AQGridViewUpdateItem - -@synthesize originalIndex=_index, newIndex=_newIndex, action=_action, animation=_animation, offset=_offset; - -- (id) initWithIndex: (NSUInteger) index action: (AQGridViewUpdateAction) action animation: (AQGridViewItemAnimation) animation -{ - self = [super init]; - if ( self == nil ) - return ( nil ); - - _index = index; - _action = action; - _animation = animation; - - return ( self ); -} - -- (void) setNewIndex: (NSUInteger) value -{ - NSAssert(self.action == AQGridViewUpdateActionMove, @"newIndex set on a non-move update item"); - _newIndex = value; -} - -- (NSString *) description -{ - NSString * actionDesc = @"<Unknown>"; - switch ( _action ) - { - case AQGridViewUpdateActionInsert: - actionDesc = @"Insert"; - break; - case AQGridViewUpdateActionDelete: - actionDesc = @"Delete"; - break; - case AQGridViewUpdateActionMove: - actionDesc = @"Move"; - break; - case AQGridViewUpdateActionReload: - actionDesc = @"Reload"; - break; - default: - break; - } - - NSString * animationDesc = @"<Unknown>"; - switch ( (UITableViewRowAnimation)_animation ) - { - case UITableViewRowAnimationFade: - animationDesc = @"Fade"; - break; - case UITableViewRowAnimationRight: - animationDesc = @"Right"; - break; - case UITableViewRowAnimationLeft: - animationDesc = @"Left"; - break; - case UITableViewRowAnimationTop: - animationDesc = @"Top"; - break; - case UITableViewRowAnimationBottom: - animationDesc = @"Bottom"; - break; - case UITableViewRowAnimationNone: - animationDesc = @"None"; - break; - case UITableViewRowAnimationMiddle: - animationDesc = @"Middle"; - break; - default: - break; - } - - return ( [NSString stringWithFormat: @"%@{index=%u, action=%@, animation=%@, offset=%.02f}", [super description], (unsigned)_index, actionDesc, animationDesc, (double)_offset] ); -} - -- (NSComparisonResult) compare: (AQGridViewUpdateItem *) other -{ - if ( _index > other->_index ) - return ( NSOrderedDescending ); - else if ( _index < other->_index ) - return ( NSOrderedAscending ); - return ( NSOrderedSame ); -} - -- (NSComparisonResult) inverseCompare: (AQGridViewUpdateItem *) other -{ - return ( [other compare: self] ); -} - -- (NSUInteger) index -{ - // handle case where offset is negative and would cause index to wrap - if ( (_offset < 0) && (abs(_offset) > _index) ) - return ( 0 ); - - return ( _index + _offset ); -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.h deleted file mode 100755 index 6fd2c8c..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MWCaptionView.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 30/12/2011. -// Copyright (c) 2011 __MyCompanyName__. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "MWPhotoProtocol.h" - -@interface MWCaptionView : UIToolbar - -// Init -- (id)initWithPhoto:(id<MWPhoto>)photo; - -// To create your own custom caption view, subclass this view -// and override the following two methods (as well as any other -// UIView methods that you see fit): - -// Override -setupCaption so setup your subviews and customise the appearance -// of your custom caption -// You can access the photo's data by accessing the _photo ivar -// If you need more data per photo then simply subclass MWPhoto and return your -// subclass to the photo browsers -photoBrowser:photoAtIndex: delegate method -- (void)setupCaption; - -// Override -sizeThatFits: and return a CGSize specifying the height of your -// custom caption view. With width property is ignored and the caption is displayed -// the full width of the screen -- (CGSize)sizeThatFits:(CGSize)size; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.m deleted file mode 100755 index 27ba422..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCaptionView.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// MWCaptionView.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 30/12/2011. -// Copyright (c) 2011 __MyCompanyName__. All rights reserved. -// - -#import "MWCommon.h" -#import "MWCaptionView.h" -#import "MWPhoto.h" - -static const CGFloat labelPadding = 10; - -// Private -@interface MWCaptionView () { - id <MWPhoto> _photo; - UILabel *_label; -} -@end - -@implementation MWCaptionView - -- (id)initWithPhoto:(id<MWPhoto>)photo { - self = [super initWithFrame:CGRectMake(0, 0, 320, 44)]; // Random initial frame - if (self) { - self.userInteractionEnabled = NO; - _photo = photo; - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { - // Use iOS 7 blurry goodness - self.barStyle = UIBarStyleBlackTranslucent; - self.tintColor = nil; - self.barTintColor = nil; - self.barStyle = UIBarStyleBlackTranslucent; - [self setBackgroundImage:nil forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; - } else { - // Transparent black with no gloss - CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); - UIGraphicsBeginImageContext(rect.size); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetFillColorWithColor(context, [[UIColor colorWithWhite:0 alpha:0.6] CGColor]); - CGContextFillRect(context, rect); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - [self setBackgroundImage:image forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; - } - self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; - [self setupCaption]; - } - return self; -} - -- (CGSize)sizeThatFits:(CGSize)size { - CGFloat maxHeight = 9999; - if (_label.numberOfLines > 0) maxHeight = _label.font.leading*_label.numberOfLines; - CGSize textSize; - if ([NSString instancesRespondToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { - textSize = [_label.text boundingRectWithSize:CGSizeMake(size.width - labelPadding*2, maxHeight) - options:NSStringDrawingUsesLineFragmentOrigin - attributes:@{NSFontAttributeName:_label.font} - context:nil].size; - } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - textSize = [_label.text sizeWithFont:_label.font - constrainedToSize:CGSizeMake(size.width - labelPadding*2, maxHeight) - lineBreakMode:_label.lineBreakMode]; -#pragma clang diagnostic pop - } - return CGSizeMake(size.width, textSize.height + labelPadding * 2); -} - -- (void)setupCaption { - _label = [[UILabel alloc] initWithFrame:CGRectIntegral(CGRectMake(labelPadding, 0, - self.bounds.size.width-labelPadding*2, - self.bounds.size.height))]; - _label.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _label.opaque = NO; - _label.backgroundColor = [UIColor clearColor]; - if (SYSTEM_VERSION_LESS_THAN(@"6")) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - _label.textAlignment = UITextAlignmentCenter; - _label.lineBreakMode = UILineBreakModeWordWrap; -#pragma clang diagnostic pop - } else { - _label.textAlignment = NSTextAlignmentCenter; - _label.lineBreakMode = NSLineBreakByWordWrapping; - } - - _label.numberOfLines = 0; - _label.textColor = [UIColor whiteColor]; - if (SYSTEM_VERSION_LESS_THAN(@"7")) { - // Shadow on 6 and below - _label.shadowColor = [UIColor blackColor]; - _label.shadowOffset = CGSizeMake(1, 1); - } - _label.font = [UIFont systemFontOfSize:17]; - if ([_photo respondsToSelector:@selector(caption)]) { - _label.text = [_photo caption] ? [_photo caption] : @" "; - } - [self addSubview:_label]; -} - - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCommon.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCommon.h deleted file mode 100755 index b15d282..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWCommon.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MWPreprocessor.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 01/10/2013. -// - -#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) -#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) -#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) -#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) -#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.h deleted file mode 100755 index 59536ab..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MWGridCell.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 08/10/2013. -// -// - -#import <UIKit/UIKit.h> -#import "MWPhoto.h" -#import "MWGridViewController.h" -#import "PSTCollectionView.h" - -@interface MWGridCell : PSTCollectionViewCell {} - -@property (nonatomic, weak) MWGridViewController *gridController; -@property (nonatomic) NSUInteger index; -@property (nonatomic) id <MWPhoto> photo; -@property (nonatomic) BOOL selectionMode; -@property (nonatomic) BOOL isSelected; - -- (void)displayImage; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.m deleted file mode 100755 index ecc1d7c..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridCell.m +++ /dev/null @@ -1,223 +0,0 @@ -// -// MWGridCell.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 08/10/2013. -// -// - -#import "MWGridCell.h" -#import "MWCommon.h" -#import "MWPhotoBrowserPrivate.h" -#import "DACircularProgressView.h" - -@interface MWGridCell () { - - UIImageView *_imageView; - UIImageView *_loadingError; - DACircularProgressView *_loadingIndicator; - UIButton *_selectedButton; - -} - -@end - -@implementation MWGridCell - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - - // Grey background - self.backgroundColor = [UIColor colorWithWhite:0.12 alpha:1]; - - // Image - _imageView = [UIImageView new]; - _imageView.frame = self.bounds; - _imageView.contentMode = UIViewContentModeScaleAspectFill; - _imageView.clipsToBounds = YES; - _imageView.autoresizesSubviews = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - [self addSubview:_imageView]; - - // Selection button - _selectedButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _selectedButton.contentMode = UIViewContentModeTopRight; - _selectedButton.adjustsImageWhenHighlighted = NO; - [_selectedButton setImage:nil forState:UIControlStateNormal]; - [_selectedButton setImage:[UIImage imageNamed:@"MWPhotoBrowser.bundle/images/ImageSelectedSmallOff.png"] forState:UIControlStateNormal]; - [_selectedButton setImage:[UIImage imageNamed:@"MWPhotoBrowser.bundle/images/ImageSelectedSmallOn.png"] forState:UIControlStateSelected]; - [_selectedButton addTarget:self action:@selector(selectionButtonPressed) forControlEvents:UIControlEventTouchDown]; - _selectedButton.hidden = YES; - _selectedButton.frame = CGRectMake(0, 0, 44, 44); - [self addSubview:_selectedButton]; - - // Loading indicator - _loadingIndicator = [[DACircularProgressView alloc] initWithFrame:CGRectMake(0, 0, 40.0f, 40.0f)]; - _loadingIndicator.userInteractionEnabled = NO; - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { - _loadingIndicator.thicknessRatio = 0.1; - _loadingIndicator.roundedCorners = NO; - } else { - _loadingIndicator.thicknessRatio = 0.2; - _loadingIndicator.roundedCorners = YES; - } - [self addSubview:_loadingIndicator]; - - // Listen for photo loading notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(setProgressFromNotification:) - name:MWPHOTO_PROGRESS_NOTIFICATION - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleMWPhotoLoadingDidEndNotification:) - name:MWPHOTO_LOADING_DID_END_NOTIFICATION - object:nil]; - - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - View - -- (void)layoutSubviews { - [super layoutSubviews]; - _imageView.frame = self.bounds; - _loadingIndicator.frame = CGRectMake(floorf((self.bounds.size.width - _loadingIndicator.frame.size.width) / 2.), - floorf((self.bounds.size.height - _loadingIndicator.frame.size.height) / 2), - _loadingIndicator.frame.size.width, - _loadingIndicator.frame.size.height); - _selectedButton.frame = CGRectMake(self.bounds.size.width - _selectedButton.frame.size.width - 0, - 0, _selectedButton.frame.size.width, _selectedButton.frame.size.height); -} - -#pragma mark - Cell - -- (void)prepareForReuse { - _photo = nil; - _gridController = nil; - _imageView.image = nil; - _loadingIndicator.progress = 0; - _selectedButton.hidden = YES; - [self hideImageFailure]; - [super prepareForReuse]; -} - -#pragma mark - Image Handling - -- (void)setPhoto:(id <MWPhoto>)photo { - _photo = photo; - if (_photo) { - if (![_photo underlyingImage]) { - [self showLoadingIndicator]; - } else { - [self hideLoadingIndicator]; - } - } else { - [self showImageFailure]; - } -} - -- (void)displayImage { - _imageView.image = [_photo underlyingImage]; - _selectedButton.hidden = !_selectionMode; - [self hideImageFailure]; -} - -#pragma mark - Selection - -- (void)setSelectionMode:(BOOL)selectionMode { - _selectionMode = selectionMode; -} - -- (void)setIsSelected:(BOOL)isSelected { - _isSelected = isSelected; - _selectedButton.selected = isSelected; -} - -- (void)selectionButtonPressed { - _selectedButton.selected = !_selectedButton.selected; - [_gridController.browser setPhotoSelected:_selectedButton.selected atIndex:_index]; -} - -#pragma mark - Touches - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - _imageView.alpha = 0.6; - [super touchesBegan:touches withEvent:event]; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - _imageView.alpha = 1; - [super touchesEnded:touches withEvent:event]; -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - _imageView.alpha = 1; - [super touchesCancelled:touches withEvent:event]; -} - -#pragma mark Indicators - -- (void)hideLoadingIndicator { - _loadingIndicator.hidden = YES; -} - -- (void)showLoadingIndicator { - _loadingIndicator.progress = 0; - _loadingIndicator.hidden = NO; - [self hideImageFailure]; -} - -- (void)showImageFailure { - if (!_loadingError) { - _loadingError = [UIImageView new]; - _loadingError.image = [UIImage imageNamed:@"MWPhotoBrowser.bundle/images/ImageError.png"]; - _loadingError.userInteractionEnabled = NO; - [_loadingError sizeToFit]; - [self addSubview:_loadingError]; - } - [self hideLoadingIndicator]; - _imageView.image = nil; - _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.), - floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2), - _loadingError.frame.size.width, - _loadingError.frame.size.height); -} - -- (void)hideImageFailure { - if (_loadingError) { - [_loadingError removeFromSuperview]; - _loadingError = nil; - } -} - -#pragma mark - Notifications - -- (void)setProgressFromNotification:(NSNotification *)notification { - NSDictionary *dict = [notification object]; - id <MWPhoto> photoWithProgress = [dict objectForKey:@"photo"]; - if (photoWithProgress == _photo) { - // NSLog(@"%f", [[dict valueForKey:@"progress"] floatValue]); - float progress = [[dict valueForKey:@"progress"] floatValue]; - _loadingIndicator.progress = MAX(MIN(1, progress), 0); - } -} - -- (void)handleMWPhotoLoadingDidEndNotification:(NSNotification *)notification { - id <MWPhoto> photo = [notification object]; - if (photo == _photo) { - if ([photo underlyingImage]) { - // Successful load - [self displayImage]; - } else { - // Failed to load - [self showImageFailure]; - } - [self hideLoadingIndicator]; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.h deleted file mode 100755 index 5dc238b..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MWGridViewController.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 08/10/2013. -// -// - -#import <UIKit/UIKit.h> -#import "MWPhotoBrowser.h" -#import "PSTCollectionView.h" - -@interface MWGridViewController : PSTCollectionViewController {} - -@property (nonatomic, assign) MWPhotoBrowser *browser; -@property (nonatomic) BOOL selectionMode; -@property (nonatomic) CGPoint initialContentOffset; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.m deleted file mode 100755 index b7bae62..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWGridViewController.m +++ /dev/null @@ -1,205 +0,0 @@ -// -// MWGridViewController.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 08/10/2013. -// -// - -#import "MWGridViewController.h" -#import "MWGridCell.h" -#import "MWPhotoBrowserPrivate.h" -#import "MWCommon.h" - -@interface MWGridViewController () { - - // Store margins for current setup - CGFloat _margin, _gutter, _marginL, _gutterL, _columns, _columnsL; - -} - -@end - -@implementation MWGridViewController - -- (id)init { - if ((self = [super initWithCollectionViewLayout:[PSTCollectionViewFlowLayout new]])) { - - // Defaults - _columns = 3, _columnsL = 4; - _margin = 0, _gutter = 1; - _marginL = 0, _gutterL = 1; - - // For pixel perfection... - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - // iPad - _columns = 6, _columnsL = 8; - _margin = 1, _gutter = 2; - _marginL = 1, _gutterL = 2; - } else if ([UIScreen mainScreen].bounds.size.height == 480) { - // iPhone 3.5 inch - _columns = 3, _columnsL = 4; - _margin = 0, _gutter = 1; - _marginL = 1, _gutterL = 2; - } else { - // iPhone 4 inch - _columns = 3, _columnsL = 5; - _margin = 0, _gutter = 1; - _marginL = 0, _gutterL = 2; - } - - _initialContentOffset = CGPointMake(0, CGFLOAT_MAX); - - } - return self; -} - -#pragma mark - View - -- (void)viewDidLoad { - [super viewDidLoad]; - [self.collectionView registerClass:[MWGridCell class] forCellWithReuseIdentifier:@"GridCell"]; - self.collectionView.alwaysBounceVertical = YES; - self.collectionView.backgroundColor = [UIColor blackColor]; -} - -- (void)viewWillDisappear:(BOOL)animated { - // Cancel outstanding loading - NSArray *visibleCells = [self.collectionView visibleCells]; - if (visibleCells) { - for (MWGridCell *cell in visibleCells) { - [cell.photo cancelAnyLoading]; - } - } - [super viewWillDisappear:animated]; -} - -- (void)viewWillLayoutSubviews { - [super viewWillLayoutSubviews]; - [self performLayout]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - // Move to previous content offset - if (_initialContentOffset.y != CGFLOAT_MAX) { - self.collectionView.contentOffset = _initialContentOffset; - } - CGPoint currentContentOffset = self.collectionView.contentOffset; - - // Get scroll position to have the current photo on screen - if (_browser.numberOfPhotos > 0) { - NSIndexPath *currentPhotoIndexPath = [NSIndexPath indexPathForItem:_browser.currentIndex inSection:0]; - [self.collectionView scrollToItemAtIndexPath:currentPhotoIndexPath atScrollPosition:PSTCollectionViewScrollPositionNone animated:NO]; - } - CGPoint offsetToShowCurrent = self.collectionView.contentOffset; - - // Only commit to using the scrolled position if it differs from the initial content offset - if (!CGPointEqualToPoint(offsetToShowCurrent, currentContentOffset)) { - // Use offset to show current - self.collectionView.contentOffset = offsetToShowCurrent; - } else { - // Stick with initial - self.collectionView.contentOffset = currentContentOffset; - } - -} - -- (void)performLayout { - UINavigationBar *navBar = self.navigationController.navigationBar; - CGFloat yAdjust = 0; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7") && !self.browser.wantsFullScreenLayout) yAdjust = -20; -#endif - self.collectionView.contentInset = UIEdgeInsetsMake(navBar.frame.origin.y + navBar.frame.size.height + [self getGutter] + yAdjust, 0, 0, 0); -} - -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [self.collectionView reloadData]; - [self performLayout]; // needed for iOS 5 & 6 -} - -#pragma mark - Layout - -- (CGFloat)getColumns { - if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) { - return _columns; - } else { - return _columnsL; - } -} - -- (CGFloat)getMargin { - if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) { - return _margin; - } else { - return _marginL; - } -} - -- (CGFloat)getGutter { - if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) { - return _gutter; - } else { - return _gutterL; - } -} - -#pragma mark - Collection View - -- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { - return [_browser numberOfPhotos]; -} - -- (PSTCollectionViewCell *)collectionView:(PSTCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - MWGridCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"GridCell" forIndexPath:indexPath]; - if (!cell) { - cell = [[MWGridCell alloc] init]; - } - id <MWPhoto> photo = [_browser thumbPhotoAtIndex:indexPath.row]; - cell.photo = photo; - cell.gridController = self; - cell.selectionMode = _selectionMode; - cell.isSelected = [_browser photoIsSelectedAtIndex:indexPath.row]; - cell.index = indexPath.row; - UIImage *img = [_browser imageForPhoto:photo]; - if (img) { - [cell displayImage]; - } else { - [photo loadUnderlyingImageAndNotify]; - } - return cell; -} - -- (void)collectionView:(PSTCollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - [_browser setCurrentPhotoIndex:indexPath.row]; - [_browser hideGrid]; -} - -- (void)collectionView:(PSTCollectionView *)collectionView didEndDisplayingCell:(PSTCollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { - [((MWGridCell *)cell).photo cancelAnyLoading]; -} - -- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - CGFloat margin = [self getMargin]; - CGFloat gutter = [self getGutter]; - CGFloat columns = [self getColumns]; - CGFloat value = floorf(((self.view.bounds.size.width - (columns - 1) * gutter - 2 * margin) / columns)); - return CGSizeMake(value, value); -} - -- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return [self getGutter]; -} - -- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { - return [self getGutter]; -} - -- (UIEdgeInsets)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { - CGFloat margin = [self getMargin]; - return UIEdgeInsetsMake(margin, margin, margin, margin); -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.h deleted file mode 100755 index 7bfd960..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MWPhoto.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 17/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "MWPhotoProtocol.h" - -// This class models a photo/image and it's caption -// If you want to handle photos, caching, decompression -// yourself then you can simply ensure your custom data model -// conforms to MWPhotoProtocol -@interface MWPhoto : NSObject <MWPhoto> - -@property (nonatomic, strong) NSString *caption; -@property (nonatomic, readonly) UIImage *image; -@property (nonatomic, readonly) NSURL *photoURL; -@property (nonatomic, readonly) NSString *filePath __attribute__((deprecated("Use photoURL"))); // Depreciated - -+ (MWPhoto *)photoWithImage:(UIImage *)image; -+ (MWPhoto *)photoWithFilePath:(NSString *)path __attribute__((deprecated("Use photoWithURL: with a file URL"))); // Depreciated -+ (MWPhoto *)photoWithURL:(NSURL *)url; - -- (id)initWithImage:(UIImage *)image; -- (id)initWithURL:(NSURL *)url; -- (id)initWithFilePath:(NSString *)path __attribute__((deprecated("Use initWithURL: with a file URL"))); // Depreciated - -@end - diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.m deleted file mode 100755 index bf9a0ed..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhoto.m +++ /dev/null @@ -1,219 +0,0 @@ -// -// MWPhoto.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 17/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import "MWPhoto.h" -#import "MWPhotoBrowser.h" -#import "SDWebImageDecoder.h" -#import "SDWebImageManager.h" -#import "SDWebImageOperation.h" -#import <AssetsLibrary/AssetsLibrary.h> - -@interface MWPhoto () { - - BOOL _loadingInProgress; - id <SDWebImageOperation> _webImageOperation; - -} - -- (void)imageLoadingComplete; - -@end - -@implementation MWPhoto - -@synthesize underlyingImage = _underlyingImage; // synth property from protocol - -#pragma mark - Class Methods - -+ (MWPhoto *)photoWithImage:(UIImage *)image { - return [[MWPhoto alloc] initWithImage:image]; -} - -// Deprecated -+ (MWPhoto *)photoWithFilePath:(NSString *)path { - return [MWPhoto photoWithURL:[NSURL fileURLWithPath:path]]; -} - -+ (MWPhoto *)photoWithURL:(NSURL *)url { - return [[MWPhoto alloc] initWithURL:url]; -} - -#pragma mark - Init - -- (id)initWithImage:(UIImage *)image { - if ((self = [super init])) { - _image = image; - } - return self; -} - -// Deprecated -- (id)initWithFilePath:(NSString *)path { - if ((self = [super init])) { - _photoURL = [NSURL fileURLWithPath:path]; - } - return self; -} - -- (id)initWithURL:(NSURL *)url { - if ((self = [super init])) { - _photoURL = [url copy]; - } - return self; -} - -#pragma mark - MWPhoto Protocol Methods - -- (UIImage *)underlyingImage { - return _underlyingImage; -} - -- (void)loadUnderlyingImageAndNotify { - NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the main thread."); - if (_loadingInProgress) return; - _loadingInProgress = YES; - @try { - if (self.underlyingImage) { - [self imageLoadingComplete]; - } else { - [self performLoadUnderlyingImageAndNotify]; - } - } - @catch (NSException *exception) { - self.underlyingImage = nil; - _loadingInProgress = NO; - [self imageLoadingComplete]; - } - @finally { - } -} - -// Set the underlyingImage -- (void)performLoadUnderlyingImageAndNotify { - - // Get underlying image - if (_image) { - - // We have UIImage! - self.underlyingImage = _image; - [self imageLoadingComplete]; - - } else if (_photoURL) { - - // Check what type of url it is - if ([[[_photoURL scheme] lowercaseString] isEqualToString:@"assets-library"]) { - - // Load from asset library async - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - @autoreleasepool { - @try { - ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init]; - [assetslibrary assetForURL:_photoURL - resultBlock:^(ALAsset *asset){ - ALAssetRepresentation *rep = [asset defaultRepresentation]; - CGImageRef iref = [rep fullScreenImage]; - if (iref) { - self.underlyingImage = [UIImage imageWithCGImage:iref]; - } - [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO]; - } - failureBlock:^(NSError *error) { - self.underlyingImage = nil; - MWLog(@"Photo from asset library error: %@",error); - [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO]; - }]; - } @catch (NSException *e) { - MWLog(@"Photo from asset library error: %@", e); - [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO]; - } - } - }); - - } else if ([_photoURL isFileReferenceURL]) { - - // Load from local file async - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - @autoreleasepool { - @try { - self.underlyingImage = [UIImage imageWithContentsOfFile:_photoURL.path]; - if (!_underlyingImage) { - MWLog(@"Error loading photo from path: %@", _photoURL.path); - } - } @finally { - [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO]; - } - } - }); - - } else { - - // Load async from web (using SDWebImage) - @try { - SDWebImageManager *manager = [SDWebImageManager sharedManager]; - _webImageOperation = [manager downloadWithURL:_photoURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) { - if (expectedSize > 0) { - float progress = receivedSize / (float)expectedSize; - NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithFloat:progress], @"progress", - self, @"photo", nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_PROGRESS_NOTIFICATION object:dict]; - } - } - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - if (error) { - MWLog(@"SDWebImage failed to download image: %@", error); - } - _webImageOperation = nil; - self.underlyingImage = image; - [self imageLoadingComplete]; - }]; - } @catch (NSException *e) { - MWLog(@"Photo from web: %@", e); - _webImageOperation = nil; - [self imageLoadingComplete]; - } - - } - - } else { - - // Failed - no source - @throw [NSException exceptionWithName:nil reason:nil userInfo:nil]; - - } -} - -// Release if we can get it again from path or url -- (void)unloadUnderlyingImage { - _loadingInProgress = NO; - self.underlyingImage = nil; -} - -- (void)imageLoadingComplete { - NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the main thread."); - // Complete so notify - _loadingInProgress = NO; - // Notify on next run loop - [self performSelector:@selector(postCompleteNotification) withObject:nil afterDelay:0]; -} - -- (void)postCompleteNotification { - [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION - object:self]; -} - -- (void)cancelAnyLoading { - if (_webImageOperation) { - [_webImageOperation cancel]; - _loadingInProgress = NO; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.h deleted file mode 100755 index e3e6ab6..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// MWPhotoBrowser.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import <MessageUI/MessageUI.h> -#import "MWPhoto.h" -#import "MWPhotoProtocol.h" -#import "MWCaptionView.h" - -// Debug Logging -#if 0 // Set to 1 to enable debug logging -#define MWLog(x, ...) NSLog(x, ## __VA_ARGS__); -#else -#define MWLog(x, ...) -#endif - -@class MWPhotoBrowser; - -@protocol MWPhotoBrowserDelegate <NSObject> - -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser; -- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index; - -@optional - -- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index; -- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index; -- (NSString *)photoBrowser:(MWPhotoBrowser *)photoBrowser titleForPhotoAtIndex:(NSUInteger)index; -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser didDisplayPhotoAtIndex:(NSUInteger)index; -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index; -- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index; -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected; -- (void)photoBrowserDidFinishModalPresentation:(MWPhotoBrowser *)photoBrowser; - -@end - -@interface MWPhotoBrowser : UIViewController <UIScrollViewDelegate, UIActionSheetDelegate, MFMailComposeViewControllerDelegate> - -@property (nonatomic, weak) IBOutlet id<MWPhotoBrowserDelegate> delegate; -@property (nonatomic) BOOL zoomPhotosToFill; -@property (nonatomic) BOOL displayNavArrows; -@property (nonatomic) BOOL displayActionButton; -@property (nonatomic) BOOL displaySelectionButtons; -@property (nonatomic) BOOL alwaysShowControls; -@property (nonatomic) BOOL enableGrid; -@property (nonatomic) BOOL enableSwipeToDismiss; -@property (nonatomic) BOOL startOnGrid; -@property (nonatomic) NSUInteger delayToHideElements; -@property (nonatomic, readonly) NSUInteger currentIndex; -@property (nonatomic,strong)UIButton *selectCopyButton; -@property(nonatomic,strong) UIView *topview; -// Init -- (id)initWithPhotos:(NSArray *)photosArray __attribute__((deprecated("Use initWithDelegate: instead"))); // Depreciated -- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate; - -// Reloads the photo browser and refetches data -- (void)reloadData; - -// Set page that photo browser starts on -- (void)setCurrentPhotoIndex:(NSUInteger)index; -- (void)setInitialPageIndex:(NSUInteger)index __attribute__((deprecated("Use setCurrentPhotoIndex: instead"))); // Depreciated - -// Navigation -- (void)showNextPhotoAnimated:(BOOL)animated; -- (void)showPreviousPhotoAnimated:(BOOL)animated; -//by dongxie - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.m deleted file mode 100755 index a628079..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.m +++ /dev/null @@ -1,1684 +0,0 @@ -// -// MWPhotoBrowser.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import <QuartzCore/QuartzCore.h> -#import "MWCommon.h" -#import "std.h" -#import "MWPhotoBrowser.h" -#import "MWPhotoBrowserPrivate.h" -#import "SDImageCache.h" - -#define PADDING 10 -#define ACTION_SHEET_OLD_ACTIONS 2000 - -@implementation MWPhotoBrowser - -#pragma mark - Init - -- (id)init { - if ((self = [super init])) { - [self _initialisation]; - } - return self; -} - -- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate { - if ((self = [self init])) { - _delegate = delegate; - } - return self; -} - -- (id)initWithPhotos:(NSArray *)photosArray { - if ((self = [self init])) { - _depreciatedPhotoData = photosArray; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - if ((self = [super initWithCoder:decoder])) { - [self _initialisation]; - } - return self; -} - -- (void)_initialisation { - - // Defaults - NSNumber *isVCBasedStatusBarAppearanceNum = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"]; - if (isVCBasedStatusBarAppearanceNum) { - _isVCBasedStatusBarAppearance = isVCBasedStatusBarAppearanceNum.boolValue; - } else { - _isVCBasedStatusBarAppearance = YES; // default - } -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7")) self.wantsFullScreenLayout = YES; -#endif - self.hidesBottomBarWhenPushed = YES; - _hasBelongedToViewController = NO; - _photoCount = NSNotFound; - _previousLayoutBounds = CGRectZero; - _currentPageIndex = 0; - _previousPageIndex = NSUIntegerMax; - _displayActionButton = YES; - _displayNavArrows = NO; - _zoomPhotosToFill = YES; - _performingLayout = NO; // Reset on view did appear - _rotating = NO; - _viewIsActive = NO; - _enableGrid = YES; - _startOnGrid = NO; - _enableSwipeToDismiss = YES; - _delayToHideElements = 5; - _visiblePages = [[NSMutableSet alloc] init]; - _recycledPages = [[NSMutableSet alloc] init]; - _photos = [[NSMutableArray alloc] init]; - _thumbPhotos = [[NSMutableArray alloc] init]; - _currentGridContentOffset = CGPointMake(0, CGFLOAT_MAX); - _didSavePreviousStateOfNavBar = NO; - if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]){ - self.automaticallyAdjustsScrollViewInsets = NO; - } - - // Listen for MWPhoto notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleMWPhotoLoadingDidEndNotification:) - name:MWPHOTO_LOADING_DID_END_NOTIFICATION - object:nil]; - -} - -- (void)dealloc { - _pagingScrollView.delegate = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self releaseAllUnderlyingPhotos:NO]; - [[SDImageCache sharedImageCache] clearMemory]; // clear memory -} - -- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent { - // Create a copy in case this array is modified while we are looping through - // Release photos - NSArray *copy = [_photos copy]; - for (id p in copy) { - if (p != [NSNull null]) { - if (preserveCurrent && p == [self photoAtIndex:self.currentIndex]) { - continue; // skip current - } - [p unloadUnderlyingImage]; - } - } - // Release thumbs - copy = [_thumbPhotos copy]; - for (id p in copy) { - if (p != [NSNull null]) { - [p unloadUnderlyingImage]; - } - } -} - -- (void)didReceiveMemoryWarning { - - // Release any cached data, images, etc that aren't in use. - [self releaseAllUnderlyingPhotos:YES]; - [_recycledPages removeAllObjects]; - - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - -} - -#pragma mark - View Loading - -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - - // Validate grid settings - if (_startOnGrid) _enableGrid = YES; - if (_enableGrid) { - _enableGrid = [_delegate respondsToSelector:@selector(photoBrowser:thumbPhotoAtIndex:)]; - } - if (!_enableGrid) _startOnGrid = NO; - - // View - self.view.backgroundColor = [UIColor blackColor]; - self.view.clipsToBounds = YES; - - // Setup paging scrolling view - CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; - _pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; - _pagingScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _pagingScrollView.pagingEnabled = YES; - _pagingScrollView.delegate = self; - _pagingScrollView.showsHorizontalScrollIndicator = NO; - _pagingScrollView.showsVerticalScrollIndicator = NO; - _pagingScrollView.backgroundColor = [UIColor blackColor]; - _pagingScrollView.contentSize = [self contentSizeForPagingScrollView]; - [self.view addSubview:_pagingScrollView]; - self.topview = [[UIView alloc] initWithFrame:CGRectMake(0, 0,10000, 45)]; - [self.topview setBackgroundColor:RGBA(0, 0, 0, 0.7)]; - [_pagingScrollView addSubview:self.topview]; - // Toolbar - _toolbar = [[UIToolbar alloc] initWithFrame:[self frameForToolbarAtOrientation:self.interfaceOrientation]]; - _toolbar.tintColor = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7") ? [UIColor whiteColor] : nil; - if ([_toolbar respondsToSelector:@selector(setBarTintColor:)]) { - _toolbar.barTintColor = nil; - } - if ([[UIToolbar class] respondsToSelector:@selector(appearance)]) { - [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault]; - [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsLandscapePhone]; - } - _toolbar.barStyle = UIBarStyleBlackTranslucent; - _toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; - - // Toolbar Items - if (self.displayNavArrows) { - NSString *arrowPathFormat; - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { - arrowPathFormat = @"MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutline%@.png"; - } else { - arrowPathFormat = @"MWPhotoBrowser.bundle/images/UIBarButtonItemArrow%@.png"; - } - _previousButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:arrowPathFormat, @"Left"]] style:UIBarButtonItemStylePlain target:self action:@selector(gotoPreviousPage)]; - _nextButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:arrowPathFormat, @"Right"]] style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextPage)]; - } - if (self.displayActionButton) { - _actionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionButtonPressed:)]; - } - if (!SYSTEM_VERSION_LESS_THAN(@"6")) - { - [self setHiddenStatusBar:YES]; - } - - - // Update - [self reloadData]; - - // Swipe to dismiss - if (_enableSwipeToDismiss) { - UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doneButtonPressed:)]; - swipeGesture.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp; - [self.view addGestureRecognizer:swipeGesture]; - } - - // Super - - [super viewDidLoad]; - -} - -- (void)performLayout { - - // Setup - _performingLayout = YES; - NSUInteger numberOfPhotos = [self numberOfPhotos]; - - // Setup pages - [_visiblePages removeAllObjects]; - [_recycledPages removeAllObjects]; - - // Navigation buttons - if ([self.navigationController.viewControllers objectAtIndex:0] == self) { - // We're first on stack so show done button - _doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", nil) style:UIBarButtonItemStylePlain target:self action:@selector(doneButtonPressed:)]; - // Set appearance - if ([UIBarButtonItem respondsToSelector:@selector(appearance)]) { - [_doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [_doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - [_doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [_doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone]; - [_doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal]; - [_doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted]; - } - self.navigationItem.rightBarButtonItem = _doneButton; - } else { - // We're not first so show back button - UIViewController *previousViewController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2]; - NSString *backButtonTitle = previousViewController.navigationItem.backBarButtonItem ? previousViewController.navigationItem.backBarButtonItem.title : previousViewController.title; - UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:backButtonTitle style:UIBarButtonItemStylePlain target:nil action:nil]; - // Appearance - if ([UIBarButtonItem respondsToSelector:@selector(appearance)]) { - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone]; - [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal]; - [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted]; - } - _previousViewControllerBackButton = previousViewController.navigationItem.backBarButtonItem; // remember previous - previousViewController.navigationItem.backBarButtonItem = newBackButton; - } - - // Toolbar items - BOOL hasItems = NO; - UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil]; - fixedSpace.width = 32; // To balance action button - UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; - NSMutableArray *items = [[NSMutableArray alloc] init]; - - // Left button - Grid - if (_enableGrid) { - hasItems = YES; - NSString *buttonName = @"UIBarButtonItemGrid"; - if (SYSTEM_VERSION_LESS_THAN(@"7")) buttonName = @"UIBarButtonItemGridiOS6"; - [items addObject:[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"MWPhotoBrowser.bundle/images/%@.png", buttonName]] style:UIBarButtonItemStylePlain target:self action:@selector(showGridAnimated)]]; - } else { - [items addObject:fixedSpace]; - } - - // Middle - Nav - if (_previousButton && _nextButton && numberOfPhotos > 1) { - hasItems = YES; - [items addObject:flexSpace]; - [items addObject:_previousButton]; - [items addObject:flexSpace]; - [items addObject:_nextButton]; - [items addObject:flexSpace]; - } else { - [items addObject:flexSpace]; - } - - // Right - Action - // if (_actionButton && !(!hasItems && !self.navigationItem.rightBarButtonItem)) { - // [items addObject:_actionButton]; - // } else { - // // We're not showing the toolbar so try and show in top right - // if (_actionButton) - // self.navigationItem.rightBarButtonItem = _actionButton; - // [items addObject:fixedSpace]; - // } - - // Toolbar visibility - [_toolbar setItems:items]; - BOOL hideToolbar = YES; - for (UIBarButtonItem* item in _toolbar.items) { - if (item != fixedSpace && item != flexSpace) { - hideToolbar = NO; - break; - } - } - if (hideToolbar) { - [_toolbar removeFromSuperview]; - } else { - [self.view addSubview:_toolbar]; - } - - // Update nav - [self updateNavigation]; - - // Content offset - _pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:_currentPageIndex]; - [self tilePages]; - _performingLayout = NO; - -} - -// Release any retained subviews of the main view. -- (void)viewDidUnload { - _currentPageIndex = 0; - _pagingScrollView = nil; - _visiblePages = nil; - _recycledPages = nil; - _toolbar = nil; - _previousButton = nil; - _nextButton = nil; - _progressHUD = nil; - [super viewDidUnload]; -} - -- (BOOL)presentingViewControllerPrefersStatusBarHidden { - UIViewController *presenting = self.presentingViewController; - if (presenting) { - if ([presenting isKindOfClass:[UINavigationController class]]) { - presenting = [(UINavigationController *)presenting topViewController]; - } - } else { - // We're in a navigation controller so get previous one! - if (self.navigationController && self.navigationController.viewControllers.count > 1) { - presenting = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2]; - } - } - if (presenting) { - return [presenting prefersStatusBarHidden]; - } else { - return NO; - } -} - -#pragma mark - Appearance - -- (void)viewWillAppear:(BOOL)animated { - - // Super - [super viewWillAppear:animated]; - - // Status bar - if ([UIViewController instancesRespondToSelector:@selector(prefersStatusBarHidden)]) { - _leaveStatusBarAlone = [self presentingViewControllerPrefersStatusBarHidden]; - } else { - _leaveStatusBarAlone = [UIApplication sharedApplication].statusBarHidden; - } - if (CGRectEqualToRect([[UIApplication sharedApplication] statusBarFrame], CGRectZero)) { - // If the frame is zero then definitely leave it alone - _leaveStatusBarAlone = YES; - } - BOOL fullScreen = YES; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7")) fullScreen = self.wantsFullScreenLayout; -#endif - if (!_leaveStatusBarAlone && fullScreen && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { - _previousStatusBarStyle = [[UIApplication sharedApplication] statusBarStyle]; - if (SYSTEM_VERSION_LESS_THAN(@"7")) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:animated]; -#pragma clang diagnostic push - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:animated]; - } - } - - // Navigation bar appearance - if (!_viewIsActive && [self.navigationController.viewControllers objectAtIndex:0] != self) { - [self storePreviousNavBarAppearance]; - } - [self setNavBarAppearance:animated]; - - // Update UI - [self hideControlsAfterDelay]; - - // Initial appearance - if (!_viewHasAppearedInitially) { - if (_startOnGrid) { - [self showGrid:NO]; - } - _viewHasAppearedInitially = YES; - } - - -} - -- (void)viewWillDisappear:(BOOL)animated { - - // Check that we're being popped for good - if ([self.navigationController.viewControllers objectAtIndex:0] != self && - ![self.navigationController.viewControllers containsObject:self]) { - - // State - _viewIsActive = NO; - - // Bar state / appearance - [self restorePreviousNavBarAppearance:animated]; - - } - - // Controls - [self.navigationController.navigationBar.layer removeAllAnimations]; // Stop all animations on nav bar - [NSObject cancelPreviousPerformRequestsWithTarget:self]; // Cancel any pending toggles from taps - [self setControlsHidden:NO animated:NO permanent:YES]; - - // Status bar - BOOL fullScreen = YES; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7")) fullScreen = self.wantsFullScreenLayout; -#endif - if (!_leaveStatusBarAlone && fullScreen && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { - [[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle animated:animated]; - } - - // Super - [UIApplication sharedApplication].statusBarHidden = NO; - [super viewWillDisappear:animated]; - -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - _viewIsActive = YES; -} - -- (void)willMoveToParentViewController:(UIViewController *)parent { - if (parent && _hasBelongedToViewController) { - [NSException raise:@"MWPhotoBrowser Instance Reuse" format:@"MWPhotoBrowser instances cannot be reused."]; - } -} - -- (void)didMoveToParentViewController:(UIViewController *)parent { - if (!parent) _hasBelongedToViewController = YES; -} - -#pragma mark - Nav Bar Appearance - -- (void)setNavBarAppearance:(BOOL)animated { - [self.navigationController setNavigationBarHidden:NO animated:animated]; - UINavigationBar *navBar = self.navigationController.navigationBar; - navBar.tintColor = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7") ? [UIColor whiteColor] : nil; - if ([navBar respondsToSelector:@selector(setBarTintColor:)]) { - navBar.barTintColor = nil; - navBar.shadowImage = nil; - } - navBar.translucent = YES; - navBar.barStyle = UIBarStyleBlackTranslucent; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; - [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsLandscapePhone]; - } -} - -- (void)storePreviousNavBarAppearance { - _didSavePreviousStateOfNavBar = YES; - if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) { - _previousNavBarBarTintColor = self.navigationController.navigationBar.barTintColor; - } - _previousNavBarTranslucent = self.navigationController.navigationBar.translucent; - _previousNavBarTintColor = self.navigationController.navigationBar.tintColor; - _previousNavBarHidden = self.navigationController.navigationBarHidden; - _previousNavBarStyle = self.navigationController.navigationBar.barStyle; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - _previousNavigationBarBackgroundImageDefault = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; - _previousNavigationBarBackgroundImageLandscapePhone = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsLandscapePhone]; - } -} - -- (void)restorePreviousNavBarAppearance:(BOOL)animated { - if (_didSavePreviousStateOfNavBar) { - [self.navigationController setNavigationBarHidden:_previousNavBarHidden animated:animated]; - UINavigationBar *navBar = self.navigationController.navigationBar; - navBar.tintColor = _previousNavBarTintColor; - navBar.translucent = _previousNavBarTranslucent; - if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) { - navBar.barTintColor = _previousNavBarBarTintColor; - } - navBar.barStyle = _previousNavBarStyle; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - [navBar setBackgroundImage:_previousNavigationBarBackgroundImageDefault forBarMetrics:UIBarMetricsDefault]; - [navBar setBackgroundImage:_previousNavigationBarBackgroundImageLandscapePhone forBarMetrics:UIBarMetricsLandscapePhone]; - } - // Restore back button if we need to - if (_previousViewControllerBackButton) { - UIViewController *previousViewController = [self.navigationController topViewController]; // We've disappeared so previous is now top - previousViewController.navigationItem.backBarButtonItem = _previousViewControllerBackButton; - _previousViewControllerBackButton = nil; - } - } -} - -#pragma mark - Layout - -- (void)viewWillLayoutSubviews { - [super viewWillLayoutSubviews]; - [self layoutVisiblePages]; -} - -- (void)layoutVisiblePages { - - // Flag - _performingLayout = YES; - - // Toolbar - _toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation]; - - // Remember index - NSUInteger indexPriorToLayout = _currentPageIndex; - - // Get paging scroll view frame to determine if anything needs changing - CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; - - // Frame needs changing - if (!_skipNextPagingScrollViewPositioning) { - _pagingScrollView.frame = pagingScrollViewFrame; - } - _skipNextPagingScrollViewPositioning = NO; - - // Recalculate contentSize based on current orientation - _pagingScrollView.contentSize = [self contentSizeForPagingScrollView]; - - // Adjust frames and configuration of each visible page - for (MWZoomingScrollView *page in _visiblePages) { - NSUInteger index = page.index; - page.frame = [self frameForPageAtIndex:index]; - if (page.captionView) { - page.captionView.frame = [self frameForCaptionView:page.captionView atIndex:index]; - } - if (page.selectedButton) { - page.selectedButton.frame = [self frameForSelectedButton:page.selectedButton atIndex:index]; - } - - // Adjust scales if bounds has changed since last time - if (!CGRectEqualToRect(_previousLayoutBounds, self.view.bounds)) { - // Update zooms for new bounds - [page setMaxMinZoomScalesForCurrentBounds]; - _previousLayoutBounds = self.view.bounds; - } - - } - - // Adjust contentOffset to preserve page location based on values collected prior to location - _pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:indexPriorToLayout]; - [self didStartViewingPageAtIndex:_currentPageIndex]; // initial - - // Reset - _currentPageIndex = indexPriorToLayout; - _performingLayout = NO; - -} - -#pragma mark - Rotation - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { - return YES; -} - -- (NSUInteger)supportedInterfaceOrientations { - return UIInterfaceOrientationMaskAll; -} - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - - // Remember page index before rotation - _pageIndexBeforeRotation = _currentPageIndex; - _rotating = YES; - - // In iOS 7 the nav bar gets shown after rotation, but might as well do this for everything! - if ([self areControlsHidden]) { - // Force hidden - self.navigationController.navigationBarHidden = YES; - } - -} - -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - - // Perform layout - _currentPageIndex = _pageIndexBeforeRotation; - - // Delay control holding - [self hideControlsAfterDelay]; - - // Layout - [self layoutVisiblePages]; - -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - _rotating = NO; - // Ensure nav bar isn't re-displayed - if ([self areControlsHidden]) { - self.navigationController.navigationBarHidden = NO; - self.navigationController.navigationBar.alpha = 0; - } -} - -#pragma mark - Data - -- (NSUInteger)currentIndex { - return _currentPageIndex; -} - -- (void)reloadData { - - // Reset - _photoCount = NSNotFound; - - // Get data - NSUInteger numberOfPhotos = [self numberOfPhotos]; - [self releaseAllUnderlyingPhotos:YES]; - [_photos removeAllObjects]; - [_thumbPhotos removeAllObjects]; - for (int i = 0; i < numberOfPhotos; i++) { - [_photos addObject:[NSNull null]]; - [_thumbPhotos addObject:[NSNull null]]; - } - - // Update current page index - if (numberOfPhotos > 0) { - _currentPageIndex = MAX(0, MIN(_currentPageIndex, numberOfPhotos - 1)); - } else { - _currentPageIndex = 0; - } - - // Update layout - if ([self isViewLoaded]) { - while (_pagingScrollView.subviews.count) { - [[_pagingScrollView.subviews lastObject] removeFromSuperview]; - } - [self performLayout]; - [self.view setNeedsLayout]; - } - -} - -- (NSUInteger)numberOfPhotos { - if (_photoCount == NSNotFound) { - if ([_delegate respondsToSelector:@selector(numberOfPhotosInPhotoBrowser:)]) { - _photoCount = [_delegate numberOfPhotosInPhotoBrowser:self]; - } else if (_depreciatedPhotoData) { - _photoCount = _depreciatedPhotoData.count; - } - } - if (_photoCount == NSNotFound) _photoCount = 0; - return _photoCount; -} - -- (id<MWPhoto>)photoAtIndex:(NSUInteger)index { - id <MWPhoto> photo = nil; - if (index < _photos.count) { - if ([_photos objectAtIndex:index] == [NSNull null]) { - if ([_delegate respondsToSelector:@selector(photoBrowser:photoAtIndex:)]) { - photo = [_delegate photoBrowser:self photoAtIndex:index]; - } else if (_depreciatedPhotoData && index < _depreciatedPhotoData.count) { - photo = [_depreciatedPhotoData objectAtIndex:index]; - } - if (photo) [_photos replaceObjectAtIndex:index withObject:photo]; - } else { - photo = [_photos objectAtIndex:index]; - } - } - return photo; -} - -- (id<MWPhoto>)thumbPhotoAtIndex:(NSUInteger)index { - id <MWPhoto> photo = nil; - if (index < _thumbPhotos.count) { - if ([_thumbPhotos objectAtIndex:index] == [NSNull null]) { - if ([_delegate respondsToSelector:@selector(photoBrowser:thumbPhotoAtIndex:)]) { - photo = [_delegate photoBrowser:self thumbPhotoAtIndex:index]; - } - if (photo) [_thumbPhotos replaceObjectAtIndex:index withObject:photo]; - } else { - photo = [_thumbPhotos objectAtIndex:index]; - } - } - return photo; -} - -- (MWCaptionView *)captionViewForPhotoAtIndex:(NSUInteger)index { - MWCaptionView *captionView = nil; - if ([_delegate respondsToSelector:@selector(photoBrowser:captionViewForPhotoAtIndex:)]) { - captionView = [_delegate photoBrowser:self captionViewForPhotoAtIndex:index]; - } else { - id <MWPhoto> photo = [self photoAtIndex:index]; - if ([photo respondsToSelector:@selector(caption)]) { - if ([photo caption]) captionView = [[MWCaptionView alloc] initWithPhoto:photo]; - } - } - captionView.alpha = [self areControlsHidden] ? 0 : 1; // Initial alpha - return captionView; -} - -- (BOOL)photoIsSelectedAtIndex:(NSUInteger)index { - BOOL value = NO; - if (_displaySelectionButtons) { - if ([self.delegate respondsToSelector:@selector(photoBrowser:isPhotoSelectedAtIndex:)]) { - value = [self.delegate photoBrowser:self isPhotoSelectedAtIndex:index]; - } - } - return value; -} - -- (void)setPhotoSelected:(BOOL)selected atIndex:(NSUInteger)index { - if (_displaySelectionButtons) { - if ([self.delegate respondsToSelector:@selector(photoBrowser:photoAtIndex:selectedChanged:)]) { - [self.delegate photoBrowser:self photoAtIndex:index selectedChanged:selected]; - } - } -} - -- (UIImage *)imageForPhoto:(id<MWPhoto>)photo { - if (photo) { - // Get image or obtain in background - if ([photo underlyingImage]) { - return [photo underlyingImage]; - } else { - [photo loadUnderlyingImageAndNotify]; - } - } - return nil; -} - -- (void)loadAdjacentPhotosIfNecessary:(id<MWPhoto>)photo { - MWZoomingScrollView *page = [self pageDisplayingPhoto:photo]; - if (page) { - // If page is current page then initiate loading of previous and next pages - NSUInteger pageIndex = page.index; - if (_currentPageIndex == pageIndex) { - if (pageIndex > 0) { - // Preload index - 1 - id <MWPhoto> photo = [self photoAtIndex:pageIndex-1]; - if (![photo underlyingImage]) { - [photo loadUnderlyingImageAndNotify]; - MWLog(@"Pre-loading image at index %lu", (unsigned long)pageIndex-1); - } - } - if (pageIndex < [self numberOfPhotos] - 1) { - // Preload index + 1 - id <MWPhoto> photo = [self photoAtIndex:pageIndex+1]; - if (![photo underlyingImage]) { - [photo loadUnderlyingImageAndNotify]; - MWLog(@"Pre-loading image at index %lu", (unsigned long)pageIndex+1); - } - } - } - } -} - -#pragma mark - MWPhoto Loading Notification - -- (void)handleMWPhotoLoadingDidEndNotification:(NSNotification *)notification { - id <MWPhoto> photo = [notification object]; - MWZoomingScrollView *page = [self pageDisplayingPhoto:photo]; - if (page) { - if ([photo underlyingImage]) { - // Successful load - [page displayImage]; - [self loadAdjacentPhotosIfNecessary:photo]; - } else { - // Failed to load - [page displayImageFailure]; - } - // Update nav - [self updateNavigation]; - } -} - -#pragma mark - Paging - -- (void)tilePages { - - // Calculate which pages should be visible - // Ignore padding as paging bounces encroach on that - // and lead to false page loads - CGRect visibleBounds = _pagingScrollView.bounds; - NSInteger iFirstIndex = (NSInteger)floorf((CGRectGetMinX(visibleBounds)+PADDING*2) / CGRectGetWidth(visibleBounds)); - NSInteger iLastIndex = (NSInteger)floorf((CGRectGetMaxX(visibleBounds)-PADDING*2-1) / CGRectGetWidth(visibleBounds)); - if (iFirstIndex < 0) iFirstIndex = 0; - if (iFirstIndex > [self numberOfPhotos] - 1) iFirstIndex = [self numberOfPhotos] - 1; - if (iLastIndex < 0) iLastIndex = 0; - if (iLastIndex > [self numberOfPhotos] - 1) iLastIndex = [self numberOfPhotos] - 1; - - // Recycle no longer needed pages - NSInteger pageIndex; - for (MWZoomingScrollView *page in _visiblePages) { - pageIndex = page.index; - if (pageIndex < (NSUInteger)iFirstIndex || pageIndex > (NSUInteger)iLastIndex) { - [_recycledPages addObject:page]; - [page.captionView removeFromSuperview]; - [page.selectedButton removeFromSuperview]; - [page prepareForReuse]; - [page removeFromSuperview]; - MWLog(@"Removed page at index %lu", (unsigned long)pageIndex); - } - } - [_visiblePages minusSet:_recycledPages]; - while (_recycledPages.count > 2) // Only keep 2 recycled pages - [_recycledPages removeObject:[_recycledPages anyObject]]; - - // Add missing pages - BOOL isAdded = NO; - for (NSUInteger index = (NSUInteger)iFirstIndex; index <= (NSUInteger)iLastIndex; index++) { - if (![self isDisplayingPageForIndex:index]) { - - // Add new page - MWZoomingScrollView *page = [self dequeueRecycledPage]; - if (!page) { - page = [[MWZoomingScrollView alloc] initWithPhotoBrowser:self]; - } - [_visiblePages addObject:page]; - [self configurePage:page forIndex:index]; - - [_pagingScrollView addSubview:page]; - MWLog(@"Added page at index %lu", (unsigned long)index); - - // Add caption - MWCaptionView *captionView = [self captionViewForPhotoAtIndex:index]; - if (captionView) { - captionView.frame = [self frameForCaptionView:captionView atIndex:index]; - [_pagingScrollView addSubview:captionView]; - page.captionView = captionView; - } - if (!isAdded) { - [_pagingScrollView addSubview:self.topview]; - isAdded =YES; - } - - // Add selected button - if (self.displaySelectionButtons) { - UIButton *selectedButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [selectedButton setImage:[UIImage imageNamed:@"dd_preview_unselected"] forState:UIControlStateNormal]; - [selectedButton setImage:[UIImage imageNamed:@"dd_preview_select"] forState:UIControlStateSelected]; - [selectedButton sizeToFit]; - selectedButton.adjustsImageWhenHighlighted = NO; - [selectedButton addTarget:self action:@selector(selectedButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - selectedButton.frame = [self frameForSelectedButton:selectedButton atIndex:index]; - [_pagingScrollView addSubview:selectedButton]; - - page.selectedButton = selectedButton; - selectedButton.selected = [self photoIsSelectedAtIndex:index]; - } - - } - } - -} - -- (void)updateVisiblePageStates { - NSSet *copy = [_visiblePages copy]; - for (MWZoomingScrollView *page in copy) { - - // Update selection - page.selectedButton.selected = [self photoIsSelectedAtIndex:page.index]; - - } -} - -- (BOOL)isDisplayingPageForIndex:(NSUInteger)index { - for (MWZoomingScrollView *page in _visiblePages) - if (page.index == index) return YES; - return NO; -} - -- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index { - MWZoomingScrollView *thePage = nil; - for (MWZoomingScrollView *page in _visiblePages) { - if (page.index == index) { - thePage = page; break; - } - } - return thePage; -} - -- (MWZoomingScrollView *)pageDisplayingPhoto:(id<MWPhoto>)photo { - MWZoomingScrollView *thePage = nil; - for (MWZoomingScrollView *page in _visiblePages) { - if (page.photo == photo) { - thePage = page; break; - } - } - return thePage; -} - -- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index { - page.frame = [self frameForPageAtIndex:index]; - page.index = index; - page.photo = [self photoAtIndex:index]; -} - -- (MWZoomingScrollView *)dequeueRecycledPage { - MWZoomingScrollView *page = [_recycledPages anyObject]; - if (page) { - [_recycledPages removeObject:page]; - } - return page; -} - -// Handle page changes -- (void)didStartViewingPageAtIndex:(NSUInteger)index { - - if (![self numberOfPhotos]) { - // Show controls - [self setControlsHidden:NO animated:YES permanent:YES]; - return; - } - - // Release images further away than +/-1 - NSUInteger i; - if (index > 0) { - // Release anything < index - 1 - for (i = 0; i < index-1; i++) { - id photo = [_photos objectAtIndex:i]; - if (photo != [NSNull null]) { - [photo unloadUnderlyingImage]; - [_photos replaceObjectAtIndex:i withObject:[NSNull null]]; - MWLog(@"Released underlying image at index %lu", (unsigned long)i); - } - } - } - if (index < [self numberOfPhotos] - 1) { - // Release anything > index + 1 - for (i = index + 2; i < _photos.count; i++) { - id photo = [_photos objectAtIndex:i]; - if (photo != [NSNull null]) { - [photo unloadUnderlyingImage]; - [_photos replaceObjectAtIndex:i withObject:[NSNull null]]; - MWLog(@"Released underlying image at index %lu", (unsigned long)i); - } - } - } - - // Load adjacent images if needed and the photo is already - // loaded. Also called after photo has been loaded in background - id <MWPhoto> currentPhoto = [self photoAtIndex:index]; - if ([currentPhoto underlyingImage]) { - // photo loaded so load ajacent now - [self loadAdjacentPhotosIfNecessary:currentPhoto]; - } - - // Notify delegate - if (index != _previousPageIndex) { - if ([_delegate respondsToSelector:@selector(photoBrowser:didDisplayPhotoAtIndex:)]) - [_delegate photoBrowser:self didDisplayPhotoAtIndex:index]; - _previousPageIndex = index; - } - - // Update nav - [self updateNavigation]; - -} - -#pragma mark - Frame Calculations - -- (CGRect)frameForPagingScrollView { - CGRect frame = self.view.bounds;// [[UIScreen mainScreen] bounds]; - frame.origin.x -= PADDING; - frame.size.width += (2 * PADDING); - return CGRectIntegral(frame); -} - -- (CGRect)frameForPageAtIndex:(NSUInteger)index { - // We have to use our paging scroll view's bounds, not frame, to calculate the page placement. When the device is in - // landscape orientation, the frame will still be in portrait because the pagingScrollView is the root view controller's - // view, so its frame is in window coordinate space, which is never rotated. Its bounds, however, will be in landscape - // because it has a rotation transform applied. - CGRect bounds = _pagingScrollView.bounds; - CGRect pageFrame = bounds; - pageFrame.size.width -= (2 * PADDING); - pageFrame.origin.x = (bounds.size.width * index) + PADDING; - return CGRectIntegral(pageFrame); -} - -- (CGSize)contentSizeForPagingScrollView { - // We have to use the paging scroll view's bounds to calculate the contentSize, for the same reason outlined above. - CGRect bounds = _pagingScrollView.bounds; - return CGSizeMake(bounds.size.width * [self numberOfPhotos], bounds.size.height); -} - -- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index { - CGFloat pageWidth = _pagingScrollView.bounds.size.width; - CGFloat newOffset = index * pageWidth; - return CGPointMake(newOffset, 0); -} - -- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation { - CGFloat height = 44; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && - UIInterfaceOrientationIsLandscape(orientation)) height = 32; - return CGRectIntegral(CGRectMake(0, self.view.bounds.size.height - height, self.view.bounds.size.width, height)); -} - -- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index { - CGRect pageFrame = [self frameForPageAtIndex:index]; - CGSize captionSize = [captionView sizeThatFits:CGSizeMake(pageFrame.size.width, 0)]; - CGRect captionFrame = CGRectMake(pageFrame.origin.x, - pageFrame.size.height - captionSize.height - (_toolbar.superview?_toolbar.frame.size.height:0), - pageFrame.size.width, - captionSize.height); - return CGRectIntegral(captionFrame); -} - -- (CGRect)frameForSelectedButton:(UIButton *)selectedButton atIndex:(NSUInteger)index { - CGRect pageFrame = [self frameForPageAtIndex:index]; - CGFloat yOffset = 0; - if (![self areControlsHidden]) { - UINavigationBar *navBar = self.navigationController.navigationBar; - yOffset = navBar.frame.origin.y + navBar.frame.size.height; - } - CGFloat statusBarOffset = [[UIApplication sharedApplication] statusBarFrame].size.height; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7") && !self.wantsFullScreenLayout) statusBarOffset = 0; -#endif - CGRect captionFrame = CGRectMake(pageFrame.origin.x + pageFrame.size.width - 20 - selectedButton.frame.size.width, - 10, - selectedButton.frame.size.width, - selectedButton.frame.size.height); - return CGRectIntegral(captionFrame); -} - -#pragma mark - UIScrollView Delegate - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView { - - // Checks - if (!_viewIsActive || _performingLayout || _rotating) return; - - // Tile pages - [self tilePages]; - - // Calculate current page - CGRect visibleBounds = _pagingScrollView.bounds; - NSInteger index = (NSInteger)(floorf(CGRectGetMidX(visibleBounds) / CGRectGetWidth(visibleBounds))); - if (index < 0) index = 0; - if (index > [self numberOfPhotos] - 1) index = [self numberOfPhotos] - 1; - NSUInteger previousCurrentPage = _currentPageIndex; - _currentPageIndex = index; - if (_currentPageIndex != previousCurrentPage) { - [self didStartViewingPageAtIndex:index]; - } - -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - // Hide controls when dragging begins - - - [self setControlsHidden:YES animated:YES permanent:NO]; -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - // Update nav when page changes - [self updateNavigation]; -} - -#pragma mark - Navigation - -- (void)updateNavigation { - - // Title - NSUInteger numberOfPhotos = [self numberOfPhotos]; - if (_gridController) { - if (_gridController.selectionMode) { - self.title = NSLocalizedString(@"Select Photos", nil); - } else { - NSString *photosText; - if (numberOfPhotos == 1) { - photosText = NSLocalizedString(@"photo", @"Used in the context: '1 photo'"); - } else { - photosText = NSLocalizedString(@"photos", @"Used in the context: '3 photos'"); - } - self.title = [NSString stringWithFormat:@"%lu %@", (unsigned long)numberOfPhotos, photosText]; - } - } else if (numberOfPhotos > 1) { - if ([_delegate respondsToSelector:@selector(photoBrowser:titleForPhotoAtIndex:)]) { - self.title = [_delegate photoBrowser:self titleForPhotoAtIndex:_currentPageIndex]; - } else { - self.title = [NSString stringWithFormat:@"%lu %@ %lu", (unsigned long)(_currentPageIndex+1), NSLocalizedString(@"of", @"Used in the context: 'Showing 1 of 3 items'"), (unsigned long)numberOfPhotos]; - } - } else { - self.title = nil; - } - - // Buttons - _previousButton.enabled = (_currentPageIndex > 0); - _nextButton.enabled = (_currentPageIndex < numberOfPhotos - 1); - _actionButton.enabled = [[self photoAtIndex:_currentPageIndex] underlyingImage] != nil; - -} - -- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated { - - // Change page - if (index < [self numberOfPhotos]) { - CGRect pageFrame = [self frameForPageAtIndex:index]; - [_pagingScrollView setContentOffset:CGPointMake(pageFrame.origin.x - PADDING, 0) animated:animated]; - [self updateNavigation]; - } - - // Update timer to give more time - [self hideControlsAfterDelay]; - -} - -- (void)gotoPreviousPage { - [self showPreviousPhotoAnimated:NO]; -} -- (void)gotoNextPage { - [self showNextPhotoAnimated:NO]; -} - -- (void)showPreviousPhotoAnimated:(BOOL)animated { - [self jumpToPageAtIndex:_currentPageIndex-1 animated:animated]; -} - -- (void)showNextPhotoAnimated:(BOOL)animated { - [self jumpToPageAtIndex:_currentPageIndex+1 animated:animated]; -} - -#pragma mark - Interactions - -- (void)selectedButtonTapped:(id)sender { - UIButton *selectedButton = (UIButton *)sender; - selectedButton.selected = !selectedButton.selected; - NSUInteger index = NSUIntegerMax; - for (MWZoomingScrollView *page in _visiblePages) { - if (page.selectedButton == selectedButton) { - index = page.index; - break; - } - } - if (index != NSUIntegerMax) { - [self setPhotoSelected:selectedButton.selected atIndex:index]; - } -} - -#pragma mark - Grid - -- (void)showGridAnimated { - [self showGrid:YES]; -} - -- (void)showGrid:(BOOL)animated { - - if (_gridController) return; - - // Init grid controller - _gridController = [[MWGridViewController alloc] init]; - _gridController.initialContentOffset = _currentGridContentOffset; - _gridController.browser = self; - _gridController.selectionMode = _displaySelectionButtons; - _gridController.view.frame = self.view.bounds; - _gridController.view.frame = CGRectOffset(_gridController.view.frame, 0, (self.startOnGrid ? -1 : 1) * self.view.bounds.size.height); - - // Stop specific layout being triggered - _skipNextPagingScrollViewPositioning = YES; - - // Add as a child view controller - [self addChildViewController:_gridController]; - [self.view addSubview:_gridController.view]; - - // Hide action button on nav bar if it exists - if (self.navigationItem.rightBarButtonItem == _actionButton) { - _gridPreviousRightNavItem = _actionButton; - [self.navigationItem setRightBarButtonItem:nil animated:YES]; - } else { - _gridPreviousRightNavItem = nil; - } - - // Update - [self updateNavigation]; - [self setControlsHidden:NO animated:YES permanent:YES]; - - // Animate grid in and photo scroller out - [UIView animateWithDuration:animated ? 0.3 : 0 animations:^(void) { - _gridController.view.frame = self.view.bounds; - CGRect newPagingFrame = [self frameForPagingScrollView]; - newPagingFrame = CGRectOffset(newPagingFrame, 0, (self.startOnGrid ? 1 : -1) * newPagingFrame.size.height); - _pagingScrollView.frame = newPagingFrame; - } completion:^(BOOL finished) { - [_gridController didMoveToParentViewController:self]; - }]; - -} - -- (void)hideGrid { - - if (!_gridController) return; - - // Remember previous content offset - _currentGridContentOffset = _gridController.collectionView.contentOffset; - - // Restore action button if it was removed - if (_gridPreviousRightNavItem == _actionButton && _actionButton) { - [self.navigationItem setRightBarButtonItem:_gridPreviousRightNavItem animated:YES]; - } - - // Position prior to hide animation - CGRect newPagingFrame = [self frameForPagingScrollView]; - newPagingFrame = CGRectOffset(newPagingFrame, 0, (self.startOnGrid ? 1 : -1) * newPagingFrame.size.height); - _pagingScrollView.frame = newPagingFrame; - - // Remember and remove controller now so things can detect a nil grid controller - MWGridViewController *tmpGridController = _gridController; - _gridController = nil; - - // Update - [self updateNavigation]; - [self updateVisiblePageStates]; - - // Animate, hide grid and show paging scroll view - [UIView animateWithDuration:0.3 animations:^{ - tmpGridController.view.frame = CGRectOffset(self.view.bounds, 0, (self.startOnGrid ? -1 : 1) * self.view.bounds.size.height); - _pagingScrollView.frame = [self frameForPagingScrollView]; - } completion:^(BOOL finished) { - [tmpGridController willMoveToParentViewController:nil]; - [tmpGridController.view removeFromSuperview]; - [tmpGridController removeFromParentViewController]; - [self setControlsHidden:NO animated:YES permanent:NO]; // retrigger timer - }]; - -} - -#pragma mark - Control Hiding / Showing - -// If permanent then we don't set timers to hide again -// Fades all controls on iOS 5 & 6, and iOS 7 controls slide and fade -- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent { - - // Force visible - if (![self numberOfPhotos] || _gridController || _alwaysShowControls) - hidden = NO; - - // Cancel any timers - [self cancelControlHiding]; - - // Animations & positions - BOOL slideAndFade = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7"); - CGFloat animatonOffset = 20; - CGFloat animationDuration = (animated ? 0.35 : 0); - - // Status bar - if (!_leaveStatusBarAlone) { - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - - // iOS 7 - // Hide status bar - if (!_isVCBasedStatusBarAppearance) { - - // Non-view controller based - - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated ? UIStatusBarAnimationSlide : UIStatusBarAnimationNone]; - - } else { - - // View controller based so animate away - _statusBarShouldBeHidden = hidden; - [UIView animateWithDuration:animationDuration animations:^(void) { - [self setNeedsStatusBarAppearanceUpdate]; - } completion:^(BOOL finished) {}]; - - } - - } else { - - // iOS < 7 - // Status bar and nav bar positioning - BOOL fullScreen = YES; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - if (SYSTEM_VERSION_LESS_THAN(@"7")) fullScreen = self.wantsFullScreenLayout; -#endif - if (fullScreen) { - - // Need to get heights and set nav bar position to overcome display issues - - // Get status bar height if visible - CGFloat statusBarHeight = 0; - if (![UIApplication sharedApplication].statusBarHidden) { - CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; - statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); - } - - // Status Bar - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone]; - - // Get status bar height if visible - if (![UIApplication sharedApplication].statusBarHidden) { - CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; - statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); - } - - // Set navigation bar frame - CGRect navBarFrame = self.navigationController.navigationBar.frame; - navBarFrame.origin.y = statusBarHeight; - self.navigationController.navigationBar.frame = navBarFrame; - - } - - } - } - - // Toolbar, nav bar and captions - // Pre-appear animation positions for iOS 7 sliding - if (slideAndFade && [self areControlsHidden] && !hidden && animated) { - - // Toolbar - _toolbar.frame = CGRectOffset([self frameForToolbarAtOrientation:self.interfaceOrientation], 0, animatonOffset); - - // Captions - for (MWZoomingScrollView *page in _visiblePages) { - if (page.captionView) { - MWCaptionView *v = page.captionView; - // Pass any index, all we're interested in is the Y - CGRect captionFrame = [self frameForCaptionView:v atIndex:0]; - captionFrame.origin.x = v.frame.origin.x; // Reset X - v.frame = CGRectOffset(captionFrame, 0, animatonOffset); - } - } - - } - [UIView animateWithDuration:animationDuration animations:^(void) { - - CGFloat alpha = hidden ? 0 : 1; - - // Nav bar slides up on it's own on iOS 7 - [self.navigationController.navigationBar setAlpha:alpha]; - - // Toolbar - if (slideAndFade) { - _toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation]; - if (hidden) _toolbar.frame = CGRectOffset(_toolbar.frame, 0, animatonOffset); - } - _toolbar.alpha = alpha; - - // Captions - for (MWZoomingScrollView *page in _visiblePages) { - if (page.captionView) { - MWCaptionView *v = page.captionView; - if (slideAndFade) { - // Pass any index, all we're interested in is the Y - CGRect captionFrame = [self frameForCaptionView:v atIndex:0]; - captionFrame.origin.x = v.frame.origin.x; // Reset X - if (hidden) captionFrame = CGRectOffset(captionFrame, 0, animatonOffset); - v.frame = captionFrame; - } - v.alpha = alpha; - } - } - - // Selected buttons - for (MWZoomingScrollView *page in _visiblePages) { - if (page.selectedButton) { - UIButton *v = page.selectedButton; - CGRect newFrame = [self frameForSelectedButton:v atIndex:0]; - newFrame.origin.x = v.frame.origin.x; - // v.frame = newFrame; - } - } - - } completion:^(BOOL finished) {}]; - - // Control hiding timer - // Will cancel existing timer but only begin hiding if - // they are visible - if (!permanent) [self hideControlsAfterDelay]; - -} - -- (BOOL)prefersStatusBarHidden { - if (!_leaveStatusBarAlone) { - return _statusBarShouldBeHidden; - } else { - return [self presentingViewControllerPrefersStatusBarHidden]; - } -} - -- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { - return UIStatusBarAnimationSlide; -} - -- (void)cancelControlHiding { - // If a timer exists then cancel and release - if (_controlVisibilityTimer) { - [_controlVisibilityTimer invalidate]; - _controlVisibilityTimer = nil; - } -} - -// Enable/disable control visiblity timer -- (void)hideControlsAfterDelay { - if (![self areControlsHidden]) { - [self cancelControlHiding]; - _controlVisibilityTimer = [NSTimer scheduledTimerWithTimeInterval:self.delayToHideElements target:self selector:@selector(hideControls) userInfo:nil repeats:NO]; - } -} - -- (BOOL)areControlsHidden { return (_toolbar.alpha == 0); } -- (void)hideControls { [self setControlsHidden:YES animated:YES permanent:NO]; } -- (void)toggleControls { [self setControlsHidden:![self areControlsHidden] animated:YES permanent:NO]; } - -#pragma mark - Properties - -// Handle depreciated method -- (void)setInitialPageIndex:(NSUInteger)index { - [self setCurrentPhotoIndex:index]; -} - -- (void)setCurrentPhotoIndex:(NSUInteger)index { - // Validate - NSUInteger photoCount = [self numberOfPhotos]; - if (photoCount == 0) { - index = 0; - } else { - if (index >= photoCount) - index = [self numberOfPhotos]-1; - } - _currentPageIndex = index; - if ([self isViewLoaded]) { - [self jumpToPageAtIndex:index animated:NO]; - if (!_viewIsActive) - [self tilePages]; // Force tiling if view is not visible - } -} - -#pragma mark - Misc - -- (void)doneButtonPressed:(id)sender { - // Only if we're modal and there's a done button - if (_doneButton) { - // See if we actually just want to show/hide grid - if (self.enableGrid) { - if (self.startOnGrid && !_gridController) { - [self showGrid:YES]; - return; - } else if (!self.startOnGrid && _gridController) { - [self hideGrid]; - return; - } - } - // Dismiss view controller - if ([_delegate respondsToSelector:@selector(photoBrowserDidFinishModalPresentation:)]) { - // Call delegate method and let them dismiss us - [_delegate photoBrowserDidFinishModalPresentation:self]; - } else { - [self dismissViewControllerAnimated:YES completion:nil]; - } - } -} - -#pragma mark - Actions - -- (void)actionButtonPressed:(id)sender { - if (_actionsSheet) { - - // Dismiss - [_actionsSheet dismissWithClickedButtonIndex:_actionsSheet.cancelButtonIndex animated:YES]; - - } else { - - // Only react when image has loaded - id <MWPhoto> photo = [self photoAtIndex:_currentPageIndex]; - if ([self numberOfPhotos] > 0 && [photo underlyingImage]) { - - // If they have defined a delegate method then just message them - if ([self.delegate respondsToSelector:@selector(photoBrowser:actionButtonPressedForPhotoAtIndex:)]) { - - // Let delegate handle things - [self.delegate photoBrowser:self actionButtonPressedForPhotoAtIndex:_currentPageIndex]; - - } else { - - // Handle default actions - if (SYSTEM_VERSION_LESS_THAN(@"6")) { - - // Old handling of activities with action sheet - if ([MFMailComposeViewController canSendMail]) { - _actionsSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self - cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil - otherButtonTitles:NSLocalizedString(@"Save", nil), NSLocalizedString(@"Copy", nil), NSLocalizedString(@"Email", nil), nil]; - } else { - _actionsSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self - cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil - otherButtonTitles:NSLocalizedString(@"Save", nil), NSLocalizedString(@"Copy", nil), nil]; - } - _actionsSheet.tag = ACTION_SHEET_OLD_ACTIONS; - _actionsSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - [_actionsSheet showFromBarButtonItem:sender animated:YES]; - } else { - [_actionsSheet showInView:self.view]; - } - - } else { - - // Show activity view controller - NSMutableArray *items = [NSMutableArray arrayWithObject:[photo underlyingImage]]; - if (photo.caption) { - [items addObject:photo.caption]; - } - self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; - - // Show loading spinner after a couple of seconds - double delayInSeconds = 2.0; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - if (self.activityViewController) { - [self showProgressHUDWithMessage:nil]; - } - }); - - // Show - typeof(self) __weak weakSelf = self; - [self.activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) { - weakSelf.activityViewController = nil; - [weakSelf hideControlsAfterDelay]; - [weakSelf hideProgressHUD:YES]; - }]; - [self presentViewController:self.activityViewController animated:YES completion:nil]; - - } - - } - - // Keep controls hidden - [self setControlsHidden:NO animated:YES permanent:YES]; - - } - } -} - -#pragma mark - Action Sheet Delegate - -- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { - if (actionSheet.tag == ACTION_SHEET_OLD_ACTIONS) { - // Old Actions - _actionsSheet = nil; - if (buttonIndex != actionSheet.cancelButtonIndex) { - if (buttonIndex == actionSheet.firstOtherButtonIndex) { - [self savePhoto]; return; - } else if (buttonIndex == actionSheet.firstOtherButtonIndex + 1) { - [self copyPhoto]; return; - } else if (buttonIndex == actionSheet.firstOtherButtonIndex + 2) { - [self emailPhoto]; return; - } - } - } - [self hideControlsAfterDelay]; // Continue as normal... -} - -#pragma mark - Action Progress - -- (MBProgressHUD *)progressHUD { - if (!_progressHUD) { - _progressHUD = [[MBProgressHUD alloc] initWithView:self.view]; - _progressHUD.minSize = CGSizeMake(120, 120); - _progressHUD.minShowTime = 1; - // The sample image is based on the - // work by: http://www.pixelpressicons.com - // licence: http://creativecommons.org/licenses/by/2.5/ca/ - self.progressHUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MWPhotoBrowser.bundle/images/Checkmark.png"]]; - [self.view addSubview:_progressHUD]; - } - return _progressHUD; -} - -- (void)showProgressHUDWithMessage:(NSString *)message { - self.progressHUD.labelText = message; - self.progressHUD.mode = MBProgressHUDModeIndeterminate; - [self.progressHUD show:YES]; - self.navigationController.navigationBar.userInteractionEnabled = NO; -} - -- (void)hideProgressHUD:(BOOL)animated { - [self.progressHUD hide:animated]; - self.navigationController.navigationBar.userInteractionEnabled = YES; -} - -- (void)showProgressHUDCompleteMessage:(NSString *)message { - if (message) { - if (self.progressHUD.isHidden) [self.progressHUD show:YES]; - self.progressHUD.labelText = message; - self.progressHUD.mode = MBProgressHUDModeCustomView; - [self.progressHUD hide:YES afterDelay:1.5]; - } else { - [self.progressHUD hide:YES]; - } - self.navigationController.navigationBar.userInteractionEnabled = YES; -} - -#pragma mark - Actions - -- (void)savePhoto { - id <MWPhoto> photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Saving", @"Displayed with ellipsis as 'Saving...' when an item is in the process of being saved")]]; - [self performSelector:@selector(actuallySavePhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallySavePhoto:(id<MWPhoto>)photo { - if ([photo underlyingImage]) { - UIImageWriteToSavedPhotosAlbum([photo underlyingImage], self, - @selector(image:didFinishSavingWithError:contextInfo:), nil); - } -} - -- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { - [self showProgressHUDCompleteMessage: error ? NSLocalizedString(@"Failed", @"Informing the user a process has failed") : NSLocalizedString(@"Saved", @"Informing the user an item has been saved")]; - [self hideControlsAfterDelay]; // Continue as normal... -} - -- (void)copyPhoto { - id <MWPhoto> photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Copying", @"Displayed with ellipsis as 'Copying...' when an item is in the process of being copied")]]; - [self performSelector:@selector(actuallyCopyPhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallyCopyPhoto:(id<MWPhoto>)photo { - if ([photo underlyingImage]) { - [[UIPasteboard generalPasteboard] setData:UIImagePNGRepresentation([photo underlyingImage]) - forPasteboardType:@"public.png"]; - [self showProgressHUDCompleteMessage:NSLocalizedString(@"Copied", @"Informing the user an item has finished copying")]; - [self hideControlsAfterDelay]; // Continue as normal... - } -} - -- (void)emailPhoto { - id <MWPhoto> photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Preparing", @"Displayed with ellipsis as 'Preparing...' when an item is in the process of being prepared")]]; - [self performSelector:@selector(actuallyEmailPhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallyEmailPhoto:(id<MWPhoto>)photo { - if ([photo underlyingImage]) { - MFMailComposeViewController *emailer = [[MFMailComposeViewController alloc] init]; - emailer.mailComposeDelegate = self; - [emailer setSubject:NSLocalizedString(@"Photo", nil)]; - [emailer addAttachmentData:UIImagePNGRepresentation([photo underlyingImage]) mimeType:@"png" fileName:@"Photo.png"]; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - emailer.modalPresentationStyle = UIModalPresentationPageSheet; - } - [self presentViewController:emailer animated:YES completion:nil]; - [self hideProgressHUD:NO]; - } -} - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { - if (result == MFMailComposeResultFailed) { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Email", nil) - message:NSLocalizedString(@"Email failed to send. Please try again.", nil) - delegate:nil cancelButtonTitle:NSLocalizedString(@"Dismiss", nil) otherButtonTitles:nil]; - [alert show]; - } - [self dismissViewControllerAnimated:YES completion:nil]; -} --(void)setHiddenStatusBar:(BOOL)isHidden -{ - [[UIApplication sharedApplication] setStatusBarHidden:isHidden withAnimation:YES]; -} -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowserPrivate.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowserPrivate.h deleted file mode 100755 index b243f41..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoBrowserPrivate.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// MWPhotoBrowser_Private.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 08/10/2013. -// -// - -#import <UIKit/UIKit.h> -#import "MBProgressHUD.h" -#import "MWGridViewController.h" -#import "MWZoomingScrollView.h" - -// Declare private methods of browser -@interface MWPhotoBrowser () { - - // Data - NSUInteger _photoCount; - NSMutableArray *_photos; - NSMutableArray *_thumbPhotos; - NSArray *_depreciatedPhotoData; // Depreciated - - // Views - UIScrollView *_pagingScrollView; - - // Paging & layout - NSMutableSet *_visiblePages, *_recycledPages; - NSUInteger _currentPageIndex; - NSUInteger _previousPageIndex; - CGRect _previousLayoutBounds; - NSUInteger _pageIndexBeforeRotation; - - // Navigation & controls - UIToolbar *_toolbar; - NSTimer *_controlVisibilityTimer; - UIBarButtonItem *_previousButton, *_nextButton, *_actionButton, *_doneButton; - MBProgressHUD *_progressHUD; - UIActionSheet *_actionsSheet; - - // Grid - MWGridViewController *_gridController; - UIBarButtonItem *_gridPreviousLeftNavItem; - UIBarButtonItem *_gridPreviousRightNavItem; - - // Appearance - BOOL _previousNavBarHidden; - BOOL _previousNavBarTranslucent; - UIBarStyle _previousNavBarStyle; - UIStatusBarStyle _previousStatusBarStyle; - UIColor *_previousNavBarTintColor; - UIColor *_previousNavBarBarTintColor; - UIBarButtonItem *_previousViewControllerBackButton; - UIImage *_previousNavigationBarBackgroundImageDefault; - UIImage *_previousNavigationBarBackgroundImageLandscapePhone; - - // Misc - BOOL _hasBelongedToViewController; - BOOL _isVCBasedStatusBarAppearance; - BOOL _statusBarShouldBeHidden; - BOOL _displayActionButton; - BOOL _leaveStatusBarAlone; - BOOL _performingLayout; - BOOL _rotating; - BOOL _viewIsActive; // active as in it's in the view heirarchy - BOOL _didSavePreviousStateOfNavBar; - BOOL _skipNextPagingScrollViewPositioning; - BOOL _viewHasAppearedInitially; - CGPoint _currentGridContentOffset; - -} - -// Properties -@property (nonatomic) UIActivityViewController *activityViewController; - -// Layout -- (void)layoutVisiblePages; -- (void)performLayout; -- (BOOL)presentingViewControllerPrefersStatusBarHidden; - -// Nav Bar Appearance -- (void)setNavBarAppearance:(BOOL)animated; -- (void)storePreviousNavBarAppearance; -- (void)restorePreviousNavBarAppearance:(BOOL)animated; - -// Paging -- (void)tilePages; -- (BOOL)isDisplayingPageForIndex:(NSUInteger)index; -- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index; -- (MWZoomingScrollView *)pageDisplayingPhoto:(id<MWPhoto>)photo; -- (MWZoomingScrollView *)dequeueRecycledPage; -- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index; -- (void)didStartViewingPageAtIndex:(NSUInteger)index; - -// Frames -- (CGRect)frameForPagingScrollView; -- (CGRect)frameForPageAtIndex:(NSUInteger)index; -- (CGSize)contentSizeForPagingScrollView; -- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index; -- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation; -- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index; -- (CGRect)frameForSelectedButton:(UIButton *)selectedButton atIndex:(NSUInteger)index; - -// Navigation -- (void)updateNavigation; -- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated; -- (void)gotoPreviousPage; -- (void)gotoNextPage; - -// Grid -- (void)showGrid:(BOOL)animated; -- (void)hideGrid; - -// Controls -- (void)cancelControlHiding; -- (void)hideControlsAfterDelay; -- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent; -- (void)toggleControls; -- (BOOL)areControlsHidden; - -// Data -- (NSUInteger)numberOfPhotos; -- (id<MWPhoto>)photoAtIndex:(NSUInteger)index; -- (id<MWPhoto>)thumbPhotoAtIndex:(NSUInteger)index; -- (UIImage *)imageForPhoto:(id<MWPhoto>)photo; -- (BOOL)photoIsSelectedAtIndex:(NSUInteger)index; -- (void)setPhotoSelected:(BOOL)selected atIndex:(NSUInteger)index; -- (void)loadAdjacentPhotosIfNecessary:(id<MWPhoto>)photo; -- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent; - -// Actions -- (void)savePhoto; -- (void)copyPhoto; -- (void)emailPhoto; - -@end - diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoProtocol.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoProtocol.h deleted file mode 100755 index 4a9bccf..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWPhotoProtocol.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// MWPhotoProtocol.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 02/01/2012. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import <Foundation/Foundation.h> - -// Notifications -#define MWPHOTO_LOADING_DID_END_NOTIFICATION @"MWPHOTO_LOADING_DID_END_NOTIFICATION" -#define MWPHOTO_PROGRESS_NOTIFICATION @"MWPHOTO_PROGRESS_NOTIFICATION" - -// If you wish to use your own data models for photo then they must conform -// to this protocol. See instructions for details on each method. -// Otherwise you can use the MWPhoto object or subclass it yourself to -// store more information per photo. -// -// You can see the MWPhoto class for an example implementation of this protocol -// -@protocol MWPhoto <NSObject> - -@required - -// Return underlying UIImage to be displayed -// Return nil if the image is not immediately available (loaded into memory, preferably -// already decompressed) and needs to be loaded from a source (cache, file, web, etc) -// IMPORTANT: You should *NOT* use this method to initiate -// fetching of images from any external of source. That should be handled -// in -loadUnderlyingImageAndNotify: which may be called by the photo browser if this -// methods returns nil. -@property (nonatomic, strong) UIImage *underlyingImage; - -// Called when the browser has determined the underlying images is not -// already loaded into memory but needs it. -- (void)loadUnderlyingImageAndNotify; - -// Fetch the image data from a source and notify when complete. -// You must load the image asyncronously (and decompress it for better performance). -// It is recommended that you use SDWebImageDecoder to perform the decompression. -// See MWPhoto object for an example implementation. -// When the underlying UIImage is loaded (or failed to load) you should post the following -// notification: -// [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION -// object:self]; -- (void)performLoadUnderlyingImageAndNotify; - -// This is called when the photo browser has determined the photo data -// is no longer needed or there are low memory conditions -// You should release any underlying (possibly large and decompressed) image data -// as long as the image can be re-loaded (from cache, file, or URL) -- (void)unloadUnderlyingImage; - -@optional - -// Return a caption string to be displayed over the image -// Return nil to display no caption -- (NSString *)caption; - -// Cancel any background loading of image data -- (void)cancelAnyLoading; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.h deleted file mode 100755 index 8445b62..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// UIImageViewTap.h -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@protocol MWTapDetectingImageViewDelegate; - -@interface MWTapDetectingImageView : UIImageView {} - -@property (nonatomic, weak) id <MWTapDetectingImageViewDelegate> tapDelegate; - -@end - -@protocol MWTapDetectingImageViewDelegate <NSObject> - -@optional - -- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch; -- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch; -- (void)imageView:(UIImageView *)imageView tripleTapDetected:(UITouch *)touch; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.m deleted file mode 100755 index b0666ba..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingImageView.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// UIImageViewTap.m -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import "MWTapDetectingImageView.h" - -@implementation MWTapDetectingImageView - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithImage:(UIImage *)image { - if ((self = [super initWithImage:image])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage { - if ((self = [super initWithImage:image highlightedImage:highlightedImage])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - UITouch *touch = [touches anyObject]; - NSUInteger tapCount = touch.tapCount; - switch (tapCount) { - case 1: - [self handleSingleTap:touch]; - break; - case 2: - [self handleDoubleTap:touch]; - break; - case 3: - [self handleTripleTap:touch]; - break; - default: - break; - } - [[self nextResponder] touchesEnded:touches withEvent:event]; -} - -- (void)handleSingleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:singleTapDetected:)]) - [_tapDelegate imageView:self singleTapDetected:touch]; -} - -- (void)handleDoubleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:doubleTapDetected:)]) - [_tapDelegate imageView:self doubleTapDetected:touch]; -} - -- (void)handleTripleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:tripleTapDetected:)]) - [_tapDelegate imageView:self tripleTapDetected:touch]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.h deleted file mode 100755 index d5309e9..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// UIViewTap.h -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@protocol MWTapDetectingViewDelegate; - -@interface MWTapDetectingView : UIView {} - -@property (nonatomic, weak) id <MWTapDetectingViewDelegate> tapDelegate; - -@end - -@protocol MWTapDetectingViewDelegate <NSObject> - -@optional - -- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch; -- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch; -- (void)view:(UIView *)view tripleTapDetected:(UITouch *)touch; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.m deleted file mode 100755 index e1796bc..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWTapDetectingView.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// UIViewTap.m -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import "MWTapDetectingView.h" - -@implementation MWTapDetectingView - -- (id)init { - if ((self = [super init])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - UITouch *touch = [touches anyObject]; - NSUInteger tapCount = touch.tapCount; - switch (tapCount) { - case 1: - [self handleSingleTap:touch]; - break; - case 2: - [self handleDoubleTap:touch]; - break; - case 3: - [self handleTripleTap:touch]; - break; - default: - break; - } - [[self nextResponder] touchesEnded:touches withEvent:event]; -} - -- (void)handleSingleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:singleTapDetected:)]) - [_tapDelegate view:self singleTapDetected:touch]; -} - -- (void)handleDoubleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:doubleTapDetected:)]) - [_tapDelegate view:self doubleTapDetected:touch]; -} - -- (void)handleTripleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:tripleTapDetected:)]) - [_tapDelegate view:self tripleTapDetected:touch]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.h b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.h deleted file mode 100755 index c3d8a95..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// ZoomingScrollView.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "MWPhotoProtocol.h" -#import "MWTapDetectingImageView.h" -#import "MWTapDetectingView.h" - -@class MWPhotoBrowser, MWPhoto, MWCaptionView; - -@interface MWZoomingScrollView : UIScrollView <UIScrollViewDelegate, MWTapDetectingImageViewDelegate, MWTapDetectingViewDelegate> { - -} - -@property () NSUInteger index; -@property (nonatomic) id <MWPhoto> photo; -@property (nonatomic, weak) MWCaptionView *captionView; -@property (nonatomic, weak) UIButton *selectedButton; - -- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser; -- (void)displayImage; -- (void)displayImageFailure; -- (void)setMaxMinZoomScalesForCurrentBounds; -- (void)prepareForReuse; - -@end diff --git a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.m b/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.m deleted file mode 100755 index 6a03a44..0000000 --- a/TeamTalk/IOSDuoduo/ThridFramework/MW/MWZoomingScrollView.m +++ /dev/null @@ -1,411 +0,0 @@ -// -// ZoomingScrollView.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import "MWCommon.h" -#import "MWZoomingScrollView.h" -#import "MWPhotoBrowser.h" -#import "MWPhoto.h" -#import "DACircularProgressView.h" -#import "MWPhotoBrowserPrivate.h" - -// Private methods and properties -@interface MWZoomingScrollView () { - - MWPhotoBrowser __weak *_photoBrowser; - MWTapDetectingView *_tapView; // for background taps - MWTapDetectingImageView *_photoImageView; - DACircularProgressView *_loadingIndicator; - UIImageView *_loadingError; - -} - -@end - -@implementation MWZoomingScrollView - -- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser { - if ((self = [super init])) { - - // Setup - _index = NSUIntegerMax; - _photoBrowser = browser; - - // Tap view for background - _tapView = [[MWTapDetectingView alloc] initWithFrame:self.bounds]; - _tapView.tapDelegate = self; - _tapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _tapView.backgroundColor = [UIColor blackColor]; - [self addSubview:_tapView]; - - // Image view - _photoImageView = [[MWTapDetectingImageView alloc] initWithFrame:CGRectZero]; - _photoImageView.tapDelegate = self; - _photoImageView.contentMode = UIViewContentModeCenter; - _photoImageView.backgroundColor = [UIColor blackColor]; - [self addSubview:_photoImageView]; - - // Loading indicator - _loadingIndicator = [[DACircularProgressView alloc] initWithFrame:CGRectMake(140.0f, 30.0f, 40.0f, 40.0f)]; - _loadingIndicator.userInteractionEnabled = NO; - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { - _loadingIndicator.thicknessRatio = 0.1; - _loadingIndicator.roundedCorners = NO; - } else { - _loadingIndicator.thicknessRatio = 0.2; - _loadingIndicator.roundedCorners = YES; - } - _loadingIndicator.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | - UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin; - [self addSubview:_loadingIndicator]; - - // Listen progress notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(setProgressFromNotification:) - name:MWPHOTO_PROGRESS_NOTIFICATION - object:nil]; - - // Setup - self.backgroundColor = [UIColor blackColor]; - self.delegate = self; - self.showsHorizontalScrollIndicator = NO; - self.showsVerticalScrollIndicator = NO; - self.decelerationRate = UIScrollViewDecelerationRateFast; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)prepareForReuse { - [self hideImageFailure]; - self.photo = nil; - self.captionView = nil; - self.selectedButton = nil; - _photoImageView.image = nil; - _index = NSUIntegerMax; -} - -#pragma mark - Image - -- (void)setPhoto:(id<MWPhoto>)photo { - // Cancel any loading on old photo - if (_photo && photo == nil) { - if ([_photo respondsToSelector:@selector(cancelAnyLoading)]) { - [_photo cancelAnyLoading]; - } - } - _photo = photo; - UIImage *img = [_photoBrowser imageForPhoto:_photo]; - if (img) { - [self displayImage]; - } else { - // Will be loading so show loading - [self showLoadingIndicator]; - } -} - -// Get and display image -- (void)displayImage { - if (_photo && _photoImageView.image == nil) { - - // Reset - self.maximumZoomScale = 1; - self.minimumZoomScale = 1; - self.zoomScale = 1; - self.contentSize = CGSizeMake(0, 0); - - // Get image from browser as it handles ordering of fetching - UIImage *img = [_photoBrowser imageForPhoto:_photo]; - if (img) { - - // Hide indicator - [self hideLoadingIndicator]; - - // Set image - _photoImageView.image = img; - _photoImageView.hidden = NO; - - // Setup photo frame - CGRect photoImageViewFrame; - photoImageViewFrame.origin = CGPointZero; - photoImageViewFrame.size = img.size; - _photoImageView.frame = photoImageViewFrame; - self.contentSize = photoImageViewFrame.size; - - // Set zoom to minimum zoom - [self setMaxMinZoomScalesForCurrentBounds]; - - } else { - - // Failed no image - [self displayImageFailure]; - - } - [self setNeedsLayout]; - } -} - -// Image failed so just show black! -- (void)displayImageFailure { - [self hideLoadingIndicator]; - _photoImageView.image = nil; - if (!_loadingError) { - _loadingError = [UIImageView new]; - _loadingError.image = [UIImage imageNamed:@"MWPhotoBrowser.bundle/images/ImageError.png"]; - _loadingError.userInteractionEnabled = NO; - _loadingError.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | - UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin; - [_loadingError sizeToFit]; - [self addSubview:_loadingError]; - } - _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.), - floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2), - _loadingError.frame.size.width, - _loadingError.frame.size.height); -} - -- (void)hideImageFailure { - if (_loadingError) { - [_loadingError removeFromSuperview]; - _loadingError = nil; - } -} - -#pragma mark - Loading Progress - -- (void)setProgressFromNotification:(NSNotification *)notification { - NSDictionary *dict = [notification object]; - id <MWPhoto> photoWithProgress = [dict objectForKey:@"photo"]; - if (photoWithProgress == self.photo) { - float progress = [[dict valueForKey:@"progress"] floatValue]; - _loadingIndicator.progress = MAX(MIN(1, progress), 0); - } -} - -- (void)hideLoadingIndicator { - _loadingIndicator.hidden = YES; -} - -- (void)showLoadingIndicator { - self.zoomScale = 0; - self.minimumZoomScale = 0; - self.maximumZoomScale = 0; - _loadingIndicator.progress = 0; - _loadingIndicator.hidden = NO; - [self hideImageFailure]; -} - -#pragma mark - Setup - -- (CGFloat)initialZoomScaleWithMinScale { - CGFloat zoomScale = self.minimumZoomScale; - if (_photoImageView && _photoBrowser.zoomPhotosToFill) { - // Zoom image to fill if the aspect ratios are fairly similar - CGSize boundsSize = self.bounds.size; - CGSize imageSize = _photoImageView.image.size; - CGFloat boundsAR = boundsSize.width / boundsSize.height; - CGFloat imageAR = imageSize.width / imageSize.height; - CGFloat xScale = boundsSize.width / imageSize.width; // the scale needed to perfectly fit the image width-wise - CGFloat yScale = boundsSize.height / imageSize.height; // the scale needed to perfectly fit the image height-wise - // Zooms standard portrait images on a 3.5in screen but not on a 4in screen. - if (ABS(boundsAR - imageAR) < 0.17) { - zoomScale = MAX(xScale, yScale); - // Ensure we don't zoom in or out too far, just in case - zoomScale = MIN(MAX(self.minimumZoomScale, zoomScale), self.maximumZoomScale); - } - } - return zoomScale; -} - -- (void)setMaxMinZoomScalesForCurrentBounds { - - // Reset - self.maximumZoomScale = 1; - self.minimumZoomScale = 1; - self.zoomScale = 1; - - // Bail if no image - if (_photoImageView.image == nil) return; - - // Reset position - _photoImageView.frame = CGRectMake(0, 0, _photoImageView.frame.size.width, _photoImageView.frame.size.height); - - // Sizes - CGSize boundsSize = self.bounds.size; - CGSize imageSize = _photoImageView.image.size; - - // Calculate Min - CGFloat xScale = boundsSize.width / imageSize.width; // the scale needed to perfectly fit the image width-wise - CGFloat yScale = boundsSize.height / imageSize.height; // the scale needed to perfectly fit the image height-wise - CGFloat minScale = MIN(xScale, yScale); // use minimum of these to allow the image to become fully visible - - // Calculate Max - CGFloat maxScale = 3; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - // Let them go a bit bigger on a bigger screen! - maxScale = 4; - } - - // Image is smaller than screen so no zooming! - if (xScale >= 1 && yScale >= 1) { - minScale = 1.0; - } - - // Set min/max zoom - self.maximumZoomScale = maxScale; - self.minimumZoomScale = minScale; - - // Initial zoom - self.zoomScale = [self initialZoomScaleWithMinScale]; - - // If we're zooming to fill then centralise - if (self.zoomScale != minScale) { - // Centralise - self.contentOffset = CGPointMake((imageSize.width * self.zoomScale - boundsSize.width) / 2.0, - (imageSize.height * self.zoomScale - boundsSize.height) / 2.0); - // Disable scrolling initially until the first pinch to fix issues with swiping on an initally zoomed in photo - self.scrollEnabled = NO; - } - - // Layout - [self setNeedsLayout]; - -} - -#pragma mark - Layout - -- (void)layoutSubviews { - - // Update tap view frame - _tapView.frame = self.bounds; - - // Position indicators (centre does not seem to work!) - if (!_loadingIndicator.hidden) - _loadingIndicator.frame = CGRectMake(floorf((self.bounds.size.width - _loadingIndicator.frame.size.width) / 2.), - floorf((self.bounds.size.height - _loadingIndicator.frame.size.height) / 2), - _loadingIndicator.frame.size.width, - _loadingIndicator.frame.size.height); - if (_loadingError) - _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.), - floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2), - _loadingError.frame.size.width, - _loadingError.frame.size.height); - - // Super - [super layoutSubviews]; - - // Center the image as it becomes smaller than the size of the screen - CGSize boundsSize = self.bounds.size; - CGRect frameToCenter = _photoImageView.frame; - - // Horizontally - if (frameToCenter.size.width < boundsSize.width) { - frameToCenter.origin.x = floorf((boundsSize.width - frameToCenter.size.width) / 2.0); - } else { - frameToCenter.origin.x = 0; - } - - // Vertically - if (frameToCenter.size.height < boundsSize.height) { - frameToCenter.origin.y = floorf((boundsSize.height - frameToCenter.size.height) / 2.0); - } else { - frameToCenter.origin.y = 0; - } - - // Center - if (!CGRectEqualToRect(_photoImageView.frame, frameToCenter)) - _photoImageView.frame = frameToCenter; - -} - -#pragma mark - UIScrollViewDelegate - -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - return _photoImageView; -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - [_photoBrowser cancelControlHiding]; -} - -- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { - self.scrollEnabled = YES; // reset - [_photoBrowser cancelControlHiding]; -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - [_photoBrowser hideControlsAfterDelay]; -} - -#pragma mark - Tap Detection - -- (void)handleSingleTap:(CGPoint)touchPoint { - [_photoBrowser performSelector:@selector(toggleControls) withObject:nil afterDelay:0.2]; -} - -- (void)handleDoubleTap:(CGPoint)touchPoint { - - // Cancel any single tap handling - [NSObject cancelPreviousPerformRequestsWithTarget:_photoBrowser]; - - // Zoom - if (self.zoomScale != self.minimumZoomScale && self.zoomScale != [self initialZoomScaleWithMinScale]) { - - // Zoom out - [self setZoomScale:self.minimumZoomScale animated:YES]; - - } else { - - // Zoom in to twice the size - CGFloat newZoomScale = ((self.maximumZoomScale + self.minimumZoomScale) / 2); - CGFloat xsize = self.bounds.size.width / newZoomScale; - CGFloat ysize = self.bounds.size.height / newZoomScale; - [self zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES]; - - } - - // Delay controls - [_photoBrowser hideControlsAfterDelay]; - -} - -// Image View -- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch { - [self handleSingleTap:[touch locationInView:imageView]]; -} -- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch { - [self handleDoubleTap:[touch locationInView:imageView]]; -} - -// Background View -- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch { - // Translate touch location to image view location - CGFloat touchX = [touch locationInView:view].x; - CGFloat touchY = [touch locationInView:view].y; - touchX *= 1/self.zoomScale; - touchY *= 1/self.zoomScale; - touchX += self.contentOffset.x; - touchY += self.contentOffset.y; - [self handleSingleTap:CGPointMake(touchX, touchY)]; -} -- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch { - // Translate touch location to image view location - CGFloat touchX = [touch locationInView:view].x; - CGFloat touchY = [touch locationInView:view].y; - touchX *= 1/self.zoomScale; - touchY *= 1/self.zoomScale; - touchX += self.contentOffset.x; - touchY += self.contentOffset.y; - [self handleDoubleTap:CGPointMake(touchX, touchY)]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.h b/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.h deleted file mode 100755 index c5b2052..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Taken from MADismissiveTextView -// https://github.com/mikeahmarani/MADismissiveTextView -// -// Created by Mike Ahmarani on 12-02-18. -// Copyright (c) 2012 Mike Ahmarani. All rights reserved. -// -// -// Documentation -// http://cocoadocs.org/docsets/JSMessagesViewController -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// http://opensource.org/licenses/MIT -// - -#import <UIKit/UIKit.h> - -/** - * The delegate of a `JSDismissiveTextView` object must adopt the `JSDismissiveTextViewDelegate` protocol. - */ -@protocol JSDismissiveTextViewDelegate <NSObject> - -@optional -/** - * Tells the delegate that the keyboard has full appeared on screen. - */ -- (void)keyboardDidShow; - -/** - * Tells the delegate that the keyboard origin has moved to the specified point. - * - * @param point The origin of the keyboard's frame in its superview's coordinate system. - */ -- (void)keyboardDidScrollToPoint:(CGPoint)point; - -/** - * Tells the delegate that the keyboard is about to be dismissed. The keyboard will be removed from from its superview and resign first responder. - */ -- (void)keyboardWillBeDismissed; - -/** - * Tells the delegate that the keyboard origin is about to move back to the specified point. - * - * @param point The new origin of the keyboard's frame after it has completed animation. - */ -- (void)keyboardWillSnapBackToPoint:(CGPoint)point; - -@end - - -/** - * An instance of `JSDismissiveTextView` is a means for displaying a text view that is contained as a subview of the keyboard's `inputAccessoryView` and responds to a pan gesture to dismiss the keyboard and end editing. - */ -@interface JSDismissiveTextView : UITextView - -/** - * The object that acts as the delegate of the receiving text view. - */ -@property (weak, nonatomic) id<JSDismissiveTextViewDelegate> keyboardDelegate; - -/** - * The pan gesture recognizer for the text view. - */ -@property (strong, nonatomic) UIPanGestureRecognizer *dismissivePanGestureRecognizer; - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.m b/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.m deleted file mode 100755 index e890b80..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSDismissiveTextView.m +++ /dev/null @@ -1,187 +0,0 @@ -// -// Taken from MADismissiveTextView -// https://github.com/mikeahmarani/MADismissiveTextView -// -// Created by Mike Ahmarani on 12-02-18. -// Copyright (c) 2012 Mike Ahmarani. All rights reserved. -// -// -// Documentation -// http://cocoadocs.org/docsets/JSMessagesViewController -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// http://opensource.org/licenses/MIT -// - -#import "JSDismissiveTextView.h" - -@interface JSDismissiveTextView () - -@property (strong, nonatomic) UIView *keyboardView; -@property (assign, nonatomic) CGFloat previousKeyboardY; - -- (void)handleKeyboardWillShowHideNotification:(NSNotification *)notification; -- (void)handlePanGesture:(UIPanGestureRecognizer *)pan; - -@end - - - -@implementation JSDismissiveTextView - -#pragma mark - Initialization - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if(self) { - self.editable = YES; - - // FIXME: this is a hack - // --------------------- - // init an empty inputAccessoryView to get a reference to the keyboard when it appears - // i.e., self.inputAccessoryView.superview <-- the keyboard (see notification handler below) - // otherwise self.inputAccessoryView == nil, thus self.inputAccessoryView.superivew == nil - // --------------------- - // Can you fix this? Submit a PR! :) - self.inputAccessoryView = [[UIView alloc] init]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleKeyboardWillShowHideNotification:) - name:UIKeyboardWillShowNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleKeyboardWillShowHideNotification:) - name:UIKeyboardDidShowNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleKeyboardWillShowHideNotification:) - name:UIKeyboardDidHideNotification - object:nil]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [_dismissivePanGestureRecognizer removeTarget:self action:@selector(handlePanGesture:)]; - _dismissivePanGestureRecognizer = nil; - _keyboardDelegate = nil; - _keyboardView = nil; -} - -#pragma mark - Setters - -- (void)setDismissivePanGestureRecognizer:(UIPanGestureRecognizer *)pan -{ - _dismissivePanGestureRecognizer = pan; - [_dismissivePanGestureRecognizer addTarget:self action:@selector(handlePanGesture:)]; -} - -#pragma mark - Notifications - -- (void)handleKeyboardWillShowHideNotification:(NSNotification *)notification -{ - if([notification.name isEqualToString:UIKeyboardWillShowNotification]) { - self.keyboardView.hidden = NO; - } - else if([notification.name isEqualToString:UIKeyboardDidShowNotification]) { - self.keyboardView = self.inputAccessoryView.superview; - self.keyboardView.hidden = NO; - - if(self.keyboardDelegate && [self.keyboardDelegate respondsToSelector:@selector(keyboardDidShow)]) - [self.keyboardDelegate keyboardDidShow]; - } - else if([notification.name isEqualToString:UIKeyboardDidHideNotification]) { - self.keyboardView.hidden = NO; - [self resignFirstResponder]; - } -} - -#pragma mark - Gestures - -- (void)handlePanGesture:(UIPanGestureRecognizer *)pan -{ - if(!self.keyboardView || self.keyboardView.hidden) - return; - - CGRect screenRect = [[UIScreen mainScreen] bounds]; - CGFloat screenHeight = screenRect.size.height; - - UIWindow *panWindow = [[UIApplication sharedApplication] keyWindow]; - CGPoint location = [pan locationInView:panWindow]; - CGPoint velocity = [pan velocityInView:panWindow]; - - switch (pan.state) { - case UIGestureRecognizerStateBegan: - self.previousKeyboardY = self.keyboardView.frame.origin.y; - break; - case UIGestureRecognizerStateEnded: - if(velocity.y > 0 && self.keyboardView.frame.origin.y > self.previousKeyboardY) { - - [UIView animateWithDuration:0.3 - delay:0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - self.keyboardView.frame = CGRectMake(0.0f, - screenHeight, - self.keyboardView.frame.size.width, - self.keyboardView.frame.size.height); - - if(self.keyboardDelegate && [self.keyboardDelegate respondsToSelector:@selector(keyboardWillBeDismissed)]) - [self.keyboardDelegate keyboardWillBeDismissed]; - } - completion:^(BOOL finished) { - self.keyboardView.hidden = YES; - self.keyboardView.frame = CGRectMake(0.0f, - self.previousKeyboardY, - self.keyboardView.frame.size.width, - self.keyboardView.frame.size.height); - [self resignFirstResponder]; - }]; - } - else { // gesture ended with no flick or a flick upwards, snap keyboard back to original position - [UIView animateWithDuration:0.2 - delay:0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - if(self.keyboardDelegate && [self.keyboardDelegate respondsToSelector:@selector(keyboardWillSnapBackToPoint:)]) { - [self.keyboardDelegate keyboardWillSnapBackToPoint:CGPointMake(0.0f, self.previousKeyboardY)]; - } - - self.keyboardView.frame = CGRectMake(0.0f, - self.previousKeyboardY, - self.keyboardView.frame.size.width, - self.keyboardView.frame.size.height); - } - completion:^(BOOL finished){ - }]; - } - break; - - // gesture is currently panning, match keyboard y to touch y - default: - if(location.y > self.keyboardView.frame.origin.y || self.keyboardView.frame.origin.y != self.previousKeyboardY) { - - CGFloat newKeyboardY = self.previousKeyboardY + (location.y - self.previousKeyboardY); - newKeyboardY = newKeyboardY < self.previousKeyboardY ? self.previousKeyboardY : newKeyboardY; - newKeyboardY = newKeyboardY > screenHeight ? screenHeight : newKeyboardY; - - self.keyboardView.frame = CGRectMake(0.0f, - newKeyboardY, - self.keyboardView.frame.size.width, - self.keyboardView.frame.size.height); - - if(self.keyboardDelegate && [self.keyboardDelegate respondsToSelector:@selector(keyboardDidScrollToPoint:)]) - [self.keyboardDelegate keyboardDidScrollToPoint:CGPointMake(0.0f, newKeyboardY)]; - } - break; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.h b/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.h deleted file mode 100755 index c400b80..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// JSMessageInputView.h -// -// Created by Jesse Squires on 2/12/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// Largely based on work by Sam Soffes -// https://github.com/soffes -// -// SSMessagesViewController -// https://github.com/soffes/ssmessagesviewcontroller -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import <UIKit/UIKit.h> -//#import "JSMessageTextView.h" -#import <HPGrowingTextView.h> -typedef enum -{ - JSInputBarStyleDefault, - JSInputBarStyleFlat -} JSInputBarStyle; - - -@protocol JSMessageInputViewDelegate <NSObject> - -- (void)viewheightChanged:(float)height; -- (void)textViewEnterSend; - -@end - - -@interface JSMessageInputView : UIImageView<HPGrowingTextViewDelegate> - -@property (strong) HPGrowingTextView *textView; -@property (strong) UIButton *sendButton; -@property (strong) UIButton *showUtilitysbutton; -@property (strong) UIButton *voiceButton; -@property (strong) UIImageView *recordButton; -@property (strong) UIButton *emotionbutton; -@property (assign) id<JSMessageInputViewDelegate> delegate; -#pragma mark - Initialization -- (id)initWithFrame:(CGRect)frame delegate:(id<JSMessageInputViewDelegate>)delegate; - -#pragma mark - Message input view -- (void)adjustTextViewHeightBy:(CGFloat)changeInHeight; - -+ (CGFloat)textViewLineHeight; -+ (CGFloat)maxLines; -+ (CGFloat)maxHeight; --(void)setDefaultHeight; -+ (JSInputBarStyle)inputBarStyle; -- (void)willBeginRecord; -- (void)willBeginInput;; -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.m b/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.m deleted file mode 100755 index 2bef887..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSMessageInputView.m +++ /dev/null @@ -1,248 +0,0 @@ -// -// JSMessageInputView.m -// -// Created by Jesse Squires on 2/12/13. -// Copyright (c) 2013 Hexed Bits. All rights reserved. -// -// http://www.hexedbits.com -// -// -// Largely based on work by Sam Soffes -// https://github.com/soffes -// -// SSMessagesViewController -// https://github.com/soffes/ssmessagesviewcontroller -// -// -// The MIT License -// Copyright (c) 2013 Jesse Squires -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#import "JSMessageInputView.h" -#import "NSString+JSMessagesView.h" -#import "UIImage+JSMessagesView.h" -#import "UIColor+JSMessagesView.h" -#import "std.h" -#import "UIView+DDAddition.h" -#define SEND_BUTTON_WIDTH 78.0f - - -@interface JSMessageInputView () - -- (void)setup; -- (void)setupTextView; -- (void)setupRecordButton; -@end - - - -@implementation JSMessageInputView - -@synthesize sendButton; - -#pragma mark - Initialization -- (id)initWithFrame:(CGRect)frame delegate:(id<JSMessageInputViewDelegate>)delegate -{ - self = [super initWithFrame:frame]; - if(self) { - [self setup]; - _delegate = delegate; - [self setAutoresizesSubviews:NO]; - } - return self; -} - -- (void)dealloc -{ - self.textView = nil; - self.sendButton = nil; -} - -- (BOOL)resignFirstResponder -{ - [self.textView resignFirstResponder]; - return [super resignFirstResponder]; -} - -+ (JSInputBarStyle)inputBarStyle -{ - return JSInputBarStyleDefault; -} - -#pragma mark - Setup -- (void)setup -{ - self.image = [UIImage inputBar]; - self.backgroundColor = [UIColor whiteColor]; - - self.opaque = YES; - self.userInteractionEnabled = YES; - UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 0.5)]; - line.backgroundColor=RGB(188, 188, 188); - [self addSubview:line]; - [self setupTextView]; - self.emotionbutton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.emotionbutton setBackgroundImage:[UIImage imageNamed:@"dd_emotion"] forState:UIControlStateNormal]; - self.emotionbutton.frame=CGRectMake(246, 9.0f, 28.0f, 28.0f); - [self setSendButton:self.emotionbutton]; - self.showUtilitysbutton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.showUtilitysbutton setBackgroundImage:[UIImage imageNamed:@"dd_utility"] forState:UIControlStateNormal]; - self.showUtilitysbutton.frame=CGRectMake(282, 9.0f, 28.0f, 28.0f); - [self addSubview:self.showUtilitysbutton]; - - self.voiceButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.voiceButton setBackgroundImage:[UIImage imageNamed:@"dd_record_normal"] forState:UIControlStateNormal]; - self.voiceButton.tag = 0; - self.voiceButton.frame = CGRectMake(10, 9.0, 28.0f, 28.0f); - [self addSubview:self.voiceButton]; - [self setupRecordButton]; -} - -- (void)setupTextView -{ - // CGFloat width = self.frame.size.width - SEND_BUTTON_WIDTH; - CGFloat height = [JSMessageInputView textViewLineHeight]; - - self.textView = [[HPGrowingTextView alloc] initWithFrame:CGRectMake(46.0f, 7.0f, 193.0, height)]; - // self.textView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - self.textView.backgroundColor = [UIColor whiteColor]; - self.textView.font = [UIFont systemFontOfSize:15]; - self.textView.minHeight = 31; - self.textView.maxNumberOfLines = 5; - self.textView.animateHeightChange = YES; - self.textView.animationDuration = 0.25; - self.textView.delegate = self; - - [self.textView.layer setBorderWidth:0.5]; - [self.textView.layer setBorderColor:RGB(188, 188, 188).CGColor]; - [self.textView.layer setCornerRadius:2]; - self.textView.returnKeyType = UIReturnKeySend; - [self addSubview:self.textView]; -} - -- (void)setupRecordButton -{ - // CGFloat width = self.frame.size.width - SEND_BUTTON_WIDTH; - CGFloat height = [JSMessageInputView textViewLineHeight]; - - self.recordButton = [[UIImageView alloc] initWithFrame:CGRectMake(46, 7.0f, 194.0, height)]; - [self.recordButton setUserInteractionEnabled:YES]; - UIImage* pressToSayImage = [UIImage imageNamed:@"dd_press_to_say_normal"]; - [self.recordButton setImage:pressToSayImage]; - UIImage* releaseToSend = [UIImage imageNamed:@"dd_record_release_end"]; - [self.recordButton setHighlightedImage:releaseToSend]; - // [self.recordButton setAdjustsImageWhenHighlighted:NO]; - [self.recordButton setOpaque:YES]; - [self.recordButton setHidden:YES]; - [self addSubview:self.recordButton]; -} - -#pragma mark - HPTextViewDelegate -//- (BOOL)growingTextViewShouldBeginEditing:(HPGrowingTextView *)growingTextView; -//- (BOOL)growingTextViewShouldEndEditing:(HPGrowingTextView *)growingTextView; - -//- (void)growingTextViewDidBeginEditing:(HPGrowingTextView *)growingTextView; -//- (void)growingTextViewDidEndEditing:(HPGrowingTextView *)growingTextView; - -- (BOOL)growingTextView:(HPGrowingTextView *)growingTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text -{ - if ([text isEqual:@"\n"]) - { - [self.delegate textViewEnterSend]; - return NO; - } - return YES; -} -//- (void)growingTextViewDidChange:(HPGrowingTextView *)growingTextView; - -- (void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height -{ - float bottom = self.bottom; - if ([growingTextView.text length] == 0) - { - [self setHeight:height + 13]; - } - else - { - [self setHeight:height + 10]; - } - [self setBottom:bottom]; -// [growingTextView setContentInset:UIEdgeInsetsZero]; - // [UIView animateKeyframesWithDuration:0.25 delay:0 options:0 animations:^{ - // - // } completion:^(BOOL finished) { - // - // }]; - [self.delegate viewheightChanged:height]; -} - -//- (void)growingTextView:(HPGrowingTextView *)growingTextView didChangeHeight:(float)height -//{ -//} - -//- (void)growingTextViewDidChangeSelection:(HPGrowingTextView *)growingTextView; -- (BOOL)growingTextViewShouldReturn:(HPGrowingTextView *)growingTextView -{ - return YES; -} - - -#pragma mark - Setters -- (void)setSendButton:(UIButton *)btn -{ - if(sendButton) - [sendButton removeFromSuperview]; - - sendButton = btn; - [self addSubview:self.sendButton]; -} - -#pragma mark - Message input view - -+ (CGFloat)textViewLineHeight -{ - return 32.0f; // for fontSize 16.0f -} - -+ (CGFloat)maxLines -{ - return 5.0f; -} - -+ (CGFloat)maxHeight -{ - return ([JSMessageInputView maxLines] + 1.0f) * [JSMessageInputView textViewLineHeight]; -} - -- (void)willBeginRecord -{ - [self.textView setHidden:YES]; - [self.recordButton setHidden:NO]; -} - -- (void)willBeginInput -{ - [self.textView setHidden:NO]; - [self.recordButton setHidden:YES]; -} --(void)setDefaultHeight -{ - -} - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.h b/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.h deleted file mode 100755 index 64896a2..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// JSMessageTextView.h -// PoGo -// -// Created by Yongchao on 20/11/13. -// Copyright (c) 2013 Yongchao. All rights reserved. -// - -#import "JSDismissiveTextView.h" - -@interface JSMessageTextView : JSDismissiveTextView - -/** - * The text to be displayed when the text view is empty. The default value is `nil`. - */ -@property (copy, nonatomic) NSString *placeHolder; - -/** - * The color of the place holder text. The default value is `[UIColor lightGrayColor]`. - */ -@property (strong, nonatomic) UIColor *placeHolderTextColor; - -/** - * Returns an unsigned integer describing the number of lines of text contained in the text view. - * - * @return The number of lines of text in the text view. - */ -- (NSUInteger)numberOfLinesOfText; - -/** - * Returns a constant describing the maximum number of characters that can fit on a single line of the text view. - * - * @return The maximum number of characters per line in the text view. - */ -+ (NSUInteger)maxCharactersPerLine; - -/** - * Returns an unsigned integer describing the number of lines necessary to display the given text in the text view. - * - * @param text The text to be displayed in the text view. - * - * @return The number of lines needed to display the given text. - */ -+ (NSUInteger)numberOfLinesForMessage:(NSString *)text; - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.m b/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.m deleted file mode 100755 index cfa3244..0000000 --- a/TeamTalk/IOSDuoduo/ToRemove/JSMessageTextView.m +++ /dev/null @@ -1,188 +0,0 @@ -// -// JSMessageTextView.m -// PoGo -// -// Created by Yongchao on 20/11/13. -// Copyright (c) 2013 Yongchao. All rights reserved. -// - -#import "JSMessageTextView.h" -#import "NSString+JSMessagesView.h" - -@interface JSMessageTextView () - -- (void)setup; - -- (void)didReceiveTextDidChangeNotification:(NSNotification *)notification; - -@end - - - -@implementation JSMessageTextView - -#pragma mark - Initialization - -- (void)setup -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didReceiveTextDidChangeNotification:) - name:UITextViewTextDidChangeNotification - object:self]; - - _placeHolderTextColor = [UIColor lightGrayColor]; - - self.autoresizingMask = UIViewAutoresizingFlexibleWidth; - self.scrollIndicatorInsets = UIEdgeInsetsMake(10.0f, 0.0f, 10.0f, 8.0f); - self.contentInset = UIEdgeInsetsZero; - self.scrollEnabled = YES; - self.scrollsToTop = NO; - self.userInteractionEnabled = YES; - self.font = [UIFont systemFontOfSize:16.0f]; - self.textColor = [UIColor blackColor]; - self.backgroundColor = [UIColor whiteColor]; - self.keyboardAppearance = UIKeyboardAppearanceDefault; - self.keyboardType = UIKeyboardTypeDefault; - self.returnKeyType = UIReturnKeyDefault; - self.textAlignment = NSTextAlignmentLeft; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if(self) { - [self setup]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if(self) { - [self setup]; - } - return self; -} - -- (void)dealloc -{ - _placeHolder = nil; - _placeHolderTextColor = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UITextViewTextDidChangeNotification - object:self]; -} - -#pragma mark - Setters - -- (void)setPlaceHolder:(NSString *)placeHolder -{ - if([placeHolder isEqualToString:_placeHolder]) { - return; - } - - NSUInteger maxChars = [JSMessageTextView maxCharactersPerLine]; - if([placeHolder length] > maxChars) { - placeHolder = [placeHolder substringToIndex:maxChars - 8]; - placeHolder = [[placeHolder trimWhitespace] stringByAppendingFormat:@"..."]; - } - - _placeHolder = placeHolder; - [self setNeedsDisplay]; -} - -- (void)setPlaceHolderTextColor:(UIColor *)placeHolderTextColor -{ - if([placeHolderTextColor isEqual:_placeHolderTextColor]) { - return; - } - - _placeHolderTextColor = placeHolderTextColor; - [self setNeedsDisplay]; -} - -#pragma mark - Message text view - -- (NSUInteger)numberOfLinesOfText -{ - return [JSMessageTextView numberOfLinesForMessage:self.text]; -} - -+ (NSUInteger)maxCharactersPerLine -{ - return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) ? 33 : 109; -} - -+ (NSUInteger)numberOfLinesForMessage:(NSString *)text -{ - return (text.length / [JSMessageTextView maxCharactersPerLine]) + 1; -} - -#pragma mark - Text view overrides - -- (void)setText:(NSString *)text -{ - [super setText:text]; - [self setNeedsDisplay]; -} - -- (void)insertText:(NSString *)text -{ - [super insertText:text]; - [self setNeedsDisplay]; -} - -- (void)setAttributedText:(NSAttributedString *)attributedText -{ - [super setAttributedText:attributedText]; - [self setNeedsDisplay]; -} - -- (void)setContentInset:(UIEdgeInsets)contentInset -{ - [super setContentInset:contentInset]; - [self setNeedsDisplay]; -} - -- (void)setFont:(UIFont *)font -{ - [super setFont:font]; - [self setNeedsDisplay]; -} - -- (void)setTextAlignment:(NSTextAlignment)textAlignment -{ - [super setTextAlignment:textAlignment]; - [self setNeedsDisplay]; -} - -#pragma mark - Drawing - -- (void)drawRect:(CGRect)rect -{ - [super drawRect:rect]; - - if([self.text length] == 0 && self.placeHolder) { - CGRect placeHolderRect = CGRectMake(10.0f, - 7.0f, - rect.size.width, - rect.size.height); - - [self.placeHolderTextColor set]; - - [self.placeHolder drawInRect:placeHolderRect - withFont:self.font - lineBreakMode:NSLineBreakByTruncatingTail - alignment:self.textAlignment]; - } -} - -#pragma mark - Notifications - -- (void)didReceiveTextDidChangeNotification:(NSNotification *)notification -{ - [self setNeedsDisplay]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/ToRemove/little_minus.png b/TeamTalk/IOSDuoduo/ToRemove/little_minus.png deleted file mode 100644 index c4c7d5ea6bfdb3d62410c3f65e792e35ad4ae5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15153 zcmd6Oby!qi_b-ftQW7E!GNOb?Dj^}=okNG9z)*@30urMlAR!?wp>zx&sUV?J(lsC; zEg&r_A$j*Xy!ZEg?{o9H@jUkr9yy$S_Fn6=a<8=v)74fvOUgt_KtOO-O;u5!fB<nH z`XNSuzw~O>ej*?smBT0~=&C6wpmguwwa2*JAs|pao0i~hXfR3_(pxW9-*=83#qo#9 zmjpE+sY;8~3sVcyMLc`T>7_`de4hFW`nF*cp-Kq5ozi)-Cy#AMNPbc2wtm!8RGOcN za3<NniTs{SIczhX8eOaz8Fkq3AE_nKJ$Q`#<Y7V>B>dXs{QAmAi*q!c%{vGNDnbeq z!loH}d!)*)B4X&E{$_G=zG`d5_Bwyi?YeQ^MqSPa!^eR!>|zR+PZN+T;YFnaIO*pR zFAXYM7_S{8JO0F9x%N!x8r^G>H^uC8&805ec?(zTz9c1bet*qm+QaxkI6b0HcQS=z zCMyE@+9HW#+9B)FnLG7{YAFQsJKTeVyRS3}1kWd1cP(<hb_u(tbe?fN>=%N7_+_*B zhx-)af5jcs2_EJ;e1DD%Q?t#b9!bK?|7f@0+pIA7Yb$j1<!7y#(1)76e=5nN1nGlH z?<Ob_a+ta%JI1WxSk~4|hZh|GHjYkR2rxLj+3ve<w8^>Jn=TiTZaU?%S}agcN3ea_ zES0sQA>N3f()G0L{7kXV28!Sp5kckTtKS!%xmd+E&ysVIg|Du<JRr<)=D+$wY(L}i z-Hyg*;ycNm>-%WQTzVPoB{kaXca-LH^Kvy5ySm6J5_@kS?ob`iHHl-ozkKF>mC;1M z8T`XY@5f7$r(uqD!BSY0X#U%zPXqBYfefNtXBY$0oX<OYS`+vOi|f8qJJWvmCV|4G zQ<vRjd=dUD=2SwY?F}CsaWSP2UR?7%THIqJvv}?{qbbL3u&_=3;`V)xH@u8lQ%_w! zBF;sh@yH|<#_|gycx}$I1YN&(Y7#~8G)R@|RKh8KRRl&BSuQ926{w)lS3<8RPWK3g zu)cjr?Z=|`PFo<2o6g=NBM(xMC4Kf$Ly&M1iy?melZy6@Twyd_Hf6H>Fcq^Iv5$hB z?v3-OS`@;fsbXdS_HpJj@H{Det)P4J&m|A0T4Kv5dzokYP{OAV3H_f^Cm{xJo&8Es z9W+`d$wI91sdHNKA?>R(^iAV4>hI{JDQZ5^&oKWa;0?C^6h|!EPJF6g*@T#RQ&B$J z<T4@kMdujyY(#-lN;E|_^ZQ8E829g|PKUg{mBc{T$~YHd8Zl#wzBO#CE{IREOG0bX zFNoSxUB~`?oMVfBn`^>VEaOEYN}U?X*NnD#VPjsF`1aJ-TdR^R6m3n6vn=-l-Z5BQ za}y~+)=-W_)CH}4K0Cv?`S1hJ<oS)qlpi1bw0(53fi#dM@WRv!w$?_jXc9A|^JB`3 z38>31mkp_yh!=?upHhDk*2CuOc(6aC@@clPz4A8dtK0`Q7EbNB^J>p7)9YWpl3a;3 zRC8jt<h;pQe=+Wh#BG)P45qSHIwhAgP}Urju`;?ZxjE14sIw@^k7|pnznArq^-;*t zKb!A1WKx(^n`Wj{ujsGtFQ5{4J@I$q+!tJ2QH*o^N}?Z!&dZTR??h|<3@+=7f$B%O z2k#JiA7wupV6)25ua##iKiv#gQ%ZRgZyRcxVjE`rWLBg_kK;ouHn!%RPJ!%F*#Jk* zMJD;d9G`)Am0Fb&V|T^`SyjZc_Xp#aTK=&8sQ*K9hvSa<Joh}yJkxwdhyLkLf;PL? z^%-*_;v(uIUi=nbc;7qMJ1$y^u{!>6CH^mu8_%P7_IUev!uS`3nnri==kaNUu7x^7 zf=--Hx12_u_VN5hk-d4n-s!z**22f%4?>p9YQucr?Ky3IUcR{;$CSd<z{JR8#FQx9 zD#DoJmhvTKK4nq3t<uqqtO{v1Z?;%vB^aN)-eqXdQ4ucw8dtKG$JZ~NJyCQMXO~}L z;*h0X(L-Yy%Wp0wS7T9Q;4QDCAz&h4U8=Y7T3RmymyzA5(r6yo(bR_;vk8|={h0sy z`Rm48>9?|G>@F3?6!r6DnPo|~-mt57f4(U_XU<s`mZlb~7WqZX;Oo$&p-pXXWiPq& zf+MGJkw{(Jo3d}Frp3y`nc|<N+8<^4r2f51b~D^0JdJLG&YE|P*MM(@m(BEwDUpe5 z<#O5H=dtD#XG=T(wr5Urb`?Fj6AM+i0=_A)#x;M*6w9&+x;pK;-ffC)_I=KMp))r_ z9){FY?0og`;;wt@kEdSwG4rlxGh*%xmmk;LLAAW8G}E3dJ!gBe$jIq`(hu=5-0ydv zdB<`;hW|Eyg!RLFuZN7r<LAs)_PVr2A{V`yU7IJq-W)xAw||vVgEB@XyzOOP+#*vi znN?_Fsd0>PX-({o?S|7vp0tE?m~^BxO@miMk-xz1twY42*WSeMk)MluBl|kY8^~gk zAEenxWhDBHG}$$hb3~rV&mRdt);(qu7_h!<F+_)uKTz-rmLd@$x1`;Bz`)NdT+F%Z z^UmmDz(a2&pRJOjLUWz!i}rzbmGDS94LWb-FDflccoi)rKcz$^jYJb((~9rP5oQsn z+?#Z4%(Q-&z3vz63`}T*%&pFn&aLxbw@9d19lKvOU(nfG5^ep_)Sc%7GaKs^)o~cj zr-FISl0Vk(z2}i5adjd4v5T!&7b7<<ckdj;AQPXKKkZjcY_<%uQ!7!URhvWT$W={y zmRtYAelK_#{W9yy^@9F_Zp_ol-O53Ej$6;mu3BEd$yG1#SvX5jp|%5qUpJz8BikRN z$^F38zAh>1NOMay;&Lj-6H~GZr}9Y$l{*<7dR^2Df4--Dck5*R^83qvfQY?_x2Hpc z*U__sk0R^N6u98w5{vQo+TNBQYiG6^R$jQGTvbPZb}Dy9-eI0{dp<d&m#J6QVB=V^ zvCu02US4mep0CH8!llK9)@5zNz5?eop2%+1zh&Dw`+Qc1<6G>?l&Qb*--)j6r)%{& z+d2E*(_X~h-zJu7f14!Rnp%zal}uaW=DU8q`BhVAyxM@iW$tc6iFtARMdh{p@_O}B zCl!3&a`rNo=|##y{jy)pTH09K_(<cFYv3SZ<f)c3(ihINd<bmc(RIejxwhQ;HdFk$ zcje7;ZKFe=b)e#!>Sj!@O0Y^!+ou<vc*&s=v3#+YqMssTTi?#Px7|IQ-cs<RDO%FK zp7nkgdE=t^=4{(8+eSLM)TqyM|H37%!;J0fKC|a$uZO=4hgD~bV*E7yrj~*R(^z|0 z`D9X$AN`5gPEM)laM0+D>7jj<DxTpT@Jqfmcr!eVK19OUL%O!|`#@SrS;=H4HnG%d z^ZosT@%sG(qr@VI5^+mO|1|&lwP%Ns!x!q(6RcMQFiTY%uJudzDh?Coa8V6J{)>B- z`vQ~Owf^%_$7#%`!cXt5^Edb%TYbB^<Ue`Xf2M%aN~X*A#-Zb(-Rj&ME>azy^g<cj zA%1tnzM%fkYUYSdZ$+rXi)Zf?1dikXmg;;a>MiKKs$8kOtb$YNjrbce;rsSa%g@e; z#KF1X#w$nFJMsNR83Eq=^$xaQntwX?uO!Q;Pv$p>?+tIeF5dp}eb5`Tk(>8?vZz63 z8+-VA-|kOa%+jjPu1<VLq>T3?l7n9lIbH1+rgonG-oGYc8US)il6$JA4+sdzXrLcL zf|OSb1O$Q!YKn4(4++;Mw7NVNcL{z*H5guT9g9Whuv?-ovdi-zNidF=9tZb@2In*@ zv(ueJ*J4~QEArfO<+?1)(JU`-6z%wwm|4-Ne;{G@(0c9g=!H*)_-}Xnp0>kHKRTVB zSK^CDyOxXT&g<6~yNY`<WCFt)eTnoR85bGVTMkul5V6>3EQ?uq_nes=WQqzep+U(8 z5nyA8vhgu;v?@Uaga|$|)gnF>>nRc{l&sBdLX78a-4<%FO12X*;MCba;*CHOQ-MHf z#>!~u4t_=Tl?PRh-T$+d20lhA)0w=#>v>zRh5Cj%YH|N()N<bq$y<zVdRHolvp;Wr z<Mk|f3aukH<d1H6*rqn!@wwO!+C?xgs8S-Yx)%H@n|Ys*3wxEaY#lncNeZ!4VN`+l zsl>}e^l1?%;Y6wJ(=J1V7Z6#L3s;r>f{4u&C)~k_(%)z0)Xk86lw0*T>r?&Jm6f^+ z^OvS8@Q-X?b3o_lh6VMauaacDfiHrZ$`R7$mc!O-@SE2`%q~3Sh5YcT`iOyL{a?!* z&?%$<9?~a;8qlh;mqC@aFF*LgC(45p(F}%`?9i$lWEVOy)>r`MjvMvwFS7AD-|-p{ z^|Yj_MYN}l5+OEit^jne_-vhn&<zIY2Fu|&AaqUCWz8(rt?K_pRi)W2UC%HGH46IB zDK#ybc;9LMdS>sdIrvkIuFBB1$Za6C{YV!%_<`blG@9~hIU_^~)mH%&Ze6UL2!6Ps zD{FR>s>2@IS=Oczurk$72R}^95@NPwxl<wL39yHVfV-ZJF?`Unpe8KBzUYknXasZ+ z@hW{ZdWU)RG5o*+_`E=T=Q?x{s?2)&+mY74XdqstQMD#>sjlt)^84ff8^Q|wlL8l2 zu)Qd<md#Fla02h-X&)Jq3ZTvn6FH%&OxAaNrUC!)o)?g)2UeK*`VP;{D4*&nha#U= zr6P!+OjSZmReKpm7$WEU6%=lPksb$&fE@^m{c~<Vv{f`vs1yf_%I6TF&jBLg<f+P# zy33{msMFp1c_5;>^_%>Ql%B2qQQoJEA3S@V_cd9O<hAP&QJf;|Hq~RQnVuCSgrk*V zf-AQt0SZ2CDl5d~^r7NK2NJKkFCbf~qtR{dhNLjK#6W9VPoJ<M3`8rePDGt#omr=h zIV!}f2FaEJJL$CLz}g~j58KM;ymlp4Eplx(6)2*MHZ7tk?V;tIj?MXmNC<o|sPX8? z_)Wq<&%ve1@lORlI=nJoQ&Nh4#@pL&8yz&MH8lrWV(rzpRCXL+vbNn3GH2!BCcOv* zM~Kh?3Kn$=mWN;pFe#>-$FLBCDwi1`(GnuENK}im^msyH0fNOa?Wq59@jjaM6q48? zc71&O>DLeMA3R7sH=-CQRySN%-aM%_vM?MK_d51Vn~P_D>KbGTK}~4v1M`ecBq5@k z*hPCHWvMobg6iI@)mC+B`=YvdDOmZDrvb;O%3Rc8E%gE_Tj&43@aElJPl5z3*dJM< zCJL5FXFO>t@SbNoVW_7s1I4{8EqUU}JOS>OpRd6@-B1I{9@g7)A`weqQzK=X@X^}m zqR~3D71!ZqCP1M_M0iiWk3)W|@jYkVBPn)YX0*?ZVxmE;*?}}H1UFGLGCn^UUms+L z)5L}jNE}z%AKt3@W>lM%=HRvAb;bX6O=ta810BDNWy?|5DUHgosk%{@t65}vBQrSl z@w=jT%}FqR6?iQnXP|WoHseL+jJS~wb)thwryMMv58+CzXg?vE<9G@cZZ*7jwD2w< z8E5aV>jWTGA!FGY^Y-xcx?E;1Yc{bqXL=%ES>S|&?ie7D3AFbbyiEhEHt0fWxHh?P z>*!y+ga{v!_F|tF1!qxYHva6ntHf08=CbzPlG3=E9wiSP8{wV~1coGXc&fEUe3I2X zH?Ir5b8ZwyXpHuUKBlH@T>d|fb2Q9M%~O_NyYEzUpZR%ZtyZfqM1`Z}wC1^+zkfz( zOECuyEHlzkp6J6SFzQXOZP-iK64gFvEJ$^@kiN7Z=kR<^z`oca{bw|!fVos(w|$uf zS_};Hy51u7rzyzeMwd-iJ0N8Sez#UkVdB%eb_#BNdlPVkB&A~z?(V40=nwBsw%zEs zQx{#?jZTbwJO;aC9>T^NGou@x&!C+X&Z!zWRp4_D{`Vd4KKd#Y4sPh8ChX~%?@pe7 zXhV{Gci7L_Zlj}1@{JD>NfM6kJg*jqV7V-A)Z;d13pE2f3P;gj&WBwFM!qaxs6Ym^ zoa~J37LtxW+LWFWdwS?H3O9US%OB=27&xrpQ<=Vq2c#Y&+})-HwZy_4(~{U!(wd$G zo-#hx3+_i=11mNm)enl-G$NfbYZsVG2ll+H>&N%}yz0W)QgK$RGt}7A$SA+Jjs(i| zBoV0T20S$ttz0G=%TLHA#8-k>Y$RT#6Er{3o5I6#;@2F4!N4^H7hZ#5(*u5s`RoTb z$O4+q121Qg&l3kh$V3~BhF{z;%dCr9`f+YmHPaUO-r4D8ChR8B_n}R#c$37SN;6}r zt!GUy5%-s0)^?OAHgRagBlX38o&WJGdSChs5%+sJ=BM^^njk)2CwXc=#EZH)#A4}x z>E7F*O5e93Dko-)B($yyM5J4itkMYTOmKboK~w>Fhw1bVVWfxvQbe0Z6Zx{<tOi+! zBd!P|fUHr7@!~I<XoKJ3VRY0C2EZN+3`~(;WbFlzXURlB@tI1|5+#cgz<RCMx#s1C zu-&pR3Naszg%~7W1^#=7z$XQMVBrVB%<YZ_Y+Pk3z|u~A$G{Kw-T_MA#q*u0_66W$ zD5LXE9%g`^&!DRzJtsu?0q;?JrhV{)qkACWea5+{!3MPrT%TW%lotFz0bCAcO*scd z0@c?`AV3rTf}<JL4GZA2zI7zPJJ`HvdVjOm?}R$48?vaw^cSPcgodIgu0Dk1-Q6ug zE^}&>ZcJ14RGc*qO}nLUoIovTZrN&ygSODk2^w{ZzlFa79b}^1<l@QbT?OYG@gNBP z^8)zBf4-<RyJO-Bhs^{4Polf=RftZ*D}sM(c;Cwucg!j0!C~0A$)zf>Mg0V!h@gG+ z3%v?Tn57@Ig63;?-kxC00{FX-WzPn$>${4=ZI_#zU=jtk|F>_V(SD}ICqT9VwA%7V zLtwf50U@oP7Y&h3fVBh8%x-8^0mji6D1{Z>)e}hw0Z9lsZJ%IM57-k3kB4ELW&ja_ zL1Z6_Qv_Hmpuqo7-SoY&##b{7?AO$S2&mb$rF?OpUR7n)sj8#!wLuL}{N3slqdpPX zqjUfx;*$(8n+lb6+t_2iHKK)hf*iOZV$S;1-VWxjOamxQ&YU>>AgBt|vH8yb{Ebc3 zTEII?NuMYJtUNNeL9dkRboXV!jG)owN5f8VUb77NTvjN40<i;LR7zx2rNAQa1<dSG zt)L*(ySPxe9tRvJba=j%tQk(aSpp<mgoxiD;Qux)f-}fM`g>E$=~Ui3TYDriH}%sw zAxJd%h0JgM;Epz+v@NFwTcrT?OqD?rz=8cCLL2eIq2MyKt)mqX`CkPBSS%6XybE@t zmTewgJuvE6NE{#E#v7c88^wYp-9U(+<@xd`ewT}YU72X^ebKig9I=FUO40|qsBU=& zPRQ(lu>N@=YnG;OJPNVemjp5<lP1qZ=)7Ez!sQJai9)OjbKWa?d$i0C{Z5snh?>A+ zswGHD<Y9NF1&qF$(YqdIO$|65u3JXj(8@}XD*oGxY`mHYEu4zD0tItzwJe1`w>bx_ z`y4tLHj-3C%T!J6TH+YG$S9Q>?+hJhq6;XOdt?Mt?uuA9$ML<{gVm9YGzrHaTIvL? z%GUw{_~!+P0kcK09XruPqn*R^k6>&c1C@QeTL@D+1{8aYy-)^Xyet!B=BS23m>*Ff z<Lc05*s^#*zWx8=2(0bE^5488r@0Z>O!GA|lPb;V>n0&8Wz&Fo(%kV^VeS=yt9WXe z15v39GHf#ki!Iny&;eVfzh!&{0(uAlJ<Moa59_WH;7jSN5e&2^Y4NOApM+noaX6_* z8{VnPtnwlc7l=B=AnH`yuR$lj8Z&F&0`kV-g<y}0RHnIi?je*(L&i&3Vblie9u)(? zmo-vf&X1^eC289Y17*DDc~Ceyrgy(m`0^6yuk&%r+5opL@vZB^XAr7p?6={YLn1FN zV>Js?+O-^W$NQm5&s^_4yv=Z4D@6rJ^@2kc%rFgLnC8~78pLpt%JerW{CDflYRcnR z-@9bI%%BU*BcN8l!-5mw<(q(bdU;2**}>alkTp}a%Qm@)JV7}kU@SmFFnmt!5cWOf zAU>qXQ3*rVfph|X8pjd42jAHkfvqqi<!E55rUMdBP+dL)eSaH;!r4<Hwczi~0G4L# z1#A%d(O7W5`DZVnRbklyFg>RM`KRUjkP!L#N<a_)zdxkuJ^5HB3B;A)>!!cI7yUFq zEURC^NhvkCY@NTkf8zSXk?8Ts7K_UGGtf$)HG}~8GpNy%f&vStZkI#RxIJE)`37%a zHLQE$Kun9eXc$Ogc2EUSM&MH6V?uy;W$9RkQB?-0{@V+UgoXdkCvi;=xQm`ZvSR|; z&P-D21`*c80<8GIvsa}=NVx<oQ)(d77}*t0NTyvEfv0|5OaTeV5g3%~<-S@tB0d0G z@PBXw7AHgQeRS~G>M`C4UpILYnSnC?V@p5%{<-=k;UrF<;OK}jmoaC>J?kR<mF#X$ z*v|q8Gvu(T{wJ5F{W-c^e&hs9l>l1^KrJH8>w!g34tW3Pg+;l?#a9grZwlwk9KhCP z(XtOJ@TwX0fn<Lv^F>Q;O?ol@j?zE+opIb;u@pGQ%XhqDeQXxU(0P2c(>Ta<OhVOe zjj}p>v_Ez1wYF--GHjgdFxaO(?w#r>X~tj)63eVOZ6g~d%FT2eN1_<HjP1(2G)ZrM z_0U(oOF4<H^2I(sUWcsL?@Zne+#i=YT+*@o+Z%ZFdn538AN-S{&{=a6#6vO*_ZHd_ ziwE8D##TOSRU-|vw59Ln6U^Nj{w@@iHb}%eMr=NO9U8pL*7>^zx5<=)x1|W08*u8# z>i?oz()+OWy6w!{whQ}U?||N$JCAnirVi%?0vYW#`c>E>U6|(Ej<<YVg@l>ZGjC!a zIy@S^lbA!k*X1C6J=Xd5s959Q?wScN^V_3&fI`fNw(lbKk<zoQK7RRge@x6++uWb& zM`;xGm$knXLfGxJXEq*fm0o&1>Ay44xZ5HSus=T48Xf*NQJc6;G&S#q{f|T*P>|y( z6F0l$+}go>_rvDiN@?TPu=&(hiT8xZpq6_SPdD0bH?Okx=-L2|#jI}48@_s9^Y!wV zB6mXH?tZw!bme-_PQa3e_1<tz!&YMB0Y|sG-H=j=R*oyhkX+T*Bm(STBHORZ4Vnf6 z`8Sn4$k&QWYI$;TYzNb4rhX;VG{2wa_ivRqTi16nOKKeT9O1^%(M&N=_7BfJlY6xg z$+*lV^Y_b*L*`Qg=UhL8to7`)KHUoAN)P=tQsE-Re}YsNi(Pfi)Rq3$9|3<mt&d_} zJo;Y0;eYq`ut~D0RUl*7?QggZzK)JLV6SuE=)OApOR-q_-|lN;3p^;PTZaIqF}|#X zj=Dc^++Hk{Z(E(BF8x8%{2VI!iR|SOhEAcUgKc6$uk3i+Qs?;Rth^^YYo-GBRb=-1 zcfX5>YP)Ke5{Oqe4vVT5wJ3^mG`_CD2Oi9^d4F?n1Axp=9j<$0&`fp$lV4hoh0hxt z4+c|Ckj&WX3cr+%LkQW_(KHf9ThR?@D0;K=bUWUCH}h;af2&7w<HNzPP6K<b&w)R# zs>OAwc-6iKsj^3hO%20oNoD!OOLapGiCfA=GRHul4uL_;u^j_iA4HzB)y)xlKbdDT zy7sPN64W#pNt=VT)P$?}5(YmDH`(3c%@$wzOew>{M&Q3Um=R@Z>(6wwS-dH2X_A9q za&h1jx6jbCCeN;<VifKn^55{A+8-Nfpff&hrBYupNF5+Zt@7u&Bx|FLRee=Z-FSSs z5eT+v*u$3|{ZNs4?#w%2zWh)wbOadGZp50?8y-wmx?tNlo`Gj+)s4K6LB@Lb6TK~O z%e&_xOWiJejp?>4OO5FuNkpCf*&O}Mr#Q?UKliLwAYe0m;^zzc=L-d#NZ?1FzI#B& zdMej1kZFXwWo^d2e`CdJr<OraNGvjMKyr|Osf4moe7t}kfn1;t)ng0PGbZ0|&vM7K zK!#)7xQE}IrCOOI`Z&H4hPYKNLB0B|CAXN7QCNGUxh#y*P<nr~SNd1`rA<LlW;Lk0 zCF;FDq!QHh2O-pS$<*t!)ad~7<K6I-x#gB#|Mdry(z`Z0PJ;dqm~e7txXVA?JH#S0 zJbbwt;sr|#B?fE$(21aP^}H8ML0N;_5>-!Jyu&`+{7}c(vUw+d(tFB3#@pbH<y6<N zP(*kR{`^t*@uh8C)tgx@$Bu%{`oA(qn=j^EF~rTG>Kj&e7Z=J2FHl}OQ}ZmV5rhy` zfx?wjG6`85n|oAwr2)I2*;<d4xf7NbY%!h%6eDJLBa&4U06`KA#~Y2uNAEszJ~N1T z`;h0T)LY86x}g<l1TC@02)pMg8NTc;CSw8VpG~LS$^2^RQC5sRKkh%XG~vZ5C-olO z$v4oAv!!6dX)RrE_$4;r^s~fa&~4O&hr2jM-6p!J+Ph2Wz@YVTv^RimXFU72(UOv# z?%z>27S@PH&6FAwv+nF;yznJf{Uvk5+2tt)@wc4UoJClNs1ZnQYSoRr<L#QpmRESc z6@$w=>nrOy^@{VZ(F0CCYs0o6Z>J9R{(2?8HJCmIomZe(K;J{3f<xcu&NgTeQi%LW z!}WN$5%DJW!t!ZCL>@`A>D0S!&XQWyyud-O;yhZ+MmTcT^Tts&K3w;CKwsKcWLHYV zQO%EaM=4OrBva&xY<#%HR)3qw3nV=%dfW1e27~*3yKK%K>#@T$D8X3Sj;zgRlKd9W z=l{$`TU}KyloL7zDfqF2-k*WJ@!n4Ux>fOBpPs#xH+8w2Na6?%s#5Z$PO>_&S-be+ zSK6{>YuwMRL)~Lb)I)DQz#AERdY92o39+JNr-iY9I;id_n)we`q|=i1*r#!hHG1c_ zS}S8j?2Wgy%3|*yY*2psSyj-~eV86Gf1I%!`E+lVzVY4uL(fA)9sf_M=Z8Uzyh3GN z#dfvy{X&X^%>L-xvNej4Zq{&<--g>JN2lh7A|eKys6R4~wT}*%7@jv~&nEYsk2jvY z_xUVFTm(fl?oCH=He-!s=pt3==_Row$Rw5RBeipQ%~dw;uLM_0_$b<U7Q3f&;kUjm zO7Fy%KDy(}Q1R77b#UG-SJFI=v(1Q*5OIb$+c+rcb;EZKf%ogRD->TpbGCsP(KgQ7 zuqcJ$)l$9`W)<*vzSMusxwK(#d5bRhfXR6Q)8&g#AOSZb)U!vxsMr?YT5S~?x42aK zh1A;=@syYWi+U%dJu9Wd#OLn2ct^l*)Nk^4y6W5hdIs%HjI#t63+14Fyob3MsDfOH zo>b23^6liSY3@y`OLFJ>O01(^bO}{LPaWoZIOEcZ`Kh>uxyZl0-xnf1Wch2vGM!3X z<jCGR{yB6hL)9}Wo|=unsBK#h99iRLE3<)LZ62MA70$>nm{q1+<IeC_|2fytikndE z_2#)z#j{X~A(afMi3g?m1VoJ7oXU;K?dqC(5N%()cs@|W%eQ|mK4;J|G8V0pWg*~r zq#*iCT^QA>bI>CHYB8*F2gD}#nJHRh3u@=u&Y;1B6<n2Okn98k$~a_xVkxCIe0sxY zGOS2HP-xP-gGSo;%dh%w%<q5XJ=d7OoABzHdZAdXucq4EvE<}tR8m=Mx9D5xa+g(n z8lm>Q2jyHr<%azipd!(!vJu}V3CGX=c5`e?X)mam^j#UBI@<oBR3lw;0Y7v>hTPad zSl|ywWX&#H@|GRjzR5x1-&2%QVA5$xwMM9f{Y;zu2g}H_1A-cuck*PG?7CU9<X?ZF z$tM{;ZPIrN<<HH~=txmdSu!>1(KydG-<66WW0?B+OzhDtO-87Ib+|JxduJ|*Gt;if z81Gab+0^?Fj}$6_0Wg@=1GnaXaBtHR1k*NF@8-MmEuxrqC0C)6+0wd{E3M`(t3!Pl z_cAeTGIC&lA)l9SR)Ay7&^!ApL+4x0^_=&I+vAXvv<^Jnim^3V*20LK-4?D(D`@F9 zyo5uaTV}Z2AID&sdKlLHclrrsz#Q|`yWb$D0)P0Gvm8U7_tM%<+{=_LE|tSXAxO3d zv2<YYfw)<Ir)M`e)ot%*hztux#2=?GMQa%vbAh>8QIu}rYwvsO;Oeyj9sgy6U{T8o zF{0r?C-q99r|eH!jWh&&`@?6)6K$VBY1a#>U#eo;12*BuLamoawDg^cZ*xaava}rw zcg+RzwsC7K+)&<Qp4x4F*Rr0r@o16E>gVH^ZUzFj;#O1xKNHbh&x=Qw70bxzQ%{=< zv!6EKsTS@*_#f|2HSVw1HU3W9I9L#C^x2&WVe?yk8_Zk?O6uBFp+gLIAN&$otTh?v zx$751O2gEaQz!rAKCIrC60tfnd*`A*?LA+uQ2M7y)#<wLE%!m$B_NS>IJawTeuTji zqu5fVA+!6Dvf)>J={LWPdJr;8ZKqr6MnIw@)oQ})!B&MvWs)JCXhS_16hxH0BSs-T zaLAsmBe@GwVDHBLiMwFD&F<6Koo*F2e_{XYnggLafwnteIlNxHw7A;;_%Iet-<(mp zEF3V)#cO*bXQ$e|0c746YBw78*WWLuXB>RzigBKsVLSSH=J&|oH*Yu*T*S>aoGl@_ z?pK$qMy&P+5*vi|F^|R-4*KqsuL&zeme*Z3TB6PLW6)_SlJm{*m#0}B1Fg&LI>ScM zXQqGN?oaU<PPwyQ){T?>ps{}R#`>*=!3ODCc%_-+bSuWIBX{LaqzJE=hIW<9)xaOy zE3Q30@Bakw;g4Lm+`_l2=bXm3$2-`}dQ9f;I`>xp8r*wpR#!*YO95)!A<vD<{mJd@ z%41ESC?rm@n~?MBjnG~5TCw((zg6bqcg=^CgPJxG6J?QPF;N07>6buhItpoOCNyzl zm8l`!qAs2ex=PtZgMve7XDfU^wMh($YpU~LdgS(i&X46&_4|$LUm<RR7DWqFMgKwA z^nXQIZ{>p@>*LR>juf%y=_~Lwj2aXE{w7RuIm&u<;C`fr8U%U#{l*@VEsbL$3U7a0 z){9!rhlbk0)Tro!pw8B7XCv&PVu@@RV${D{Vyn2a8HIs6T`xgL(@Z_P60Yr&QbnW5 zh+{e7I@c8tJg>wIXhRoLZqQZYL#d{~rNbO>A<a=#mxK#Z1lZLQq*X^3ZM(*oBB&-O z0u|{0t5ycsBOi3$a92|H;D-HwbU*+?x^bXnWFWj13|*q>=s?McB4`=joD<xSa~+q- zp!+c|@3ceLzrCrzr@Sc;fIuxP1BJ1B1cq?uN(9t3MU)JzVdQUtvfT_pemb<V6KL-_ zKhJG|Z>XQZ4fPYDF1YuB!qk7W_ws*(U{IE0A;7~mK`j8LR{sz^1g42e=7&n(qk_iZ z(G!}Hd&mxrBLDibD2Pzv+n^F)PklNPu0u$GdyT|wK0U-}G-%MIC@~1bZT4j#tCi3! zD~KOiI<P(6tv+IC`+Nm}^Q9<XxP)X%Ts+I)$IBFJdPyPy?-Xx3C=A!ny-1qLb{90f zH##hHSoU9yIyHW?SKX_rNPsCQ1|T{!&<k`F)B8PCgv!N`JF!&0w!+Wa3+YkQGXS}q z?Z4&+(6VOrs1eI7kK*h@2=|~Sj)CQ43Pkc&AYB6VhiPt5Y-blu-eRYqgawlc8Utq@ zkG>+n&LAe3(TRi<Z51j)h@~51=6sws;Ns^&C|>o4*y;EpVv%CBT@>OTZ0m;o)7q~# zJ)xcsjbIQWP9a|*FTl-C@cy4RXzsZmC3Y!=i1~9S@}M#)Z<z*FuMI%;x{xRuU33-~ zMcs~;)$SG*X7Z{H(n!!2Gla`>RPRtW)yulzB(V4YN=N*E+CFcxZM3=mC*WsJfWDKt zWTI2AV~jBsBx6l*k_2HPJFMnLgj3~1PT#juA@Dh=1kKY3jA9^``wBs=`=1xlXf9c! z%h2bQpsHET<Z}oYiAjKpkm%CF#UdOjuh*25+w{6lHy`^Ls6b=S5p|(8B2q+QHOvL2 z>26`c6eWm54p5p-U=VSIH_-$F);yJE3LUHa1{kF6P-QYi&o$b69QSgu{k$M+r@1$O z>`|>QYVJu6$%6pfkF+3>iYWJsTiHQ}d>n;}*{)y|ha$YfMWU;77;NUK32L$|_mVvY zlUX5-B7pzverl!yF>d1vnqf<kco=V}G2kaZVVPCwAgKcp3$-9(&^v5I*H!{9nZxoo z0A?$9=5d!VRa_*r*#}wWMBbdCd5Q6b7it9HG;R~ni<q9qNI)Qc=LAzAbku8btMD=4 z@9~qoC5XT1RA5Kuij}Y>kOGH8Mv<Ni<Ku>CIhb6oHn*@4e>HwF=O)B}DcExU$BHDh zWdv_@zkgBNRu}K~4KY9168_8HD0e{hnBzAOSd!)E1<kv!@iM_+-vRA}JFQwp5Z@>b zLX1dfnd5nA%a@=op1>%EgQdU=sO0_pMh~J=Hy233{#zvkY8=U*05;i;jxQ;?_dX6d zef&7+0Y0T_2L<nc$(ayA1afntGdhFt31Z-cnovi$KX9HGl)zb}wBSPBH=r!v*xx{$ zp>%=cG`sgx7#`BP4=z9t!b7(qpk+S-fAat45EGGKG`^N%VD!vQs4x9F(ExTazvxDD zt@3n)?9~dRQfCLm#zhDh&5M2NW@janJ)fUaO@^o~<L}coi*)NOUU^#sPi$n7RmP)L z77b9)aw-%0d{LYiC^78}pG<lr8D@@EGC5sa$qtG71go1t=0YV?eY~ldg4<d62rfvP z>pxTZyVR}F(_L>_DJ^e`xheXp`58x<mktoSkQz#xPpp>xYYa&OgcAvK4p>tj0E8Y~ z9JvJ@odj-#X+7vK5S4wefXQ04dnQ4)lM67-t1yD;5eA(xcn}TJ>?I^!-QB94g!0Mw zK~F3ALs=UOU=8j!<KfvYEg(#-5bH&lZVPa(g-#9}zz4y(gEJ#O(76o8z_vyVFz~sR zP49F4Wb78_*cT_q4r0|#8lBvRKzsX|FmQ+LJ9pVv|Dsd|jI_gc^%Xl9ga1+dZ?P`_ zuAiw-A+iP<u(D*Ju+FDw$_A6fiJf&Q;&)G3Qq_aEVFCWkmmpRPAOQUIEnug&wBd3) zbd9|2F||yH^S@71Q}dta!jh~(YbD@;2%KqD0iLQ}<Aq=>tpS!(7LgE7x;UVpu8yAY zjM)O{KQ4+HUxEZ@2pYy{W;51H5SD*|&HU{Kvs3_aJgMfxsX}JWqMJ@0@K>Tp{o(88 z6G3nPHJWx+_rQ3KZQOky0+RqML^Pn&2(mUzA#iWN)<L7)^?;zyA4c~-PYys*1x=%| zUBb+Lh%7;1m=d|U<q)r#?pTsRCkvW*{&1&PH`Z^fi(MC4FRR<HSFFG4oe0n5@Lm<X zWoB7z2N%krLNjQ*rWVCO`cVk-OgJ1tpdA3v4i=o?;TR{tlaoS`9eiA4&;~Mn>L8P; z#uB+QyZmI=1%za5FsQiGKQ`ur@EGD2oY}w)w^u#N7~u8t@A0+oP7dj;+5JjqI2dC` zSU4u2^q@jxMdjB*#V{4O9#Dzq{FC(WHV<fkXr8LbGIf}oZu{(NfMpGS_`K;A!hvE; zya-K?O$On^;j~Ou?POx!WPIN6?LZhCFcm=|Rsr`=sJ?=3mK*j<faj}S&vmhVZVWKU zZjxP>s`t?w>p!av*Q9>CiS+_WqoC0kpUWO!O3k^;nVG=Y1DJ@hP&Bht%~;k=bnCvh zLSAMCGS&=P-x(3}Zh>odm8znw3VMtH1_oXbFq4WiS!Z!^2WGk-gyX>|5b$NBkMqeO zl%m5yV0o`7F9}Np0TRc@DCyDQb*3Eky)0(1f*XjF@4A~mF2Qu)uo!3#=r0Z|7k@J_ z=B&`>D}DsnTBW=9Wx$OMkg8kOR4tZL5-o5ee^kuUtXo=<3D&Q9;u|Cu+QpSGA?cL^ zjjW)IISuQuIM8A7w*&eRI_;p*{%@b`*5mKn=D^+2=(n=9zbwqUZz!gKy8{N{Rwmxv zJK07&^x%mWlMH?;YPeq0aB9$w!T}mgu)z>!;P_dwS<8tAFKjDlz?q!jOfD`osLp^S z02*QaWb2x4X3`{_NPukx8o^BVZXKcr4BiZY!J7y16P9hl#=*;Q3=9A>Jp%7sIyL`h zcuWlcItns}C-4kF9-v(y=|6gZ`A@48^f3X}cio(|50eUQMS#VCjq}`%c%VatLAVlS z^h$%n6$S_ZV-XLxakW5z(|TqJPr%qP0guIGoC6~h2at)oH3ARKBq;;yZZ#@^B-WQL ztAG({5Wm%y$mQZ!?VUIo|0F8IaAIkmyl@D<EeTeE6`oEVa`TJFX`xSQ?clKqRlu38 z%HytDhWh8g7YQZ<Yh+v_B<d{wSKE&RWUm}b8s?CrLOlSK<PyA>z;HU^AxQPWvvfeR zr?j&OZ~-<K!6W)%vM1Ut9(wcw!(tMW?@6IgGp&F>_O&Z=fQS{W1E>7+0#h~lbr~L| z?E;q2qg^5o$vq$VW1LvEFYLi9fSp&w6~O~-%fQZ8B5~=E(`i~oEZUdq1>2E&ObN`G z@3-AHq61kIS$5*^oRx7mx>MRKD%^L}e;AsiyA49OJ<F@lDV!A-7H&h$_LDZDlqc)8 zm7z}^P@5bJ@WASdLcZ`MPd`*Pb?vvzdTCT743DV90xvolgQ_^`e`hiR+i2JAELM7^ zl|@43C~Na`1Lx)^m$6rvoU@GEU{H-UXe*KyyJ<%Mqc!UkCavWf7Nn$}3{<Fl*+H*- zFTa{7q+>YX)6h7Z4c1HSNx&20StQvNH=YbGJ8oSKCBWJeedy*B^<a{IEz3l&jnGjo zc7y<O1o?_9-|U`-4G(r*BDa7?mmhl$=+L=0*^!Vr89?ULa~Y_0a;A|27%LNp#>&QK z5EvAB!`-c)q%Pvmn}ToP&{;2Ysh|y$44c%Z)qH5RA>Lhq++ADD@4^8}9|%_8Dj1H{ z=0F3@H;2tnz5p8d(s%|EYF`5I>gW$!@TG?n$cSs+=mu<A9AI9qdKOm$tr9E%ZQ<+> zq;UFF4XFLM7nKrMO5xlhlMkSZd$<C-V@;5qYj+gggINaCKdx6NePK(B12z)(i{};O zJ;u&`O+k+YCf-P>3t8!$(`VKHmF!xJR?-m7Fbnj$YcRMzaooMu`?B%<$7&G=FR9=6 z+N>rF>byq}U5wkYWOE7CR!hmTy;2ra*NW!r*S^(#d^{mOSpD#!uU*ee@ye!C-ZJ+p zO158*drNB9N4tLZ@_yu9(JRGFSrhMN-|3p#viG^>n_hdEP8#NORKQw^qqEsWeX0Wl h9x!<=?D46f=MUmI7O$TN|80RlO-Wm^MBe7{e*z^|wlx3% diff --git a/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.h b/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.h deleted file mode 100644 index 35e2953..0000000 --- a/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDAlbumDetailsBottomBar.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -typedef void(^ButtonSelectBlock)(int buttonIndex) ; -@interface AlbumDetailsBottomBar : UIView -@property(nonatomic,strong)UIButton *send; -@property(nonatomic,copy)ButtonSelectBlock Block; - --(void)setSendButtonTitle:(int)num; -@end diff --git a/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.m b/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.m deleted file mode 100644 index 4c93468..0000000 --- a/TeamTalk/IOSDuoduo/VC/AlbumDetailsBottomBar.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// DDAlbumDetailsBottomBar.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "AlbumDetailsBottomBar.h" -#import "std.h" -#import "ChattingMainViewController.h" -@implementation AlbumDetailsBottomBar - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - - UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 1)]; - line.backgroundColor=RGB(228, 228, 228); - [self addSubview:line]; - self.backgroundColor=RGB(249, 249, 249); - UIButton *preview = [UIButton buttonWithType:UIButtonTypeCustom]; - preview.frame=CGRectMake(10, 0, 45, 45); - [preview setTitle:@"预览" forState:UIControlStateNormal]; - [preview setTitle:@"预览" forState:UIControlStateHighlighted]; - [preview setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; - [preview addTarget:self action:@selector(previewPicture:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:preview]; - - self.send = [UIButton buttonWithType:UIButtonTypeCustom]; - self.send.frame=CGRectMake(230, 5, 75, 35); - [self.send setTitle:@"发送" forState:UIControlStateNormal]; - [self.send setTitle:@"发送" forState:UIControlStateHighlighted]; - [self.send setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [self.send setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; - [self.send setBackgroundColor:RGB(34, 157, 254)]; - [self.send addTarget:self action:@selector(sendPicture:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:self.send]; - } - return self; -} --(void)setSendButtonTitle:(int)num -{ - [self.send setTitle:[NSString stringWithFormat:@"%@(%d)",@"发送",num] forState:UIControlStateNormal]; - [self.send setTitle:[NSString stringWithFormat:@"%@(%d)",@"发送",num] forState:UIControlStateHighlighted]; -} --(IBAction)previewPicture:(id)sender -{ - self.Block(0); -} --(IBAction)sendPicture:(id)sender -{ - self.Block(1); -#warning 跳转处理 - // [TheAppDel.navigationController popToViewController:[DDChattingMainViewController shareInstance] animated:YES]; -} - -- (void)dealloc -{ - self.Block=nil; -} - -/* - // Only override drawRect: if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - - (void)drawRect:(CGRect)rect - { - // Drawing code - } - */ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.h b/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.h deleted file mode 100644 index 85b9b61..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDAnalysicImage.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDMessageEntity.h" -@interface AnalysisImage : NSObject -+(void)analysisImage:(DDMessageEntity *)message Block:(void(^)(NSMutableArray *array))block; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.m b/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.m deleted file mode 100644 index 77dcea6..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/AnalysisImage.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// DDAnalysicImage.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "AnalysisImage.h" -#import "DDMessageModule.h" -@implementation AnalysisImage -+(void)analysisImage:(DDMessageEntity *)message Block:(void(^)(NSMutableArray *array))block -{ - - NSMutableArray *arr = [NSMutableArray new]; - if (message.msgContent.length>0) { - NSMutableString *string = [NSMutableString stringWithString:message.msgContent]; - [string replaceOccurrencesOfString:DD_MESSAGE_IMAGE_SUFFIX withString:DD_MESSAGE_IMAGE_PREFIX options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length)]; - NSArray *msgArr = [string componentsSeparatedByString:DD_MESSAGE_IMAGE_PREFIX]; - if ([msgArr count]>0) { - for (NSString *msg in msgArr) { - if (msg.length>0) { - DDMessageEntity *tempMessage = [message copy]; - if ([msg hasPrefix:@"http:"]) { - tempMessage.msgContentType=DDMessageTypeImage; - } - tempMessage.msgID=[DDMessageModule getMessageID]; - tempMessage.msgContent=msg; - [arr addObject:tempMessage]; - } - } - }else - { - if ([string hasPrefix:@"http:"]) { - message.msgContentType=DDMessageTypeImage; - message.msgContent=string; - } - [arr addObject:message]; - } - } - block(@[message]); -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.h deleted file mode 100644 index b40bdff..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// DDChatBaseCell.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "DDChatCellProtocol.h" -#import "DDMessageEntity.h" -#import "MenuImageView.h" -extern CGFloat const dd_avatarEdge; //头像到边缘的距离 -extern CGFloat const dd_avatarBubbleGap; //头像和气泡之间的距离 -//extern CGFloat const dd_bubbleGap; //气泡到非头像这边的距离 -extern CGFloat const dd_bubbleUpDown; //气泡到上下边缘的距离 - -typedef void(^DDSendAgain)(); -typedef void(^DDTapInBubble)(); -typedef NS_ENUM(NSUInteger, DDBubbleLocationType) -{ - DDBubbleLeft, - DDBubbleRight -}; - -@interface DDChatBaseCell : UITableViewCell<MenuImageViewDelegate,UIAlertViewDelegate> -@property (nonatomic,assign)DDBubbleLocationType location; -@property (nonatomic,retain)MenuImageView* bubbleImageView; -@property (nonatomic,retain)UIImageView* userAvatar; -@property (strong) UILabel *userName; -@property (nonatomic,retain)UIActivityIndicatorView* activityView; -@property (nonatomic,retain)UIImageView* sendFailuredImageView; -@property (nonatomic,copy)DDSendAgain sendAgain; -@property (nonatomic,copy)DDTapInBubble tapInBubble; -- (void)setContent:(DDMessageEntity*)content; -- (void)showSendFailure; -- (void)showSendSuccess; -- (void)showSending; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.m deleted file mode 100644 index 8f5e226..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatBaseCell.m +++ /dev/null @@ -1,260 +0,0 @@ -// -// DDChatBaseCell.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDChatBaseCell.h" -#import "UIView+DDAddition.h" -#import "DDUserModule.h" -#import "ChattingMainViewController.h" -#import "PublicProfileViewControll.h" -#import <UIImageView+WebCache.h> -CGFloat const dd_avatarEdge = 5.0; //头像到边缘的距离 -CGFloat const dd_avatarBubbleGap = 10; //头像和气泡之间的距离 -//CGFloat const dd_bubbleGap = 10; //气泡到非头像这边的距离 -CGFloat const dd_bubbleUpDown = 10; //气泡到上下边缘的距离 -@interface DDChatBaseCell () -@property(copy)NSString *currentUserID; - -@end -@implementation DDChatBaseCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - [self.contentView setBackgroundColor:[UIColor clearColor]]; - [self setBackgroundColor:[UIColor clearColor]]; - - self.userAvatar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; - [self.userAvatar setUserInteractionEnabled:YES]; - [self.contentView addSubview:self.userAvatar]; - self.userName =[[UILabel alloc] initWithFrame:CGRectMake(60, 10, 100, 15)]; - [self.userName setBackgroundColor:[UIColor clearColor]]; - [self.userName setFont:[UIFont systemFontOfSize:13.0]]; - [self.userName setTextColor:[UIColor grayColor]]; - [self.contentView addSubview:self.userName]; - self.bubbleImageView = [[MenuImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; - [self.contentView addSubview:self.bubbleImageView]; - [self.bubbleImageView setUserInteractionEnabled:YES]; - self.bubbleImageView.delegate = self; - self.bubbleImageView.tag = 1000; - - self.activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - [self.activityView setHidesWhenStopped:YES]; - [self.activityView setHidden:YES]; - [self.contentView addSubview:self.activityView]; - - self.sendFailuredImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; - [self.sendFailuredImageView setImage:[UIImage imageNamed:@"dd_send_failed"]]; - [self.sendFailuredImageView setHidden:YES]; - self.sendFailuredImageView.userInteractionEnabled=YES; - [self.contentView addSubview:self.sendFailuredImageView]; - [self.contentView setAutoresizesSubviews:NO]; - UITapGestureRecognizer *pan = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickTheSendAgain)]; - [self.sendFailuredImageView addGestureRecognizer:pan]; - UITapGestureRecognizer *openProfile = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openProfilePage)]; - [self.userAvatar addGestureRecognizer:openProfile]; - } - return self; -} --(void)openProfilePage -{ - if (self.currentUserID) { - [[DDUserModule shareInstance] getUserForUserID:self.currentUserID Block:^(DDUserEntity *user) { - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [[ChattingMainViewController shareInstance].navigationController pushViewController:public animated:YES]; - }]; - } -} --(void)clickTheSendAgain -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"重发" message:@"是否重新发送此消息" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; - [alert show]; - -} -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (buttonIndex == 1) { - [self clickTheSendAgain:nil]; - } -} -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setContent:(DDMessageEntity*)content -{ - id<DDChatCellProtocol> cell = (id<DDChatCellProtocol>)self; - //设置头像位置 - - switch (self.location) { - case DDBubbleLeft: - self.userAvatar.left = dd_avatarEdge; - break; - case DDBubbleRight: - self.userAvatar.right = self.width - dd_avatarEdge; - break; - default: - break; - } - [self.userAvatar setContentMode:UIViewContentModeScaleAspectFill]; - [self.userAvatar setClipsToBounds:YES]; - [self.userAvatar setTop:dd_bubbleUpDown]; - self.currentUserID=content.senderId; - [[DDUserModule shareInstance] getUserForUserID:content.senderId Block:^(DDUserEntity *user) { - dispatch_async(dispatch_get_main_queue(), ^{ - NSURL* avatarURL = [NSURL URLWithString:user.avatar]; - [self.userAvatar sd_setImageWithURL:avatarURL placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - [self.userName setText:user.name]; - }); - }]; - - - - //设置气泡位置 - CGSize size = [cell sizeForContent:content]; - float bubbleY = dd_bubbleUpDown; - float bubbleheight = [cell contentUpGapWithBubble] + size.height + [cell contentDownGapWithBubble]; - float bubbleWidth = [cell contentLeftGapWithBubble] + size.width + [cell contentRightGapWithBubble]; - float bubbleX = 0; - UIImage* bubbleImage = nil; - switch (self.location) - { - case DDBubbleLeft: - [self.userName setHidden:NO]; - bubbleImage = [UIImage imageNamed:@"left"]; - bubbleX = dd_avatarEdge + self.userAvatar.width + dd_avatarBubbleGap; - break; - case DDBubbleRight: - [self.userName setHidden:YES]; - bubbleImage = [UIImage imageNamed:@"right"]; - bubbleX = self.width - dd_avatarEdge - self.userAvatar.width - dd_avatarBubbleGap - bubbleWidth; - break; - default: - break; - } - - [self.bubbleImageView setFrame:CGRectMake(bubbleX, bubbleY+20, bubbleWidth, bubbleheight)]; - bubbleImage = [bubbleImage stretchableImageWithLeftCapWidth:20 topCapHeight:20]; - [self.bubbleImageView setImage:bubbleImage]; - - //设置菊花位置 - switch (self.location) - { - case DDBubbleLeft: - self.activityView.left = self.bubbleImageView.right + 10; - self.sendFailuredImageView.left = self.bubbleImageView.right + 10; - break; - case DDBubbleRight: - self.activityView.right = self.bubbleImageView.left - 10; - self.sendFailuredImageView.right = self.bubbleImageView.left - 10; - break; - default: - break; - } - - DDImageShowMenu showMenu = 0; - - switch (content.state) - { - case DDMessageSending: - [self.activityView startAnimating]; - self.sendFailuredImageView.hidden = YES; - break; - case DDMessageSendFailure: - [self.activityView stopAnimating]; - self.sendFailuredImageView.hidden = NO; - showMenu = DDShowSendAgain; - break; - case DDmessageSendSuccess: - [self.activityView stopAnimating]; - self.sendFailuredImageView.hidden = YES; - break; - } - - self.activityView.centerY = self.bubbleImageView.centerY; - self.sendFailuredImageView.centerY = self.bubbleImageView.centerY; - - //设置菜单 - switch (content.msgContentType) { - case DDMessageTypeImage: - showMenu = showMenu | DDShowPreview; - break; - case DDMessageTypeText: - showMenu = showMenu | DDShowCopy; - break; - case DDMessageTypeVoice: - showMenu = showMenu | DDShowEarphonePlay | DDShowSpeakerPlay; - break; - - } - [self.bubbleImageView setShowMenu:showMenu]; - - //设置内容位置 - [cell layoutContentView:content]; -} - -- (void)showSendFailure -{ - [self.activityView stopAnimating]; - self.sendFailuredImageView.hidden = NO; - DDImageShowMenu showMenu = self.bubbleImageView.showMenu | DDShowSendAgain; - [self.bubbleImageView setShowMenu:showMenu]; -} - -- (void)showSendSuccess -{ - [self.activityView stopAnimating]; - self.sendFailuredImageView.hidden = YES; -} - -- (void)showSending -{ - [self.activityView startAnimating]; - self.sendFailuredImageView.hidden = YES; -} - -#pragma mark - -#pragma mark DDMenuImageView Delegate -- (void)clickTheCopy:(MenuImageView*)imageView -{ - //子类去继承 -} - -- (void)clickTheEarphonePlay:(MenuImageView*)imageView -{ - //子类去继承 -} - -- (void)clickTheSpeakerPlay:(MenuImageView*)imageView -{ - //子类去继承 -} - -- (void)clickTheSendAgain:(MenuImageView*)imageView -{ - //子类去继承 -} - -- (void)tapTheImageView:(MenuImageView*)imageView -{ - if (self.tapInBubble) - { - self.tapInBubble(); - } -} - -- (void)clickThePreview:(MenuImageView *)imageView -{ - //子类去继承 -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatCellProtocol.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatCellProtocol.h deleted file mode 100644 index fe02402..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatCellProtocol.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// DDChatCellProtocol.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -@class DDMessageEntity; -@protocol DDChatCellProtocol <NSObject> - -- (CGSize)sizeForContent:(DDMessageEntity*)content; - -- (float)contentUpGapWithBubble; - -- (float)contentDownGapWithBubble; - -- (float)contentLeftGapWithBubble; - -- (float)contentRightGapWithBubble; - -- (void)layoutContentView:(DDMessageEntity*)content; - -- (float)cellHeightForMessage:(DDMessageEntity*)message; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.h deleted file mode 100644 index 97cd122..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DDChatImageCell.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-09. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDChatBaseCell.h" -#import "MWPhotoBrowser.h" - -typedef void(^DDPreview)(); -typedef void(^DDTapPreview)(); -@interface DDChatImageCell : DDChatBaseCell<DDChatCellProtocol,MWPhotoBrowserDelegate> -@property(nonatomic,strong)UIImageView *imgView; -@property(nonatomic,strong)NSMutableArray *photos; -@property(nonatomic,strong)DDPreview preview; --(void)showPreview; -- (void)sendImageAgain:(DDMessageEntity*)message; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.m deleted file mode 100644 index 2ed0bba..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.m +++ /dev/null @@ -1,250 +0,0 @@ -// -// DDChatImageCell.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-09. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDChatImageCell.h" -#import "UIImageView+WebCache.h" -#import "DDChatImagePreviewViewController.h" -#import "UIView+DDAddition.h" -#import "NSDictionary+JSON.h" -#import "PhotosCache.h" -#import "DDAppDelegate.h" -#import "DDDatabaseUtil.h" -#import "DDMessageSendManager.h" -#import "ChattingMainViewController.h" -#import "DDSendPhotoMessageAPI.h" -@implementation DDChatImageCell -{ -} - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.imgView =[[UIImageView alloc] init]; - self.imgView.userInteractionEnabled=NO; - [self.imgView setClipsToBounds:YES]; - [self.imgView setContentMode:UIViewContentModeScaleAspectFill]; - [self.contentView addSubview:self.imgView]; - self.photos = [NSMutableArray new]; - } - return self; -} --(void)showPreview -{ - if (self.imgView.image == nil) { - return; - } - [self.photos removeAllObjects]; - [self.photos addObject:[MWPhoto photoWithImage:self.imgView.image]]; - MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; - browser.displayActionButton = NO; - browser.displayNavArrows = NO; - browser.wantsFullScreenLayout = YES; - browser.zoomPhotosToFill = YES; - [browser setCurrentPhotoIndex:0]; - DDChatImagePreviewViewController *preViewControll = [DDChatImagePreviewViewController new]; - preViewControll.photos=self.photos; - - [[ChattingMainViewController shareInstance].navigationController pushViewController:preViewControll animated:YES]; -} - -- (void)setContent:(DDMessageEntity*)content -{ - - [super setContent:content]; -#warning 暂时用菊花代替加载进度条 - NSDictionary* messageContent = [NSDictionary initWithJsonString:content.msgContent]; - if (!messageContent) - { - NSString* urlString = content.msgContent; - urlString = [urlString stringByReplacingOccurrencesOfString:DD_MESSAGE_IMAGE_PREFIX withString:@""]; - urlString = [urlString stringByReplacingOccurrencesOfString:DD_MESSAGE_IMAGE_SUFFIX withString:@""]; - NSURL* url = [NSURL URLWithString:urlString]; - [self showSending]; - [self.imgView sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - [self showSendSuccess]; - }]; - return; - } - if (messageContent[DD_IMAGE_LOCAL_KEY]) - { - //加载本地图片 - NSString* localPath = messageContent[DD_IMAGE_LOCAL_KEY]; - NSData* data = [[PhotosCache sharedPhotoCache] photoFromDiskCacheForKey:localPath]; - UIImage *image = [[UIImage alloc] initWithData:data]; - [self.imgView setImage:image]; - } - else{ - //加载服务器上的图片 - NSString* url = messageContent[DD_IMAGE_URL_KEY]; - __weak DDChatImageCell* weakSelf = self; - - [self showSending]; - [self.imgView sd_setImageWithURL:[NSURL URLWithString:url] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - [weakSelf showSendSuccess]; - if (error) { - - } - }]; - } - -} -#pragma mark - -#pragma mark DDChatCellProtocol Protocol -- (CGSize)sizeForContent:(DDMessageEntity*)content -{ - // float leigth =180; - // float width = 170; - float height = 127; - float width = 80; - return CGSizeMake(width, height); -} - -- (float)contentUpGapWithBubble -{ - return 1; -} - -- (float)contentDownGapWithBubble -{ - return 1; -} - -- (float)contentLeftGapWithBubble -{ - switch (self.location) - { - case DDBubbleRight: - return 1; - case DDBubbleLeft: - return 6.5; - } - return 0; -} - -- (float)contentRightGapWithBubble -{ - switch (self.location) - { - case DDBubbleRight: - return 6.5; - break; - case DDBubbleLeft: - return 1; - break; - } - return 0; -} - -- (void)layoutContentView:(DDMessageEntity*)content -{ - float x = self.bubbleImageView.left + [self contentLeftGapWithBubble]; - float y = self.bubbleImageView.top + [self contentUpGapWithBubble]; - CGSize size = [self sizeForContent:content]; - [self.imgView setFrame:CGRectMake(x, y, size.width, size.height)]; -} - -- (float)cellHeightForMessage:(DDMessageEntity*)message -{ - return 27 + 2 * dd_bubbleUpDown; -} -- (void)dealloc -{ - self.photos = nil; -} - -/* - // Only override drawRect: if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - - (void)drawRect:(CGRect)rect - { - // Drawing code - } - */ -#pragma mark - -#pragma mark DDMenuImageView Delegate -- (void)clickTheSendAgain:(MenuImageView*)imageView -{ - //子类去继承 - if (self.sendAgain) - { - self.sendAgain(); - } -} -- (void)sendImageAgain:(DDMessageEntity*)message -{ - //子类去继承 - [self showSending]; - NSDictionary* dic = [NSDictionary initWithJsonString:message.msgContent]; - NSString* locaPath = dic[DD_IMAGE_LOCAL_KEY]; - __block UIImage* image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:locaPath]; - if (!image) - { - NSData* data = [[PhotosCache sharedPhotoCache] photoFromDiskCacheForKey:locaPath]; - image = [[UIImage alloc] initWithData:data]; - if (!image) { - [self showSendFailure]; - return ; - } - } - [[DDSendPhotoMessageAPI sharedPhotoCache] uploadImage:locaPath success:^(NSString *imageURL) { - NSDictionary* tempMessageContent = [NSDictionary initWithJsonString:message.msgContent]; - NSMutableDictionary* mutalMessageContent = [[NSMutableDictionary alloc] initWithDictionary:tempMessageContent]; - [mutalMessageContent setValue:imageURL forKey:DD_IMAGE_URL_KEY]; - NSString* messageContent = [mutalMessageContent jsonString]; - message.msgContent = messageContent; - image = nil; - [[DDMessageSendManager instance] sendMessage:message isGroup:[message isGroupMessage] forSessionID:message.sessionId completion:^(DDMessageEntity* theMessage,NSError *error) { - if (error) - { - DDLog(@"发送消息失败"); - message.state = DDMessageSendFailure; - //刷新DB - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - [self showSendFailure]; - } - }]; - } - else - { - //刷新DB - message.state = DDmessageSendSuccess; - //刷新DB - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - [self showSendSuccess]; - } - }]; - } - }]; - - } failure:^(id error) { - message.state = DDMessageSendFailure; - //刷新DB - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - [self showSendFailure]; - } - }]; - }]; - -} -- (void)clickThePreview:(MenuImageView *)imageView -{ - //子类去继承 - if (self.preview) - { - self.preview(); - } -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.h deleted file mode 100644 index f9f9343..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDChatImagePreviewViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "MWPhotoBrowser.h" -@interface DDChatImagePreviewViewController : UIViewController<MWPhotoBrowserDelegate> -@property(nonatomic,strong)NSMutableArray *photos; -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.m deleted file mode 100644 index 4aba6b1..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatImagePreviewViewController.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// DDChatImagePreviewViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDChatImagePreviewViewController.h" -@interface DDChatImagePreviewViewController () -@property(nonatomic,strong)MWPhotoBrowser *browser ; -@end - -@implementation DDChatImagePreviewViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title=@"预览"; - self.view.backgroundColor=[UIColor whiteColor]; - self.browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; - self.browser.displayActionButton = NO; - self.browser.displayNavArrows = NO; - self.browser.wantsFullScreenLayout = YES; - self.browser.zoomPhotosToFill = YES; - [self.browser setCurrentPhotoIndex:0]; - [self.view addSubview:self.browser.view]; - - // Do any additional setup after loading the view. -} - -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser{ - - return [self.photos count]; -} -- (id<MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index{ - - if (index < _photos.count) - return [_photos objectAtIndex:index]; - return nil; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -/* - #pragma mark - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender - { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. - } - */ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.h deleted file mode 100644 index 188a346..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDChatTextCell.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDChatBaseCell.h" - -@class DDMenuLabel; -@interface DDChatTextCell : DDChatBaseCell<DDChatCellProtocol> -@property (nonatomic,retain)UILabel* contentLabel; --(void)sendTextAgain:(DDMessageEntity *)message; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.m deleted file mode 100644 index d2f4bde..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.m +++ /dev/null @@ -1,186 +0,0 @@ -// -// DDChatTextCell.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDChatTextCell.h" -#import "UIView+DDAddition.h" -#import "std.h" -#import "DDDatabaseUtil.h" -#import "DDMessageSendManager.h" -static int const fontsize = 14; -static float const maxContentWidth = 200; - -@interface DDChatTextCell(PrivateAPI) - -- (void)layoutLeftLocationContent:(NSString*)content; -- (void)layoutRightLocationContent:(NSString*)content; - - -@end -static CGFloat const contentMaxWidth = 300.0; - -@implementation DDChatTextCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.contentLabel = [[UILabel alloc] init]; - [self.contentView addSubview:self.contentLabel]; - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setContent:(DDMessageEntity*)content -{ - [super setContent:content]; - - [self.contentLabel setFont:[UIFont systemFontOfSize:fontsize]]; - [self.contentLabel setNumberOfLines:10000]; - [self.contentLabel setBackgroundColor:[UIColor clearColor]]; - [self.contentLabel setText:content.msgContent]; - - switch (self.location) - { - case DDBubbleLeft: - [self.contentLabel setTextColor:RGB(61, 61, 61)]; - break; - case DDBubbleRight: - [self.contentLabel setTextColor:[UIColor whiteColor]]; - break; - } - - DDLog(@"%@",NSStringFromCGRect(self.contentLabel.frame)); -} -#pragma mark - DDChatCellProtocol -- (CGSize)sizeForContent:(DDMessageEntity*)message -{ - NSString* content = message.msgContent; - UIFont* font = [UIFont systemFontOfSize:fontsize]; - CGSize size = [content sizeWithFont:font constrainedToSize:CGSizeMake(maxContentWidth, 1000000) lineBreakMode:NSLineBreakByWordWrapping]; - return size; -} - -- (float)contentUpGapWithBubble -{ - return 11; -} - -- (float)contentDownGapWithBubble -{ - return 11; -} - -- (float)contentLeftGapWithBubble -{ - switch (self.location) { - case DDBubbleLeft: - return 20; - case DDBubbleRight: - return 10; - } -} - -- (float)contentRightGapWithBubble -{ - switch (self.location) - { - case DDBubbleLeft: - return 10; - case DDBubbleRight: - return 20; - } -} - -- (void)layoutContentView:(DDMessageEntity*)content -{ - float x = self.bubbleImageView.left + [self contentLeftGapWithBubble]; - float y = self.bubbleImageView.top + [self contentUpGapWithBubble]; - CGSize size = [self sizeForContent:content]; - [self.contentLabel setFrame:CGRectMake(x, y, size.width, size.height)]; -} - -- (float)cellHeightForMessage:(DDMessageEntity*)message -{ - CGSize size = [self sizeForContent:message]; - float height = [self contentUpGapWithBubble] + [self contentDownGapWithBubble] + size.height + dd_bubbleUpDown * 2; - return height; -} - -#pragma mark - -#pragma mark DDMenuImageView Delegate -- (void)clickTheCopy:(MenuImageView*)imageView -{ - UIPasteboard *pboard = [UIPasteboard generalPasteboard]; - pboard.string = self.contentLabel.text; -} - -- (void)clickTheEarphonePlay:(MenuImageView*)imageView -{ -} - -- (void)clickTheSpeakerPlay:(MenuImageView*)imageView -{ -} - -- (void)clickTheSendAgain:(MenuImageView*)imageView -{ - if (self.sendAgain) - { - self.sendAgain(); - } -} - -- (void)tapTheImageView:(MenuImageView*)imageView -{ - //子类去继承 - [super tapTheImageView:imageView]; -} --(void)sendTextAgain:(DDMessageEntity *)message -{ - message.state = DDMessageSending; - [self showSending]; - [[DDMessageSendManager instance] sendMessage:message isGroup:[message isGroupMessage] forSessionID:message.sessionId completion:^(DDMessageEntity* theMessage,NSError *error) { - if (error) - { - DDLog(@"发送消息失败"); - //刷新消息所在行 - [self showSendFailure]; - message.state = DDMessageSendFailure; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - - } - }]; - } - else - { - [self showSendSuccess]; - DDLog(@"发送消息成功,content:%@",message.msgContent); - //刷新消息所在行 - message.state = DDmessageSendSuccess; - //刷新DB - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - - } - }]; - } - }]; - -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.xib b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.xib deleted file mode 100644 index 0ac7cac..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatTextCell.xib +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4514" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3747"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="52" id="bz1-My-PLv" customClass="DDChatTextCell"> - <rect key="frame" x="0.0" y="0.0" width="320" height="52"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <tableViewCellContentView key="contentView" autoresizesSubviews="NO" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bz1-My-PLv" id="tpw-jK-umY"> - <rect key="frame" x="0.0" y="0.0" width="320" height="51"/> - <autoresizingMask key="autoresizingMask"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="7TU-sk-6Hl"> - <rect key="frame" x="47" y="7" width="273" height="38"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="15" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SOj-eO-fns"> - <rect key="frame" x="55" y="13" width="258" height="26"/> - <string key="text">Nimei -Asd -Asd -Asd -Asd -Asd -Asd -Asd -Asd -As -asasdasdggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg</string> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="VLM-Jd-HwL"> - <rect key="frame" x="13" y="13" width="26" height="26"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES"/> - </imageView> - </subviews> - </tableViewCellContentView> - <connections> - <outlet property="bubbleImageView" destination="7TU-sk-6Hl" id="9lE-g2-qV4"/> - <outlet property="contentLabel" destination="SOj-eO-fns" id="pcn-XW-T0h"/> - <outlet property="userAvatar" destination="VLM-Jd-HwL" id="rtu-OT-XPu"/> - </connections> - </tableViewCell> - </objects> -</document> \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.h deleted file mode 100644 index ca7401c..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// DDChatVoiceCell.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDChatBaseCell.h" - -typedef void(^DDEarphonePlay)(); -typedef void(^DDSpearerPlay)(); -@interface DDChatVoiceCell : DDChatBaseCell<DDChatCellProtocol> -{ - UIImageView* _voiceImageView; - UILabel* _timeLabel; - UILabel* _playedLabel; -} -@property (nonatomic,copy)DDEarphonePlay earphonePlay; -@property (nonatomic,copy)DDSpearerPlay speakerPlay; - -- (void)showVoicePlayed; -- (void)stopVoicePlayAnimation; --(void)sendVoiceAgain:(DDMessageEntity *)message; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.m deleted file mode 100644 index 659a78b..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDChatVoiceCell.m +++ /dev/null @@ -1,298 +0,0 @@ -// -// DDChatVoiceCell.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-5. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDChatVoiceCell.h" -#import "DDMessageEntity.h" -#import "UIView+DDAddition.h" -#import "PlayerManager.h" -#import "RecorderManager.h" -#import "DDDatabaseUtil.h" -#import "DDMessageSendManager.h" -static float const maxCellLength = 180; -static float const minCellLength = 30; - -@interface DDChatVoiceCell(privateAPI) - -- (float)lengthForVoiceLength:(float)voiceLength; - -@end - -@implementation DDChatVoiceCell -{ - NSString* _voicePath; -} - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) - { - _voiceImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; - [self.contentView addSubview:_voiceImageView]; - - _timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; - [_timeLabel setFont:[UIFont systemFontOfSize:12]]; - [_timeLabel setBackgroundColor:[UIColor clearColor]]; - [self.contentView addSubview:_timeLabel]; - - _playedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; - [_playedLabel setBackgroundColor:[UIColor redColor]]; - [_playedLabel.layer setCornerRadius:5]; - [_playedLabel setClipsToBounds:YES]; - [self.contentView addSubview:_playedLabel]; - } - return self; -} - -- (void)setContent:(DDMessageEntity *)content -{ - [super setContent:content]; - - if ([content.info[DDVOICE_PLAYED] intValue]) - { - [_playedLabel setHidden:YES]; - } - else - { - [_playedLabel setHidden:NO]; - } - - _voicePath = [content.msgContent copy]; - NSArray* imageArray = nil; - - switch (self.location) - { - case DDBubbleLeft: - self.activityView.left = self.bubbleImageView.right + 10; - self.sendFailuredImageView.left = self.bubbleImageView.right + 10; - break; - case DDBubbleRight: - self.activityView.right = self.bubbleImageView.left - 10; - self.sendFailuredImageView.right = self.bubbleImageView.left - 10; - break; - default: - break; - } - - switch (self.location) { - case DDBubbleLeft: - imageArray = @[[UIImage imageNamed:@"dd_left_voice_one"],[UIImage imageNamed:@"dd_left_voice_two"],[UIImage imageNamed:@"dd_left_voice_three"]]; - [_voiceImageView setContentMode:UIViewContentModeLeft]; - [_voiceImageView setImage:[UIImage imageNamed:@"dd_left_voice_three"]]; - break; - case DDBubbleRight: - imageArray = @[[UIImage imageNamed:@"dd_right_voice_one"],[UIImage imageNamed:@"dd_right_voice_two"],[UIImage imageNamed:@"dd_right_voice_three"]]; - [_voiceImageView setContentMode:UIViewContentModeRight]; - [_voiceImageView setImage:[UIImage imageNamed:@"dd_right_voice_three"]]; - self.activityView.right = self.bubbleImageView.left - 25; - self.sendFailuredImageView.right = self.bubbleImageView.left - 25; - [_playedLabel setHidden:YES]; - break; - } - float voiceLength = [content.info[VOICE_LENGTH] floatValue]; - [_voiceImageView setAnimationImages:imageArray]; - [_voiceImageView setAnimationRepeatCount:voiceLength]; - [_voiceImageView setAnimationDuration:1]; - - NSUInteger timeLength = [content.info[VOICE_LENGTH] longValue]; - NSString* lengthString = [NSString stringWithFormat:@"%i\"",timeLength]; - [_timeLabel setText:lengthString]; -} - -- (void)showVoicePlayed -{ - [_playedLabel setHidden:YES]; -} - -- (void)stopVoicePlayAnimation -{ - [_voiceImageView stopAnimating]; -} - -#pragma mark - -#pragma mark DDChatCellProtocol Protocol -- (CGSize)sizeForContent:(DDMessageEntity*)content -{ - float voiceLength = [content.info[VOICE_LENGTH] floatValue]; - float width = [self lengthForVoiceLength:voiceLength]; - return CGSizeMake(width, 17); -} - -- (float)contentUpGapWithBubble -{ - return 13; -} - -- (float)contentDownGapWithBubble -{ - return 13; -} - -- (float)contentLeftGapWithBubble -{ - switch (self.location) - { - case DDBubbleRight: - return 0; - case DDBubbleLeft: - return 15; - } - return 0; -} - -- (float)contentRightGapWithBubble -{ - switch (self.location) - { - case DDBubbleRight: - return 15; - break; - case DDBubbleLeft: - return 0; - break; - } - return 0; -} - -- (void)layoutContentView:(DDMessageEntity*)content -{ -// float x = self.bubbleImageView.left + [self contentLeftGapWithBubble]; - float y = self.bubbleImageView.top + [self contentUpGapWithBubble]; - [_voiceImageView setFrame:CGRectMake(0, y, 11, 17)]; - switch (self.location) - { - case DDBubbleLeft: - _voiceImageView.left = self.bubbleImageView.left + [self contentLeftGapWithBubble]; - [_timeLabel setFrame:CGRectMake(self.bubbleImageView.right + 5, 0, 20, 15)]; - _timeLabel.centerY = self.bubbleImageView.centerY; - [_timeLabel setTextAlignment:NSTextAlignmentLeft]; - - _playedLabel.left = _timeLabel.left + 3; - _playedLabel.top = self.bubbleImageView.top - 2; - - break; - case DDBubbleRight: - _voiceImageView.right = self.bubbleImageView.right - [self contentRightGapWithBubble]; - [_timeLabel setFrame:CGRectMake(0, 0, 20, 15)]; - _timeLabel.right = self.bubbleImageView.left - 5; - _timeLabel.centerY = self.bubbleImageView.centerY; - [_timeLabel setTextAlignment:NSTextAlignmentRight]; - - _playedLabel.right = _timeLabel.right - 3; - _playedLabel.top = self.bubbleImageView.top - 2; - break; - } -} - -- (float)cellHeightForMessage:(DDMessageEntity*)message -{ - return 27 + 2 * dd_bubbleUpDown; -} - - -#pragma mark - -#pragma mark PrivateAPI -- (float)lengthForVoiceLength:(float)voiceLength -{ - float gap = maxCellLength - minCellLength; - if (voiceLength > 20) - { - return maxCellLength; - } - else - { - float length = (gap / 20) * voiceLength + minCellLength; - return length; - } -} - -#pragma mark - -#pragma mark DDMenuImageView Delegate -- (void)clickTheCopy:(MenuImageView*)imageView -{ - //子类去继承 -} - -- (void)clickTheEarphonePlay:(MenuImageView*)imageView -{ - //子类去继承 - [_voiceImageView startAnimating]; - if (self.earphonePlay) - { - self.earphonePlay(); - } -} - -- (void)clickTheSpeakerPlay:(MenuImageView*)imageView -{ - //子类去继承 - [_voiceImageView startAnimating]; - if (self.speakerPlay) - { - self.speakerPlay(); - } -} - -- (void)clickTheSendAgain:(MenuImageView*)imageView -{ - //子类去继承 - if (self.sendAgain) - { - self.sendAgain(); - } -} - -- (void)tapTheImageView:(MenuImageView*)imageView -{ - if (![_voiceImageView isAnimating]) - { - [_voiceImageView startAnimating]; - [super tapTheImageView:imageView]; - } -} - --(void)sendVoiceAgain:(DDMessageEntity *)message -{ - [self showSending]; - NSString* filePath = message.msgContent; - NSMutableData* muData = [[NSMutableData alloc] init]; - NSData* data = [NSData dataWithContentsOfFile:filePath]; - int length = [RecorderManager sharedManager].recordedTimeInterval; - int8_t ch[4]; - for(int32_t i = 0;i<4;i++){ - ch[i] = ((length >> ((3 - i)*8)) & 0x0ff); - } - [muData appendBytes:ch length:4]; - [muData appendData:data]; - [[DDMessageSendManager instance] sendVoiceMessage:muData filePath:filePath forSessionID:message.sessionId isGroup:[message isGroupMessage] completion:^(DDMessageEntity *theMessage, NSError *error) { - if (!error) - { - DDLog(@"发送语音消息成功"); - message.state = DDmessageSendSuccess; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - [self showSendSuccess]; - } - }]; - } - else - { - DDLog(@"发送语音消息失败"); - message.state = DDMessageSendFailure; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - [self showSendFailure]; - } - }]; - - } - }]; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.h deleted file mode 100644 index d65ebab..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DDPromptCell.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-9. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface DDPromptCell : UITableViewCell -{ - UILabel* _promptLabel; -} - -- (void)setprompt:(NSString*)prompt; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.m deleted file mode 100644 index 7efb4e8..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/Cells/DDPromptCell.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// DDPromptCell.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-9. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDPromptCell.h" -#import "UIView+DDAddition.h" -@implementation DDPromptCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - [self setBackgroundColor:[UIColor clearColor]]; - [self.contentView setBackgroundColor:[UIColor clearColor]]; - _promptLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; -// [_promptLabel setBackgroundColor:RGB(193, 193, 193)]; - [_promptLabel setBackgroundColor:[UIColor blackColor]]; - [_promptLabel setAlpha:0.2]; - [_promptLabel setTextColor:[UIColor whiteColor]]; - [_promptLabel setFont:[UIFont systemFontOfSize:12]]; - [_promptLabel setTextAlignment:NSTextAlignmentCenter]; - [_promptLabel.layer setCornerRadius:5]; - [_promptLabel setClipsToBounds:YES]; - [self.contentView addSubview:_promptLabel]; - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setprompt:(NSString*)prompt -{ - UIFont* font = [UIFont systemFontOfSize:12]; - CGSize size = [prompt sizeWithFont:font constrainedToSize:CGSizeMake(320, 1000000) lineBreakMode:NSLineBreakByWordWrapping]; - [_promptLabel setSize:CGSizeMake(size.width + 30, size.height + 6)]; - [_promptLabel setCenter:self.contentView.center]; - [_promptLabel setText:prompt]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.h deleted file mode 100644 index f51128a..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ChatEditTableViewCell.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-04. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface ChatEditTableViewCell : UITableViewCell -@property(strong)UILabel *title; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.m deleted file mode 100644 index e812f7c..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatEditTableViewCell.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// ChatEditTableViewCell.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-04. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ChatEditTableViewCell.h" - -@implementation ChatEditTableViewCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.title = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 15)]; - [self.contentView addSubview:self.title]; - - } - return self; -} - -- (void)awakeFromNib -{ - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.h deleted file mode 100644 index 4518407..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDAblumViewController.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import <AssetsLibrary/AssetsLibrary.h> -@interface AlbumViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> -@property(nonatomic,strong) ALAssetsLibrary * assetsLibrary; -@property(nonatomic,strong) NSMutableArray *albumsArray; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.m deleted file mode 100644 index 39897c9..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/AlbumViewController.m +++ /dev/null @@ -1,111 +0,0 @@ -// -// DDAblumViewController.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "AlbumViewController.h" -#import "DDAlbumDetailsViewControll.h" -#import "std.h" -@interface AlbumViewController () - -@end - -@implementation AlbumViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.albumsArray = [NSMutableArray new]; - self.assetsLibrary = [[ALAssetsLibrary alloc] init]; - UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame]; - tableView.delegate=self; - tableView.dataSource=self; - [self.view addSubview:tableView]; - void (^assetsGroupsEnumerationBlock)(ALAssetsGroup *,BOOL *) = ^(ALAssetsGroup *assetsGroup, BOOL *stop) { - [assetsGroup setAssetsFilter:[ALAssetsFilter allPhotos]]; - if (assetsGroup.numberOfAssets > 0) - { - [self.albumsArray addObject:assetsGroup]; - } - if (stop) { - [tableView reloadData]; - } - - }; - //查找相册失败block - void(^assetsGroupsFailureBlock)(NSError *) = ^(NSError *error) { - DDLog(@"Error: %@", [error localizedDescription]); - }; - - - [self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetsGroupsEnumerationBlock failureBlock:assetsGroupsFailureBlock]; - // Do any additional setup after loading the view from its nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - UITableView DataSource -- (int)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [self.albumsArray count]; -} -- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString* identifier = @"DDAlbumsCellIdentifier"; - UITableViewCell* cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - - } - NSString * name = [[self.albumsArray objectAtIndex:indexPath.row] - valueForProperty:ALAssetsGroupPropertyName]; - cell.textLabel.text = [NSString stringWithFormat:@"%@ ( %ld )",name,[[self.albumsArray objectAtIndex:indexPath.row] numberOfAssets]]; - [cell.textLabel setTextColor:RGB(145, 145, 145)]; - [cell.textLabel setHighlightedTextColor:[UIColor whiteColor]]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - UIView *view = [[UIView alloc] initWithFrame:cell.frame]; - view.backgroundColor=RGB(246, 93, 137); - cell.selectedBackgroundView=view; - [cell.imageView setImage:[UIImage imageWithCGImage:[[self.albumsArray objectAtIndex:indexPath.row] posterImage]]] ; - return cell; -} -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 60; -} --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - DDAlbumDetailsViewControll *details = [DDAlbumDetailsViewControll new]; - details.assetsGroup = [self.albumsArray objectAtIndex:indexPath.row]; -#warning 处理跳转 - [self.navigationController pushViewController:details animated:YES]; - -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.h deleted file mode 100644 index c7f659f..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDChatUtilityItem.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface ChatUtilityItem : NSObject -@property(nonatomic,strong)NSString *itemName; -@property(nonatomic,strong)NSString *itemLogo; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.m deleted file mode 100644 index 7e106bd..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityItem.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// DDChatUtilityItem.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "ChatUtilityItem.h" - -@implementation ChatUtilityItem - -- (instancetype)init -{ - self = [super init]; - if (self) { - self.itemName=@""; - self.itemLogo=@""; - } - return self; -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.h deleted file mode 100644 index 838fb86..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDDDChatUtilityViewController.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "AQGridViewController.h" -#import "AQGridView.h" -@interface ChatUtilityViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,AQGridViewDataSource,AQGridViewDelegate> -@property(nonatomic,strong) UIImagePickerController *imagePicker; -@property(nonatomic,strong) AQGridView *gridView; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.m deleted file mode 100644 index c33fa39..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.m +++ /dev/null @@ -1,168 +0,0 @@ -// -// DDDDChatUtilityViewController.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// -static NSString * const ItemCellIdentifier = @"ItemCellIdentifier"; -#import "ChatUtilityViewController.h" -#import "UtililyItemCell.h" -#import "AQGridView.h" -#import <MobileCoreServices/UTCoreTypes.h> -#import "ChattingMainViewController.h" -#import "ChatUtilityItem.h" -#import "AlbumViewController.h" -#import "DDSendPhotoMessageAPI.h" -#import "ChattingMainViewController.h" -#import "DDMessageSendManager.h" -#import "DDDatabaseUtil.h" -#import "SDImageCache.h" -#import "std.h" -#import "DDAppDelegate.h" -#import "PhotosCache.h" -@interface ChatUtilityViewController () -@property(nonatomic,strong)NSArray *itemsArray; -@end - -@implementation ChatUtilityViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - //self.animation = AnimationSlideVertical; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - ChatUtilityItem *item1 = [ChatUtilityItem new]; - item1.itemName=@"拍摄"; - item1.itemLogo=@"dd_take-photo"; - ChatUtilityItem *item2 = [ChatUtilityItem new]; - item2.itemName=@"照片"; - item2.itemLogo=@"dd_album"; - self.itemsArray =@[item1,item2]; - self.gridView =[[AQGridView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; - [self.view addSubview:self.gridView]; - - self.gridView.delegate = self; - self.gridView.dataSource = self; - [self.gridView reloadData]; - self.view.backgroundColor=RGB(224, 224, 224); - // Do any additional setup after loading the view from its nib. -} -- (void) viewDidUnload -{ - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; - self.gridView = nil; -} - --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:YES]; - - -} -#pragma mark AQGridViewControll Delegate -- (NSUInteger) numberOfItemsInGridView: (AQGridView *) gridView -{ - return [self.itemsArray count]; -} -- (AQGridViewCell *) gridView: (AQGridView *) aGridView cellForItemAtIndex: (NSUInteger) index -{ - static NSString * PlainCellIdentifier = @"PlainCellIdentifier"; - - UtililyItemCell * cell = (UtililyItemCell *)[self.gridView dequeueReusableCellWithIdentifier: PlainCellIdentifier]; - if ( cell == nil ) - { - cell = [[UtililyItemCell alloc] initWithFrame: CGRectMake(0.0, 0.0, 55.0, 55.0) reuseIdentifier: PlainCellIdentifier] ; - // cell.selectionGlowColor = [UIColor purpleColor]; - } - ChatUtilityItem *item =[self.itemsArray objectAtIndex: index]; - cell.icon.image = [UIImage imageNamed: item.itemLogo]; - cell.title.text=item.itemName; - return cell; -} -- (void) gridView: (AQGridView *) gridView didSelectItemAtIndex: (NSUInteger) index -{ - - self.imagePicker = [[UIImagePickerController alloc] init]; - self.imagePicker.delegate = self; - [gridView deselectItemAtIndex:index animated:YES]; - UtililyItemCell * cell = (UtililyItemCell *)[self.gridView cellForItemAtIndex: index]; - if ([cell.title.text isEqualToString:@"拍摄"]) { - dispatch_async(dispatch_get_main_queue(), ^{ - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) - { - self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; - } - self.imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical; - self.imagePicker.wantsFullScreenLayout=YES; - [[ChattingMainViewController shareInstance].navigationController presentViewController:self.imagePicker animated:NO completion:nil]; - }); - - }else if ([cell.title.text isEqualToString:@"照片"]) - { - self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - self.imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical; - [self.navigationController pushViewController:[AlbumViewController new] animated:YES]; - - } -} - -- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker -{ - - [picker dismissViewControllerAnimated:YES completion:nil]; - self.imagePicker=nil; -} --(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ - NSLog(@"Picker returned successfully."); - NSLog(@"%@", info); - NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; - if ([mediaType isEqualToString:( NSString *)kUTTypeImage]){ - - __block UIImage *theImage = nil; - if ([picker allowsEditing]){ - theImage = [info objectForKey:UIImagePickerControllerEditedImage]; - } else { - theImage = [info objectForKey:UIImagePickerControllerOriginalImage]; - - } - UIImage *image = [self scaleImage:theImage toScale:0.3]; - NSData *imageData = UIImageJPEGRepresentation(image, (CGFloat)1.0); - UIImage * m_selectImage = [UIImage imageWithData:imageData]; - __block Photo *photo = [Photo new]; - NSString *keyName = [[PhotosCache sharedPhotoCache] getKeyName]; - photo.localPath=keyName; - [picker dismissViewControllerAnimated:NO completion:nil]; - self.imagePicker=nil; - [[ChattingMainViewController shareInstance] sendImageMessage:photo Image:m_selectImage]; - - - } - -} -#pragma mark - -#pragma mark 等比縮放image -- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize -{ - UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize, image.size.height*scaleSize)); - [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)]; - UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return scaledImage; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.h deleted file mode 100644 index e0f5632..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDAlbumDetailsViewControllViewController.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "AQGridViewController.h" -#import <AssetsLibrary/AssetsLibrary.h> -@class AlbumDetailsBottomBar; -@interface DDAlbumDetailsViewControll : UIViewController<AQGridViewDataSource,AQGridViewDelegate> -@property(nonatomic,strong)ALAssetsGroup *assetsGroup; -@property(nonatomic,strong)NSMutableArray *assetsArray; -@property(nonatomic,strong)NSMutableArray *choosePhotosArray; -@property(nonatomic,strong)AQGridView *gridView; -@property(nonatomic,strong)AlbumDetailsBottomBar *bar; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.m deleted file mode 100644 index 1e1d0d2..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// DDAlbumDetailsViewControllViewController.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-4. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "DDAlbumDetailsViewControll.h" -#import "ImageGridViewCell.h" -#import "ChattingMainViewController.h" -#import "AlbumDetailsBottomBar.h" -#import "DDSendPhotoMessageAPI.h" -#import "Photo.h" -#import "DDDatabaseUtil.h" -#import "std.h" -#import "MWCommon.h" -#import "MBProgressHUD.h" -#import "PhotosCache.h" -#import "DDMessageSendManager.h" -#import "ImagesPreviewViewController.h" -@interface DDAlbumDetailsViewControll () - -@end - -@implementation DDAlbumDetailsViewControll - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.title=@"预览"; - [self.view setBackgroundColor:[UIColor whiteColor]]; - self.gridView = [[AQGridView alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height-45)]; - self.gridView.delegate = self; - self.gridView.dataSource = self; - [self.view addSubview:self.gridView]; - self.assetsArray = [NSMutableArray new]; - self.choosePhotosArray = [NSMutableArray new]; - [self.assetsGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { - if(result) { - [_assetsArray addObject:result]; - - } - if (stop) - { - [self.gridView reloadData]; - } - }]; - UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(backToRoot)]; - self.navigationItem.rightBarButtonItem=item; - self.bar = [[AlbumDetailsBottomBar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-45, 320, 45)]; - __weak typeof(self) weakSelf = self; - self.bar.Block=^(int buttonIndex){ - if (buttonIndex == 0) { - if ([weakSelf.choosePhotosArray count] == 0) { - return ; - } - ImagesPreviewViewController *photoPreview = [ImagesPreviewViewController new]; - photoPreview.imageArray=weakSelf.choosePhotosArray; - // [TheAppDel.navigationController pushViewController:photoPreview animated:YES]; -#warning 处理跳转 - [weakSelf.navigationController pushViewController:photoPreview animated:YES]; - - }else - { - //send picture - if ([weakSelf.choosePhotosArray count] >0) { - MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:weakSelf.view]; - [weakSelf.view addSubview:HUD]; - - HUD.dimBackground = YES; - HUD.labelText = @"正在发送"; - - [HUD showAnimated:YES whileExecutingBlock:^{ - for (int i = 0; i<[weakSelf.choosePhotosArray count]; i++) { - Photo *photo = [Photo new]; - ALAsset *asset = [weakSelf.choosePhotosArray objectAtIndex:i]; - ALAssetRepresentation* representation = [asset defaultRepresentation]; - NSURL* url = [representation url]; - photo.localPath=url.absoluteString; - UIImage *image = nil; - if (representation == nil) { - CGImageRef thum = [asset aspectRatioThumbnail]; - image = [[UIImage alloc]initWithCGImage:thum]; - }else - { - image =[[UIImage alloc]initWithCGImage:[[asset defaultRepresentation] fullScreenImage]]; - } - NSString *keyName = [[PhotosCache sharedPhotoCache] getKeyName]; - - photo.localPath=keyName; - [[ChattingMainViewController shareInstance] sendImageMessage:photo Image:image]; - } - - } completionBlock:^{ - [HUD removeFromSuperview]; - [weakSelf.navigationController popToViewController:[ChattingMainViewController shareInstance] animated:YES]; - }]; - } - } - }; - [self.view addSubview:self.bar]; - // Do any additional setup after loading the view. - [self.gridView scrollToItemAtIndex:[self.assetsArray count] atScrollPosition:AQGridViewScrollPositionBottom animated:NO]; -} - -- (void)dealloc -{ - self.choosePhotosArray =nil; - self.gridView=nil; - self.assetsArray=nil; - self.bar= nil; -} - --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} --(void)backToRoot -{ -#warning 处理跳转 - - // [TheAppDel.navigationController popToViewController:[DDChattingMainViewController shareInstance] animated:YES]; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -- (NSUInteger) numberOfItemsInGridView: (AQGridView *) gridView -{ - return [self.assetsArray count]; -} -- (AQGridViewCell *) gridView: (AQGridView *) aGridView cellForItemAtIndex: (NSUInteger) index -{ - static NSString * PlainCellIdentifier = @"PlainCellIdentifier"; - - ImageGridViewCell * cell = (ImageGridViewCell *)[self.gridView dequeueReusableCellWithIdentifier: PlainCellIdentifier]; - if ( cell == nil ) - { - cell = [[ImageGridViewCell alloc] initWithFrame: CGRectMake(0.0, 0.0, 75.0, 75.0) reuseIdentifier: PlainCellIdentifier]; - - } - cell.isShowSelect=YES; - cell.selectionGlowColor=[UIColor clearColor]; - ALAsset *asset = [self.assetsArray objectAtIndex:index]; - - CGImageRef thum = [asset thumbnail]; - UIImage* ti = [UIImage imageWithCGImage:thum]; - cell.image = ti; - cell.tag=index; - if ([self.choosePhotosArray containsObject:asset]) { - [cell setCellIsToHighlight:YES]; - }else - { - [cell setCellIsToHighlight:NO]; - } - return cell ; -} -- (void) gridView: (AQGridView *) gridView didSelectItemAtIndex: (NSUInteger) index -{ - [gridView deselectItemAtIndex:index animated:YES]; - - ALAsset *asset = [self.assetsArray objectAtIndex:index]; - ImageGridViewCell *cell =(ImageGridViewCell *) [self.gridView cellForItemAtIndex:index]; - if ([self.choosePhotosArray containsObject:asset]) { - [cell setCellIsToHighlight:NO]; - [self.choosePhotosArray removeObject:asset]; - }else{ - if ([self.choosePhotosArray count] == 10) { - return; - } - [cell setCellIsToHighlight:YES]; - [self.choosePhotosArray addObject:asset]; - } - [self.bar setSendButtonTitle:[self.choosePhotosArray count]]; - -} -- (CGSize) portraitGridCellSizeForGridView: (AQGridView *) gridView -{ - return CGSizeMake(75, 80); -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.h deleted file mode 100644 index 8c8c861..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDEmojiFaceView.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@protocol facialViewDelegate - --(void)selectedFacialView:(NSString*)str; - -@end -@interface EmojiFaceView : UIView -@property(nonatomic,assign)id<facialViewDelegate>delegate; --(void)loadFacialView:(int)page size:(CGSize)size; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.m deleted file mode 100644 index 043beda..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmojiFaceView.m +++ /dev/null @@ -1,76 +0,0 @@ -// -// DDEmojiFaceView.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "EmojiFaceView.h" -#import "EmotionsModule.h" -#define DD_MAC_EMOTIONS_COUNT_PERPAGE 20 -#define DD_EMOTIONS_PERROW 7 -#define DD_EMPTIONS_ROWS 3 - -@implementation EmojiFaceView - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} --(void)loadFacialView:(int)page size:(CGSize)size -{ - //row number - NSArray* emotions = [EmotionsModule shareInstance].emotions; - for (int i=0; i<DD_EMPTIONS_ROWS; i++) { - //column numer - for (int y=0; y<DD_EMOTIONS_PERROW; y++) { - UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom]; - [button setBackgroundColor:[UIColor clearColor]]; - [button setFrame:CGRectMake(y*size.width, i*size.height, size.width, size.height)]; - if ((i * DD_EMOTIONS_PERROW + y + page * DD_MAC_EMOTIONS_COUNT_PERPAGE) > [emotions count]) { - return; - }else{ - if (i * DD_EMOTIONS_PERROW + y == DD_MAC_EMOTIONS_COUNT_PERPAGE || (i * DD_EMOTIONS_PERROW + y + page * DD_MAC_EMOTIONS_COUNT_PERPAGE) == [emotions count]) - { - [button setImage:[UIImage imageNamed:@"dd_emoji_delete"] forState:UIControlStateNormal]; - button.tag=10000; - [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:button]; - } - else - { - [button.titleLabel setFont:[UIFont fontWithName:@"AppleColorEmoji" size:27.0]]; - [button setTitle: [emotions objectAtIndex:i*DD_EMOTIONS_PERROW+y+(page*DD_MAC_EMOTIONS_COUNT_PERPAGE)]forState:UIControlStateNormal]; - button.tag=i*DD_EMOTIONS_PERROW+y+(page*DD_MAC_EMOTIONS_COUNT_PERPAGE); - [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:button]; - } - } - } - } -} --(void)selected:(UIButton*)bt -{ - NSArray* emotions = [EmotionsModule shareInstance].emotions; - if (bt.tag==10000) { - [self.delegate selectedFacialView:@"delete"]; - }else{ - NSString *str=[emotions objectAtIndex:bt.tag]; - [self.delegate selectedFacialView:str]; - } -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.h deleted file mode 100644 index 14492c6..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DDEmotionsModule.h -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-23. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface EmotionsModule : NSObject -@property (nonatomic,readonly)NSArray* emotions; -@property (nonatomic,readonly)NSDictionary* emotionUnicodeDic; -@property (nonatomic,readonly)NSDictionary* unicodeEmotionDic; -@property (nonatomic,readonly)NSDictionary* emotionLength; -+ (instancetype)shareInstance; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.m deleted file mode 100644 index e542e28..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsModule.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// DDEmotionsModule.m -// Mogujie4iPhone -// -// Created by 独嘉 on 14-6-23. -// Copyright (c) 2014年 juangua. All rights reserved. -// - -#import "EmotionsModule.h" - -@implementation EmotionsModule -{ -// NSDictionary* _emotionUnicodeDic; -// NSDictionary* _unicodeEmotionDic; -// NSArray* _emotions; -} - -+ (instancetype)shareInstance -{ - static EmotionsModule* g_emotionsModule; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_emotionsModule = [[EmotionsModule alloc] init]; - }); - return g_emotionsModule; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _emotionUnicodeDic = @{@"[嘻嘻]":@"\U0001F601", - @"[偷笑]":@"\U0001F604", - @"[哈哈]":@"\U0001F606", - @"[呵呵]":@"\U0001F60A", - @"[馋嘴]":@"\U0001F60B", - @"[花心]":@"\U0001F60D", - @"[酷]":@"\U0001F60E", - @"[做鬼脸]":@"\U0001F60F", - @"[汗]":@"\U0001F611", - @"[困]":@"\U0001F613", - @"[生病]":@"\U0001F616", - @"[亲亲]":@"\U0001F618", - @"[右哼哼]":@"\U0001F617", - @"[闭嘴]":@"\U0001F620", - @"[怒]":@"\U0001F621", - @"[哼]":@"\U0001F624", - @"[失望]":@"\U0001F627", - @"[吃惊]":@"\U0001F62E", - @"[睡觉]":@"\U0001F634", - @"[泪]":@"\U0001F62D", - @"[抓狂]":@"\U0001F631", - @"[晕]":@"\U0001F632", - @"[嘘]":@"\U0001F636", - @"[感冒]":@"\U0001F637", - @"[挤眼]":@"\U0000263A", - @"[阴险]":@"\U0001F47F", - @"[热吻]":@"\U0001F48B", - @"[心]":@"\U00002764", - @"[ok]":@"\U0001F44C", - @"[不要]":@"\U0000261D", - @"[弱]":@"\U0001F44E", - @"[good]":@"\U0001F44D", - @"[拳头]":@"\U0000270A", - @"[耶]":@"\U0000270C", - @"[0]":@"0️⃣", - @"[1]":@"1️⃣", - @"[2]":@"2️⃣", - @"[3]":@"3️⃣", - @"[4]":@"4️⃣", - @"[5]":@"5️⃣", - @"[6]":@"6️⃣", - @"[7]":@"7️⃣", - @"[8]":@"8️⃣", - @"[9]":@"9️⃣" - }; - _unicodeEmotionDic = [[NSMutableDictionary alloc] init]; - [_emotionUnicodeDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [_unicodeEmotionDic setValue:key forKey:obj]; - }]; - - _emotions = @[@"\U0001F601", - @"\U0001F604", - @"\U0001F606", - @"\U0001F60A", - @"\U0001F60B", - @"\U0001F60D", - @"\U0001F60E", - @"\U0001F60F", - @"\U0001F611", - @"\U0001F613", - @"\U0001F616", - @"\U0001F618", - @"\U0001F617", - @"\U0001F620", - @"\U0001F621", - @"\U0001F624", - @"\U0001F627", - @"\U0001F62E", - @"\U0001F634", - @"\U0001F62D", - @"\U0001F631", - @"\U0001F632", - @"\U0001F636", - @"\U0001F637", - @"\U0000263A", - @"\U0001F47F", - @"\U0001F48B", - @"\U00002764", - @"\U0001F44C", - @"\U0000261D", - @"\U0001F44E", - @"\U0001F44D", - @"\U0000270A", - @"\U0000270C", - @"0️⃣", - @"1️⃣", - @"2️⃣", - @"3️⃣", - @"4️⃣", - @"5️⃣", - @"6️⃣", - @"7️⃣", - @"8️⃣", - @"9️⃣"]; - - _emotionLength = [[NSMutableDictionary alloc] init]; - [_emotions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [_emotionLength setValue:@([obj length]) forKeyPath:obj]; - }]; - } - return self; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.h deleted file mode 100644 index 854766d..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DDEmotionsViewController.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "AQGridViewController.h" -#import "EmojiFaceView.h" -@protocol DDEmotionsViewControllerDelegate<NSObject> - -- (void)emotionViewClickSendButton; - -@end -@interface EmotionsViewController : UIViewController<facialViewDelegate,UIScrollViewDelegate> -@property(nonatomic,strong)UIScrollView *scrollView; -@property(nonatomic,strong)UIPageControl *pageControl; -@property(assign)BOOL isOpen; -@property(nonatomic,assign)id<DDEmotionsViewControllerDelegate>delegate; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.m deleted file mode 100644 index 1e24092..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/EmotionsViewController.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// DDEmotionsViewController.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "EmotionsViewController.h" -#import "ChattingMainViewController.h" -#import "std.h" -@interface EmotionsViewController () - -- (void)clickTheSendButton:(id)sender; - -@end -#define keyboardHeight 216 -#define facialViewWidth 300 -#define facialViewHeight 170 -#define DD_EMOTION_MENU_HEIGHT 50 -@implementation EmotionsViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.view.frame=CGRectMake(0, 0, 320, 216); - if (self.scrollView==nil) { - self.scrollView=[[UIScrollView alloc] initWithFrame:self.view.frame]; - [self.scrollView setBackgroundColor:RGB(224, 224, 224)]; - for (int i=0; i<2; i++) { - EmojiFaceView *fview=[[EmojiFaceView alloc] initWithFrame:CGRectMake(12+320*i, 15, facialViewWidth, facialViewHeight)]; - [fview setBackgroundColor:[UIColor clearColor]]; - [fview loadFacialView:i size:CGSizeMake(42, 42)]; - fview.delegate=self; - [self.scrollView addSubview:fview]; - } - } - [self.scrollView setShowsVerticalScrollIndicator:NO]; - [self.scrollView setShowsHorizontalScrollIndicator:NO]; - self.scrollView.contentSize=CGSizeMake(320*2, keyboardHeight); - self.scrollView.pagingEnabled=YES; - self.scrollView.delegate=self; - [self.view addSubview:self.scrollView]; - - self.pageControl=[[UIPageControl alloc]initWithFrame:CGRectMake(85, self.view.frame.size.height-30 - DD_EMOTION_MENU_HEIGHT, 150, 30)]; - [self.pageControl setCurrentPage:0]; - self.pageControl.pageIndicatorTintColor=[UIColor whiteColor]; - self.pageControl.currentPageIndicatorTintColor=RGB(245, 62, 102); - self.pageControl.numberOfPages = 2; - [self.pageControl setBackgroundColor:[UIColor clearColor]]; - [self.pageControl addTarget:self action:@selector(changePage:)forControlEvents:UIControlEventValueChanged]; - [self.view addSubview:self.pageControl]; - - UIView* menuView = [[UIView alloc] initWithFrame:CGRectMake(0, keyboardHeight - DD_EMOTION_MENU_HEIGHT, 320, DD_EMOTION_MENU_HEIGHT)]; - [menuView setBackgroundColor:RGB(249, 249, 249)]; - UIButton* sendButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [sendButton addTarget:self action:@selector(clickTheSendButton:) forControlEvents:UIControlEventTouchUpInside]; - [sendButton setFrame:CGRectMake(238, 11, 72, 28)]; - UIImage* backgroundImage = [UIImage imageNamed:@"dd_image_send"]; - [sendButton setBackgroundImage:backgroundImage forState:UIControlStateNormal]; - [sendButton setTitle:@"发送" forState:UIControlStateNormal]; - [menuView addSubview:sendButton]; - [self.view addSubview:menuView]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -- (void)scrollViewDidScroll:(UIScrollView *)sender { - int page = self.scrollView.contentOffset.x / 320; - self.pageControl.currentPage = page; -} --(void)selectedFacialView:(NSString*)str -{ - if ([str isEqualToString:@"delete"]) { - [[ChattingMainViewController shareInstance] deleteEmojiFace]; - return; - } - [[ChattingMainViewController shareInstance] insertEmojiFace:str]; -} -- (IBAction)changePage:(id)sender { - int page = self.pageControl.currentPage; - [self.scrollView setContentOffset:CGPointMake(320 * page, 0)]; -} - -#pragma mark - privateAPI -- (void)clickTheSendButton:(id)sender -{ - if (self.delegate) - { - [self.delegate emotionViewClickSendButton]; - } -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.h deleted file mode 100644 index 281ff18..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDUtililyItemCell.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "AQGridViewCell.h" -@class ChatUtilityItem; -@interface UtililyItemCell : AQGridViewCell -@property(nonatomic,strong)UIImageView *icon; -@property(nonatomic,strong)UILabel *title; -- (void)configureForItem:(ChatUtilityItem *)item; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.m deleted file mode 100644 index 8d03cb3..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChatUtility/UtililyItemCell.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// DDUtililyItemCell.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "UtililyItemCell.h" -#import "ChatUtilityItem.h" -@implementation UtililyItemCell - -- (id)initWithFrame:(CGRect)frame reuseIdentifier: (NSString *) aReuseIdentifier -{ - self = [super initWithFrame: frame reuseIdentifier: aReuseIdentifier]; - if ( self == nil ) - return ( nil ); - // Initialization code - - - self.icon=[[UIImageView alloc] initWithFrame:frame]; - self.title =[[UILabel alloc] initWithFrame:CGRectMake(self.frame.origin.x, self.frame.size.height-13, self.frame.size.width, self.frame.size.height)]; - [self.title setFont:[UIFont systemFontOfSize:12]]; - [self.title setBackgroundColor:[UIColor clearColor]]; - [self.title setTextColor:[UIColor grayColor]]; - [self.title setTextAlignment:NSTextAlignmentCenter]; - [self.contentView addSubview:self.icon]; - [self.contentView addSubview:self.title]; - [self.contentView setBackgroundColor:[UIColor clearColor]]; - [self setBackgroundColor:[UIColor clearColor]]; - - return self; -} -- (void)configureForItem:(ChatUtilityItem *)item -{ - [self.icon setImage:[UIImage imageNamed:item.itemLogo]]; - self.title.text = item.itemName; -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.h deleted file mode 100644 index cbfa8b6..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDChattingEditModel.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-17. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface ChattingEditModule : NSObject --(void)addNewPersonToGroup:(NSArray *)userIDs Block:(void(^)(BOOL success))block; --(void)removePersonFromGroup:(NSArray *)userIDs Block:(void(^)(BOOL success))block; -- (instancetype)initChattingEditModel:(NSString *)sessionID; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.m deleted file mode 100644 index baa979d..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingEditModule.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// DDChattingEditModel.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-17. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ChattingEditModule.h" -#import "DDCreateGroupAPI.h" -@interface ChattingEditModule (Private) -@property(nonatomic,strong)NSMutableArray *group; -@end -@implementation ChattingEditModule -/** - * 初始化Model - * - * @param sessionID 当前会话的ID - * - * @return 返回Model对象 - */ -- (instancetype)initChattingEditModel:(NSString *)sessionID -{ - self = [super init]; - if (self) { - - } - return self; -} -/** - * 添加一个人到当前聊天 - * - * @param userID 要添加的用户的id - */ - -/** - * 从当前的Group中删除一个人 - * - * @param userID 要删除的用户的id - */ --(void)removePersonFromGroup:(NSArray *)userIDs Block:(void(^)(BOOL success))block -{ - -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.h deleted file mode 100644 index 55b0684..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// DDChattingMainViewController.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "JSMessageInputView.h" -#import "RecorderManager.h" -#import "PlayerManager.h" -#import "Photo.h" -#import "JSMessageTextView.h" -#import "DDMessageEntity.h" -#import "ChattingModule.h" -#import "EmotionsViewController.h" -@class ChatUtilityViewController; -@class EmotionsViewController; -@class DDSessionEntity; -@class RecordingView; -@interface ChattingMainViewController : UIViewController<UITextViewDelegate, JSMessageInputViewDelegate,UITableViewDataSource,UITableViewDelegate,RecordingDelegate,PlayingDelegate,UIScrollViewDelegate,UIGestureRecognizerDelegate,UIAlertViewDelegate,DDEmotionsViewControllerDelegate> -{ - RecordingView* _recordingView; -} -@property(nonatomic,strong)ChattingModule* module; -@property(nonatomic,strong)ChatUtilityViewController *ddUtility; -@property(nonatomic,strong)JSMessageInputView *chatInputView; -@property (assign, nonatomic) CGFloat previousTextViewContentHeight; -@property(nonatomic,weak)IBOutlet UITableView *tableView; -@property(nonatomic,strong)EmotionsViewController *emotions; -@property (assign, nonatomic, readonly) UIEdgeInsets originalTableViewContentInset; -@property (nonatomic, strong) UIRefreshControl* refreshControl; -+(instancetype )shareInstance; - --(void)sendImageMessage:(Photo *)photo Image:(UIImage *)image; -/** - * 任意页面跳转到聊天界面并开始一个会话 - * - * @param session 传入一个会话实体 - */ -- (void)showChattingContentForSession:(DDSessionEntity*)session; --(void)insertEmojiFace:(NSString *)string; --(void)deleteEmojiFace; -@end - - -@interface ChattingMainViewController(ChattingInput) -- (void)initialInput; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m deleted file mode 100644 index bfbcfbe..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m +++ /dev/null @@ -1,1268 +0,0 @@ -// -// DDChattingMainViewController.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "ChattingMainViewController.h" -#import "ChatUtilityViewController.h" -#import "std.h" -#import "PhotosCache.h" -#import "DDGroupModule.h" -#import "DDMessageSendManager.h" -#import "DDGroupMsgReadACKAPI.h" -#import "DDDatabaseUtil.h" -#import "DDChatTextCell.h" -#import "DDChatVoiceCell.h" -#import "DDChatImageCell.h" -#import "DDChattingEditViewController.h" -#import "DDPromptCell.h" -#import "UIView+DDAddition.h" -#import "DDMessageModule.h" -#import "RecordingView.h" -#import "AnalysisImage.h" -#import "TouchDownGestureRecognizer.h" -#import "DDSendMessageReadACKAPI.h" -#import "DDSendPhotoMessageAPI.h" -#import "NSDictionary+JSON.h" -#import "EmotionsModule.h" -#import "RuntimeStatus.h" -#import "RecentUsersViewController.h" -#import "PublicProfileViewControll.h" -#import "UnAckMessageManager.h" -typedef NS_ENUM(NSUInteger, DDBottomShowComponent) -{ - DDInputViewUp = 1, - DDShowKeyboard = 1 << 1, - DDShowEmotion = 1 << 2, - DDShowUtility = 1 << 3 -}; - -typedef NS_ENUM(NSUInteger, DDBottomHiddComponent) -{ - DDInputViewDown = 14, - DDHideKeyboard = 13, - DDHideEmotion = 11, - DDHideUtility = 7 -}; -// - -typedef NS_ENUM(NSUInteger, DDInputType) -{ - DDVoiceInput, - DDTextInput -}; - -typedef NS_ENUM(NSUInteger, PanelStatus) -{ - VoiceStatus, - TextInputStatus, - EmotionStatus, - ImageStatus -}; - -#define DDINPUT_MIN_HEIGHT 44.0f -#define DDINPUT_HEIGHT self.chatInputView.size.height -#define DDINPUT_BOTTOM_FRAME CGRectMake(0, CONTENT_HEIGHT - self.chatInputView.height + NAVBAR_HEIGHT,FULL_WIDTH,self.chatInputView.height) -#define DDINPUT_TOP_FRAME CGRectMake(0, CONTENT_HEIGHT - self.chatInputView.height + NAVBAR_HEIGHT - 216, 320, self.chatInputView.height) -#define DDUTILITY_FRAME CGRectMake(0, CONTENT_HEIGHT + NAVBAR_HEIGHT -216, 320, 216) -#define DDEMOTION_FRAME CGRectMake(0, CONTENT_HEIGHT + NAVBAR_HEIGHT-216, 320, 216) -#define DDCOMPONENT_BOTTOM CGRectMake(0, CONTENT_HEIGHT + NAVBAR_HEIGHT, 320, 216) - -@interface ChattingMainViewController ()<UIGestureRecognizerDelegate> -@property(nonatomic,assign)CGPoint inputViewCenter; -@property(nonatomic,strong)UIActivityIndicatorView *activity; -@property(assign)PanelStatus panelStatus; -@property(strong)NSString *chatObjectID; -@property(strong) UIButton *titleBtn ; -- (void)recentViewController; - -- (UITableViewCell*)p_textCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)message; -- (UITableViewCell*)p_voiceCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)message; -- (UITableViewCell*)p_promptCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDPromptEntity*)prompt; -- (UITableViewCell*)p_commodityCell_tableView:(UITableView* )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)commodity; - -- (void)n_receiveMessage:(NSNotification*)notification; -- (void)n_receiveStartLoginNotification:(NSNotification*)notification; -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification; -- (void)n_receiveLoginFailureNotification:(NSNotification*)notification; -- (void)n_receiveUserKickoffNotification:(NSNotification*)notification; - -- (void)p_clickThRecordButton:(UIButton*)button; -- (void)p_record:(UIButton*)button; -- (void)p_willCancelRecord:(UIButton*)button; -- (void)p_cancelRecord:(UIButton*)button; -- (void)p_sendRecord:(UIButton*)button; -- (void)p_endCancelRecord:(UIButton*)button; - -- (void)p_tapOnTableView:(UIGestureRecognizer*)sender; -- (void)p_hideBottomComponent; - -- (void)p_enableChatFunction; -- (void)p_unableChatFunction; - -@end - -@implementation ChattingMainViewController -{ - TouchDownGestureRecognizer* _touchDownGestureRecognizer; - NSString* _currentInputContent; - UIButton *_recordButton; - DDBottomShowComponent _bottomShowComponent; - float _inputViewY; - int _type; -} -+(instancetype )shareInstance -{ - static dispatch_once_t onceToken; - static ChattingMainViewController *_sharedManager = nil; - dispatch_once(&onceToken, ^{ - _sharedManager = [ChattingMainViewController new]; - }); - return _sharedManager; -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer -{ - CGPoint location = [gestureRecognizer locationInView:self.view]; - if (CGRectContainsPoint(DDINPUT_BOTTOM_FRAME, location)) - { - return NO; - } - return YES; -} - --(void)sendImageMessage:(Photo *)photo Image:(UIImage *)image -{ - NSDictionary* messageContentDic = @{DD_IMAGE_LOCAL_KEY:photo.localPath}; - NSString* messageContent = [messageContentDic jsonString]; - - DDMessageEntity *message = [DDMessageEntity makeMessage:messageContent Module:self.module MsgType:DDMessageTypeImage]; - [self scrollToBottomAnimated:YES]; - NSData *photoData = UIImagePNGRepresentation(image); - [[PhotosCache sharedPhotoCache] storePhoto:photoData forKey:photo.localPath toDisk:YES]; - //[self.chatInputView.textView setText:@""]; - [[DDDatabaseUtil instance] insertMessages:@[message] success:^{ - DDLog(@"消息插入DB成功"); - - } failure:^(NSString *errorDescripe) { - DDLog(@"消息插入DB失败"); - }]; - photo=nil; - [[DDSendPhotoMessageAPI sharedPhotoCache] uploadImage:messageContentDic[DD_IMAGE_LOCAL_KEY] success:^(NSString *imageURL) { - [self scrollToBottomAnimated:YES]; - NSDictionary* tempMessageContent = [NSDictionary initWithJsonString:message.msgContent]; - NSMutableDictionary* mutalMessageContent = [[NSMutableDictionary alloc] initWithDictionary:tempMessageContent]; - [mutalMessageContent setValue:imageURL forKey:DD_IMAGE_URL_KEY]; - NSString* messageContent = [mutalMessageContent jsonString]; - message.msgContent = messageContent; - [self sendMessage:imageURL messageEntity:message]; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - }]; - - } failure:^(id error) { - message.state = DDMessageSendFailure; - //刷新DB - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [_tableView reloadData]; - }); - } - }]; - - }]; -} -- (void)textViewEnterSend -{ - //发送消息 - NSString* text = [self.chatInputView.textView text]; - - NSString* parten = @"\\s"; - NSRegularExpression* reg = [NSRegularExpression regularExpressionWithPattern:parten options:NSRegularExpressionCaseInsensitive error:nil]; - NSString* checkoutText = [reg stringByReplacingMatchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0, [text length]) withTemplate:@""]; - if ([checkoutText length] == 0) - { - return; - } - DDMessageContentType msgContentType = DDMessageTypeText; - DDMessageEntity *message = [DDMessageEntity makeMessage:text Module:self.module MsgType:msgContentType]; - [self.chatInputView.textView setText:nil]; - [[DDDatabaseUtil instance] insertMessages:@[message] success:^{ - DDLog(@"消息插入DB成功"); - } failure:^(NSString *errorDescripe) { - DDLog(@"消息插入DB失败"); - }]; - [self sendMessage:text messageEntity:message]; - [self scrollToBottomAnimated:YES]; -} - --(void)sendMessage:(NSString *)msg messageEntity:(DDMessageEntity *)message -{ - if (message) { - BOOL isGroup = self.module.sessionEntity.sessionType == SESSIONTYPE_SINGLE?NO:YES; - [[DDMessageSendManager instance] sendMessage:message isGroup:isGroup forSessionID:self.module.sessionEntity.sessionID completion:^(DDMessageEntity* theMessage,NSError *error) { - if (error) - { - [[DDDatabaseUtil instance] updateMessageForMessage:theMessage completion:^(BOOL result) { - if (result) - { - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - [self scrollToBottomAnimated:YES]; - - }); - } - }]; - } - else - { - theMessage.state = DDmessageSendSuccess; - [[DDDatabaseUtil instance] updateMessageForMessage:theMessage completion:^(BOOL result) { - if (result) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - [self scrollToBottomAnimated:YES]; - - }); - } - }]; - } - }]; - - } -} -//-------------------------------------------------------------------------------------------- -#pragma mark - -#pragma mark RecordingDelegate -- (void)recordingFinishedWithFileName:(NSString *)filePath time:(NSTimeInterval)interval -{ - NSMutableData* muData = [[NSMutableData alloc] init]; - NSData* data = [NSData dataWithContentsOfFile:filePath]; - int length = [RecorderManager sharedManager].recordedTimeInterval; - if (length < 1 ) - { - DDLog(@"录音时间太短"); - dispatch_async(dispatch_get_main_queue(), ^{ - [_recordingView setHidden:NO]; - [_recordingView setRecordingState:DDShowRecordTimeTooShort]; - }); - return; - } - else - { - dispatch_async(dispatch_get_main_queue(), ^{ - [_recordingView setHidden:YES]; - }); - } - int8_t ch[4]; - for(int32_t i = 0;i<4;i++){ - ch[i] = ((length >> ((3 - i)*8)) & 0x0ff); - } - [muData appendBytes:ch length:4]; - [muData appendData:data]; - DDMessageContentType msgContentType = DDMessageTypeVoice; - DDMessageEntity* message = [DDMessageEntity makeMessage:filePath Module:self.module MsgType:msgContentType]; - BOOL isGroup = self.module.sessionEntity.sessionType == SESSIONTYPE_SINGLE?NO:YES; -// if (isGroup) { -// message.msgType=MSG_TYPE_GROUP_AUDIO; -// }else -// { -// message.msgType = MSG_TYPE_AUDIO; -// } - [message.info setObject:@(length) forKey:VOICE_LENGTH]; - [message.info setObject:@(1) forKey:DDVOICE_PLAYED]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - [self scrollToBottomAnimated:YES]; - [[DDDatabaseUtil instance] insertMessages:@[message] success:^{ - NSLog(@"消息插入DB成功"); - } failure:^(NSString *errorDescripe) { - NSLog(@"消息插入DB失败"); - }]; - - }); - - [[DDMessageSendManager instance] sendVoiceMessage:muData filePath:filePath forSessionID:self.module.sessionEntity.sessionID isGroup:isGroup completion:^(DDMessageEntity *theMessage, NSError *error) { - if (!error) - { - DDLog(@"发送语音消息成功"); - [[PlayerManager sharedManager] playAudioWithFileName:@"msg.caf" playerType:DDSpeaker delegate:self]; - message.state = DDmessageSendSuccess; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - }); - - } - }]; - } - else - { - DDLog(@"发送语音消息失败"); - message.state = DDMessageSendFailure; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - if (result) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - }); - } - }]; - - } - }]; -} - -- (void)playingStoped -{ - -} -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - self.titleBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - self.titleBtn.frame=CGRectMake(0, 0, 150, 40); - [self.titleBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [self.titleBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; - [self.titleBtn addTarget:self action:@selector(titleTap:) forControlEvents:UIControlEventTouchUpInside]; - [self.titleBtn.titleLabel setTextAlignment:NSTextAlignmentLeft]; - } - return self; -} --(void)notificationCenter -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveMessage:) - name:DDNotificationReceiveMessage - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveStartLoginNotification:) name:DDNotificationStartLogin object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveLoginSuccessNotification:) - name:DDNotificationUserLoginSuccess - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveLoginFailureNotification:) - name:DDNotificationUserLoginFailure - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUserKickoffNotification:) name:DDNotificationUserKickouted object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleWillShowKeyboard:) - name:UIKeyboardWillShowNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleWillHideKeyboard:) - name:UIKeyboardWillHideNotification - object:nil]; - -} -- (void)viewDidLoad -{ - [super viewDidLoad]; - - UIImage* image = [UIImage imageNamed:@"navigationbar_back"]; - self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(p_popViewController)]; - - [self notificationCenter]; - [self initialInput]; - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(p_tapOnTableView:)]; - [self.tableView addGestureRecognizer:tap]; - - UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc] initWithTarget:self - action:@selector(p_tapOnTableView:)]; - pan.delegate = self; - [self.tableView addGestureRecognizer:pan]; - self.tableView.delegate=self; - self.tableView.dataSource=self; - [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; - [self scrollToBottomAnimated:NO]; - - _originalTableViewContentInset = self.tableView.contentInset; - - self.activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - self.activity.frame=CGRectMake(self.view.frame.size.width/2, 70, 20, 20); - - [self.view addSubview:self.activity]; - UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"contacts"] style:UIBarButtonItemStyleBordered target:self action:@selector(Edit:)]; - self.navigationItem.rightBarButtonItem=item; - [self.module addObserver:self forKeyPath:@"showingMessages" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:NULL]; - [self.module addObserver:self forKeyPath:@"sessionEntity.sessionID" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; - [self.navigationItem.titleView setUserInteractionEnabled:YES]; - self.navigationItem.titleView=self.titleBtn; - self.view.backgroundColor=[UIColor whiteColor]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUnreadMessageUpdateNotification:) name:DDNotificationUpdateUnReadMessage object:nil]; -} --(void)setThisViewTitle:(NSString *)title -{ - [self.titleBtn setTitle:title forState:UIControlStateNormal]; -} --(IBAction)Edit:(id)sender -{ - DDChattingEditViewController *chattingedit = [DDChattingEditViewController new]; - chattingedit.session=self.module.sessionEntity; - [self.navigationController pushViewController:chattingedit animated:YES]; -} - -- (void)back -{ - [self.chatInputView.textView resignFirstResponder]; - -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - - -- (void)scrollToBottomAnimated:(BOOL)animated -{ - NSInteger rows = [self.tableView numberOfRowsInSection:0]; - if(rows > 0) { - [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:rows - 1 inSection:0] - atScrollPosition:UITableViewScrollPositionBottom - animated:animated]; - - } - -} - -- (ChattingModule*)module -{ - if (!_module) - { - _module = [[ChattingModule alloc] init]; - } - return _module; -} - -#pragma mark - -#pragma mark ActionMethods 发送sendAction 音频 voiceChange 显示表情 disFaceKeyboard --(IBAction)sendAction:(id)sender{ - if (self.chatInputView.textView.text.length>0) { - NSLog(@"点击发送"); - [self.chatInputView.textView setText:@""]; - } -} - --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tableView reloadData]; - [self.chatInputView.textView setText:nil]; - [self.tabBarController.tabBar setHidden:YES]; - [self p_hideBottomComponent]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:animated]; - -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - [self.tabBarController.tabBar setHidden:NO]; - [self p_hideBottomComponent]; - -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; -} - -#pragma mark - -#pragma mark UIGesture Delegate -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - if ([gestureRecognizer.view isEqual:_tableView]) - { - return YES; - } - return NO; -} - -#pragma mark - EmojiFace Funcation --(void)insertEmojiFace:(NSString *)string -{ - NSMutableString* content = [NSMutableString stringWithString:self.chatInputView.textView.text]; - [content appendString:string]; - [self.chatInputView.textView setText:content]; -} --(void)deleteEmojiFace -{ - EmotionsModule* emotionModule = [EmotionsModule shareInstance]; - NSString* toDeleteString = nil; - if (self.chatInputView.textView.text.length == 0) - { - return; - } - if (self.chatInputView.textView.text.length == 1) - { - self.chatInputView.textView.text = @""; - } - else - { - toDeleteString = [self.chatInputView.textView.text substringFromIndex:self.chatInputView.textView.text.length - 1]; - int length = [emotionModule.emotionLength[toDeleteString] intValue]; - if (length == 0) - { - toDeleteString = [self.chatInputView.textView.text substringFromIndex:self.chatInputView.textView.text.length - 2]; - length = [emotionModule.emotionLength[toDeleteString] intValue]; - } - length = length == 0 ? 1 : length; - self.chatInputView.textView.text = [self.chatInputView.textView.text substringToIndex:self.chatInputView.textView.text.length - length]; - } - -} -#pragma mark - UITableView DataSource -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [self.module.showingMessages count]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - float height = 0; - id object = self.module.showingMessages[indexPath.row]; - if ([object isKindOfClass:[DDMessageEntity class]]) - { - DDMessageEntity* message = object; - height = [self.module messageHeight:message]; - } - else if([object isKindOfClass:[DDPromptEntity class]]) - { - height = 30; - } - return height+10; -} - -- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - - id object = self.module.showingMessages[indexPath.row]; - UITableViewCell* cell = nil; - if ([object isKindOfClass:[DDMessageEntity class]]) - { - DDMessageEntity* message = (DDMessageEntity*)object; - if (message.msgContentType == DDMessageTypeText ) { - cell = [self p_textCell_tableView:tableView cellForRowAtIndexPath:indexPath message:message]; - }else if (message.msgContentType == DDMessageTypeVoice || message.msgContentType==DDGroup_MessageTypeVoice) - { - cell = [self p_voiceCell_tableView:tableView cellForRowAtIndexPath:indexPath message:message]; - } - else if(message.msgContentType == DDMessageTypeImage) - { - cell = [self p_imageCell_tableView:tableView cellForRowAtIndexPath:indexPath message:message]; - } - else - { - cell = [self p_textCell_tableView:tableView cellForRowAtIndexPath:indexPath message:message]; - } - - } - else if ([object isKindOfClass:[DDPromptEntity class]]) - { - DDPromptEntity* prompt = (DDPromptEntity*)object; - cell = [self p_promptCell_tableView:tableView cellForRowAtIndexPath:indexPath message:prompt]; - } - - return cell; - -} - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - static BOOL loadingHistory = NO; - if (scrollView.contentOffset.y < -100 && [self.module.showingMessages count] > 0 && !loadingHistory) - { - loadingHistory = YES; - [self.activity startAnimating]; - NSString* sessionID = self.module.sessionEntity.sessionID; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.module loadMoreHistoryCompletion:^(NSUInteger addCount,NSError *error) { - loadingHistory = NO; - if ([sessionID isEqualToString:self.module.sessionEntity.sessionID]) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [_tableView reloadData]; - }); - [self.activity stopAnimating]; - if ([self.module.showingMessages count] > addCount) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [_tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:addCount inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; - }); - - } - } - }]; - }); - } -} -#pragma mark PublicAPI -- (void)showChattingContentForSession:(DDSessionEntity*)session -{ - [self.module.showingMessages removeAllObjects]; - self.module.sessionEntity = nil; - [self p_unableChatFunction]; - [self p_enableChatFunction]; - [self.module.showingMessages removeAllObjects]; - self.module.sessionEntity = session; - [self setThisViewTitle:session.name]; - NSArray* unreadMessages = [[DDMessageModule shareInstance]popAllUnreadMessagesForSessionID:session.sessionID]; - [self.module.showingMessages addObjectsFromArray:unreadMessages]; - [self.module loadMoreHistoryCompletion:^(NSUInteger addCount,NSError *error) { - [_tableView reloadData]; - if (addCount < DD_PAGE_ITEM_COUNT) - { - [self.activity stopAnimating]; - } - [self scrollToBottomAnimated:NO]; - }]; - -} -#pragma mark - Text view delegatef - -- (void)viewheightChanged:(float)height -{ - [self setValue:@(self.chatInputView.origin.y) forKeyPath:@"_inputViewY"]; -} - -#pragma mark PrivateAPI - -- (UITableViewCell*)p_textCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)message -{ - static NSString* identifier = @"DDChatTextCellIdentifier"; - DDChatBaseCell* cell = (DDChatBaseCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell = [[DDChatTextCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - } - NSString* myUserID = [RuntimeStatus instance].user.objID; - if ([message.senderId isEqualToString:myUserID]) - { - [cell setLocation:DDBubbleRight]; - } - else - { - [cell setLocation:DDBubbleLeft]; - } - - if (![[UnAckMessageManager instance] isInUnAckQueue:message] && message.state == DDMessageSending && [message isSendBySelf]) { - message.state=DDMessageSendFailure; - } - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - - }]; - [cell setContent:message]; - __weak DDChatTextCell* weakCell = (DDChatTextCell*)cell; - cell.sendAgain = ^{ - [weakCell showSending]; - [weakCell sendTextAgain:message]; - }; - - return cell; -} - -- (UITableViewCell*)p_voiceCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)message -{ - static NSString* identifier = @"DDVoiceCellIdentifier"; - DDChatBaseCell* cell = (DDChatBaseCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell = [[DDChatVoiceCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - } - NSString* myUserID = [RuntimeStatus instance].user.objID; - if ([message.senderId isEqualToString:myUserID]) - { - [cell setLocation:DDBubbleRight]; - } - else - { - [cell setLocation:DDBubbleLeft]; - } - [cell setContent:message]; - __weak DDChatVoiceCell* weakCell = (DDChatVoiceCell*)cell; - [(DDChatVoiceCell*)cell setTapInBubble:^{ - //播放语音 - NSString* fileName = message.msgContent; - [[PlayerManager sharedManager] playAudioWithFileName:fileName delegate:self]; - [message.info setObject:@(1) forKey:DDVOICE_PLAYED]; - [weakCell showVoicePlayed]; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - - }]; - - }]; - - [(DDChatVoiceCell*)cell setEarphonePlay:^{ - //听筒播放 - NSString* fileName = message.msgContent; - [[PlayerManager sharedManager] playAudioWithFileName:fileName playerType:DDEarPhone delegate:self]; - [message.info setObject:@(1) forKey:DDVOICE_PLAYED]; - [weakCell showVoicePlayed]; - - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - - }]; - - }]; - - [(DDChatVoiceCell*)cell setSpeakerPlay:^{ - //扬声器播放 - NSString* fileName = message.msgContent; - [[PlayerManager sharedManager] playAudioWithFileName:fileName playerType:DDSpeaker delegate:self]; - [message.info setObject:@(1) forKey:DDVOICE_PLAYED]; - [weakCell showVoicePlayed]; - [[DDDatabaseUtil instance] updateMessageForMessage:message completion:^(BOOL result) { - - }]; - - }]; - [(DDChatVoiceCell *)cell setSendAgain:^{ - //重发 - [weakCell showSending]; - [weakCell sendVoiceAgain:message]; - }]; - return cell; -} - -- (UITableViewCell*)p_promptCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDPromptEntity*)prompt -{ - static NSString* identifier = @"DDPromptCellIdentifier"; - DDPromptCell* cell = (DDPromptCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell = [[DDPromptCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - } - NSString* promptMessage = prompt.message; - [cell setprompt:promptMessage]; - return cell; -} -- (UITableViewCell*)p_imageCell_tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath message:(DDMessageEntity*)message -{ - static NSString* identifier = @"DDImageCellIdentifier"; - DDChatImageCell* cell = (DDChatImageCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell = [[DDChatImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - } - NSString* myUserID =[RuntimeStatus instance].user.objID; - if ([message.senderId isEqualToString:myUserID]) - { - [cell setLocation:DDBubbleRight]; - } - else - { - [cell setLocation:DDBubbleLeft]; - } - - [cell setContent:message]; - __weak DDChatImageCell* weakCell = cell; - - [cell setSendAgain:^{ - [weakCell sendImageAgain:message]; - - }]; - - [cell setTapInBubble:^{ - [weakCell showPreview]; - }]; - - [cell setPreview:cell.tapInBubble]; - - return cell; -} - - -- (void)n_receiveStartLoginNotification:(NSNotification*)notification -{ - [self setThisViewTitle:@"正在连接..."]; -} - -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification -{ - if (self.module.sessionEntity) - [self setThisViewTitle:self.module.sessionEntity.name]; -} - -- (void)n_receiveLoginFailureNotification:(NSNotification*)notification -{ - [self setThisViewTitle:@"未连接"]; -} - -- (void)n_receiveUserKickoffNotification:(NSNotification*)notification -{ - if ([self.navigationController.topViewController isEqual:self]) - { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"您的帐号在别处登录" delegate:self cancelButtonTitle:nil otherButtonTitles:@"重连", nil]; - [alert show]; - } -} - -- (void)p_clickThRecordButton:(UIButton*)button -{ - switch (button.tag) { - case DDVoiceInput: - //开始录音 - [self p_hideBottomComponent]; - [button setImage:[UIImage imageNamed:@"dd_input_normal"] forState:UIControlStateNormal]; - button.tag = DDTextInput; - [self.chatInputView willBeginRecord]; - [self.chatInputView.textView resignFirstResponder]; - _currentInputContent = self.chatInputView.textView.text; - if ([_currentInputContent length] > 0) - { - [self.chatInputView.textView setText:nil]; - } - break; - case DDTextInput: - //开始输入文字 - [button setImage:[UIImage imageNamed:@"dd_record_normal"] forState:UIControlStateNormal]; - button.tag = DDVoiceInput; - [self.chatInputView willBeginInput]; - if ([_currentInputContent length] > 0) - { - [self.chatInputView.textView setText:_currentInputContent]; - } - [self.chatInputView.textView becomeFirstResponder]; - break; - } -} - -- (void)p_record:(UIButton*)button -{ - [self.chatInputView.recordButton setHighlighted:YES]; - if (![[self.view subviews] containsObject:_recordingView]) - { - [self.view addSubview:_recordingView]; - } - [_recordingView setHidden:NO]; - [_recordingView setRecordingState:DDShowVolumnState]; - [[RecorderManager sharedManager] setDelegate:self]; - [[RecorderManager sharedManager] startRecording]; - DDLog(@"record"); -} - -- (void)p_willCancelRecord:(UIButton*)button -{ - [_recordingView setHidden:NO]; - [_recordingView setRecordingState:DDShowCancelSendState]; - DDLog(@"will cancel record"); -} - -- (void)p_cancelRecord:(UIButton*)button -{ - [self.chatInputView.recordButton setHighlighted:NO]; - [_recordingView setHidden:YES]; - [[RecorderManager sharedManager] cancelRecording]; - DDLog(@"cancel record"); -} - -- (void)p_sendRecord:(UIButton*)button -{ - [self.chatInputView.recordButton setHighlighted:NO]; - [[RecorderManager sharedManager] stopRecording]; - DDLog(@"send record"); -} - - -- (void)p_endCancelRecord:(UIButton*)button -{ - [_recordingView setHidden:NO]; - [_recordingView setRecordingState:DDShowVolumnState]; -} - -- (void)p_tapOnTableView:(UIGestureRecognizer*)sender -{ - if (_bottomShowComponent) - { - [self p_hideBottomComponent]; - } -} - -- (void)p_hideBottomComponent -{ - _bottomShowComponent = _bottomShowComponent & 0; - //隐藏所有 - [self.chatInputView.textView resignFirstResponder]; - [UIView animateWithDuration:0.25 animations:^{ - [self.ddUtility.view setFrame:DDCOMPONENT_BOTTOM]; - [self.emotions.view setFrame:DDCOMPONENT_BOTTOM]; - - [self.chatInputView setFrame:DDINPUT_BOTTOM_FRAME]; - }]; - - [self setValue:@(self.chatInputView.origin.y) forKeyPath:@"_inputViewY"]; -} - -- (void)p_enableChatFunction -{ - [self.chatInputView setUserInteractionEnabled:YES]; -} - -- (void)p_unableChatFunction -{ - [self.chatInputView setUserInteractionEnabled:NO]; -} - -- (void)p_popViewController -{ - [self.navigationController popViewControllerAnimated:YES]; -} - -#pragma mark - -#pragma mark DDEmotionViewCOntroller Delegate -- (void)emotionViewClickSendButton -{ - [self textViewEnterSend]; -} - - -- (void)recordingTimeout -{ - -} - -- (void)recordingStopped //录音机停止采集声音 -{ - -} - -- (void)recordingFailed:(NSString *)failureInfoString -{ - -} - -- (void)levelMeterChanged:(float)levelMeter -{ - [_recordingView setVolume:levelMeter]; -} -#pragma mark - -#pragma mark - KVO -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([keyPath isEqualToString:@"sessionEntity.sessionID"]) { - if ([change objectForKey:@"new"] !=nil) { - [self setThisViewTitle:self.module.sessionEntity.name]; - } - } - if ([keyPath isEqualToString:@"showingMessages"]) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - }); - } - if ([keyPath isEqualToString:@"_inputViewY"]) - { - float maxY = FULL_HEIGHT - DDINPUT_MIN_HEIGHT; - float gap = maxY - _inputViewY; - // [self p_unableLoadFunction]; - [UIView animateWithDuration:0.25 animations:^{ - _tableView.contentInset = UIEdgeInsetsMake(_tableView.contentInset.top, 0, gap, 0); - _tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, gap, 0); - - if (_bottomShowComponent & DDShowEmotion) - { - [self.emotions.view setTop:self.chatInputView.bottom]; - } - if (_bottomShowComponent & DDShowUtility) - { - [self.ddUtility.view setTop:self.chatInputView.bottom]; - } - - } completion:^(BOOL finished) { - // [self p_enableLoadFunction]; - }]; - if (gap != 0) - { - [self scrollToBottomAnimated:YES]; - } - } - -} -@end - -@implementation ChattingMainViewController(ChattingInput) - -- (void)initialInput -{ - CGRect inputFrame = CGRectMake(0, CONTENT_HEIGHT - DDINPUT_MIN_HEIGHT + NAVBAR_HEIGHT,FULL_WIDTH,DDINPUT_MIN_HEIGHT); - self.chatInputView = [[JSMessageInputView alloc] initWithFrame:inputFrame delegate:self]; - [self.chatInputView setBackgroundColor:RGB(249, 249, 249)]; - [self.view addSubview:self.chatInputView]; - [self.chatInputView.emotionbutton addTarget:self - action:@selector(showEmotions:) - forControlEvents:UIControlEventTouchUpInside]; - - [self.chatInputView.showUtilitysbutton addTarget:self - action:@selector(showUtilitys:) - forControlEvents:UIControlEventTouchDown]; - - [self.chatInputView.voiceButton addTarget:self - action:@selector(p_clickThRecordButton:) - forControlEvents:UIControlEventTouchUpInside]; - - - _touchDownGestureRecognizer = [[TouchDownGestureRecognizer alloc] initWithTarget:self action:nil]; - __weak ChattingMainViewController* weakSelf = self; - _touchDownGestureRecognizer.touchDown = ^{ - [weakSelf p_record:nil]; - }; - - _touchDownGestureRecognizer.moveInside = ^{ - [weakSelf p_endCancelRecord:nil]; - }; - - _touchDownGestureRecognizer.moveOutside = ^{ - [weakSelf p_willCancelRecord:nil]; - }; - - _touchDownGestureRecognizer.touchEnd = ^(BOOL inside){ - if (inside) - { - [weakSelf p_sendRecord:nil]; - } - else - { - [weakSelf p_cancelRecord:nil]; - } - }; - [self.chatInputView.recordButton addGestureRecognizer:_touchDownGestureRecognizer]; - _recordingView = [[RecordingView alloc] initWithState:DDShowVolumnState]; - [_recordingView setHidden:YES]; - [_recordingView setCenter:CGPointMake(self.view.centerX, self.view.centerY)]; - [self addObserver:self forKeyPath:@"_inputViewY" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; -} - --(IBAction)showUtilitys:(id)sender -{ - [_recordButton setImage:[UIImage imageNamed:@"dd_record_normal"] forState:UIControlStateNormal]; - _recordButton.tag = DDVoiceInput; - [self.chatInputView willBeginInput]; - if ([_currentInputContent length] > 0) - { - [self.chatInputView.textView setText:_currentInputContent]; - } - - if (self.ddUtility == nil) - { - self.ddUtility = [ChatUtilityViewController new]; - [self addChildViewController:self.ddUtility]; - self.ddUtility.view.frame=CGRectMake(0, self.view.size.height,320 , 280); - [self.view addSubview:self.ddUtility.view]; - } - - if (_bottomShowComponent & DDShowKeyboard) - { - //显示的是键盘,这是需要隐藏键盘,显示插件,不需要动画 - _bottomShowComponent = (_bottomShowComponent & 0) | DDShowUtility; - [self.chatInputView.textView resignFirstResponder]; - [self.ddUtility.view setFrame:DDUTILITY_FRAME]; - [self.emotions.view setFrame:DDCOMPONENT_BOTTOM]; - } - else if (_bottomShowComponent & DDShowUtility) - { - //插件面板本来就是显示的,这时需要隐藏所有底部界面 -// [self p_hideBottomComponent]; - [self.chatInputView.textView becomeFirstResponder]; - _bottomShowComponent = _bottomShowComponent & DDHideUtility; - } - else if (_bottomShowComponent & DDShowEmotion) - { - //显示的是表情,这时需要隐藏表情,显示插件 - [self.emotions.view setFrame:DDCOMPONENT_BOTTOM]; - [self.ddUtility.view setFrame:DDUTILITY_FRAME]; - _bottomShowComponent = (_bottomShowComponent & DDHideEmotion) | DDShowUtility; - } - else - { - //这是什么都没有显示,需用动画显示插件 - _bottomShowComponent = _bottomShowComponent | DDShowUtility; - [UIView animateWithDuration:0.25 animations:^{ - [self.ddUtility.view setFrame:DDUTILITY_FRAME]; - [self.chatInputView setFrame:DDINPUT_TOP_FRAME]; - }]; - [self setValue:@(DDINPUT_TOP_FRAME.origin.y) forKeyPath:@"_inputViewY"]; - - } - -} - --(IBAction)showEmotions:(id)sender -{ - [_recordButton setImage:[UIImage imageNamed:@"dd_record_normal"] forState:UIControlStateNormal]; - _recordButton.tag = DDVoiceInput; - [self.chatInputView willBeginInput]; - if ([_currentInputContent length] > 0) - { - [self.chatInputView.textView setText:_currentInputContent]; - } - - if (self.emotions == nil) { - self.emotions = [EmotionsViewController new]; - [self.emotions.view setBackgroundColor:[UIColor darkGrayColor]]; - self.emotions.view.frame=DDCOMPONENT_BOTTOM; - self.emotions.delegate = self; - [self.view addSubview:self.emotions.view]; - } - if (_bottomShowComponent & DDShowKeyboard) - { - //显示的是键盘,这是需要隐藏键盘,显示表情,不需要动画 - _bottomShowComponent = (_bottomShowComponent & 0) | DDShowEmotion; - [self.chatInputView.textView resignFirstResponder]; - [self.emotions.view setFrame:DDEMOTION_FRAME]; - [self.ddUtility.view setFrame:DDCOMPONENT_BOTTOM]; - } - else if (_bottomShowComponent & DDShowEmotion) - { - //表情面板本来就是显示的,这时需要隐藏所有底部界面 - [self.chatInputView.textView resignFirstResponder]; - _bottomShowComponent = _bottomShowComponent & DDHideEmotion; - } - else if (_bottomShowComponent & DDShowUtility) - { - //显示的是插件,这时需要隐藏插件,显示表情 - [self.ddUtility.view setFrame:DDCOMPONENT_BOTTOM]; - [self.emotions.view setFrame:DDEMOTION_FRAME]; - _bottomShowComponent = (_bottomShowComponent & DDHideUtility) | DDShowEmotion; - } - else - { - //这是什么都没有显示,需用动画显示表情 - _bottomShowComponent = _bottomShowComponent | DDShowEmotion; - [UIView animateWithDuration:0.25 animations:^{ - [self.emotions.view setFrame:DDEMOTION_FRAME]; - [self.chatInputView setFrame:DDINPUT_TOP_FRAME]; - }]; - [self setValue:@(DDINPUT_TOP_FRAME.origin.y) forKeyPath:@"_inputViewY"]; - } -} -#pragma mark - KeyBoardNotification -- (void)handleWillShowKeyboard:(NSNotification *)notification -{ - CGRect keyboardRect; - keyboardRect = [(notification.userInfo)[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - keyboardRect = [self.view convertRect:keyboardRect fromView:nil]; - - _bottomShowComponent = _bottomShowComponent | DDShowKeyboard; - //什么都没有显示 - [UIView animateWithDuration:0.25 animations:^{ - [self.chatInputView setFrame:CGRectMake(0, keyboardRect.origin.y - DDINPUT_HEIGHT, self.view.size.width, DDINPUT_HEIGHT)]; - }]; - [self setValue:@(keyboardRect.origin.y - DDINPUT_HEIGHT) forKeyPath:@"_inputViewY"]; - -} - -- (void)handleWillHideKeyboard:(NSNotification *)notification -{ - CGRect keyboardRect; - keyboardRect = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - keyboardRect = [self.view convertRect:keyboardRect fromView:nil]; - _bottomShowComponent = _bottomShowComponent & DDHideKeyboard; - if (_bottomShowComponent & DDShowUtility) - { - //显示的是插件 - [UIView animateWithDuration:0.25 animations:^{ - [self.chatInputView setFrame:DDINPUT_TOP_FRAME]; - }]; - [self setValue:@(self.chatInputView.origin.y) forKeyPath:@"_inputViewY"]; - } - else if (_bottomShowComponent & DDShowEmotion) - { - //显示的是表情 - [UIView animateWithDuration:0.25 animations:^{ - [self.chatInputView setFrame:DDINPUT_TOP_FRAME]; - }]; - [self setValue:@(self.chatInputView.origin.y) forKeyPath:@"_inputViewY"]; - - } - else - { - [self p_hideBottomComponent]; - } -} - --(IBAction)titleTap:(id)sender -{ - if ([self.module.sessionEntity isGroup]) { - return; - } - [self.module getCurrentUser:^(DDUserEntity *user) { - PublicProfileViewControll *profile = [PublicProfileViewControll new]; - profile.title=user.nick; - profile.user=user; - [self.navigationController pushViewController:profile animated:YES]; - }]; -} -- (void)n_receiveUnreadMessageUpdateNotification:(NSNotification*)notification - -{ - DDLog(@"read message from chattmainview"); - if (![self.navigationController.topViewController isEqual:self]) - { - //当前不是聊天界面直接返回 - - return; - } - NSString *senderID = [notification object]; - NSString *newID = [senderID componentsSeparatedByString:@"_"][1]; - if (![newID isEqualToString:self.module.sessionEntity.sessionID]) { - return; - } - NSArray* unreadMessages = [[DDMessageModule shareInstance]popAllUnreadMessagesForSessionID:newID]; - [self.module addShowMessages:unreadMessages]; - - [_tableView reloadData]; - [self scrollToBottomAnimated:NO]; -} -- (void)n_receiveMessage:(NSNotification*)notification -{ - if (![self.navigationController.topViewController isEqual:self]) - { - //当前不是聊天界面直接返回 - return; - } - DDMessageEntity* message = [notification object]; - - //显示消息 - [[DDSundriesCenter instance] pushTaskToParallelQueue:^{ - if([message.sessionId isEqualToString:self.module.sessionEntity.sessionID]) - { - [self.module addShowMessage:message]; - [self.module updateSessionUpdateTime:message.msgTime]; - [[DDMessageModule shareInstance] clearUnreadMessagesForSessionID:self.module.sessionEntity.sessionID]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self scrollToBottomAnimated:YES]; - [self.tableView reloadData]; - - }); - } - }]; - - -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.xib b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.xib deleted file mode 100644 index 90794ce..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.xib +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="DDChattingMainViewController"> - <connections> - <outlet property="tableView" destination="fXq-7c-F0O" id="8BD-cR-uYh"/> - <outlet property="view" destination="htT-Bi-wLK" id="VFp-Kq-iej"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view contentMode="scaleToFill" id="htT-Bi-wLK"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="fXq-7c-F0O"> - <rect key="frame" x="0.0" y="0.0" width="320" height="522"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> - <connections> - <outlet property="dataSource" destination="-1" id="qvX-Zo-u7f"/> - <outlet property="delegate" destination="-1" id="7y3-vc-eBK"/> - </connections> - </tableView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.h b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.h deleted file mode 100644 index 012cde8..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// DDChattingModule.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDSessionEntity.h" -#import "DDUserEntity.h" -#define DD_PAGE_ITEM_COUNT 10 - -typedef void(^DDReuestServiceCompletion)(DDUserEntity* user); -typedef void(^DDRequestGoodDetailCompletion)(NSDictionary* detail,NSError* error); -@class DDCommodity; -@class DDMessageEntity; -typedef void(^DDChatLoadMoreHistoryCompletion)(NSUInteger addcount, NSError* error); - -@interface ChattingModule : NSObject -@property (nonatomic,retain)DDSessionEntity* sessionEntity; -@property (nonatomic,readonly)NSMutableArray* showingMessages; -@property (assign) NSInteger isGroup; -/** - * 加载历史消息接口,这里会适时插入时间 - * - * @param completion 加载完成 - */ -- (void)loadMoreHistoryCompletion:(DDChatLoadMoreHistoryCompletion)completion; - -- (void)loadHostoryUntilCommodity:(DDMessageEntity*)message completion:(DDChatLoadMoreHistoryCompletion)completion; - -- (float)messageHeight:(DDMessageEntity*)message; - -- (void)addShowMessage:(DDMessageEntity*)message; -- (void)addShowMessages:(NSArray*)messages; -- (void)requestServicesWithShopID:(NSString*)shopID type:(int)type completion:(DDReuestServiceCompletion)completion; - -- (void)requestGoodDetailWithGoodID:(NSString*)googID shopID:(NSString*)shopID completion:(DDRequestGoodDetailCompletion)completion; - -- (void)updateSessionUpdateTime:(NSUInteger)time; -- (void)checkBlackList:(NSString *)bid userID:(NSString*)uid Block:(void(^)(bool isBlock))block; - -- (void)clearChatData; -- (void)showMessagesAddCommodity:(DDMessageEntity*)message; --(void)getCurrentUser:(void(^)(DDUserEntity *))block; -@end - - -@interface DDPromptEntity : NSObject -@property(nonatomic,retain)NSString* message; - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.m b/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.m deleted file mode 100644 index ec22547..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/ChattingModule.m +++ /dev/null @@ -1,247 +0,0 @@ -// -// DDChattingModule.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-28. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "ChattingModule.h" -#import "DDDatabaseUtil.h" -#import "DDChatTextCell.h" -#import "DDSessionEntity.h" -#import "LoginModule.h" -#import "DDAFClient.h" -#import "NSDate+DDAddition.h" -#import "DDAllotServiceAPI.h" -#import "DDAFClient.h" -static NSUInteger const showPromptGap = 300; -@interface ChattingModule(privateAPI) - -- (NSUInteger)p_getMessageCount; -- (void)p_addHistoryMessages:(NSArray*)messages Completion:(DDChatLoadMoreHistoryCompletion)completion; - -@end - -@implementation ChattingModule -{ - //只是用来获取cell的高度的 - DDChatTextCell* _textCell; - - NSUInteger _earliestDate; - NSUInteger _lastestDate; -} - -- (instancetype)init -{ - self = [super init]; - if (self) - { - _showingMessages = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)setSessionEntity:(DDSessionEntity *)sessionEntity -{ - _sessionEntity = sessionEntity; - - _showingMessages = nil; - _showingMessages = [[NSMutableArray alloc] init]; -} - -- (void)loadMoreHistoryCompletion:(DDChatLoadMoreHistoryCompletion)completion -{ - NSUInteger count = [self p_getMessageCount]; - [[DDDatabaseUtil instance] loadMessageForSessionID:self.sessionEntity.sessionID pageCount:DD_PAGE_ITEM_COUNT index:count completion:^(NSArray *messages, NSError *error) { - [self p_addHistoryMessages:messages Completion:completion]; - }]; -} - -- (void)loadHostoryUntilCommodity:(DDMessageEntity*)message completion:(DDChatLoadMoreHistoryCompletion)completion -{ - [[DDDatabaseUtil instance] loadMessageForSessionID:self.sessionEntity.sessionID afterMessage:message completion:^(NSArray *messages, NSError *error) { - [self p_addHistoryMessages:messages Completion:completion]; - }]; -} - -- (float)messageHeight:(DDMessageEntity*)message -{ - - if (message.msgContentType == DDMessageTypeText ) { - if (!_textCell) - { - _textCell = [[DDChatTextCell alloc] init]; - } - return [_textCell cellHeightForMessage:message]; - - }else if (message.msgContentType == DDMessageTypeVoice ) - { - return 60; - }else if(message.msgContentType == DDMessageTypeImage) - { - return 151; - } - else - { - return 135; - } - return 0; -} - -- (void)addShowMessage:(DDMessageEntity*)message -{ - if (message.msgTime - _lastestDate > showPromptGap) - { - _lastestDate = message.msgTime; - DDPromptEntity* prompt = [[DDPromptEntity alloc] init]; - NSDate* date = [NSDate dateWithTimeIntervalSince1970:message.msgTime]; - prompt.message = [date promptDateString]; - [_showingMessages addObject:prompt]; - } - //[_showingMessages addObject:message]; - [[self mutableArrayValueForKeyPath:@"showingMessages"] addObject:message]; -} --(void)insertObject:(id)object inShowingMessagesAtIndex:(NSUInteger)index -{ - [_showingMessages insertObject:object atIndex:index]; -} --(void)removeObjectFromShowingMessagesAtIndex:(NSUInteger)index -{ - [_showingMessages removeObjectAtIndex:index]; -} - -- (void)addShowMessages:(NSArray*)messages -{ - // [_showingMessages addObjectsFromArray:messages]; - [[self mutableArrayValueForKeyPath:@"showingMessages"] addObjectsFromArray:messages]; -} --(void)getCurrentUser:(void(^)(DDUserEntity *))block -{ - [[DDDatabaseUtil instance] getUserFromID:self.sessionEntity.sessionID completion:^(DDUserEntity *user) { - block(user); - }]; -} -- (void)requestServicesWithShopID:(NSString*)shopID type:(int)type completion:(DDReuestServiceCompletion)completion -{ - DDAllotServiceAPI* allotServiceAPI = [[DDAllotServiceAPI alloc] init]; - [allotServiceAPI requestWithObject:@[shopID,@(type)] Completion:^(id response, NSError *error) { - if (!error) { - completion(response); - } - else - { - DDLog(@"%@",error); - completion(nil); - } - }]; -} - - - -- (void)checkBlackList:(NSString *)bid userID:(NSString*)uid Block:(void(^)(bool isBlock))block -{ - - NSMutableDictionary* param = [NSMutableDictionary dictionary]; - [param setValue:bid forKeyPath:@"bid"]; - [param setValue:uid forKeyPath:@"uid"]; - [DDAFClient jsonFormRequest:@"http://www.mogujie.com/mtalk/user/isblock" param:param fromBlock:^(id<AFMultipartFormData> formData) { - - } success:^(id result) { - - block([[result objectForKey:@"isBlock"] boolValue]); - - } failure:^(NSError *err) { - - }]; -} - -- (void)updateSessionUpdateTime:(NSUInteger)time -{ - [self.sessionEntity updateUpdateTime:time]; - _lastestDate = time; -} - -- (void)clearChatData -{ - [self setSessionEntity:nil]; - [self.showingMessages removeAllObjects]; -} - -- (void)showMessagesAddCommodity:(DDMessageEntity*)message -{ - if ([self.showingMessages count] == 0) - { - DDPromptEntity* prompt = [[DDPromptEntity alloc] init]; - NSDate* date = [NSDate dateWithTimeIntervalSince1970:message.msgTime]; - prompt.message = [date promptDateString]; - [_showingMessages addObject:prompt]; - [[self mutableArrayValueForKeyPath:@"showingMessages"] addObject:prompt]; - _lastestDate = message.msgTime; - _earliestDate = message.msgTime; - } - [self.showingMessages addObject:message]; -} - -#pragma mark - -#pragma mark PrivateAPI -- (NSUInteger)p_getMessageCount -{ - __block NSUInteger count = 0; - [_showingMessages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if ([obj isKindOfClass:NSClassFromString(@"DDMessageEntity")]) - { - count ++; - } - }]; - return count; -} - -- (void)p_addHistoryMessages:(NSArray*)messages Completion:(DDChatLoadMoreHistoryCompletion)completion -{ -// [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - NSUInteger tempEarliestDate = 0; - NSUInteger tempLasteestDate = 0; - NSUInteger itemCount = [_showingMessages count]; - NSMutableArray* tempMessages = [[NSMutableArray alloc] init]; - for (NSInteger index = [messages count] - 1; index >= 0;index --) - { - DDMessageEntity* message = messages[index]; - if (index == [messages count] - 1) - { - tempEarliestDate = message.msgTime; - } - if (message.msgTime - tempLasteestDate > showPromptGap) - { - DDPromptEntity* prompt = [[DDPromptEntity alloc] init]; - NSDate* date = [NSDate dateWithTimeIntervalSince1970:message.msgTime]; - prompt.message = [date promptDateString]; - [tempMessages addObject:prompt]; - } - tempLasteestDate = message.msgTime; - [tempMessages addObject:message]; - } - - if ([_showingMessages count] == 0) - { - [[self mutableArrayValueForKeyPath:@"showingMessages"] addObjectsFromArray:tempMessages]; - _earliestDate = tempEarliestDate; - _lastestDate = tempLasteestDate; - } - else - { - [_showingMessages insertObjects:tempMessages atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tempMessages count])]]; - _earliestDate = tempEarliestDate; - } - NSUInteger newItemCount = [_showingMessages count]; -// dispatch_async(dispatch_get_main_queue(), ^{ - completion(newItemCount - itemCount,nil); -// }); -// }]; -} - -@end - -@implementation DDPromptEntity - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.h deleted file mode 100644 index 0d4e8ad..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DDCommodityCell.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-3. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class DDMessageEntity; -@interface CommodityCell : UITableViewCell -@property(nonatomic,weak)IBOutlet UILabel *priceOld; -@property(nonatomic,weak)IBOutlet UILabel *priceNew; -@property(nonatomic,weak)IBOutlet UILabel *title; -@property(nonatomic,weak)IBOutlet UIImageView *logo; --(void)setOldPrice:(float )price; --(void)setNewPrice:(float )price; - -- (void)setMessage:(DDMessageEntity*)message; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.m deleted file mode 100644 index ab02e67..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// DDCommodityCell.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-3. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "CommodityCell.h" - -@implementation CommodityCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - - - } - return self; -} --(void)setOldPrice:(float )price -{ - [self.priceOld setText:[NSString stringWithFormat:@"$%.2f",price]]; -} --(void)setNewPrice:(float )price -{ - [self.priceNew setText:[NSString stringWithFormat:@"$%.2f",price]]; -} -- (void)awakeFromNib -{ - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setMessage:(DDMessageEntity*)message -{ - -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.xib b/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.xib deleted file mode 100644 index 6a8cbd5..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/CommodityCell.xib +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="84" id="SDT-t8-WAj" customClass="CommodityCell"> - <rect key="frame" x="0.0" y="0.0" width="320" height="136"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="SDT-t8-WAj" id="u4D-8a-BIX"> - <rect key="frame" x="0.0" y="0.0" width="320" height="135"/> - <autoresizingMask key="autoresizingMask"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="ea5-pZ-fuY"> - <rect key="frame" x="47" y="10" width="222" height="115"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <rect key="contentStretch" x="0.0" y="0.75000000000000011" width="1" height="1"/> - </imageView> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="fKq-MY-iG6"> - <rect key="frame" x="53" y="52" width="61" height="61"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iLH-v2-U19"> - <rect key="frame" x="126" y="52" width="121" height="38"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="你正在查看:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ugg-bm-rfH"> - <rect key="frame" x="47" y="10" width="186" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="13"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ycQ-pA-vhw"> - <rect key="frame" x="126" y="91" width="65" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="i3d-HH-5ES"> - <rect key="frame" x="193" y="97" width="65" height="10"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" cocoaTouchSystemColor="darkTextColor"/> - <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="6gY-C0-A1d"> - <rect key="frame" x="204" y="91" width="42" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hKD-Eb-hUg"> - <rect key="frame" x="47" y="39" width="222" height="5"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <nil key="highlightedColor"/> - </label> - </subviews> - </tableViewCellContentView> - <connections> - <outlet property="logo" destination="fKq-MY-iG6" id="P6p-ao-7LJ"/> - <outlet property="priceNew" destination="iLH-v2-U19" id="oev-XX-8gK"/> - <outlet property="priceOld" destination="ycQ-pA-vhw" id="nHH-fg-orT"/> - <outlet property="title" destination="ugg-bm-rfH" id="Owe-v4-Ci3"/> - </connections> - </tableViewCell> - </objects> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.h deleted file mode 100644 index 6c302e6..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDChattingEditViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-17. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "AQGridView.h" -#import "DDSessionEntity.h" -@interface DDChattingEditViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UICollectionViewDataSource,UICollectionViewDelegate> -@property(assign)BOOL isGroup; -@property(strong)NSString *groupName; -@property(nonatomic,strong)NSMutableArray *items; -@property(strong)DDSessionEntity *session; --(void)refreshUsers:(NSMutableArray *)array; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.m deleted file mode 100644 index 47222a6..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.m +++ /dev/null @@ -1,213 +0,0 @@ -// -// DDChattingEditViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-17. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDChattingEditViewController.h" -#import "ImageGridViewCell.h" -#import "ChattingEditModule.h" -#import "DDUserModule.h" -#import "ChatEditTableViewCell.h" -#import "ContactsViewController.h" -#import "DDCreateGroupAPI.h" -#import "RuntimeStatus.h" -#import "DDGroupModule.h" -#import "EditGroupViewController.h" -#import "DDAddMemberToGroupAPI.h" -#import "DDGetUserInfoAPI.h" -#import "PublicProfileViewControll.h" -#import "DDDatabaseUtil.h" -#import "DDPersonEditCollectionCell.h" -#import "DDMessageModule.h" -#import "ChattingMainViewController.h" -#import "ShieldGroupMessageAPI.h" -@interface DDChattingEditViewController () -@property(nonatomic,strong)ChattingEditModule *model; -@property(nonatomic,strong)NSMutableArray *temp; -@property(nonatomic,strong) DDUserEntity *edit; -@property(strong)NSMutableArray *willDeleteItems; -@property(strong)UISwitch *shieldingOn; -@property(strong) UITableView *tableView; -@property(weak)IBOutlet UICollectionView *collectionView; -@property(assign)BOOL isShowEdit; -@property(strong)UIButton *btn; -@property(strong)DDGroupEntity *group; -@end - -@implementation DDChattingEditViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.title=@"聊天设置"; - self.willDeleteItems = [NSMutableArray new]; - - [self.collectionView setBackgroundColor:[UIColor whiteColor]]; - [self.collectionView.layer setBorderWidth:0.5]; - [self.collectionView.layer setBorderColor:RGB(199, 199, 196).CGColor]; - self.collectionView.delegate = self; - self.collectionView.dataSource = self; - - self.edit = [DDUserEntity new]; - self.edit.avatar=@"edit"; - self.edit.userRole=99999; - self.items = [NSMutableArray new]; - self.temp = [NSMutableArray arrayWithArray:@[self.edit]]; - self.groupName=@""; - [self.items addObjectsFromArray:self.temp]; - self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0, 304, 321, 188) style:UITableViewStyleGrouped]; - self.tableView.delegate=self; - self.tableView.scrollEnabled=NO; - self.tableView.dataSource=self; -// [self.tableView.layer setBorderWidth:0.5]; -// [self.tableView.layer setBorderColor:RGB(199, 199, 196).CGColor]; - [self.tableView setBackgroundColor:[UIColor clearColor]]; - [self.view addSubview:self.tableView]; - [self.collectionView registerClass:[DDPersonEditCollectionCell class] forCellWithReuseIdentifier:@"PersonCollectionCell"]; - [self loadGroupUsers]; - -} --(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return [self.items count]; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return 5; -} --(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - - DDPersonEditCollectionCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"PersonCollectionCell" forIndexPath:indexPath]; - DDUserEntity *user = [self.items objectAtIndex:indexPath.row]; - [cell setContent:user.nick AvatarImage:user.avatar]; - return cell ; -} - --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; - DDUserEntity *user = [self.items lastObject]; - if (user.userRole!=99999) { - [self.items addObject:self.edit]; - } -} --(void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} - --(void)loadGroupUsers -{ - - if([self.items count] >2) - { - [self.items removeObjectsInRange:NSMakeRange(0, [self.items count]-2)]; - } - self.group = [[DDGroupModule instance] getGroupByGId:self.session.sessionID]; - self.groupName = self.group.name; - if ([self.group.groupUserIds count] >0) { - [self.group.groupUserIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *userID = (NSString *)obj; - [[DDDatabaseUtil instance] getUserFromID:userID completion:^(DDUserEntity *user) { - if (user) { - [self.items insertObject:user atIndex:0]; - [self.collectionView reloadData]; - [self.tableView reloadData]; - } - }]; - }]; - } - if (!self.group) - { - DDSessionEntity* session = self.session; - [[DDUserModule shareInstance] getUserForUserID:session.sessionID Block:^(DDUserEntity *user) { - [self.items insertObject:user atIndex:0]; - [self.collectionView reloadData]; - }]; - } -} --(void)refreshUsers:(NSMutableArray *)array -{ - - [self.items removeAllObjects]; - [self.items addObjectsFromArray:array]; - [self.items addObject:self.edit]; - [self.collectionView reloadData]; - [self.tableView reloadData]; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - DDUserEntity *user = self.items[indexPath.row]; - if (user.userRole == 99999) { - //添加联系人 - EditGroupViewController *newEdit = [EditGroupViewController new]; - newEdit.group=self.group; - newEdit.isGroupCreator=[self.group.groupCreatorId isEqualToString:TheRuntime.user.objID]?YES:NO; - newEdit.isCreat=self.group.objID?NO:YES; - newEdit.users=self.items; - newEdit.editControll=self; - [self.navigationController pushViewController:newEdit animated:YES]; - }else if (user) { - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [self.navigationController pushViewController:public animated:YES]; - - } -} - - -- (CGSize) portraitGridCellSizeForGridView: (AQGridView *) gridView -{ - return CGSizeMake(65, 90); -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 1; - -} -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"ChatEditCellIdentifier"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } - if (self.groupName) - { - if (indexPath.row == 0) { - [cell.textLabel setText:@"群聊名称"]; - UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(135, 14, 150, 17)]; - [label setTextAlignment:NSTextAlignmentRight]; - [label setTextColor:GRAYCOLOR]; - [label setText:self.groupName]; - [cell.contentView addSubview:label]; - } - - } - return cell; - -} - - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.xib b/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.xib deleted file mode 100644 index 9956421..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/DDChattingEditViewController.xib +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="DDChattingEditViewController"> - <connections> - <outlet property="collectionView" destination="31e-Dl-mpT" id="P0b-tV-pe6"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="31e-Dl-mpT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="276"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="4" id="nQu-El-flO"> - <size key="itemSize" width="72" height="92"/> - <size key="headerReferenceSize" width="0.0" height="0.0"/> - <size key="footerReferenceSize" width="0.0" height="0.0"/> - <inset key="sectionInset" minX="5" minY="10" maxX="0.0" maxY="0.0"/> - </collectionViewFlowLayout> - <cells/> - <connections> - <outlet property="dataSource" destination="-1" id="yfU-Oi-Iko"/> - <outlet property="delegate" destination="-1" id="jzL-Gq-whK"/> - </connections> - </collectionView> - </subviews> - <color key="backgroundColor" red="0.9490196704864502" green="0.9490196704864502" blue="0.9490196704864502" alpha="1" colorSpace="deviceRGB"/> - <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.h deleted file mode 100644 index 42ca60d..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDPersonEditCollectionCell.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface DDPersonEditCollectionCell : UICollectionViewCell -@property(strong)UIImageView *personIcon; -@property(strong)UILabel *name; -@property(strong) UIButton *button; --(void)setContent:(NSString *)name AvatarImage:(NSString *)urlString; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.m deleted file mode 100644 index 51b0aec..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/DDPersonEditCollectionCell.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// DDPersonEditCollectionCell.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDPersonEditCollectionCell.h" -#import "UIImageView+WebCache.h" -#import "std.h" -@implementation DDPersonEditCollectionCell - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - self.personIcon = [[UIImageView alloc] initWithFrame:CGRectMake(5, 10, 60.5, 58.5)]; - [self.personIcon setClipsToBounds:YES]; - [self.personIcon setContentMode:UIViewContentModeScaleAspectFill]; - [self.contentView addSubview:self.personIcon]; - self.name = [[UILabel alloc] initWithFrame:CGRectMake(0,73, frame.size.width-5, 14)]; - [self.name setTextAlignment:NSTextAlignmentCenter]; - [self.name setFont:[UIFont systemFontOfSize:14.0]]; - [self.name setTextColor:GRAYCOLOR]; - [self.contentView addSubview:self.name]; - - } - return self; -} --(void)setContent:(NSString *)name AvatarImage:(NSString *)urlString -{ - [self.name setText:name]; - if ([urlString isEqualToString:@"edit_100x100"]) { - self.tag=100; - self.personIcon.image = [UIImage imageNamed:@"edit"]; - - }else - { - [self.personIcon sd_setImageWithURL:[NSURL URLWithString:urlString] placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - } - -} --(IBAction)deletePerson:(id)sender -{ - -} - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.h deleted file mode 100644 index fba00c5..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// EditContactsCell.h -// TeamTalk -// -// Created by Michael Scofield on 2014-09-10. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDContactsCell.h" - -@interface EditContactsCell : DDContactsCell --(void)setCellToSelected:(BOOL)select; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.m deleted file mode 100644 index 8ccfbbe..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditContactsCell.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// EditContactsCell.m -// TeamTalk -// -// Created by Michael Scofield on 2014-09-10. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "EditContactsCell.h" -@interface EditContactsCell() -@property(strong)UIImageView *selectView; -@end -@implementation EditContactsCell -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - self.selectView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, 22, 22)]; - [self.selectView setImage:[UIImage imageNamed:@"unselected"]]; - [self.selectView setHighlightedImage:[UIImage imageNamed:@"select"]]; - [self addSubview:self.selectView]; - self.avatar.frame=CGRectMake(45, 10, 35, 35); - self.nameLabel.frame=CGRectMake(90, 20, 100, 15); - } - return self; -} -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - - } - return self; -} --(void)setCellToSelected:(BOOL)select -{ - [self.selectView setHighlighted:select]; -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.h b/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.h deleted file mode 100644 index 709accd..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// EditGroupViewCell.h -// TeamTalk -// -// Created by Michael Scofield on 2014-09-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "DDUserEntity.h" - -@interface EditGroupViewCell : UICollectionViewCell -@property(strong)UILabel *name; -@property(strong)UIImageView *personIcon; -@property(strong)UIButton *button; - --(void)showDeleteActionView; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.m b/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.m deleted file mode 100644 index b28c40b..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewCell.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// EditGroupViewCell.m -// TeamTalk -// -// Created by Michael Scofield on 2014-09-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "EditGroupViewCell.h" -#import "std.h" -@interface EditGroupViewCell() - -@end -@implementation EditGroupViewCell - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - self.personIcon = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 35)]; - [self.contentView addSubview:self.personIcon]; - self.name = [[UILabel alloc] initWithFrame:CGRectMake(0, 40, frame.size.width, 20)]; - [self.name setTextAlignment:NSTextAlignmentCenter]; - [self.name setFont:[UIFont systemFontOfSize:14.0]]; - [self.contentView addSubview:self.name]; - self.button = [[UIButton alloc] initWithFrame:CGRectMake(0, self.personIcon.frame.origin.y+self.personIcon.frame.size.height, 35, 0)]; - - [self.button setBackgroundImage:[UIImage imageNamed:@"x"] forState:UIControlStateNormal]; - self.button.alpha=0.0 ; - [self.contentView addSubview:self.button]; - } - return self; -} --(void)showDeleteActionView -{ - if (self.button.alpha==1.0) { - [UIView animateWithDuration:0.5 animations:^{ - self.button.alpha=0.0 ; - self.button.frame=CGRectMake(0, self.personIcon.frame.origin.y+self.personIcon.frame.size.height, 35, 0); - }]; - }else - { - [UIView animateWithDuration:0.5 animations:^{ - self.button.alpha=1.0 ; - self.button.frame=CGRectMake(0, 0, 35, 35); - }]; - } -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.h b/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.h deleted file mode 100644 index d78a21a..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// EditGroupViewController.h -// TeamTalk -// -// Created by Michael Scofield on 2014-09-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "DDGroupEntity.h" -#import "DDChattingEditViewController.h" -typedef void(^RefreshBlock)(NSString *sessionID); -@interface EditGroupViewController : UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UISearchBarDelegate,UISearchDisplayDelegate,UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate> -@property(strong)NSMutableArray *users; -@property(copy)NSString *sessionID; -@property(assign)BOOL isGroupCreator; -@property(assign)BOOL isCreat; -@property(weak)DDGroupEntity *group; -@property(strong)DDChattingEditViewController *editControll; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.m b/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.m deleted file mode 100644 index 2229d2f..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.m +++ /dev/null @@ -1,504 +0,0 @@ -// -// EditGroupViewController.m -// TeamTalk -// -// Created by Michael Scofield on 2014-09-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "EditGroupViewController.h" -#import "EditGroupViewCell.h" -#import "DDUserEntity.h" -#import "EditContactsCell.h" -#import "DDAddMemberToGroupAPI.h" -#import "DDCreateGroupAPI.h" -#import "std.h" -#import "RuntimeStatus.h" -#import "DDSearch.h" -#import "ChattingMainViewController.h" -#import "MBProgressHUD.h" -#import "UIImageView+WebCache.h" -#import "DDGroupModule.h" -#import "ContactsModule.h" -#import "DDDeleteMemberFromGroupAPI.h" -@interface EditGroupViewController () -@property(weak)IBOutlet UICollectionView *personView; -@property(weak)IBOutlet UITableView *tableView; -@property(weak)IBOutlet UISearchBar *searchBar; -@property(strong)NSDictionary *items; -@property(strong)UILabel *label; -@property(strong)NSMutableArray *backupArray; -@property(strong)NSMutableArray *editArray; -@property(strong)NSMutableArray *selectedArray; -@property(strong)NSArray *searchResult; -@property(strong)UISearchDisplayController *searchController; -@property(strong) ContactsModule*model; -@property(strong)MBProgressHUD *hud; -@end - -@implementation EditGroupViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.edgesForExtendedLayout = UIRectEdgeNone; - self.extendedLayoutIncludesOpaqueBars = NO; - - self.title=@"编辑群联系人"; - if ([self.users count] == 1) { - self.label = [[UILabel alloc] initWithFrame:CGRectMake(90, 50, 200, 30)]; - [self.label setText:@"选择联系人添加进来"]; - [self.label setTextColor:GRAYCOLOR]; - [self.personView addSubview:self.label]; - } - self.searchResult = [NSArray new]; - self.selectedArray = [NSMutableArray new]; - [self.users removeLastObject]; - self.editArray = [NSMutableArray arrayWithArray:self.users]; - self.sessionID=self.editControll.session.sessionID; - [self.personView setBackgroundColor:[UIColor whiteColor]]; - [self.personView.layer setBorderWidth:0.5]; - [self.personView.layer setBorderColor:RGB(199, 199, 196).CGColor]; - self.personView.delegate = self; - self.personView.dataSource = self; - self.items = [NSMutableDictionary new]; - [self.personView registerClass:[EditGroupViewCell class] forCellWithReuseIdentifier:@"EditGroupViewCell"]; - self.model = [ContactsModule new]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAllContacts) name:@"refreshAllContacts" object:nil]; - UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveSelectItems)]; - super.navigationItem.rightBarButtonItem=item; - self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; - self.searchController.delegate=self; - self.searchController.searchResultsDataSource=self; - self.searchController.searchResultsDelegate=self; - self.hud = [[MBProgressHUD alloc] initWithView:self.view]; - [self.view addSubview:self.hud]; - self.hud.dimBackground = YES; - self.hud.labelText=@"正在删除..."; - // Do any additional setup after loading the view from its nib. -} --(void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; -} --(void)saveSelectItems -{ - if (self.isCreat) { - [self createGroup]; - }else - { - __block NSMutableArray *tempArray = [NSMutableArray new]; - [self.editArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - if (![self.backupArray containsObject:obj]) { - [tempArray addObject:obj]; - } - }]; - if ([tempArray count] != 0) { - [self addUsersToGroup:tempArray]; - } - [self.backupArray removeObjectsInArray:self.editArray]; - if ([self.backupArray count] !=0) { - [self deleteUserFromGroup]; - } - } -} --(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { - if ([searchString isEqualToString:@""]) { - return NO; - } - [[DDSearch instance] searchContent:searchString completion:^(NSArray *result, NSError *error) { - self.searchResult=result; - [self.self.searchDisplayController.searchResultsTableView reloadData]; - }]; - - return YES; -} -- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{ - if ( [[self allKeys] count] == 0) { - return NO; - } - [self.searchBar setShowsCancelButton:YES animated:YES]; - [self.searchController setActive:YES animated:YES]; - return YES; - -} -- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{ - [self.searchBar resignFirstResponder]; - [self.searchBar setShowsCancelButton:NO animated:YES]; - [self.tableView reloadData]; -} - --(void)refreshAllContacts -{ - [self.hud removeFromSuperview]; - self.items = [self.model sortByContactFirstLetter]; - [self.model.contacts enumerateObjectsUsingBlock:^(DDUserEntity *obj1, NSUInteger idx, BOOL *stop) { - [self.editArray enumerateObjectsUsingBlock:^(DDUserEntity *obj2, NSUInteger idx2, BOOL *stop) { - if ([obj1.objID isEqualToString:obj2.objID]) { - [self.editArray replaceObjectAtIndex:idx2 withObject:obj1]; - } - }]; - }]; - self.backupArray =[NSMutableArray arrayWithArray:self.editArray]; - [self.tableView reloadData]; -} --(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - - return [self.editArray count]; -} --(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - - EditGroupViewCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"EditGroupViewCell" forIndexPath:indexPath]; - - DDUserEntity *user = [self.editArray objectAtIndex:indexPath.row]; - [cell.name setText:user.nick]; - [cell.name setTextColor:GRAYCOLOR]; - - [cell.personIcon sd_setImageWithURL:[NSURL URLWithString:user.avatar] placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - [cell.button setTitle:user.objID forState:UIControlStateNormal]; - cell.button.tag=indexPath.row; - [cell.button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal]; - [cell.button addTarget:self action:@selector(deletePerson:) forControlEvents:UIControlEventTouchUpInside]; - return cell; -} --(IBAction)deletePerson:(id)sender -{ - - UIButton *btn = (UIButton *)sender; - __block BOOL isInSelectArray = NO; - [self.selectedArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - if ([obj.objID isEqualToString:btn.titleLabel.text]) { - [self.selectedArray removeObjectAtIndex:idx]; - isInSelectArray=YES; - [self.editArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - if ([obj.objID isEqualToString:btn.titleLabel.text]) { - [self.editArray removeObjectAtIndex:btn.tag]; - [self.personView reloadData]; - [self.tableView reloadData]; - }}]; - } - }]; - if (isInSelectArray) { - return; - } - [self.hud show:YES]; - [self.editArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - if ([obj.objID isEqualToString:btn.titleLabel.text]) { - - if (!self.group) { - [self.personView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:idx inSection:0]]]; - [self.editArray removeObjectAtIndex:idx]; - [self.tableView reloadData]; - }else - { - if (self.isGroupCreator) { - DDDeleteMemberFromGroupAPI* deleteMemberAPI = [[DDDeleteMemberFromGroupAPI alloc] init]; - NSArray* array = @[self.sessionID,@[obj.objID]]; - [deleteMemberAPI requestWithObject:array Completion:^(id response, NSError *error) { - if (response) - { - [self.hud hide:YES]; - [self.personView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:idx inSection:0]]]; - [self.editArray removeObjectAtIndex:idx]; - [self.tableView reloadData]; - } - }]; - }else - { - [self showAlert:@"你不是该群的创建者,无法删除成员"]; - } - - } - - } - }]; - [self.hud hide:YES]; - -} --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - EditGroupViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - - [cell showDeleteActionView]; -} -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return 5; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - if (tableView.tag == 100) { - return [[self.items allKeys] count]; - } - return 1; -} - - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - - if (tableView.tag == 100) { - NSString *keyStr = [self allKeys][(NSUInteger) (section)]; - NSArray *arr = (self.items)[keyStr]; - return [arr count]; - } - - return [self.searchResult count]; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - - return [self allKeys][section]; - -} --(NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView{ - NSMutableArray *arr = [NSMutableArray new]; - [[self allKeys] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - char firstLetter = getFirstChar((NSString *)obj); - [arr addObject:[NSString stringWithFormat:@"%c",firstLetter]]; - }]; - return arr; -} - --(NSArray*)allKeys{ - return [[self.items allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1 compare:obj2]; - }]; -} --(CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 55.0; -} -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"contactsCell"; - EditContactsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - cell.selectionStyle=UITableViewCellSelectionStyleNone; - if (cell == nil) { - cell = [[EditContactsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } - if (tableView.tag == 100) { - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user = [userArray objectAtIndex:indexPath.row]; - if ([self.editArray containsObject:user]) { - [cell setCellToSelected:YES]; - }else - { - [cell setCellToSelected:NO]; - } - cell.nameLabel.text=user.nick; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [cell.avatar sd_setImageWithURL:[NSURL URLWithString:user.avatar] placeholderImage:placeholder]; - - return cell; - } - else - { - DDUserEntity *user =self.searchResult[indexPath.row]; - if ([self.editArray containsObject:user]) { - [cell setCellToSelected:YES]; - }else - { - [cell setCellToSelected:NO]; - } - cell.nameLabel.text=user.nick; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [cell.avatar sd_setImageWithURL:[NSURL URLWithString:user.avatar] placeholderImage:placeholder]; - return cell; - - } - -} --(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath -{ - EditContactsCell *oneCell =(EditContactsCell *) [tableView cellForRowAtIndexPath: indexPath]; - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user = [userArray objectAtIndex:indexPath.row]; - if ([self.selectedArray containsObject:user]) { - [oneCell setCellToSelected:YES]; - }else - { - [oneCell setCellToSelected:NO]; - } -} --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - //[tableView deselectRowAtIndexPath:indexPath animated:NO]; - DDUserEntity *user; - if (tableView.tag == 100) { - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section]; - NSArray *userArray =[self.items objectForKey:keyStr]; - user = [userArray objectAtIndex:indexPath.row]; - }else - { - user = self.searchResult[indexPath.row]; - [self.searchController setActive:NO animated:NO]; - } - EditContactsCell *oneCell =(EditContactsCell *) [tableView cellForRowAtIndexPath: indexPath]; - if (![self.editArray containsObject:user]) - { - [oneCell setCellToSelected:YES]; - [self.editArray addObject:user]; - [self.selectedArray addObject:user]; - [self.personView insertItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:[self.editArray count]-1 inSection:0]]]; - [self.personView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:[self.editArray count]-1 inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:YES]; - [UIView animateWithDuration:0.5 animations:^{ - self.label.alpha=0.0; - }]; - } - else - { - [oneCell setCellToSelected:NO]; - NSUInteger index =[self.editArray indexOfObject:user]; - [self.editArray removeObjectAtIndex:index]; - [self.selectedArray removeObject:user]; - [self.personView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]]]; - - if ([self.editArray count] == 0) { - [UIView animateWithDuration:0.5 animations:^{ - self.label.alpha=1.0; - }]; - } - - - } - -} --(void)deleteUserFromGroup -{ - __block NSMutableArray *userIDs = [NSMutableArray new]; - [self.backupArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - [userIDs addObject:obj.objID]; - }]; - DDDeleteMemberFromGroupAPI* deleteMemberAPI = [[DDDeleteMemberFromGroupAPI alloc] init]; - NSArray* array = @[self.sessionID,userIDs]; - [deleteMemberAPI requestWithObject:array Completion:^(DDGroupEntity *response, NSError *error) { - if (error) { - [self showAlert:error.domain?error.domain:@"未知错误"]; - } - if (response) - { - [self.hud hide:YES]; - [self.tableView reloadData]; - [self.navigationController popToViewController:self.editControll animated:YES]; - [self.editControll refreshUsers:self.editArray]; - }else - { - [[DDGroupModule instance] getGroupInfogroupID:self.sessionID completion:^(DDGroupEntity *group) { - [[DDGroupModule instance] addGroup:group]; - [self.hud hide:YES]; - [self.tableView reloadData]; - [self.navigationController popToViewController:self.editControll animated:YES]; - [self.editControll refreshUsers:self.editArray]; - }]; - - } - }]; -} - --(void)addUsersToGroup:(NSMutableArray *)users -{ - DDAddMemberToGroupAPI *addMember = [[DDAddMemberToGroupAPI alloc] init]; - __block NSMutableArray *userIDs = [NSMutableArray new]; - - [users enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity *user = (DDUserEntity *)obj; - if (user.objID) { - [userIDs addObject:user.objID]; - } - }]; - [addMember requestWithObject:@[self.sessionID,userIDs] Completion:^(DDGroupEntity * response, NSError *error) { - if (response != nil) { - - [self.navigationController popToViewController:self.editControll animated:YES]; - [self.editControll refreshUsers:self.editArray]; - }else - { - [self showAlert:error.domain?error.domain:@"未知错误"]; - } - }]; -} -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (buttonIndex == 1) { - UITextField *tf=[alertView textFieldAtIndex:0]; - if(tf.text.length !=0) - { - - } - DDCreateGroupAPI *creatGroup = [[DDCreateGroupAPI alloc] init]; - __block NSMutableArray *userIDs = [NSMutableArray new]; - [userIDs addObject:TheRuntime.user.objID]; - [self.editArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity *user = (DDUserEntity *)obj; - if (user.objID) { - [userIDs addObject:user.objID]; - } - }]; - NSString *groupName = tf.text.length !=0?tf.text:[self creatGroupName]; - NSArray *array =@[groupName,@"",userIDs]; - [creatGroup requestWithObject:array Completion:^(DDGroupEntity * response, NSError *error) { - if (response !=nil) { - [[DDGroupModule instance] addGroup:response]; - [[DDGroupModule instance] addRecentlyGroup:@[response]]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - [self.editControll refreshUsers:self.editArray]; - self.editControll.session.sessionID=response.objID; - self.editControll.session.sessionType=SESSIONTYPE_TEMP_GROUP; - DDSessionEntity *session = [[DDSessionEntity alloc] initWithSessionID:response.objID type:SESSIONTYPE_TEMP_GROUP]; - [ChattingMainViewController shareInstance].module.sessionEntity =session; - [ChattingMainViewController shareInstance].title=response.name; - [self.navigationController popToViewController:[ChattingMainViewController shareInstance] animated:YES]; - }else - { - [self showAlert:error.domain?error.domain:@"未知错误"]; - } - - - }]; - } -} --(void)createGroup -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"创建群" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; - alert.alertViewStyle=UIAlertViewStylePlainTextInput; - [alert show]; - -} - --(void)showAlert:(NSString *)string -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:string delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; - [alert show]; -} - --(NSString *)creatGroupName -{ - NSMutableString *string= [NSMutableString new]; - [self.selectedArray enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - [string appendFormat:@"%@,",obj.name]; - if (idx == 3) { - *stop=YES; - } - }]; - - return string; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.xib b/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.xib deleted file mode 100644 index 1b2018f..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/EditGroupViewController.xib +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6245" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="EditGroupViewController"> - <connections> - <outlet property="personView" destination="xEo-Vs-7Z7" id="AzF-Qf-cIa"/> - <outlet property="searchBar" destination="g3b-Jn-2ev" id="997-q2-ASt"/> - <outlet property="tableView" destination="n7G-Aw-117" id="sQo-lh-8ex"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="64" width="320" height="504"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="xEo-Vs-7Z7"> - <rect key="frame" x="0.0" y="44" width="320" height="143"/> - <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="15" minimumInteritemSpacing="20" id="d6r-xN-Aod"> - <size key="itemSize" width="35" height="53"/> - <size key="headerReferenceSize" width="0.0" height="0.0"/> - <size key="footerReferenceSize" width="0.0" height="0.0"/> - <inset key="sectionInset" minX="15" minY="15" maxX="15" maxY="0.0"/> - </collectionViewFlowLayout> - <cells/> - <connections> - <outlet property="dataSource" destination="-1" id="ZU9-sM-SfJ"/> - <outlet property="delegate" destination="-1" id="UHM-N9-c58"/> - </connections> - </collectionView> - <searchBar contentMode="redraw" fixedFrame="YES" showsCancelButton="YES" translatesAutoresizingMaskIntoConstraints="NO" id="g3b-Jn-2ev"> - <rect key="frame" x="0.0" y="0.0" width="320" height="44"/> - <textInputTraits key="textInputTraits"/> - <connections> - <outlet property="delegate" destination="-1" id="CD5-hw-BIP"/> - </connections> - </searchBar> - <tableView clipsSubviews="YES" tag="100" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="n7G-Aw-117"> - <rect key="frame" x="0.0" y="188" width="320" height="315"/> - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> - <connections> - <outlet property="dataSource" destination="-1" id="JN2-SG-guy"/> - <outlet property="delegate" destination="-1" id="tRp-XD-zDU"/> - </connections> - </tableView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" translucent="NO" prompted="NO"/> - </view> - </objects> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.h b/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.h deleted file mode 100644 index 0ca6a3f..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// DDMenuImageView.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class MenuImageView; -typedef NS_ENUM(NSUInteger, DDImageShowMenu) -{ - DDShowEarphonePlay = 1, //听筒播放 - DDShowSpeakerPlay = 1 << 1, //扬声器播放 - DDShowSendAgain = 1 << 2, //重发 - DDShowCopy = 1 << 3, //复制 - DDShowPreview = 1 << 4 //图片预览 -}; - -@protocol MenuImageViewDelegate <NSObject> - -- (void)clickTheCopy:(MenuImageView*)imageView; -- (void)clickTheEarphonePlay:(MenuImageView*)imageView; -- (void)clickTheSpeakerPlay:(MenuImageView*)imageView; -- (void)clickTheSendAgain:(MenuImageView*)imageView; -- (void)clickThePreview:(MenuImageView*)imageView; - -- (void)tapTheImageView:(MenuImageView*)imageView; - -@end - -@interface MenuImageView : UIImageView -@property (nonatomic,assign)id<MenuImageViewDelegate> delegate; -@property (nonatomic,assign)DDImageShowMenu showMenu; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.m b/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.m deleted file mode 100644 index b25616d..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/MenuImageView.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// DDMenuImageView.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-12. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "MenuImageView.h" - -@implementation MenuImageView -{ - DDImageShowMenu _showMenu; -} -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - [self attachTapHandler]; - } - return self; -} - -- (void)setShowMenu:(DDImageShowMenu)menu -{ - _showMenu = menu; -} - - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -- (BOOL)canBecomeFirstResponder{ - return YES; -} - -//"反馈"关心的功能 --(BOOL)canPerformAction:(SEL)action withSender:(id)sender -{ - if ((_showMenu & DDShowEarphonePlay) && action == @selector(earphonePlay:)) - { - return YES; - } - else if ((_showMenu & DDShowSendAgain) && action == @selector(sendAgain:)) - { - return YES; - } - else if (_showMenu & DDShowSpeakerPlay && action == @selector(speakerPlay:)) - { - return YES; - } - else if (_showMenu & DDShowCopy && action == @selector(copyString:)) - { - return YES; - } - else if (_showMenu & DDShowPreview && action == @selector(imagePreview:)) - { - return YES; - } - return NO; -} - -//UILabel默认是不接收事件的,我们需要自己添加touch事件 --(void)attachTapHandler{ - self.userInteractionEnabled = YES; //用户交互的总开关 - UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; - touch.numberOfTapsRequired = 1; - [self addGestureRecognizer:touch]; - - UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)]; - press.minimumPressDuration = 0.5; - [self addGestureRecognizer:press]; -} - -//同上 --(void)awakeFromNib{ - [super awakeFromNib]; - [self attachTapHandler]; -} - --(void)handleTap:(UIGestureRecognizer*) recognizer{ - if ([self.delegate respondsToSelector:@selector(tapTheImageView:)]) - { - [self.delegate tapTheImageView:self]; - } -} - -- (void)longPress:(UILongPressGestureRecognizer *)recognizer { - if (recognizer.state == UIGestureRecognizerStateBegan) { - // TSTableViewCell *cell = (TSTableViewCell *)recognizer.view; - [self becomeFirstResponder]; - UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyString:)]; - UIMenuItem *sendAgain = [[UIMenuItem alloc] initWithTitle:@"重发" action:@selector(sendAgain:)]; - UIMenuItem *earphonePlayItem = [[UIMenuItem alloc] initWithTitle:@"听筒播放" action:@selector(earphonePlay:)]; - UIMenuItem *speakerPlayItem = [[UIMenuItem alloc] initWithTitle:@"扬声器播放" action:@selector(speakerPlay:)]; - UIMenuItem *previewItem = [[UIMenuItem alloc] initWithTitle:@"预览" action:@selector(imagePreview:)]; - - UIMenuController *menu = [UIMenuController sharedMenuController]; - [menu setMenuItems:nil]; - [menu setMenuItems:[NSArray arrayWithObjects:copyItem,sendAgain,earphonePlayItem, speakerPlayItem,previewItem,nil]]; - [menu setTargetRect:self.frame inView:self.superview]; - [menu setMenuVisible:YES animated:YES]; - NSLog(@"menuItems:%@",menu.menuItems); - } -} - -#pragma mark - menu selecter -- (void)earphonePlay:(id)sender -{ - //听筒播放 - if ([self.delegate respondsToSelector:@selector(clickTheEarphonePlay:)]) - { - [self.delegate clickTheEarphonePlay:self]; - } -} - -- (void)speakerPlay:(id)sender -{ - //扬声器播放 - if ([self.delegate respondsToSelector:@selector(clickTheSpeakerPlay:)]) - { - [self.delegate clickTheSpeakerPlay:self]; - } -} - -- (void)sendAgain:(id)sender -{ - //重发 - if ([self.delegate respondsToSelector:@selector(clickTheSendAgain:)]) - { - [self.delegate clickTheSendAgain:self]; - } -} - -- (void)copyString:(id)sender -{ - //复制 - if ([self.delegate respondsToSelector:@selector(clickTheCopy:)]) - { - [self.delegate clickTheCopy:self]; - } -} - -- (void)imagePreview:(id)sender -{ - //预览 - if ([self.delegate respondsToSelector:@selector(clickThePreview:)]) - { - [self.delegate clickThePreview:self]; - } -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.h b/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.h deleted file mode 100644 index 180c72e..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// DDRecordingView.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -typedef NS_ENUM(NSUInteger, DDRecordingState) -{ - DDShowVolumnState, - DDShowCancelSendState, - DDShowRecordTimeTooShort -}; - -@interface RecordingView : UIView -@property (nonatomic,assign)DDRecordingState recordingState; - -- (instancetype)initWithState:(DDRecordingState)state; -- (void)setVolume:(float)volume; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.m b/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.m deleted file mode 100644 index 992ec5c..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/RecordingView.m +++ /dev/null @@ -1,216 +0,0 @@ -// -// DDRecordingView.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "RecordingView.h" -#import "UIView+DDAddition.h" -#import "std.h" -#define DDVIEW_RECORDING_WIDTH 196 -#define DDVIEW_RECORDING_HEIGHT 196 - -#define DDVOLUMN_VIEW_TAG 10 -@interface RecordingView(PrivateAPI) - -- (void)setupCancelSendView; -- (void)setupShowVolumnState; -- (void)setupShowRecordingTooShort; - -- (void)showCancelSendState; -- (void)showVolumnState; -- (void)showRecordingTooShort; - - -- (float)heightForVolumn:(float)vomlun; -@end - -@implementation RecordingView - -- (instancetype)initWithState:(DDRecordingState)state -{ - self = [super init]; - if (self) - { - self.frame = CGRectMake(0, 0, DDVIEW_RECORDING_WIDTH, DDVIEW_RECORDING_HEIGHT); - [self.layer setCornerRadius:10]; - [self setClipsToBounds:YES]; - [self setBackgroundColor:[UIColor clearColor]]; - UIView* backroundView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, DDVIEW_RECORDING_WIDTH, DDVIEW_RECORDING_HEIGHT)]; - [backroundView setBackgroundColor:[UIColor blackColor]]; - [backroundView setAlpha:0.7]; - backroundView.tag = 100; - [self addSubview:backroundView]; - _recordingState = DDShowVolumnState; - [self setupShowVolumnState]; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setRecordingState:(DDRecordingState)recordingState -{ - switch (recordingState) - { - case DDShowCancelSendState: - [self showCancelSendState]; - break; - case DDShowVolumnState: - [self showVolumnState]; - break; - case DDShowRecordTimeTooShort: - [self showRecordingTooShort]; - break; - } -} - -- (void)setVolume:(float)volume -{ - if (_recordingState != DDShowVolumnState) - { - return; - } - - UIImageView* volumnImageView = [self subviewWithTag:DDVOLUMN_VIEW_TAG]; - float height = [self heightForVolumn:volume]; - [volumnImageView setHeight:height]; - volumnImageView.bottom = 126; -} - -#pragma mark privateAPI -- (void)setupCancelSendView -{ - [self.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if ([(UIView*)obj tag] != 100) - { - [(UIView*)obj removeFromSuperview]; - } - }]; - UIImage* image = [UIImage imageNamed:@"dd_cancel_send_record"]; - UIImageView* imageView = [[UIImageView alloc] initWithImage:image]; - [imageView setFrame:CGRectMake(74, 53, 45, 59)]; - [self addSubview:imageView]; - - UIView* backgrounView = [[UIView alloc] initWithFrame:CGRectMake(28, 152, 140, 23)]; - [backgrounView setBackgroundColor:RGB(176, 34, 33)]; - [backgrounView setAlpha:0.8]; - [backgrounView.layer setCornerRadius:2]; - [backgrounView setClipsToBounds:YES]; - [self addSubview:backgrounView]; - - UILabel* prompt = [[UILabel alloc] initWithFrame:CGRectMake(28, 152, 140, 23)]; - [prompt setBackgroundColor:[UIColor clearColor]]; - [prompt setTextColor:[UIColor whiteColor]]; - [prompt setText:@"松开手指,取消发送"]; - [prompt setFont:[UIFont systemFontOfSize:15]]; - [prompt setTextAlignment:NSTextAlignmentCenter]; - [self addSubview:prompt]; -} - -- (void)setupShowVolumnState -{ - [self.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if ([(UIView*)obj tag] != 100) - { - [(UIView*)obj removeFromSuperview]; - } - }]; - UIImage* image = [UIImage imageNamed:@"dd_recording"]; - UIImageView* imageView = [[UIImageView alloc] initWithImage:image]; - [imageView setFrame:CGRectMake(60, 42, 53, 83)]; - [self addSubview:imageView]; - - UILabel* prompt = [[UILabel alloc] initWithFrame:CGRectMake(0, 152, DDVIEW_RECORDING_WIDTH, 23)]; - [prompt setBackgroundColor:[UIColor clearColor]]; - [prompt setTextColor:[UIColor whiteColor]]; - [prompt.layer setCornerRadius:2]; - [prompt setTextAlignment:NSTextAlignmentCenter]; - [prompt setFont:[UIFont systemFontOfSize:15]]; - [prompt setText:@"手指上滑,取消发送"]; - - [self addSubview:prompt]; - - UIImage* volumnImage = [UIImage imageNamed:@"dd_volumn"]; - UIImageView* volumnImageView = [[UIImageView alloc] initWithImage:volumnImage]; - [volumnImageView setFrame:CGRectMake(119, 83, 20, 43)]; - [volumnImageView setContentMode:UIViewContentModeBottom]; - [volumnImageView setClipsToBounds:YES]; - [volumnImageView setTag:DDVOLUMN_VIEW_TAG]; - [self addSubview:volumnImageView]; - -} - -- (void)setupShowRecordingTooShort -{ - [self.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if ([(UIView*)obj tag] != 100) - { - [(UIView*)obj removeFromSuperview]; - } - }]; - UIImage* image = [UIImage imageNamed:@"dd_record_too_short"]; - UIImageView* imageView = [[UIImageView alloc] initWithImage:image]; - [imageView setFrame:CGRectMake(85, 42, 22, 83)]; - [self addSubview:imageView]; - - UILabel* prompt = [[UILabel alloc] initWithFrame:CGRectMake(0, 152, DDVIEW_RECORDING_WIDTH, 23)]; - [prompt setBackgroundColor:[UIColor clearColor]]; - [prompt setTextColor:[UIColor whiteColor]]; - [prompt.layer setCornerRadius:2]; - [prompt setTextAlignment:NSTextAlignmentCenter]; - [prompt setFont:[UIFont systemFontOfSize:15]]; - [prompt setText:@"说话时间太短"]; - - [self addSubview:prompt]; -} - -- (void)showCancelSendState -{ - if (self.recordingState != DDShowCancelSendState) - { - [self setupCancelSendView]; - } - _recordingState = DDShowCancelSendState; -} - -- (void)showVolumnState -{ - if (self.recordingState != DDShowVolumnState) - { - [self setupShowVolumnState]; - } - _recordingState = DDShowVolumnState; -} - -- (void)showRecordingTooShort -{ - if (self.recordingState != DDShowRecordTimeTooShort) - { - [self setupShowRecordingTooShort]; - } - _recordingState = DDShowRecordTimeTooShort; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (self.recordingState == DDShowRecordTimeTooShort) - { - [self setHidden:YES]; - } - }); -} - -- (float)heightForVolumn:(float)vomlun -{ - //0-1.6 volumn - float height = 43.0 / 1.6 * vomlun; - return height; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.h b/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.h deleted file mode 100644 index 53d8905..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DDTouchDownGestureRecognizer.h -// IOSDuoduo -// -// Created by 独嘉 on 14-6-11. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -typedef void(^DDTouchDown)(); -typedef void(^DDTouchMoveOutside)(); -typedef void(^DDTouchMoveInside)(); -typedef void(^DDTouchEnd)(BOOL inside); -@class DDCustomButton; -@interface TouchDownGestureRecognizer : UIGestureRecognizer -@property (nonatomic,copy) DDTouchDown touchDown; -@property (nonatomic,copy) DDTouchMoveOutside moveOutside; -@property (nonatomic,copy) DDTouchMoveInside moveInside; -@property (nonatomic,copy) DDTouchEnd touchEnd; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.m b/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.m deleted file mode 100644 index f1ed7be..0000000 --- a/TeamTalk/IOSDuoduo/VC/Chatting/TouchDownGestureRecognizer.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// DDTouchDownGestureRecognizer.m -// IOSDuoduo -// -// Created by 独嘉 on 14-6-11. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "TouchDownGestureRecognizer.h" - -#define Response_Y -30 - -@implementation TouchDownGestureRecognizer -{ - BOOL _inside; -} -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ -// self.button.touchDown(); - _inside = YES; - if (self.touchDown) - { - self.touchDown(); - } -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event -{ - UITouch *touch = [touches anyObject]; - CGPoint point = [touch locationInView:self.view]; - if (point.y < Response_Y) - { - if (_inside) - { - _inside = NO; - self.moveOutside(); - } - } - if (point.y > Response_Y) - { - if (!_inside) - { - _inside = YES; - self.moveInside(); - } - } - DDLog(@"%@",NSStringFromCGPoint(point)); -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - UITouch *touch = [touches anyObject]; - CGPoint point = [touch locationInView:self.view]; - if (point.y > Response_Y) - { - self.touchEnd(YES); - } - else - { - self.touchEnd(NO); - } -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.h b/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.h deleted file mode 100644 index e53dc9a..0000000 --- a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ClearImageCacheViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface ClearImageCacheViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> -@property(strong)UITableView *tableView; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.m b/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.m deleted file mode 100644 index 29258bf..0000000 --- a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.m +++ /dev/null @@ -1,169 +0,0 @@ -// -// ClearImageCacheViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ClearImageCacheViewController.h" -#import "PhotosCache.h" -#import "ClearImageCell.h" -@interface ClearImageCacheViewController () -@property(strong)NSMutableArray *images; -@property(strong)NSMutableArray *selectedItems; -@property(weak)IBOutlet UIImageView *selectAll; --(IBAction)clearSelectedImage:(id)sender; -@end - -@implementation ClearImageCacheViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title=@"清理图片缓存"; - self.selectedItems = [NSMutableArray new]; - self.images=[[PhotosCache sharedPhotoCache] getAllImageCache]; - self.tableView= [[UITableView alloc] initWithFrame:CGRectMake(0, 70, 320, self.view.frame.size.height-45-70)]; - self.tableView.delegate=self; - self.tableView.dataSource=self; - [self.view addSubview:self.tableView]; - [self.tableView reloadData]; - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectAllImage)]; - [self.selectAll addGestureRecognizer:tap]; - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; -} --(IBAction)clearSelectedImage:(id)sender -{ - NSFileManager *fileManager = [[NSFileManager alloc] init]; - [self.selectedItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *path = (NSString *)obj; - [fileManager removeItemAtPath:path error:nil]; - }]; - [self.images removeObjectsInArray:self.selectedItems]; - [self.tableView reloadData]; - if ([self.selectedItems count] == 0) { - [self.selectAll setHighlighted:NO]; - } -} --(void)selectAllImage -{ - if ([self.selectedItems isEqualToArray:self.images]) { - [self.selectedItems removeAllObjects]; - [self.selectAll setHighlighted:NO]; - }else - { - [self.selectedItems removeAllObjects]; - [self.selectAll setHighlighted:YES]; - [self.selectedItems addObjectsFromArray:self.images]; - } - [self.tableView reloadData]; -} -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - - return [self.images count]; -} - - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"ClearImageCacheCellIdentifier"; - ClearImageCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - if (cell == nil) { - cell = [[ClearImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ClearImageCacheCellIdentifier"]; - } - cell.image.image =[UIImage imageWithContentsOfFile:[self.images objectAtIndex:indexPath.row]]; - cell.path = [self.images objectAtIndex:indexPath.row]; - [cell.mainLabel setText:@"cecececece"]; - [cell.detailLabel setText:@"cacacacacaca"]; - if ([self.selectedItems containsObject:cell.path]) { - [cell setCellIsToHighlight:YES]; - }else - { - [cell setCellIsToHighlight:NO]; - } - - return cell; -} --(CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 65.0; -} - -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath -{ -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ - - -#pragma mark - Table view delegate - -// In a xib-based application, navigation from a table can be handled in -tableView:didSelectRowAtIndexPath: -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - ClearImageCell *cell = (ClearImageCell *)[tableView cellForRowAtIndexPath:indexPath]; - - if ([self.selectedItems containsObject:cell.path]) { - [self.selectedItems removeObject:cell.path]; - [cell setCellIsToHighlight:NO]; - }else - { - [self.selectedItems addObject:cell.path]; - [cell setCellIsToHighlight:YES]; - } -} - - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.xib b/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.xib deleted file mode 100644 index 741c7ec..0000000 --- a/TeamTalk/IOSDuoduo/VC/ClearImageCacheViewController.xib +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ClearImageCacheViewController"> - <connections> - <outlet property="selectAll" destination="pMn-5D-EyE" id="gVZ-Kb-QMo"/> - <outlet property="view" destination="rLz-4e-WSR" id="v4e-Lx-YiO"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view contentMode="scaleToFill" id="rLz-4e-WSR"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <subviews> - <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4iH-AB-T3v"> - <rect key="frame" x="0.0" y="523" width="320" height="45"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="0MB" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WZ1-GG-C2Y"> - <rect key="frame" x="131" y="12" width="86" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nco-Hl-jbu"> - <rect key="frame" x="265" y="8" width="46" height="30"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <state key="normal" title="确定"> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="clearSelectedImage:" destination="-1" eventType="touchUpInside" id="uYp-O5-Enm"/> - </connections> - </button> - <imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="dd_preview_unselected.png" highlightedImage="dd_selected_photo.png" translatesAutoresizingMaskIntoConstraints="NO" id="pMn-5D-EyE"> - <rect key="frame" x="7" y="12" width="20" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - </subviews> - <color key="backgroundColor" red="0.95686274509803915" green="0.94901960784313721" blue="0.97647058823529409" alpha="1" colorSpace="calibratedRGB"/> - </view> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> - <resources> - <image name="dd_preview_unselected.png" width="21" height="21"/> - <image name="dd_selected_photo.png" width="20" height="20"/> - </resources> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/ClearImageCell.h b/TeamTalk/IOSDuoduo/VC/ClearImageCell.h deleted file mode 100644 index 23527f3..0000000 --- a/TeamTalk/IOSDuoduo/VC/ClearImageCell.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ClearImageCell.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface ClearImageCell : UITableViewCell -@property(strong)UIImageView *image; -@property(strong)UILabel *mainLabel; -@property(strong)UILabel *detailLabel; -@property(strong)UIImageView *selectImage; -@property(strong)NSString *path; -@property(assign)BOOL isSelect; --(void)setCellIsToHighlight:(BOOL)isHighlight; -@end diff --git a/TeamTalk/IOSDuoduo/VC/ClearImageCell.m b/TeamTalk/IOSDuoduo/VC/ClearImageCell.m deleted file mode 100644 index 1ca25cf..0000000 --- a/TeamTalk/IOSDuoduo/VC/ClearImageCell.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// ClearImageCell.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-01. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ClearImageCell.h" - -@implementation ClearImageCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.selectImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, 20, 20)]; - [self.selectImage setHighlightedImage:[UIImage imageNamed:@"dd_selected_photo@2x"]]; - [self.selectImage setImage:[UIImage imageNamed:@"dd_preview_unselected@2x"]]; - [self.contentView addSubview:self.selectImage]; - self.image = [[UIImageView alloc] initWithFrame:CGRectMake(60, 9, 45, 45)]; - [self.contentView addSubview:self.image]; - self.mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.image.frame.origin.x+7+self.image.frame.size.width, 13, 200, 15)]; - [self.mainLabel setFont:[UIFont boldSystemFontOfSize:17.0]]; - [self.contentView addSubview:self.mainLabel]; - self.detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.mainLabel.frame.origin.x, 36, 200, 15)]; - [self.detailLabel setTextColor:[UIColor colorWithRed:110.0/225.0 green:110.0/225.0 blue:110.0/225.0 alpha:1.0]]; - [self.detailLabel setFont:[UIFont systemFontOfSize:14.0]]; - [self.contentView addSubview:self.detailLabel]; - } - return self; -} --(void)setCellIsToHighlight:(BOOL)isHighlight -{ - self.isSelect=isHighlight; - [self.selectImage setHighlighted:isHighlight]; - -} -- (void) layoutSubviews -{ - [super layoutSubviews]; - if (self.isSelect) { - [self setCellIsToHighlight:YES]; - }else - [self setCellIsToHighlight:NO]; - -} -- (void)awakeFromNib -{ - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.h b/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.h deleted file mode 100644 index df365bf..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DDContactAvatarTools.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-25. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -typedef void(^ButtonSelectBlock)(int buttonIndex) ; -@class DDUserEntity; -@interface ContactAvatarTools : UIView -@property(strong)UIButton *item1; -@property(strong)UIButton *item2; -@property(strong)UIButton *item3; -@property(strong)DDUserEntity *user; -@property(copy)ButtonSelectBlock block; -@property(assign)BOOL isShow; --(void)hiddenSelf; -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.m b/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.m deleted file mode 100644 index 2456a79..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactAvatarTools.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// DDContactAvatarTools.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-25. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ContactAvatarTools.h" -#import "DDUserEntity.h" -#import "PublicProfileViewControll.h" -#define TOPOINTX 50 -#define TOPOINTY 0 -#define DEFAULTRECT CGRectMake(0, self.frame.size.height/2, 0, 0) -@implementation ContactAvatarTools - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - self.item1 = [UIButton buttonWithType:UIButtonTypeCustom]; - self.item1.tag=1; - [self.item1 setImage:[UIImage imageNamed:@"tel"] forState:UIControlStateNormal]; - [self.item1 addTarget:self action:@selector(clickItem:) forControlEvents:UIControlEventTouchUpInside]; - self.item1.frame=DEFAULTRECT; - [self addSubview:self.item1]; - - self.item2 = [UIButton buttonWithType:UIButtonTypeCustom]; - self.item2.tag=2; - [self.item2 setImage:[UIImage imageNamed:@"email"] forState:UIControlStateNormal]; - [self.item2 addTarget:self action:@selector(clickItem:) forControlEvents:UIControlEventTouchUpInside]; - self.item2.frame=DEFAULTRECT; - [self addSubview:self.item2]; - - - self.item3 = [UIButton buttonWithType:UIButtonTypeCustom]; - self.item3.tag=3; - [self.item3 setImage:[UIImage imageNamed:@"chat"] forState:UIControlStateNormal]; - [self.item3 addTarget:self action:@selector(clickItem:) forControlEvents:UIControlEventTouchUpInside]; - self.item3.frame=DEFAULTRECT; - [self addSubview:self.item3]; - [self showItem]; - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hiddenSelf)]; - [self addGestureRecognizer:tap]; - } - return self; -} - --(void)hiddenSelf -{ - [UIView animateWithDuration:0.5 animations:^{ - self.item1.frame=DEFAULTRECT; - }]; - [UIView animateWithDuration:0.4 animations:^{ - self.item2.frame=DEFAULTRECT; - }]; - [UIView animateWithDuration:0.3 animations:^{ - self.item3.frame=DEFAULTRECT; - } completion:^(BOOL finished) { - self.isShow=NO; - [self removeFromSuperview]; - }]; - -} --(void)showItem -{ - self.isShow=YES; - [UIView animateWithDuration:0.3 animations:^{ - self.item1.frame=CGRectMake(TOPOINTX-40, TOPOINTY, 30, 30); - }]; - [UIView animateWithDuration:0.4 animations:^{ - self.item2.frame=CGRectMake(TOPOINTX-25, TOPOINTY+35, 30, 30); - }]; - [UIView animateWithDuration:0.5 animations:^{ - self.item3.frame=CGRectMake(TOPOINTX-40, TOPOINTY+70, 30, 30); - }]; - -} - --(IBAction)clickItem:(id)sender -{ - UIButton *button =(UIButton *)sender; - CGRect rect=button.frame; - rect.size.width=70; - rect.size.height=30; - [UIView animateWithDuration:0.2 animations:^{ - button.frame=rect; - } completion:^(BOOL finished) { - [self hiddenSelf]; - switch (button.tag) { - case 1: - self.block(1); - break; - case 2: - self.block(2); - break; - case 3: - self.block(3); - break; - default: - break; - } - }]; - -} --(void)goToUserInfo -{ - - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=self.user; - -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactsModule.h b/TeamTalk/IOSDuoduo/VC/ContactsModule.h deleted file mode 100644 index 6c92d3b..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactsModule.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// ContactsModel.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-21. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDUserEntity.h" -@interface ContactsModule : NSObject -@property(strong)NSMutableArray *contacts; -@property(strong)NSMutableArray *groups; -@property(assign)int contactsCount; --(NSMutableDictionary *)sortByContactFirstLetter; --(NSMutableDictionary *)sortByDepartment; -+(void)favContact:(DDUserEntity *)user; -+(NSArray *)getFavContact; --(BOOL)isInFavContactList:(DDUserEntity *)user; -+(void)getDepartmentData:(void(^)(id response))block; --(void)initContactsData:(void(^)(bool isOk))block; -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactsModule.m b/TeamTalk/IOSDuoduo/VC/ContactsModule.m deleted file mode 100644 index 5abd78a..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactsModule.m +++ /dev/null @@ -1,198 +0,0 @@ -// -// ContactsModel.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-21. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ContactsModule.h" -#import "std.h" -#import "NSDictionary+Safe.h" -#import "DDDepartmentAPI.h" -#import "DDepartment.h" -#import "DDFixedGroupAPI.h" -#import "DDDatabaseUtil.h" -#import "DDGroupModule.h" -#import "RuntimeStatus.h" -#import "DDUserModule.h" -#import "DDGroupEntity.h" -#import "SpellLibrary.h" -@implementation ContactsModule -- (instancetype)init -{ - self = [super init]; - if (self) { - self.contacts = [NSMutableArray new]; - self.groups = [NSMutableArray new]; - [self initContactsData]; - } - return self; -} --(void)initContactsData -{ - - [[DDDatabaseUtil instance] getAllUsers:^(NSArray *contacts, NSError *error) { - for (DDUserEntity *user in contacts) { - [[DDDatabaseUtil instance] getDepartmentFromID:user.departId completion:^(DDepartment *department) { - if (department) { - if ([user.departId isEqualToString:department.ID]) { - user.department= department.title; - } - } - [self.contacts addObject:user]; - if ([user isEqual:[contacts lastObject]]) { - [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshAllContacts" object:nil]; - } - }]; - } - }]; - - -} - --(void)addContact:(DDUserEntity *)user -{ - -} -/** - * 按首字母展示 - * - * @return 返回界面需要的字典类型 - */ --(NSMutableDictionary *)sortByContactFirstLetter -{ - NSMutableDictionary *dic = [NSMutableDictionary new]; - for (DDUserEntity * user in self.contacts) { - char firstLetter = getFirstChar(user.name); - NSString *fl = [NSString stringWithFormat:@"%c",firstLetter]; - if ([dic safeObjectForKey:fl]) { - NSMutableArray *arr = [dic safeObjectForKey:fl]; - [arr addObject:user]; - }else - { - NSMutableArray *arr = [[NSMutableArray alloc] initWithArray:@[user]]; - [dic setObject:arr forKey:fl]; - } - } - return dic; -} -/** - * 按部门分类展示 - * - * @return 返回界面需要的字典类型 - */ --(NSMutableDictionary *)sortByDepartment -{ - NSMutableDictionary *dic = [NSMutableDictionary new]; - for (DDUserEntity * user in self.contacts) { - if ([dic safeObjectForKey:user.department]) { - NSMutableArray *arr = [dic safeObjectForKey:user.department]; - [arr addObject:user]; - }else - { - NSMutableArray *arr = [[NSMutableArray alloc] initWithArray:@[user]]; - [dic safeSetObject:arr forKey:user.department]; - } - } - return dic; - -} -/** - * 获取本地收藏的联系人 - * - * @return 界面收藏联系人列表 - */ -+(NSArray *)getFavContact -{ - - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - NSArray *arr = [userDefaults objectForKey:@"favuser"]; - NSMutableArray *contacts = [NSMutableArray new]; - [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [contacts addObject:[DDUserEntity dicToUserEntity:(NSDictionary *)obj]] ; - }]; - return contacts; -} -/** - * 收藏联系人接口 - * - * @param user 联系人对象 - */ -+(void)favContact:(DDUserEntity *)user -{ - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - if ([userDefaults objectForKey:@"favuser"] == nil) { - [userDefaults setObject:@[[DDUserEntity userToDic:user]] forKey:@"favuser"]; - }else - { - NSMutableArray *arr = [NSMutableArray arrayWithArray:[userDefaults objectForKey:@"favuser"]]; - if ([arr count] == 0) { - [arr addObject:[DDUserEntity userToDic:user]]; - [userDefaults setObject:arr forKey:@"favuser"]; - return; - } - for (int i = 0;i<[arr count];i++) { - NSDictionary *dic = [arr objectAtIndex:i]; - if ([[dic objectForKey:@"userId"] isEqualToString:user.objID]) { - [arr removeObject:dic]; - [userDefaults setObject:arr forKey:@"favuser"]; - return; - }else - { - if ([[arr objectAtIndex:i] isEqualToDictionary:[arr lastObject]]) { - [arr addObject:[DDUserEntity userToDic:user]]; - [userDefaults setObject:arr forKey:@"favuser"]; - return; - } - - } - } - - - } -} -/** - * 检查是否在收藏的联系人里 - * - * @param user 用户对象 - * - * @return 返回yes表示在收藏的联系人里 - */ --(BOOL)isInFavContactList:(DDUserEntity *)user -{ - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - NSMutableArray *arr = [NSMutableArray arrayWithArray:[userDefaults objectForKey:@"favuser"]]; - for (int i = 0;i<[arr count];i++) { - NSDictionary *dic = [arr objectAtIndex:i]; - if ([[dic objectForKey:@"userId"] isEqualToString:user.objID]) { - return YES; - } - } - return NO; -} -+(void)getDepartmentData:(void(^)(id response))block -{ - DDDepartmentAPI* api = [[DDDepartmentAPI alloc] init]; - [api requestWithObject:nil Completion:^(id response, NSError *error) { - if (!error) - { - if (response) - { - block(response); - - } - else - { - block(nil); - } - } - else - { - DDLog(@"error:%@",[error domain]); - block(nil); - } - }]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactsViewController.h b/TeamTalk/IOSDuoduo/VC/ContactsViewController.h deleted file mode 100644 index 4dc8909..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactsViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ContactsViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "DDSessionEntity.h" -@interface ContactsViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate,UISearchDisplayDelegate,UIScrollViewDelegate> -@property(strong)NSString *sectionTitle; -@property(assign)BOOL isSearchResult; -@end diff --git a/TeamTalk/IOSDuoduo/VC/ContactsViewController.m b/TeamTalk/IOSDuoduo/VC/ContactsViewController.m deleted file mode 100644 index 4b6430c..0000000 --- a/TeamTalk/IOSDuoduo/VC/ContactsViewController.m +++ /dev/null @@ -1,443 +0,0 @@ -// -// ContactsViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ContactsViewController.h" -#import "std.h" -#import "PublicProfileViewControll.h" -#import "ContactsModule.h" -#import "DDGroupEntity.h" -#import "DDSearch.h" -#import "ContactAvatarTools.h" -#import "DDContactsCell.h" -#import "DDUserDetailInfoAPI.h" -#import "DDGroupModule.h" -#import "ChattingMainViewController.h" -#import "SearchContentViewController.h" -#import "MBProgressHUD.h" -#import "DDFixedGroupAPI.h" -@interface ContactsViewController () -@property(strong)UISegmentedControl *seg; -@property(strong)NSMutableDictionary *items; -@property(strong)NSMutableDictionary *keys; -@property(strong)ContactsModule *model; -@property(strong)NSMutableArray *groups; -@property(strong)NSArray *searchResult; -@property(strong)UITableView *tableView; -@property(strong)UISearchBar *searchBar; -@property(strong)ContactAvatarTools *tools; -@property(strong)UISearchDisplayController *searchController; -@property(strong)MBProgressHUD *hud; -@property(assign)int selectIndex; -@end - -@implementation ContactsViewController - - - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.edgesForExtendedLayout = UIRectEdgeNone; - self.extendedLayoutIncludesOpaqueBars = NO; - self.hud = [[MBProgressHUD alloc] initWithView:self.view]; - [self.view addSubview:self.hud]; - self.hud.dimBackground = YES; - self.hud.labelText=@"正在加载..."; - [self.hud show:YES]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAllContacts) name:@"refreshAllContacts" object:nil]; - self.groups = [NSMutableArray new]; - self.title=@"联系人"; - self.model = [ContactsModule new]; - self.searchResult = [NSArray new]; - self.seg = [[UISegmentedControl alloc] initWithItems:@[@"全部",@"部门"]]; - self.seg.selectedSegmentIndex=0; - self.seg.frame=CGRectMake(80.0f, 8.0f, 200.0f, 30.0f); - [self.seg addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; - self.navigationItem.titleView=self.seg; - self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)]; - [self.searchBar setPlaceholder:@"搜索"]; - [self.searchBar setBarTintColor:RGB(242, 242, 244)]; - self.searchBar.delegate=self; - [self.searchBar setBarStyle:UIBarStyleDefault]; - [self.view addSubview:self.searchBar]; - - self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 40, 320,(self.tabBarController.tabBar.isHidden?self.view.frame.size.height:self.view.frame.size.height-152))]; - self.tableView.delegate=self; - self.tableView.tag=100; - self.tableView.dataSource=self; - [self.view addSubview:self.tableView]; - DDFixedGroupAPI *fixedGroupApi = [DDFixedGroupAPI new]; - [fixedGroupApi requestWithObject:nil Completion:^(NSArray *response, NSError *error) { - [self.groups addObjectsFromArray:response]; - [self.tableView reloadData]; - }]; -// NSArray *array = [[DDGroupModule instance] getAllGroups]; -// [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { -// DDGroupEntity *group = (DDGroupEntity *)obj; -// if (group.groupType == GROUP_TYPE_FIXED) { -// [self.groups addObject:group]; -// } -// }]; - -} --(void)scrollToTitle:(NSNotification *)notification -{ - NSString *string = [notification object]; - self.sectionTitle=string; -} --(void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - self.sectionTitle=nil; -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - if (self.isSearchResult) { - [self.tabBarController.tabBar setHidden:YES]; - }else - { - [self.tabBarController.tabBar setHidden:NO]; - } - if (self.sectionTitle) { - [self.seg setSelectedSegmentIndex:1]; - self.selectIndex=1; - [self swichToShowDepartment]; - if ([self.allKeys count]) { - int location = [self.allKeys indexOfObject:self.sectionTitle]; - [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:location] atScrollPosition:UITableViewScrollPositionTop animated:YES]; - } - return; - } - - -} --(void)refreshAllContacts -{ - if (self.sectionTitle) { - [self.seg setSelectedSegmentIndex:1]; - self.selectIndex=1; - [self swichToShowDepartment]; - int location = [self.allKeys indexOfObject:self.sectionTitle]; - [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:location] atScrollPosition:UITableViewScrollPositionTop animated:YES]; - return; - } - - switch (self.selectIndex) { - case 0: - [self swichContactsToALl]; - break; - case 1: - [self swichToShowDepartment]; - default: - break; - } - - -} - - - --(void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; -} --(void)swichContactsToALl -{ - //[self.items removeAllObjects]; - self.items = [self.model sortByContactFirstLetter]; - - [self.tableView reloadData]; -} --(void)swichToShowDepartment -{ - // [self.items removeAllObjects]; - self.items = [self.model sortByDepartment]; - [self.tableView reloadData]; -} --(NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView{ - NSMutableArray* array = [[NSMutableArray alloc] init]; - if (self.selectIndex == 1) { - [[self allKeys] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - char firstLetter = getFirstChar((NSString *)obj); - [array addObject:[[NSString stringWithFormat:@"%c",firstLetter] uppercaseString]]; - }]; - } - else - { - NSArray* allKeys = [self allKeys]; - [allKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [array addObject:[obj uppercaseString]]; - }]; - } - return array; -} --(IBAction)segmentAction:(UISegmentedControl *)sender -{ - int index = sender.selectedSegmentIndex; - switch (index) { - case 0: - self.selectIndex=0; - [self swichContactsToALl]; - break; - case 1: - self.selectIndex=1; - [self swichToShowDepartment]; - default: - break; - } - -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - Table view data source --(NSArray*)allKeys{ - return [[self.items allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1 compare:obj2]; - }]; -} -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - - if (self.selectIndex == 0) { - return [[self.items allKeys] count]+2; - } - return [[self.items allKeys] count]; - -} - - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - if (self.selectIndex == 0) { - if (section == 0) { - return [self.groups count]; - }else if (section == 1) - { - NSLog(@"%d........",[[ContactsModule getFavContact] count]); - return [[ContactsModule getFavContact] count]; - } - else - { - NSString *keyStr = [self allKeys][(NSUInteger) (section - 2)]; - NSArray *arr = (self.items)[keyStr]; - return [arr count]; - } - } - - NSString *keyStr = [self allKeys][(NSUInteger) (section)]; - NSArray *arr = (self.items)[keyStr]; - return [arr count]; - -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - if (self.selectIndex == 0) { - if (section == 0) { - return @"群"; - }else if (section == 1) - { - return @"收藏"; - } - return [self.allKeys[section - 2] uppercaseString]; - }else - { - return [self.allKeys[section] uppercaseString]; - } - -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"contactsCell"; - DDContactsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - if (cell == nil) { - cell = [[DDContactsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } - if (self.selectIndex == 0) { - if (indexPath.section == 0) { - DDGroupEntity *group = [self.groups objectAtIndex:indexPath.row]; - cell.nameLabel.text=group.name; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [cell setGroupAvatar:group]; - }else if (indexPath.section == 1) - { - NSArray *arr = [ContactsModule getFavContact]; - DDUserEntity *user = [arr objectAtIndex:indexPath.row]; - - NSString *name =user.nick?user.nick:user.name; - [cell setCellContent:user.avatar Name:name]; - - }else - { - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section-2]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user = [userArray objectAtIndex:indexPath.row]; - - [cell setCellContent:user.avatar Name:user.nick]; - cell.button.tag=indexPath.row; - [cell.button setTitle:keyStr forState:UIControlStateNormal]; - [cell.button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal]; - [cell.button addTarget:self action:@selector(showActions:) forControlEvents:UIControlEventTouchUpInside]; - } - }else - { - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user = [userArray objectAtIndex:indexPath.row]; - [cell setCellContent:user.avatar Name:user.nick]; - cell.button.tag=indexPath.row; - [cell.button setTitle:keyStr forState:UIControlStateNormal]; - [cell.button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal]; - [cell.button addTarget:self action:@selector(showActions:) forControlEvents:UIControlEventTouchUpInside]; - } - - return cell; -} - --(IBAction)showActions:(id)sender -{ - if (self.tools.isShow) { - [self.tools hiddenSelf]; - } - UIButton *btn = (UIButton *)sender; - NSArray *userArray =[self.items objectForKey:btn.titleLabel.text]; - DDBaseEntity *user = [userArray objectAtIndex:btn.tag]; - CGRect rect = [self.tableView convertRect:self.tableView.frame fromView:btn]; - self.tools = [[ContactAvatarTools alloc] initWithFrame:CGRectMake(rect.origin.x+btn.frame.size.width+5, rect.origin.y-70, 100, 100)]; - __weak ContactsViewController *weakSelf = self; - if ([user isKindOfClass:[DDUserEntity class]]) { - __block DDUserEntity *newUser; - DDUserDetailInfoAPI* detailInfoAPI = [[DDUserDetailInfoAPI alloc] init]; - [detailInfoAPI requestWithObject:@[((DDUserEntity *)user).objID] Completion:^(id response, NSError *error) { - if ([response count] > 0) - { - NSDictionary* userInfo = response[0]; - newUser = [DDUserEntity dicToUserEntity:userInfo]; - } - else - { - } - }]; - self.tools.block=^(int index){ - switch (index) { - case 1: - [weakSelf callNum:newUser]; - break; - case 2: - [weakSelf sendEmail:newUser]; - break; - case 3: - [weakSelf chatTo:newUser]; - default: - break; - } - }; - } - [self.tableView addSubview:self.tools]; -} - --(void)callNum:(DDUserEntity *)user -{ - if (user == nil) { - return; - } - NSString *string = [NSString stringWithFormat:@"tel:%@",user.telphone]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]]; -} --(void)sendEmail:(DDUserEntity *)user -{ - if (user == nil) { - return; - } - NSString *string = [NSString stringWithFormat:@"mailto:%@",user.email]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]]; -} --(void)chatTo:(DDUserEntity *)user -{ - if (user == nil) { - return; - } - DDSessionEntity* session = [[DDSessionEntity alloc] initWithSessionID:user.objID type:SESSIONTYPE_SINGLE]; - [session setSessionName:user.nick]; - [[ChattingMainViewController shareInstance] showChattingContentForSession:session]; - [self.navigationController pushViewController:[ChattingMainViewController shareInstance] animated:YES]; -} --(void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - if (self.tools.isShow) { - [self.tools hiddenSelf]; - } -} --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - if (self.tools.isShow) { - [self.tools hiddenSelf]; - return; - } - if (self.selectIndex == 0) { - if (indexPath.section == 0) { - DDGroupEntity *group = [self.groups objectAtIndex:indexPath.row]; - DDSessionEntity *session = [[DDSessionEntity alloc] initWithSessionID:group.objID type:SESSIONTYPE_GROUP]; - [session setSessionName:group.name]; - ChattingMainViewController *main = [ChattingMainViewController shareInstance]; - [main showChattingContentForSession:session]; - [self.navigationController pushViewController:main animated:YES]; - return; - } - if (indexPath.section == 1) { - DDUserEntity *user; - user = [ContactsModule getFavContact][indexPath.row]; - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [self.navigationController pushViewController:public animated:YES]; - return; - } - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section-2]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user; - user = [userArray objectAtIndex:indexPath.row]; - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [self.navigationController pushViewController:public animated:YES]; - }else - { - NSString *keyStr = [[self allKeys] objectAtIndex:indexPath.section]; - NSArray *userArray =[self.items objectForKey:keyStr]; - DDUserEntity *user; - user = [userArray objectAtIndex:indexPath.row]; - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [self.navigationController pushViewController:public animated:YES]; - - } - -} --(CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 50; -} -- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar -{ - [self.navigationController pushViewController:[SearchContentViewController new] animated:YES]; - return NO; -} --(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - if (self == [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { -// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(scrollToTitle:) name:@"SearchDerpartment" object:nil]; - } - return self; -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/VC/DDContactsCell.h b/TeamTalk/IOSDuoduo/VC/DDContactsCell.h deleted file mode 100644 index e1802d1..0000000 --- a/TeamTalk/IOSDuoduo/VC/DDContactsCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DDContactsCell.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-22. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class DDGroupEntity; -@interface DDContactsCell : UITableViewCell -@property(strong)UIButton *button; -@property(strong)UIImageView *avatar; -@property(strong)UILabel *nameLabel; --(void)setCellContent:(NSString *)avater Name:(NSString *)nameLabel; -- (void)setGroupAvatar:(DDGroupEntity*)group; -@end diff --git a/TeamTalk/IOSDuoduo/VC/DDContactsCell.m b/TeamTalk/IOSDuoduo/VC/DDContactsCell.m deleted file mode 100644 index f1bff2a..0000000 --- a/TeamTalk/IOSDuoduo/VC/DDContactsCell.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// DDContactsCell.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-22. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "DDContactsCell.h" -#import "std.h" -#import "UIImageView+WebCache.h" -#import "DDGroupEntity.h" -#import "DDUserModule.h" -#import "UIView+DDAddition.h" -@implementation DDContactsCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.button = [UIButton buttonWithType:UIButtonTypeCustom]; - self.button.frame=CGRectMake(15, 5, 40, 40); - self.button.showsTouchWhenHighlighted=YES; - [self addSubview:self.button]; - self.avatar = [[UIImageView alloc] initWithFrame:CGRectMake(15, 5, 40, 40)]; - [self.avatar setClipsToBounds:YES]; - [self.avatar.layer setCornerRadius:2.0]; - [self.avatar setUserInteractionEnabled:YES]; - [self.avatar setContentMode:UIViewContentModeScaleAspectFill]; - [self.contentView addSubview:self.avatar]; - self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(70, 17, 200, 15)]; - [self.nameLabel setFont:[UIFont systemFontOfSize:15.0]]; - [self.nameLabel setTextColor:[UIColor blackColor]]; - [self.contentView addSubview:self.nameLabel]; - } - return self; -} - -- (void)awakeFromNib -{ - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} --(void)setCellContent:(NSString *)avatar Name:(NSString *)nameLabel -{ - [[self.avatar subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [(UIView*)obj removeFromSuperview]; - }]; - self.nameLabel.text=nameLabel; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [self.avatar sd_setImageWithURL:[NSURL URLWithString:avatar] placeholderImage:placeholder]; -} - -- (void)setGroupAvatar:(DDGroupEntity*)group -{ - [self.avatar setBackgroundColor:[UIColor grayColor]]; - [self.avatar setImage:nil]; - [[self.avatar subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [(UIView*)obj removeFromSuperview]; - }]; - - NSMutableArray* avatars = [[NSMutableArray alloc] init]; - [group.groupUserIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 18, 18)]; - [imageView.layer setCornerRadius:2.0]; - [imageView setContentMode:UIViewContentModeScaleAspectFill]; - [imageView setClipsToBounds:YES]; - NSString* userID = (NSString*)obj; - [[DDUserModule shareInstance] getUserForUserID:userID Block:^(DDUserEntity *user) { - NSString* avatar = user.avatar; - NSURL* avatarURL = [[NSURL alloc] initWithString:avatar]; - [imageView sd_setImageWithURL:avatarURL placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - }]; - [avatars addObject:imageView]; - if ([avatars count] >= 4) - { - *stop = YES; - } - }]; - if ([avatars count] == 1) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(self.avatar.width / 2, self.avatar.height / 2)]; - } - else if ([avatars count] == 2) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(self.avatar.width / 4 + 1, self.avatar.height / 2)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(self.avatar.width / 4 * 3, self.avatar.height / 2)]; - } - else if ([avatars count] == 3) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(self.avatar.width / 2, self.avatar.height / 4 + 1)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(self.avatar.width / 4 + 1, self.avatar.height / 4 * 3)]; - - UIImageView* imageView3 = avatars[2]; - [imageView3 setCenter:CGPointMake(self.avatar.width / 4 * 3, self.avatar.height / 4 * 3)]; - } - else if ([avatars count] == 4) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(self.avatar.width / 4 + 1, self.avatar.height / 4 + 1)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(self.avatar.width / 4 * 3, self.avatar.height / 4 + 1)]; - - UIImageView* imageView3 = avatars[2]; - [imageView3 setCenter:CGPointMake(self.avatar.width / 4 + 1, self.avatar.height / 4 * 3)]; - - UIImageView* imageView4 = avatars[3]; - [imageView4 setCenter:CGPointMake(self.avatar.width / 4 * 3, self.avatar.height / 4 * 3)]; - } - [avatars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [self.avatar addSubview:obj]; - }]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.h b/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.h deleted file mode 100644 index f146578..0000000 --- a/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// GroupAvatarImage.h -// TeamTalk -// -// Created by Michael Scofield on 2014-09-25. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class DDGroupEntity; -@interface GroupAvatarImage : UIImageView --(GroupAvatarImage *)getGroupImage:(DDGroupEntity *)group Block:(void(^)(UIImage *))block; -@end diff --git a/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.m b/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.m deleted file mode 100644 index 509bf70..0000000 --- a/TeamTalk/IOSDuoduo/VC/GroupAvatarImage.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// GroupAvatarImage.m -// TeamTalk -// -// Created by Michael Scofield on 2014-09-25. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "GroupAvatarImage.h" -#import "DDGroupEntity.h" -#import "DDDatabaseUtil.h" -#import "PhotosCache.h" -#import "DDUserEntity.h" -#import <SDWebImage/UIImageView+WebCache.h> -#define BIGSIZE CGSizeMake(22, 22) -#define SMALLSIZE CGSizeMake(12, 12) -@implementation GroupAvatarImage - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} --(GroupAvatarImage *)getGroupImage:(DDGroupEntity *)group Block:(void(^)(UIImage *))block -{ - GroupAvatarImage *groupAvatar = [[GroupAvatarImage alloc] initWithFrame:CGRectMake(0, 0, 45, 45)]; - NSData *data = [[PhotosCache sharedPhotoCache] photoFromDiskCacheForKey:group.objID]; - if (data) { - UIImage *image = [UIImage imageWithData:data]; - block(image); - return nil; - }else - { - [group.fixGroupUserIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - __block UIImageView *imagev; - [[DDDatabaseUtil instance] getUserFromID:obj completion:^(DDUserEntity *user) { - if (idx<=4) { - imagev = [[UIImageView alloc] initWithFrame:CGRectMake((idx%2)*BIGSIZE.width, (idx/2)*BIGSIZE.width, BIGSIZE.width, BIGSIZE.height)]; - [imagev sd_setImageWithURL:[NSURL URLWithString:user.avatar] placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - [groupAvatar addSubview:imagev]; - - }else - { - *stop = YES; - UIGraphicsBeginImageContext(groupAvatar.bounds.size); - [groupAvatar.layer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - [[PhotosCache sharedPhotoCache] storePhoto:UIImagePNGRepresentation(viewImage) forKey:group.objID toDisk:YES]; - block(viewImage); - } - }]; - }]; - } - -// if ([group.fixGroupUserIds count] >4) { -// [group.fixGroupUserIds enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) { -// UIImage *img = [self makeUserAvaterImage:obj]; -// UIImageView *imageView =[self makeAvater:img]; -// imageView.frame=CGRectMake(idx*SMALLSIZE.width, idx>2?SMALLSIZE.height:0, SMALLSIZE.width, SMALLSIZE.height); -// [groupAvatar addSubview:imageView]; -// }]; -// }else -// { -// [group.fixGroupUserIds enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) { -// UIImage *img = [self makeUserAvaterImage:obj]; -// UIImageView *imageView =[self makeAvater:img]; -// imageView.frame=CGRectMake((idx%2)*BIGSIZE.width, idx>2?BIGSIZE.height:0, BIGSIZE.width, BIGSIZE.height); -// [groupAvatar addSubview:imageView]; -// }]; -// } - return groupAvatar; -} --(UIImage *)makeUserAvaterImage:(NSString *)userID -{ - __block UIImage *newImage; - [[DDDatabaseUtil instance] getUserFromID:userID completion:^(DDUserEntity *user) { - NSData *data = [[PhotosCache sharedPhotoCache] photoFromDiskCacheForKey:user.avatar]; - UIImage *image = [UIImage imageWithData:data]; - newImage=image; - }]; - return newImage; -} --(UIImageView *)makeAvater:(UIImage *)image -{ - UIImageView *bigImageView = [[UIImageView alloc] initWithImage:image]; - return bigImageView; -} -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.h b/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.h deleted file mode 100755 index ed67dc0..0000000 --- a/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * ImageGridViewCell.h - * Classes - * - * Created by Jim Dovey on 16/8/2010. - * - * Copyright (c) 2010 Jim Dovey - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import <Foundation/Foundation.h> -#import "AQGridViewCell.h" - -@interface ImageGridViewCell : AQGridViewCell -{ - -} -@property (nonatomic, retain) UIImage * image; -@property(nonatomic,strong)UIImageView * imageView; -@property (nonatomic,strong) UIImageView *selectImage; -@property(strong)UILabel *title; -@property (assign) BOOL isShowSelect; --(void)setCellIsToHighlight:(BOOL)isHighlight; --(void)setTitleToHidden:(BOOL)isHidden; -@end diff --git a/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.m b/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.m deleted file mode 100755 index ebbe394..0000000 --- a/TeamTalk/IOSDuoduo/VC/ImageGridViewCell.m +++ /dev/null @@ -1,115 +0,0 @@ -/* - * ImageGridViewCell.m - * Classes - * - * Created by Jim Dovey on 16/8/2010. - * - * Copyright (c) 2010 Jim Dovey - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the project's author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "ImageGridViewCell.h" -@implementation ImageGridViewCell - -- (id) initWithFrame: (CGRect) frame reuseIdentifier: (NSString *) aReuseIdentifier -{ - self = [super initWithFrame: frame reuseIdentifier: aReuseIdentifier]; - if ( self == nil ) - return nil ; - - _imageView = [[UIImageView alloc] initWithFrame: CGRectZero]; - [self.contentView addSubview: _imageView]; - self.selectImage = [[UIImageView alloc] initWithFrame:CGRectMake(50, 5, 20, 20)]; - [self.selectImage setImage:[UIImage imageNamed:@"unselected"]]; - [self.selectImage setHighlightedImage:[UIImage imageNamed:@"select"]]; - [self.contentView addSubview:self.selectImage]; - self.title = [[UILabel alloc] initWithFrame:CGRectMake(0,self.frame.size.height+10, self.frame.size.width, 15)]; - [self.title setFont:[UIFont systemFontOfSize:14.0]]; - [self.title setTextAlignment:NSTextAlignmentCenter]; - [self.contentView addSubview:self.title]; - - return self ; -} --(void)setCellIsToHighlight:(BOOL)isHighlight -{ - [self.selectImage setHighlighted:isHighlight]; -} - - -- (CALayer *) glowSelectionLayer -{ - return _imageView.layer; -} - -- (UIImage *) image -{ - return _imageView.image ; -} - -- (void) setImage: (UIImage *) anImage -{ - _imageView.image = anImage; - [self setNeedsLayout]; -} - -- (void) layoutSubviews -{ - [super layoutSubviews]; - if (!self.isShowSelect) { - [self.selectImage setHidden:YES]; - }else - { - [self.selectImage setHidden:NO]; - } - CGSize imageSize = _imageView.image.size; - CGRect frame = _imageView.frame; - CGRect bounds = self.contentView.bounds; - - if ( (imageSize.width <= bounds.size.width) && - (imageSize.height <= bounds.size.height) ) - { - return; - } - - // scale it down to fit - CGFloat hRatio = bounds.size.width / imageSize.width; - CGFloat vRatio = bounds.size.height / imageSize.height; - CGFloat ratio = MAX(hRatio, vRatio); - - frame.size.width = floorf(imageSize.width * ratio); - frame.size.height = floorf(imageSize.height * ratio); - frame.origin.x = floorf((bounds.size.width - frame.size.width) * 0.5); - frame.origin.y = floorf((bounds.size.height - frame.size.height) * 0.5); - _imageView.frame = frame; - self.title.frame=CGRectMake(0,self.frame.size.height+10, self.frame.size.width, 15); -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.h b/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.h deleted file mode 100644 index 257b609..0000000 --- a/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDImagesPreviewViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "MWPhotoBrowser.h" -@interface ImagesPreviewViewController : UIViewController<MWPhotoBrowserDelegate> -@property(nonatomic,strong)NSMutableArray *imageArray; - -@end diff --git a/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.m b/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.m deleted file mode 100644 index f34cd09..0000000 --- a/TeamTalk/IOSDuoduo/VC/ImagesPreviewViewController.m +++ /dev/null @@ -1,225 +0,0 @@ -// -// DDImagesPreviewViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-06-11. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "ImagesPreviewViewController.h" -#import <AssetsLibrary/AssetsLibrary.h> -#import "Photo.h" -#import "DDDatabaseUtil.h" -#import "DDSendPhotoMessageAPI.h" -#import "ChattingMainViewController.h" -#import "DDMessageSendManager.h" -#import "std.h" -#import <objc/runtime.h> -#import "MWCommon.h" -#import "PhotosCache.h" -#import "MBProgressHUD.h" -@interface MWPhoto (MyMWPhoto) -@property(nonatomic,strong)id isSelected; -@property(nonatomic,strong)NSString *alassetUrl; -@end - -@implementation MWPhoto (MyMWPhoto) --(NSString *)alassetUrl -{ - return objc_getAssociatedObject(self, @selector(alassetUrl)); -} --(void)setAlassetUrl:(NSString *)alassetUrl -{ - objc_setAssociatedObject(self, @selector(alassetUrl), - alassetUrl, - OBJC_ASSOCIATION_RETAIN); -} -- (id)isSelected { - return objc_getAssociatedObject(self, @selector(isSelected)); -} --(void)setIsSelected:(id)isSelected -{ - objc_setAssociatedObject(self, @selector(isSelected), - isSelected, - OBJC_ASSOCIATION_RETAIN); -} - - -@end -@interface ImagesPreviewViewController () -@property(nonatomic,strong)NSMutableArray *photos; -@property(nonatomic,strong) MWPhotoBrowser *photoBrowser; -@property(nonatomic,strong)UIButton *button; -@end -@implementation ImagesPreviewViewController -{ - -} -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - - - - } - return self; -} -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser { - return _photos.count; -} - -- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index { - if (index < _photos.count) - return [_photos objectAtIndex:index]; - return nil; -} -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected { - - MWPhoto *photo =[_photos objectAtIndex:index]; - photo.isSelected=[NSNumber numberWithBool:selected]; - NSLog(@"Photo at index %lu selected %@", (unsigned long)index, selected ? @"YES" : @"NO"); - [self setSendButtonTitle]; -} -- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index { - MWPhoto *photo =[_photos objectAtIndex:index]; - return [photo.isSelected boolValue]; -} -- (void)viewDidLoad -{ - - [super viewDidLoad]; - self.view.backgroundColor=[UIColor blackColor]; - self.photoBrowser = [[MWPhotoBrowser alloc] init]; - self.photoBrowser.view.frame=self.view.frame; - self.photoBrowser.displayActionButton = NO; - self.photoBrowser.displayNavArrows = NO; - self.photoBrowser.wantsFullScreenLayout = YES; - self.photoBrowser.delayToHideElements=4; - self.photoBrowser.zoomPhotosToFill = YES; - self.photoBrowser.displaySelectionButtons = YES; - self.photoBrowser.delegate=self; - [self.photoBrowser setCurrentPhotoIndex:0]; - [self.view addSubview:self.photoBrowser.view]; - self.photos = [NSMutableArray new]; - for (int i =0; i<[self.imageArray count]; i++) { - ALAsset *result = [self.imageArray objectAtIndex:i]; - ALAssetRepresentation* representation = [result defaultRepresentation]; - if (representation == nil) { - CGImageRef ref = [result thumbnail]; - - UIImage *img = [[UIImage alloc]initWithCGImage:ref]; - - MWPhoto *photo =[MWPhoto photoWithImage:img]; - photo.alassetUrl=@" "; - photo.isSelected=[NSNumber numberWithBool:YES]; - [self.photos addObject:photo]; - }else - { - NSURL* url = [representation url]; - CGImageRef ref = [[result defaultRepresentation] fullScreenImage]; - - UIImage *img = [[UIImage alloc]initWithCGImage:ref]; - - MWPhoto *photo =[MWPhoto photoWithImage:img]; - photo.alassetUrl=url.absoluteString; - photo.isSelected=[NSNumber numberWithBool:YES]; - [self.photos addObject:photo]; - } - - } - [self.photoBrowser reloadData]; - UIView *toolView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-50, 320, 50)]; - [toolView setBackgroundColor:RGBA(0, 0, 0, 0.7)]; - self.button = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.button setBackgroundColor:[UIColor clearColor]]; - [self.button setTitle:[NSString stringWithFormat:@"发送(%d)",[self.photos count]] forState:UIControlStateNormal]; - [self.button setTitle:[NSString stringWithFormat:@"发送(%d)",[self.photos count]] forState:UIControlStateSelected]; - [self.button setBackgroundImage:[UIImage imageNamed:@"dd_image_send"] forState:UIControlStateNormal]; - [self.button setBackgroundImage:[UIImage imageNamed:@"dd_image_send"] forState:UIControlStateSelected]; - - [self.button addTarget:self action:@selector(sendPhotos:) forControlEvents:UIControlEventTouchUpInside]; - NSString *string = [NSString stringWithFormat:@"%@",self.button.titleLabel.text]; - CGSize feelSize = [string sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(190,0)]; - float feelWidth = feelSize.width; - self.button.frame=CGRectMake(225, 5, feelWidth+25, 35); - [toolView addSubview:self.button]; - [self.view addSubview:toolView]; - UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [backButton setImage:[UIImage imageNamed:@"dd_image_back"] forState:UIControlStateNormal]; - [backButton addTarget:self action:@selector(goToBack) forControlEvents:UIControlEventTouchUpInside]; - float topviewY =self.photoBrowser.topview.frame.origin.y; - backButton.frame=CGRectMake(0, (SYSTEM_VERSION_LESS_THAN(@"7")?topviewY+19:topviewY), 50, 45); - [self.photoBrowser.view addSubview:backButton]; - - // Do any additional setup after loading the view. -} --(void)setSendButtonTitle -{ - int j = 0; - for (int i = 0; i<[self.photos count]; i++) { - MWPhoto *newPhoto = [self.photos objectAtIndex:i]; - if ([newPhoto.isSelected boolValue]) { - j++; - } - } - [self.button setTitle:[NSString stringWithFormat:@"发送( %d )",j] forState:UIControlStateNormal]; - -} --(void)goToBack -{ - [self.navigationController popViewControllerAnimated:YES]; -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} --(IBAction)sendPhotos:(id)sender -{ - - MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view]; - [self.view addSubview:HUD]; - - HUD.dimBackground = YES; - HUD.labelText = @"正在发送"; - - [HUD showAnimated:YES whileExecutingBlock:^{ - for (int i = 0; i<[self.photos count]; i++) { - MWPhoto *newPhoto = [self.photos objectAtIndex:i]; - if ([newPhoto.isSelected boolValue]) { - Photo *photo = [Photo new]; - NSString *keyName = [[PhotosCache sharedPhotoCache] getKeyName]; - NSData *photoData = UIImagePNGRepresentation(newPhoto.image); - [[PhotosCache sharedPhotoCache] storePhoto:photoData forKey:keyName toDisk:YES]; - photo.localPath=keyName; - photo.image=newPhoto.image; - [[ChattingMainViewController shareInstance] sendImageMessage:photo Image:photo.image]; - - } - } - } completionBlock:^{ - [HUD removeFromSuperview]; - [self.navigationController popToViewController:[ChattingMainViewController shareInstance] animated:YES]; - }]; - - -} -/* - #pragma mark - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender - { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. - } - */ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/LoginModule.h b/TeamTalk/IOSDuoduo/VC/LoginModule.h deleted file mode 100644 index a599410..0000000 --- a/TeamTalk/IOSDuoduo/VC/LoginModule.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// DDLoginManager.h -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import <Foundation/Foundation.h> -@class DDHttpServer,DDTokenManager,DDMsgServer,DDTcpServer,DDLoginServer,DDUserEntity; -@interface LoginModule : NSObject -{ - DDHttpServer* _httpServer; - DDMsgServer* _msgServer; - DDTcpServer* _tcpServer; - DDLoginServer* _loginServer; -} - -@property (nonatomic,readonly)NSString* token; - -+ (instancetype)instance; - -/** - * 登录接口,整个登录流程 - * - * @param name 用户名 - * @param password 密码 - */ -- (void)loginWithUsername:(NSString*)name password:(NSString*)password success:(void(^)(DDUserEntity* user))success failure:(void(^)(NSString* error))failure; -/** - * 离线 - */ -- (void)offlineCompletion:(void(^)())completion; -- (void)reloginSuccess:(void(^)())success failure:(void(^)(NSString* error))failure; -@end diff --git a/TeamTalk/IOSDuoduo/VC/LoginModule.m b/TeamTalk/IOSDuoduo/VC/LoginModule.m deleted file mode 100644 index dfda362..0000000 --- a/TeamTalk/IOSDuoduo/VC/LoginModule.m +++ /dev/null @@ -1,224 +0,0 @@ -// -// DDLoginManager.m -// Duoduo -// -// Created by 独嘉 on 14-4-5. -// Copyright (c) 2014年 zuoye. All rights reserved. -// - -#import "LoginModule.h" -#import "DDHttpServer.h" -#import "DDTokenManager.h" -#import "DDMsgServer.h" -#import "DDTcpServer.h" -#import "SpellLibrary.h" -#import "DDUserModule.h" -#import "DDLoginServer.h" -#import "DDUserEntity.h" -#import "DDClientState.h" -#import "RuntimeStatus.h" -#import "ContactsModule.h" -#import "DDDatabaseUtil.h" -#import "DDAllUserAPI.h" -#import "ReceiveKickoffAPI.h" -@interface LoginModule(privateAPI) - -- (void)p_registerAPI; -- (void)reloginAllFlowSuccess:(void(^)())success failure:(void(^)())failure; - -@end - -@implementation LoginModule -{ - NSString* _lastLoginUser; //最后登录的用户ID - NSString* _lastLoginPassword; - NSString* _lastLoginUserName; - NSString* _dao; - - BOOL _relogining; -} -+ (instancetype)instance -{ - static LoginModule *g_LoginManager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_LoginManager = [[LoginModule alloc] init]; - }); - return g_LoginManager; -} - -- (id)init -{ - self = [super init]; - if (self) - { - _httpServer = [[DDHttpServer alloc] init]; - _msgServer = [[DDMsgServer alloc] init]; - _tcpServer = [[DDTcpServer alloc] init]; - _loginServer = [[DDLoginServer alloc] init]; - _relogining = NO; - [self p_registerAPI]; - } - return self; -} - - -#pragma mark Public API -- (void)loginWithUsername:(NSString*)name password:(NSString*)password success:(void(^)(DDUserEntity* loginedUser))success failure:(void(^)(NSString* error))failure -{ - //连接登录服务器 - [_tcpServer loginTcpServerIP:SERVER_IP port:SERVER_PORT Success:^{ - //获取消息服务器ip - [_loginServer connectLoginServerSuccess:^(NSDictionary *loginEntity) { - //连接消息服务器 - [_tcpServer loginTcpServerIP:[loginEntity objectForKey:@"ip2"] port:[[loginEntity objectForKey:@"port"] intValue] Success:^{ - [_msgServer checkUserID:name Pwd:password token:nil success:^(id object) { - _lastLoginPassword=password; - _lastLoginUserName=name; - DDClientState* clientState = [DDClientState shareInstance]; - clientState.userState=DDUserOnline; - _relogining=YES; - DDUserEntity* user = [DDUserEntity dicToUserEntity:(NSDictionary *)object]; - TheRuntime.user=user; - [TheRuntime updateData]; - [DDNotificationHelp postNotification:DDNotificationUserLoginSuccess userInfo:nil object:user]; - [self p_loadAllUsersCompletion:^{ - - }]; - success(user); - [ContactsModule getDepartmentData:^(id response) { - if (response) { - NSArray *array = (NSArray *)response; - - [[DDDatabaseUtil instance] insertDepartments:array completion:^(NSError *error) { - if (!error) { - NSLog(@"插入组织架构完成"); - } - }]; - } - }]; - - - } failure:^(id object) { - DDLog(@"登录验证失败"); - - failure(@"登录验证失败"); - }]; - } failure:^{ - DDLog(@"连接消息服务器出错"); - - failure(@"连接消息服务器出错"); - }]; - } failure:^{ - DDLog(@"获取消息服务器IP出错"); - - failure(@"获取消息服务器IP出错"); - }]; - } failure:^{ - DDLog(@"连接登录服务器失败"); - - failure(@"连接登录服务器失败"); - }]; -} - -- (void)reloginSuccess:(void(^)())success failure:(void(^)(NSString* error))failure -{ - - [_tcpServer loginTcpServerIP:SERVER_IP port:SERVER_PORT Success:^{ - //获取消息服务器ip - [_loginServer connectLoginServerSuccess:^(NSDictionary *loginEntity) { - //连接消息服务器 - [_tcpServer loginTcpServerIP:[loginEntity objectForKey:@"ip2"] port:[[loginEntity objectForKey:@"port"] intValue] Success:^{ - - [_msgServer checkUserID:_lastLoginUserName Pwd:_lastLoginPassword token:nil success:^(id object) { - DDClientState* clientState = [DDClientState shareInstance]; - clientState.userState=DDUserOnline; - success(); - } failure:^(id object) { - DDLog(@"登录验证失败"); - - failure(@"登录验证失败"); - }]; - } failure:^{ - DDLog(@"连接消息服务器出错"); - - failure(@"连接消息服务器出错"); - }]; - } failure:^{ - DDLog(@"获取消息服务器IP出错"); - - failure(@"获取消息服务器IP出错"); - }]; - } failure:^{ - DDLog(@"连接登录服务器失败"); - - failure(@"连接登录服务器失败"); - }]; - - - -} - -- (void)offlineCompletion:(void(^)())completion -{ - [_tcpServer disconnect]; - completion(); -} - -//#pragma mark - PrivateAPI -//- (void)reloginAllFlowSuccess:(void(^)())success failure:(void(^)())failure -//{ -// [self loginWithUsername:_lastLoginUserName password:_lastLoginPassword success:^(UserEntity *loginedUser) { -// success(); -// } failure:^(NSString *error) { -// failure(); -// }]; -//} -// -- (void)p_registerAPI -{ - ReceiveKickoffAPI* api = [[ReceiveKickoffAPI alloc] init]; - [api registerAPIInAPIScheduleReceiveData:^(id object, NSError *error) { - - [DDClientState shareInstance].userState = DDUserKickout; - }]; -} -/** - * 登录成功后获取所有用户 - * - * @param completion 异步执行的block - */ -- (void)p_loadAllUsersCompletion:(void(^)())completion -{ - - DDAllUserAPI* api = [[DDAllUserAPI alloc] init]; - [api requestWithObject:nil Completion:^(id response, NSError *error) { - if (!error) - { - if ([response count] !=0) { - [[DDSundriesCenter instance] pushTaskToSerialQueue:^{ - //写入数据库 - [response enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [[SpellLibrary instance] addSpellForObject:obj]; - }]; - [[DDDatabaseUtil instance] insertAllUser:response completion:^(NSError *error) { - NSLog(@"插入全部用户成功"); - }]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - }]; - - } - - } - else - { - [self p_loadAllUsersCompletion:completion]; - DDLog(@"error:%@",[error domain]); - } - }]; - -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/MainViewControll.h b/TeamTalk/IOSDuoduo/VC/MainViewControll.h deleted file mode 100644 index 8becd99..0000000 --- a/TeamTalk/IOSDuoduo/VC/MainViewControll.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MainViewControll.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "ContactsViewController.h" -@interface MainViewControll : UITabBarController<UITabBarControllerDelegate,UITabBarDelegate> -@property(strong)UINavigationController *nv1; -@property(strong)ContactsViewController *contacts; --(void)setselectIndex:(int)index; -@end diff --git a/TeamTalk/IOSDuoduo/VC/MainViewControll.m b/TeamTalk/IOSDuoduo/VC/MainViewControll.m deleted file mode 100644 index cb8c64c..0000000 --- a/TeamTalk/IOSDuoduo/VC/MainViewControll.m +++ /dev/null @@ -1,85 +0,0 @@ -// -// MainViewControll.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "MainViewControll.h" -#import "RecentUsersViewController.h" -#import "ContactsViewController.h" -#import "MyProfileViewControll.h" -#import "DDClientStateMaintenanceManager.h" -#import "DDGroupModule.h" -#import "LoginViewController.h" -#import "std.h" -@interface MainViewControll () -@property(strong) UINavigationController *nv2; -@end - -@implementation MainViewControll - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.nv1= [[UINavigationController alloc] initWithRootViewController:[RecentUsersViewController shareInstance]]; - - - UIImage* conversationSelected = [[UIImage imageNamed:@"conversation_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; - - self.nv1.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"聊天" image:[UIImage imageNamed:@"conversation"] selectedImage:conversationSelected]; - self.nv1.tabBarItem.tag=0;//26 140 242 - [self.nv1.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObject:RGB(26, 140, 242) forKey:UITextAttributeTextColor] forState:UIControlStateSelected]; - - UIImage* contactSelected = [[UIImage imageNamed:@"contact_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; - - UINavigationController *nv2= [[UINavigationController alloc] initWithRootViewController:[ContactsViewController new]]; - nv2.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"通讯录" image:[UIImage imageNamed:@"contact"] selectedImage:contactSelected]; - nv2.tabBarItem.tag=1; - [nv2.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObject:RGB(26, 140, 242) forKey:UITextAttributeTextColor] forState:UIControlStateSelected]; - - - UIImage* myProfileSelected = [[UIImage imageNamed:@"myprofile_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; - UINavigationController *nv4= [[UINavigationController alloc] initWithRootViewController:[MyProfileViewControll new]]; - nv4.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"我" image:[UIImage imageNamed:@"myprofile"] selectedImage:myProfileSelected]; - nv4.tabBarItem.tag=3; - - [nv4.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObject:RGB(26, 140, 242) forKey:UITextAttributeTextColor] forState:UIControlStateSelected]; - - - self.viewControllers=@[self.nv1,nv2,nv4]; - self.delegate=self; - self.title=@"Team Talk"; - - // Do any additional setup after loading the view from its nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item -{ - if ([self.nv1.tabBarItem isEqual:item]) - { - if ([[[RecentUsersViewController shareInstance].tableView visibleCells] count] > 0) - { - [[RecentUsersViewController shareInstance].tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; - } - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/MainViewControll.xib b/TeamTalk/IOSDuoduo/VC/MainViewControll.xib deleted file mode 100644 index 4bb7a06..0000000 --- a/TeamTalk/IOSDuoduo/VC/MainViewControll.xib +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6245" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MainViewControll"> - <connections> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - </view> - </objects> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.h b/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.h deleted file mode 100644 index 9628207..0000000 --- a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MyProfileViewControll.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface MyProfileViewControll : UIViewController - @property(strong)IBOutlet UIView *profileView; -@property(weak)IBOutlet UILabel *nickName; -@property(weak)IBOutlet UILabel *realName; -@property(weak)IBOutlet UIImageView *avatar; -@property(weak)IBOutlet UIView *view1; -@property(weak)IBOutlet UIView *view2; --(IBAction)goPersonalProfile; --(IBAction)goToSettingPage:(id)sender; -@end diff --git a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.m b/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.m deleted file mode 100644 index 3256bd4..0000000 --- a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// MyProfileViewControll.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-15. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "MyProfileViewControll.h" -#import "PublicProfileViewControll.h" -#import "RuntimeStatus.h" -#import "SettingViewController.h" -#import "UIImageView+WebCache.h" -#import "DDUserDetailInfoAPI.h" -@interface MyProfileViewControll () - -@end - -@implementation MyProfileViewControll - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.title=@"关于我"; - self.profileView.userInteractionEnabled=true; - UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(goPersonalProfile)]; - [self.profileView addGestureRecognizer:singleTap]; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [self.avatar sd_setImageWithURL:[NSURL URLWithString:[RuntimeStatus instance].user.avatar] placeholderImage:placeholder]; - - DDUserDetailInfoAPI* detailInfoAPI = [[DDUserDetailInfoAPI alloc] init]; - [detailInfoAPI requestWithObject:@[[RuntimeStatus instance].user.objID ] Completion:^(id response, NSError *error) { - if ([response count] > 0) - { - NSDictionary* userInfo = response[0]; - DDUserEntity *newUser = [DDUserEntity dicToUserEntity:userInfo]; - if (newUser) { - self.realName.text=newUser.name; - self.nickName.text=newUser.nick; - } - } - else - { - } - }]; - - [self.view1.layer setBorderColor:RGB(199, 199, 196).CGColor]; - [self.view1.layer setBorderWidth:0.5]; - [self.view2.layer setBorderColor:RGB(199, 199, 196).CGColor]; - [self.view2.layer setBorderWidth:0.5]; - - // Do any additional setup after loading the view from its nib. -} -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:NO]; - -} - --(IBAction)goToSettingPage:(id)sender -{ - [self.navigationController pushViewController:[SettingViewController new] animated:YES]; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - --(IBAction)goPersonalProfile -{ - PublicProfileViewControll *public = [PublicProfileViewControll new] ; - public.user = [RuntimeStatus instance].user; - [self.navigationController pushViewController:public animated:YES]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.xib b/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.xib deleted file mode 100644 index 22161fa..0000000 --- a/TeamTalk/IOSDuoduo/VC/MyProfileViewControll.xib +++ /dev/null @@ -1,99 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyProfileViewControll"> - <connections> - <outlet property="avatar" destination="iG4-LE-SVh" id="R6s-eF-Hx3"/> - <outlet property="nickName" destination="cXB-Pu-voK" id="LDe-qS-wlo"/> - <outlet property="profileView" destination="ahR-NN-qqV" id="878-1m-tGR"/> - <outlet property="realName" destination="RJo-6P-o4p" id="1gf-ac-S1M"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - <outlet property="view1" destination="ahR-NN-qqV" id="dz2-V9-GfM"/> - <outlet property="view2" destination="Klp-Jo-Yjc" id="fQh-yV-ren"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Klp-Jo-Yjc"> - <rect key="frame" x="-1" y="190" width="321" height="45"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="setting.png" translatesAutoresizingMaskIntoConstraints="NO" id="jJO-h1-29s"> - <rect key="frame" x="14" y="8" width="30" height="30"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="jiantou.png" translatesAutoresizingMaskIntoConstraints="NO" id="Icz-72-x06"> - <rect key="frame" x="292" y="16" width="13" height="13"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="设置" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tja-Cx-xJu"> - <rect key="frame" x="55" y="12" width="42" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <nil key="highlightedColor"/> - </label> - <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="beQ-8j-ar4"> - <rect key="frame" x="0.0" y="0.0" width="322" height="50"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> - <state key="normal"> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="goToSettingPage:" destination="-1" eventType="touchUpInside" id="Lb6-va-nxj"/> - </connections> - </button> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - </view> - <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ahR-NN-qqV"> - <rect key="frame" x="-1" y="78" width="321" height="95"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="yuanqu.png" translatesAutoresizingMaskIntoConstraints="NO" id="iG4-LE-SVh"> - <rect key="frame" x="14" y="15" width="64" height="64"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cXB-Pu-voK"> - <rect key="frame" x="95" y="27" width="148" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RJo-6P-o4p"> - <rect key="frame" x="95" y="53" width="157" height="24"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="1" colorSpace="calibratedRGB"/> - <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> - </label> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="jiantou.png" translatesAutoresizingMaskIntoConstraints="NO" id="m1W-vC-Ppv"> - <rect key="frame" x="292" y="40" width="13" height="13"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - </view> - </subviews> - <color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.93725490196078431" alpha="1" colorSpace="calibratedRGB"/> - <accessibility key="accessibilityConfiguration"> - <accessibilityTraits key="traits" none="YES" button="YES" notEnabled="YES"/> - </accessibility> - <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> - <resources> - <image name="jiantou.png" width="26" height="26"/> - <image name="setting.png" width="58" height="58"/> - <image name="yuanqu.png" width="76" height="77"/> - </resources> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.h b/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.h deleted file mode 100644 index 70bc951..0000000 --- a/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NetwrokStatusNotifyUI.h -// TeamTalk -// -// Created by Michael Scofield on 2014-10-13. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface NetwrokStatusNotifyUI : UIView -+ (void)showWithStatus:(NSString*)status; -+ (void)showErrorWithStatus:(NSString*)status; -+ (void)showSuccessWithStatus:(NSString*)status; -+ (void)dismiss; -@end diff --git a/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.m b/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.m deleted file mode 100644 index 918aa25..0000000 --- a/TeamTalk/IOSDuoduo/VC/NetwrokStatusNotifyUI.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// NetwrokStatusNotifyUI.m -// TeamTalk -// -// Created by Michael Scofield on 2014-10-13. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "NetwrokStatusNotifyUI.h" -#import "std.h" -@interface NetwrokStatusNotifyUI() -@property (nonatomic, strong,readonly) UIWindow *overlayWindow; -@property (nonatomic, strong,readonly) UIView *topBar; -@property (nonatomic, strong) UILabel *stringLabel; -@end -@implementation NetwrokStatusNotifyUI -@synthesize topBar, overlayWindow, stringLabel; - -+ (NetwrokStatusNotifyUI*)sharedView { - static dispatch_once_t once; - static NetwrokStatusNotifyUI *sharedView; - dispatch_once(&once, ^ { sharedView = [[NetwrokStatusNotifyUI alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; }); - return sharedView; -} - -+ (void)showErrorWithStatus:(NSString*)status { - [[NetwrokStatusNotifyUI sharedView] showWithStatus:status barColor:[UIColor blackColor] textColor:[UIColor whiteColor]]; - [NetwrokStatusNotifyUI performSelector:@selector(dismiss) withObject:self afterDelay:2.0 ]; -} - -+ (void)dismiss { - [[NetwrokStatusNotifyUI sharedView] dismiss]; -} - -- (id)initWithFrame:(CGRect)frame { - - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = NO; - self.backgroundColor = [UIColor clearColor]; - self.alpha = 0; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - } - return self; -} - -- (void)showWithStatus:(NSString *)status barColor:(UIColor*)barColor textColor:(UIColor*)textColor{ - if(!self.superview) - [self.overlayWindow addSubview:self]; - [self.overlayWindow setHidden:NO]; - [self.topBar setHidden:NO]; - self.topBar.backgroundColor = barColor; - NSString *labelText = status; - CGRect labelRect = CGRectZero; - CGFloat stringWidth = 0; - CGFloat stringHeight = 0; - if(labelText) { - CGSize stringSize = [labelText sizeWithFont:self.stringLabel.font constrainedToSize:CGSizeMake(self.topBar.frame.size.width, self.topBar.frame.size.height)]; - stringWidth = stringSize.width; - stringHeight = stringSize.height; - labelRect = CGRectMake((self.topBar.frame.size.width / 2) - (stringWidth / 2), 0, stringWidth, stringHeight); - } - self.stringLabel.frame = labelRect; - self.stringLabel.alpha = 0.0; - self.stringLabel.hidden = NO; - self.stringLabel.text = labelText; - self.stringLabel.textColor = textColor; - [UIView animateWithDuration:0.4 animations:^{ - self.stringLabel.alpha = 1.0; - }]; - [self setNeedsDisplay]; -} - -- (void) dismiss -{ - [UIView animateWithDuration:0.4 animations:^{ - self.stringLabel.alpha = 0.0; - } completion:^(BOOL finished) { - [topBar removeFromSuperview]; - topBar = nil; - - [overlayWindow removeFromSuperview]; - overlayWindow = nil; - }]; -} - -- (UIWindow *)overlayWindow { - if(!overlayWindow) { - overlayWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - overlayWindow.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - overlayWindow.backgroundColor = [UIColor clearColor]; - overlayWindow.userInteractionEnabled = NO; - overlayWindow.windowLevel = UIWindowLevelStatusBar; - } - return overlayWindow; -} - -- (UIView *)topBar { - if(!topBar) { - topBar = [[UIView alloc] initWithFrame:CGRectMake(0, 20, overlayWindow.frame.size.width, 20.0)]; - [overlayWindow addSubview:topBar]; - } - return topBar; -} - -- (UILabel *)stringLabel { - if (stringLabel == nil) { - stringLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - stringLabel.textColor = [UIColor colorWithRed:191.0/255.0 green:191.0/255.0 blue:191.0/255.0 alpha:1.0]; - stringLabel.backgroundColor = [UIColor clearColor]; - stringLabel.adjustsFontSizeToFitWidth = YES; - stringLabel.textAlignment = NSTextAlignmentCenter; - stringLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters; - stringLabel.font = [UIFont boldSystemFontOfSize:14.0]; - stringLabel.shadowColor = [UIColor blackColor]; - stringLabel.shadowOffset = CGSizeMake(0, -1); - stringLabel.numberOfLines = 0; - } - - // if(!stringLabel.superview) - [self.topBar addSubview:stringLabel]; - - return stringLabel; -} - -@end - diff --git a/TeamTalk/IOSDuoduo/VC/Photo.h b/TeamTalk/IOSDuoduo/VC/Photo.h deleted file mode 100644 index fdda92e..0000000 --- a/TeamTalk/IOSDuoduo/VC/Photo.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDPhoto.h -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface Photo : NSObject -@property(nonatomic,strong)NSString *localPath; -@property(nonatomic,strong)NSString *resultUrl; -@property(nonatomic,assign)CGImageRef imageRef; -@property(nonatomic,strong)UIImage* image; -@end diff --git a/TeamTalk/IOSDuoduo/VC/Photo.m b/TeamTalk/IOSDuoduo/VC/Photo.m deleted file mode 100644 index 6afc3e9..0000000 --- a/TeamTalk/IOSDuoduo/VC/Photo.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// DDPhoto.m -// IOSDuoduo -// -// Created by 东邪 on 14-6-6. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "Photo.h" - -@implementation Photo -- (instancetype)init -{ - self = [super init]; - if (self) { - self.localPath=nil; - self.resultUrl=nil; - self.imageRef = nil; - self.image= nil; - } - return self; -} -- (void)dealloc -{ - self.localPath=nil; - self.resultUrl=nil; - CGImageRelease(self.imageRef); - self.image= nil; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/PhotosCache.h b/TeamTalk/IOSDuoduo/VC/PhotosCache.h deleted file mode 100644 index 404bb9b..0000000 --- a/TeamTalk/IOSDuoduo/VC/PhotosCache.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// DDPhotosCache.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -typedef void(^cacheblock)(BOOL isFinished); -@interface PhotosCache : NSObject -+(void)calculatePhotoSizeWithCompletionBlock:(void (^)(NSUInteger fileCount, NSUInteger totalSize))completionBlock; -+ (PhotosCache *)sharedPhotoCache; -- (void)storePhoto:(NSData *)photos forKey:(NSString *)key toDisk:(BOOL)toDisk ; -- (NSData *)photoFromDiskCacheForKey:(NSString *)key; -- (void)removePhotoForKey:(NSString *)key; -- (NSString *)defaultCachePathForKey:(NSString *)key; -- (NSUInteger)getSize; -- (int)getDiskCount; -- (void)removePhotoFromNSCacheForKey:(NSString *)key; -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(void (^)(NSData *voice))doneBlock; --(NSString *)getKeyName; --(void)clearAllCache; --(NSMutableArray *)getAllImageCache; -@end diff --git a/TeamTalk/IOSDuoduo/VC/PhotosCache.m b/TeamTalk/IOSDuoduo/VC/PhotosCache.m deleted file mode 100644 index 51d4b38..0000000 --- a/TeamTalk/IOSDuoduo/VC/PhotosCache.m +++ /dev/null @@ -1,257 +0,0 @@ -// -// DDCacheManager.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-29. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "PhotosCache.h" -#import "SDImageCache.h" -#import "std.h" -#import "NSString+Additions.h" -#import <CommonCrypto/CommonDigest.h> -#import "DDSundriesCenter.h" - -@interface PhotosCache() -@property (readonly, nonatomic) dispatch_queue_t ioQueue; -@property(nonatomic,retain) NSFileManager *fileManager; -@property (retain, nonatomic) NSCache *memCache; -@end -@implementation PhotosCache - - -+(void)calculatePhotoSizeWithCompletionBlock:(void (^)(NSUInteger fileCount, NSUInteger totalSize))completionBlock -{ - NSURL *diskCacheURL = [NSURL fileURLWithPath:PhotosMessageDir isDirectory:YES]; - [ [DDSundriesCenter instance] pushTaskToSerialQueue:^{ - NSUInteger fileCount = 0; - NSUInteger totalSize = 0; - NSFileManager *fileManager = [[NSFileManager alloc] init]; - NSDirectoryEnumerator *fileEnumerator = [fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:@[NSFileSize] - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - for (NSURL *fileURL in fileEnumerator) { - NSNumber *fileSize; - [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL]; - totalSize += [fileSize unsignedIntegerValue]; - fileCount += 1; - } - - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(fileCount, totalSize); - }); - } - }]; - -} --(NSData *)photoFromDiskCacheForKey:(NSString *)key -{ - NSData *photoData = [self photoFromMemoryCacheForKey:key]; - if (photoData) { - return photoData; - } - // Second check the disk cache... - NSData *diskphotoData = [self diskPhotoForKey:key]; - if (diskphotoData) { - [self.memCache setObject:diskphotoData forKey:key ]; - } - return diskphotoData; -} -+ (PhotosCache *)sharedPhotoCache -{ - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - - }); - return instance; -} -- (instancetype)init -{ - self = [super init]; - if (self) { - _ioQueue = dispatch_queue_create("com.mogujie.DDPhotosCache", DISPATCH_QUEUE_SERIAL); - _memCache = [NSCache new]; - - dispatch_sync(_ioQueue, ^{ - _fileManager = [NSFileManager new]; - }); - - } - return self; -} -- (void)storePhoto:(NSData *)data forKey:(NSString *)key -{ - [self storePhoto:data forKey:key toDisk:YES]; -} - -- (void)removePhotoForKey:(NSString *)key -{ - [self.memCache removeObjectForKey:key]; - - dispatch_async(self.ioQueue, ^{ - [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil]; - }); - - -} -- (void)removePhotoFromNSCacheForKey:(NSString *)key -{ - [self.memCache removeObjectForKey:key]; - -} -- (NSUInteger)getSize { - __block NSUInteger size = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:PhotosMessageDir]; - for (NSString *fileName in fileEnumerator) { - NSString *filePath = [PhotosMessageDir stringByAppendingPathComponent:fileName]; - NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil]; - size += [attrs fileSize]; - } - }); - return size; -} -- (int)getDiskCount { - __block int count = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:PhotosMessageDir]; - for (__unused NSString *fileName in fileEnumerator) { - count += 1; - } - }); - return count; -} -- (void)storePhoto:(NSData *)photo forKey:(NSString *)key toDisk:(BOOL)toDisk { - if (!photo || !key) { - return; - } - [self.memCache setObject:photo forKey:key ]; - - if (toDisk) { - dispatch_async(self.ioQueue, ^{ - if (photo) { - if (![_fileManager fileExistsAtPath:PhotosMessageDir]) { - [_fileManager createDirectoryAtPath:PhotosMessageDir withIntermediateDirectories:YES attributes:nil error:NULL]; - } - - [_fileManager createFileAtPath:[self defaultCachePathForKey:key] contents:photo attributes:nil]; - } - }); - } -} -- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path { - NSString *filename = [self cachedFileNameForKey:key]; - return [path stringByAppendingPathComponent:filename]; -} - -- (NSString *)defaultCachePathForKey:(NSString *)key { - return [self cachePathForKey:key inPath:PhotosMessageDir]; -} - -- (NSString *)cachedFileNameForKey:(NSString *)key { - const char *str = [key UTF8String]; - if (str == NULL) { - str = ""; - } - unsigned char r[CC_MD5_DIGEST_LENGTH]; - CC_MD5(str, (CC_LONG)strlen(str), r); - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]]; - - return filename; -} -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(void (^)(NSData *photo))doneBlock { - NSOperation *operation = [NSOperation new]; - - if (!doneBlock) return nil; - - if (!key) { - doneBlock(nil); - return nil; - } - - // First check the in-memory cache... - NSData *photo = [self photoFromMemoryCacheForKey:key]; - if (photo) { - doneBlock(photo); - return nil; - } - - dispatch_async(self.ioQueue, ^{ - if (operation.isCancelled) { - return; - } - - @autoreleasepool { - NSData *diskPhotos = [self diskPhotoForKey:key]; - if (diskPhotos) { - - [self.memCache setObject:diskPhotos forKey:key]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - doneBlock(diskPhotos); - }); - } - }); - - return operation; -} -- (NSData *)photoFromMemoryCacheForKey:(NSString *)key { - return [self.memCache objectForKey:key]; -} -- (NSData *)diskPhotoForKey:(NSString *)key { - NSData *data = [self diskPhotosDataBySearchingAllPathsForKey:key]; - if (data) { - return data; - } - else { - return nil; - } -} -- (NSData *)diskPhotosDataBySearchingAllPathsForKey:(NSString *)key { - NSString *defaultPath = [self defaultCachePathForKey:key]; - NSData *data = [NSData dataWithContentsOfFile:defaultPath]; - if (data) { - return data; - } - return nil; -} --(NSString *)getKeyName -{ - NSDateFormatter * formatter = [[NSDateFormatter alloc ] init]; - [formatter setDateFormat:@"YYYYMMddhhmmssSSS"]; - NSString *date = [formatter stringFromDate:[NSDate date]]; - NSString *timeLocal = [[NSString alloc] initWithFormat:@"%@", date]; - return [NSString stringWithFormat:@"%@_send",timeLocal]; -} --(NSMutableArray *)getAllImageCache -{ - __block NSMutableArray *array = [NSMutableArray new]; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:PhotosMessageDir]; - for (__unused NSString *fileName in fileEnumerator) { - - [array addObject:[NSString stringWithFormat:@"%@/%@",PhotosMessageDir,fileName]]; - - } - }); - return array; -} --(void)clearAllCache -{ - [self.memCache removeAllObjects]; - NSArray *allimage = [self getAllImageCache]; - [allimage enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *path = (NSString *)obj; - [_fileManager removeItemAtPath:path error:nil]; - - }]; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.h b/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.h deleted file mode 100644 index 00af005..0000000 --- a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PublieProfileViewControll.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class DDUserEntity; -@interface PublicProfileViewControll : UIViewController<UITableViewDataSource,UITableViewDelegate> -@property(strong)DDUserEntity *user; -@end diff --git a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.m b/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.m deleted file mode 100644 index 1901410..0000000 --- a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.m +++ /dev/null @@ -1,217 +0,0 @@ -// -// PublieProfileViewControll.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-16. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "PublicProfileViewControll.h" -#import "DDUserEntity.h" -#import "DDSessionEntity.h" -#import "UIImageView+WebCache.h" -#import "ContactsModule.h" -#import "UIImageView+WebCache.h" -#import "ChattingMainViewController.h" -#import "RuntimeStatus.h" -#import "DDUserDetailInfoAPI.h" -#import "DDDatabaseUtil.h" -#import "DDAppDelegate.h" -#import "DDUserModule.h" -@interface PublicProfileViewControll () -@property(weak)IBOutlet UILabel *nickName; -@property(weak)IBOutlet UILabel *realName; -@property(weak)IBOutlet UIImageView *avatar; -@property(weak)IBOutlet UITableView *tableView; -@property(weak)IBOutlet UIButton *conversationBtn; --(IBAction)startConversation:(id)sender; -@end - -@implementation PublicProfileViewControll - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.nickName.text = self.user.nick; - self.realName.text = self.user.name; - if([self.user.objID isEqualToString:TheRuntime.user.objID]) - { - [self.conversationBtn setHidden:YES]; - }else - { - [self.conversationBtn setHidden:NO]; - } - __block NSString *departmentName = @" "; - - DDUserDetailInfoAPI* detailInfoAPI = [[DDUserDetailInfoAPI alloc] init]; - [detailInfoAPI requestWithObject:@[self.user.objID] Completion:^(id response, NSError *error) { - if ([response count] > 0) - { - NSDictionary* userInfo = response[0]; - DDUserEntity *newUser = [DDUserEntity dicToUserEntity:userInfo]; - if (newUser) { - self.user=newUser; - self.nickName.text=newUser.nick; - self.realName.text=newUser.name; - [self.tableView reloadData]; - } - } - else - { - } - }]; - [self initData]; - - - // Do any additional setup after loading the view from its nib. -} - --(void)initData -{ - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [self.avatar sd_setImageWithURL:[NSURL URLWithString:self.user.avatar] placeholderImage:placeholder]; - [self.avatar setClipsToBounds:YES]; - [self.avatar.layer setCornerRadius:2.0]; - [self.avatar setUserInteractionEnabled:YES]; - if (![self.user.objID isEqualToString:TheRuntime.user.objID]) { - UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"收藏" style:UIBarButtonItemStyleBordered target:self action:@selector(favThisContact)]; - self.navigationItem.rightBarButtonItem=barButtonItem; - - } - [self.tableView setContentInset:UIEdgeInsetsMake(-64, 0, 0, 0)]; - self.conversationBtn.layer.masksToBounds = YES; - self.conversationBtn.layer.cornerRadius = 4; -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} --(void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - [self.tabBarController.tabBar setHidden:NO]; -} --(void)favThisContact -{ - [ContactsModule favContact:self.user]; -} -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 5; -} --(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"moreInfoCell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } -// if (indexPath.row == 0) { -// cell.textLabel.text=self.user.department; -// } - switch (indexPath.row) { - case 0: - { - NSString *string = [NSString stringWithFormat:@"部门 %@",self.user.department]; - [cell.textLabel setText:string]; - cell.userInteractionEnabled = NO; - - } - break; - case 1: - { - NSString *string = [NSString stringWithFormat:@"手机号码 %@",self.user.telphone]; - [cell.textLabel setText:string]; - } - break; - case 2: - { - NSString *string = [NSString stringWithFormat:@"邮箱地址 %@",self.user.email]; - [cell.textLabel setText:string]; - cell.userInteractionEnabled = NO; - } - break; - default: - break; - } - - return cell; -} --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - switch (indexPath.row) { - case 1: - [self callPhoneNum:self.user.telphone]; - break; - case 2: - [self sendEmail:self.user.email]; - break; - - default: - break; - } -} --(void)callPhoneNum:(NSString *)phoneNum -{ - if (!phoneNum) { - return; - } - NSString *stringURL =[NSString stringWithFormat:@"tel:%@",phoneNum]; - NSURL *url = [NSURL URLWithString:stringURL]; - [[UIApplication sharedApplication] openURL:url]; -} --(void)sendEmail:(NSString *)address -{ - if (!address.length) { - return; - } - NSString *stringURL =[NSString stringWithFormat:@"mailto:%@",address]; - NSURL *url = [NSURL URLWithString:stringURL]; - [[UIApplication sharedApplication] openURL:url]; -} --(IBAction)startConversation:(id)sender -{ - DDSessionEntity* session = [[DDSessionEntity alloc] initWithSessionID:self.user.objID type:SESSIONTYPE_SINGLE]; - [session setSessionName:self.user.nick]; - [[ChattingMainViewController shareInstance] showChattingContentForSession:session]; - NSLog(@"%@...",TheAppDel.nv); - if ([[self.navigationController viewControllers] containsObject:[ChattingMainViewController shareInstance]]) { - [self.navigationController popToViewController:[ChattingMainViewController shareInstance] animated:YES]; - }else - { - [self.navigationController pushViewController:[ChattingMainViewController shareInstance] animated:YES]; - - } - - -} - -/*设置标题头的宽度*/ --(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section -{ - return 0; -} -/*设置标题尾的宽度*/ --(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section -{ - return 0; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end diff --git a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.xib b/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.xib deleted file mode 100644 index cd61515..0000000 --- a/TeamTalk/IOSDuoduo/VC/PublicProfileViewControll.xib +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PublicProfileViewControll"> - <connections> - <outlet property="avatar" destination="KAe-Qc-WUt" id="xcD-F5-gSD"/> - <outlet property="conversationBtn" destination="2tl-1I-9DR" id="O49-Mc-y9K"/> - <outlet property="nickName" destination="MJB-Fg-vug" id="DGm-cJ-Kuu"/> - <outlet property="realName" destination="SvW-GP-RMx" id="wd3-Dz-K45"/> - <outlet property="tableView" destination="B9B-xE-rB7" id="VoA-vs-ORm"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" style="plain" separatorStyle="default" rowHeight="40" sectionHeaderHeight="22" sectionFooterHeight="22" id="B9B-xE-rB7"> - <rect key="frame" x="0.0" y="207" width="320" height="119"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> - <connections> - <outlet property="dataSource" destination="-1" id="FHC-Vw-Bb0"/> - <outlet property="delegate" destination="-1" id="5yX-gH-N98"/> - </connections> - </tableView> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="2tl-1I-9DR"> - <rect key="frame" x="10" y="422" width="300" height="42"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="0.13333333333333333" green="0.61568627450980395" blue="0.94117647058823528" alpha="1" colorSpace="calibratedRGB"/> - <state key="normal" title="发送消息"> - <color key="titleColor" cocoaTouchSystemColor="tableCellGroupedBackgroundColor"/> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="startConversation:" destination="-1" eventType="touchUpInside" id="Lzo-WQ-tdh"/> - </connections> - </button> - <view contentMode="scaleToFill" id="UMq-6L-aUp"> - <rect key="frame" x="0.0" y="78" width="320" height="95"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="yuanqu.png" id="KAe-Qc-WUt"> - <rect key="frame" x="14" y="15" width="64" height="64"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="MJB-Fg-vug"> - <rect key="frame" x="95" y="24" width="184" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SvW-GP-RMx"> - <rect key="frame" x="95" y="54" width="184" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="1" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - </view> - </subviews> - <color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.93725490196078431" alpha="1" colorSpace="calibratedRGB"/> - <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> - <resources> - <image name="yuanqu.png" width="76" height="77"/> - </resources> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.h b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.h deleted file mode 100644 index 619f0f1..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// DDRecentUserCell.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "DDGroupEntity.h" -#import "DDUserEntity.h" -@interface RecentUserCell : UITableViewCell -@property (weak)IBOutlet UIImageView* avatarImageView; -@property (weak)IBOutlet UILabel* nameLabel; -@property (weak)IBOutlet UILabel* dateLabel; -@property (weak)IBOutlet UILabel* lastmessageLabel; -@property (weak)IBOutlet UILabel* unreadMessageCountLabel; -@property (weak)IBOutlet UIImageView *onTopImage; -@property (assign)NSInteger time_sort; -- (void)setName:(NSString*)name; -- (void)setTimeStamp:(NSUInteger)timeStamp; -- (void)setLastMessage:(NSString*)message; -- (void)setAvatar:(NSString*)avatar; -- (void)setUnreadMessageCount:(NSUInteger)messageCount; --(void)setShowGroup:(DDGroupEntity *)group; --(void)setShowUser:(DDUserEntity *)user; -@end diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.m b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.m deleted file mode 100644 index 2809512..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.m +++ /dev/null @@ -1,300 +0,0 @@ -// -// DDRecentUserCell.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "RecentUserCell.h" -#import <SDWebImage/UIImageView+WebCache.h> -#import "NSDate+DDAddition.h" -#import "UIView+DDAddition.h" -#import "std.h" -#import "RuntimeStatus.h" -#import "DDUserEntity.h" -#import "DDMessageModule.h" -#import "GroupAvatarImage.h" -#import "DDUserModule.h" -@implementation RecentUserCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - if (selected) - { - [_nameLabel setTextColor:[UIColor whiteColor]]; - [_lastmessageLabel setTextColor:[UIColor whiteColor]]; - [_dateLabel setTextColor:[UIColor whiteColor]]; - } - else - { - [_nameLabel setTextColor:[UIColor blackColor]]; - [_lastmessageLabel setTextColor:RGB(135, 135, 135)]; - [_dateLabel setTextColor:RGB(135, 135, 135)]; - } - // Configure the view for the selected state -} - -- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated // animate between regular and highlighted state -{ - if (highlighted && self.selected) - { - [_nameLabel setTextColor:[UIColor whiteColor]]; - [_lastmessageLabel setTextColor:[UIColor whiteColor]]; - [_dateLabel setTextColor:[UIColor whiteColor]]; - } - else - { - [_nameLabel setTextColor:[UIColor blackColor]]; - [_lastmessageLabel setTextColor:RGB(135, 135, 135)]; - [_dateLabel setTextColor:RGB(135, 135, 135)]; - } -} - -#pragma mark - public -- (void)setName:(NSString*)name -{ - if (!name) - { - [_nameLabel setText:@""]; - } - else - { - [_nameLabel setText:name]; - } -} - -- (void)setTimeStamp:(NSUInteger)timeStamp -{ - NSDate* date = [NSDate dateWithTimeIntervalSince1970:timeStamp]; - NSString* dateString = [date transformToFuzzyDate]; - [_dateLabel setText:dateString]; -} - -- (void)setLastMessage:(NSString*)message -{ - if (!message) - { - [_lastmessageLabel setText:@""]; - } - else - { - [_lastmessageLabel setText:message]; - } - -} - -- (void)setAvatar:(NSString*)avatar -{ - [[_avatarImageView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [(UIView*)obj removeFromSuperview]; - }]; - - NSURL* avatarURL = [NSURL URLWithString:avatar]; - [_avatarImageView setClipsToBounds:YES]; - [_avatarImageView.layer setCornerRadius:4]; - UIImage* placeholder = [UIImage imageNamed:@"user_placeholder"]; - [_avatarImageView sd_setImageWithURL:avatarURL placeholderImage:placeholder]; -} - -- (void)setUnreadMessageCount:(NSUInteger)messageCount -{ - if (messageCount == 0) - { - [self.unreadMessageCountLabel setHidden:YES]; - } - else if (messageCount < 10) - { - [self.unreadMessageCountLabel setHidden:NO]; - CGPoint center = self.unreadMessageCountLabel.center; - NSString* title = [NSString stringWithFormat:@"%i",messageCount]; - [self.unreadMessageCountLabel setText:title]; - [self.unreadMessageCountLabel setWidth:16]; - [self.unreadMessageCountLabel setCenter:center]; - [self.unreadMessageCountLabel.layer setCornerRadius:8]; - } - else if (messageCount < 99) - { - [self.unreadMessageCountLabel setHidden:NO]; - CGPoint center = self.unreadMessageCountLabel.center; - NSString* title = [NSString stringWithFormat:@"%i",messageCount]; - [self.unreadMessageCountLabel setText:title]; - [self.unreadMessageCountLabel setWidth:25]; - [self.unreadMessageCountLabel setCenter:center]; - [self.unreadMessageCountLabel.layer setCornerRadius:8]; - } - else - { - [self.unreadMessageCountLabel setHidden:NO]; - CGPoint center = self.unreadMessageCountLabel.center; - NSString* title = @"99+"; - [self.unreadMessageCountLabel setText:title]; - [self.unreadMessageCountLabel setWidth:34]; - [self.unreadMessageCountLabel setCenter:center]; - [self.unreadMessageCountLabel.layer setCornerRadius:8]; - } -} --(void)setShowGroup:(DDGroupEntity *)group -{ - [_nameLabel setText:group.name]; - [self setTimeStamp:group.lastUpdateTime]; - - [self setLastMessage:@" "]; - if ([TheRuntime isInFixedTop:group.objID]) { - [self.onTopImage setHidden:NO]; - }else - { - [self.onTopImage setHidden:YES]; - } - - [[DDMessageModule shareInstance] getLastMessageForSessionID:group.objID block:^(DDMessageEntity *message) { - [self setTimeStamp:message.msgTime]; -#warning messagetype =3 的问题 - if ([message.sessionId isEqualToString:group.objID]) - { - if ( message.msgContentType == DDMessageTypeText ) { - [self setLastMessage:message.msgContent]; - }else if ( message.msgContentType == DDGroup_MessageTypeVoice ||message.msgContentType == DDMessageTypeVoice ) - { - [self setLastMessage:@"[语音]"]; - } - else if(message.msgContentType == DDMessageTypeImage) - { - [self setLastMessage:@"[图片]"]; - } - else - { - [self setLastMessage:message.msgContent]; - } - } - }]; - NSUInteger unreadMessageCount = [[DDMessageModule shareInstance] getUnreadMessageCountForSessionID:group.objID]; - - //assert(unreadMessageCount == 0); - [self setUnreadMessageCount:unreadMessageCount]; - [self setAvatar:@"user_placeholder"]; - - [[_avatarImageView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [(UIView*)obj removeFromSuperview]; - }]; - [_avatarImageView setImage:nil]; - [_avatarImageView setBackgroundColor:RGB(222, 224, 224)]; - NSMutableArray* avatars = [[NSMutableArray alloc] init]; - [group.groupUserIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - - UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 21, 21)]; - [imageView.layer setCornerRadius:2.0]; - [imageView setContentMode:UIViewContentModeScaleAspectFill]; - [imageView setClipsToBounds:YES]; - NSString* userID = (NSString*)obj; - [[DDUserModule shareInstance] getUserForUserID:userID Block:^(DDUserEntity *user) { - NSString* avatar = user.avatar; - NSURL* avatarURL = [[NSURL alloc] initWithString:avatar]; - [imageView sd_setImageWithURL:avatarURL placeholderImage:[UIImage imageNamed:@"user_placeholder"]]; - }]; - [avatars addObject:imageView]; - - if ([avatars count] >= 4) - { - *stop = YES; - } - }]; - if ([avatars count] == 1) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(_avatarImageView.width / 2, _avatarImageView.height / 2)]; - } - else if ([avatars count] == 2) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(_avatarImageView.width / 4 + 1, _avatarImageView.height / 2)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(_avatarImageView.width / 4 * 3, _avatarImageView.height / 2)]; - } - else if ([avatars count] == 3) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(_avatarImageView.width / 2, _avatarImageView.height / 4 + 1)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(_avatarImageView.width / 4 + 1, _avatarImageView.height / 4 * 3)]; - - UIImageView* imageView3 = avatars[2]; - [imageView3 setCenter:CGPointMake(_avatarImageView.width / 4 * 3, _avatarImageView.height / 4 * 3)]; - - } - else if ([avatars count] == 4) - { - UIImageView* imageView1 = avatars[0]; - [imageView1 setCenter:CGPointMake(_avatarImageView.width / 4 + 1, _avatarImageView.height / 4 + 1)]; - - UIImageView* imageView2 = avatars[1]; - [imageView2 setCenter:CGPointMake(_avatarImageView.width / 4 * 3, _avatarImageView.height / 4 + 1)]; - - UIImageView* imageView3 = avatars[2]; - [imageView3 setCenter:CGPointMake(_avatarImageView.width / 4 + 1, _avatarImageView.height / 4 * 3)]; - - UIImageView* imageView4 = avatars[3]; - [imageView4 setCenter:CGPointMake(_avatarImageView.width / 4 * 3, _avatarImageView.height / 4 * 3)]; - } - [avatars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [_avatarImageView addSubview:obj]; - }]; - -} --(void)setShowUser:(DDUserEntity *)user -{ - - [[_avatarImageView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - [(UIView*)obj removeFromSuperview]; - }]; - if ([user.nick length] > 0) - { - [self setName:user.nick]; - } - else - { - [self setName:user.name]; - } - [self setAvatar:user.avatar]; - [self setTimeStamp:user.lastUpdateTime]; - if ([TheRuntime isInFixedTop:user.objID]) { - [self.onTopImage setHidden:NO]; - }else - { - [self.onTopImage setHidden:YES]; - } - NSUInteger unreadMessageCount = [[DDMessageModule shareInstance] getUnreadMessageCountForSessionID:user.objID]; - - [self setUnreadMessageCount:unreadMessageCount]; - [self setLastMessage:@" "]; - [[DDMessageModule shareInstance] getLastMessageForSessionID:user.objID block:^(DDMessageEntity *message) { - [self setTimeStamp:message.msgTime]; - if ([message.sessionId isEqualToString:user.objID]) - { - if (message.msgContentType == DDMessageTypeText ) { - [self setLastMessage:message.msgContent]; - }else if (message.msgContentType == DDMessageTypeVoice) - { - [self setLastMessage:@"[语音]"]; - } - else if(message.msgContentType == DDMessageTypeImage) - { - [self setLastMessage:@"[图片]"]; - } - } - - }]; - } -@end diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.xib b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.xib deleted file mode 100644 index 00a9158..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserCell.xib +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B23" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DDRecentUserCellIdentifier" rowHeight="72" id="zTX-8k-m4y" customClass="RecentUserCell"> - <rect key="frame" x="0.0" y="0.0" width="320" height="72"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zTX-8k-m4y" id="uaC-lN-xg6"> - <rect key="frame" x="0.0" y="0.0" width="320" height="71"/> - <autoresizingMask key="autoresizingMask"/> - <subviews> - <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="Sa7-qd-650"> - <rect key="frame" x="13" y="13" width="47" height="49"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - </imageView> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="BV7-G1-VEg"> - <rect key="frame" x="68" y="13" width="158" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="16"/> - <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="qmX-Bd-Ibg"> - <rect key="frame" x="240" y="13" width="68" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="15"/> - <color key="textColor" red="0.52941176470588236" green="0.52941176470588236" blue="0.52941176470588236" alpha="1" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="WEf-OJ-5le"> - <rect key="frame" x="68" y="36" width="240" height="21"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <fontDescription key="fontDescription" type="system" pointSize="15"/> - <color key="textColor" red="0.52941176470588236" green="0.52941176470588236" blue="0.52941176470588236" alpha="1" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="99" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="fN4-am-CG6"> - <rect key="frame" x="45" y="5" width="25" height="16"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="0.93725490196078431" green="0.10196078431372549" blue="0.14117647058823529" alpha="1" colorSpace="deviceRGB"/> - <fontDescription key="fontDescription" type="system" pointSize="12"/> - <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> - <nil key="highlightedColor"/> - </label> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="star.png" id="aqE-bL-QZF"> - <rect key="frame" x="0.0" y="0.0" width="20" height="20"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - </subviews> - </tableViewCellContentView> - <connections> - <outlet property="avatarImageView" destination="Sa7-qd-650" id="pGd-ah-xgH"/> - <outlet property="dateLabel" destination="qmX-Bd-Ibg" id="uE2-ej-CLb"/> - <outlet property="lastmessageLabel" destination="WEf-OJ-5le" id="jql-4u-gNW"/> - <outlet property="nameLabel" destination="BV7-G1-VEg" id="g5M-jY-3Lr"/> - <outlet property="onTopImage" destination="aqE-bL-QZF" id="dpS-Wu-I2D"/> - <outlet property="unreadMessageCountLabel" destination="fN4-am-CG6" id="Xd7-MB-gB8"/> - </connections> - </tableViewCell> - </objects> - <resources> - <image name="star.png" width="40" height="40"/> - </resources> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.h b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.h deleted file mode 100644 index da705ce..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDRecentUserVCModule.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "DDUserModule.h" - -@interface RecentUserVCModule : NSObject -@property(strong)NSMutableArray *items; -@property(strong)NSMutableArray *ids; -@property(assign)NSInteger unreadMsgCount; -@end diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m deleted file mode 100644 index 7758c28..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m +++ /dev/null @@ -1,352 +0,0 @@ -// -// DDRecentUserVCModule.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "RecentUserVCModule.h" -#import "RecentConactsAPI.h" -#import "DDUserModule.h" -#import "DDDatabaseUtil.h" -#import "DDGroupModule.h" -#import "DDMessageEntity.h" -#import "DDMessageModule.h" -#import "RuntimeStatus.h" -#import "DDRecentGroupAPI.h" -#import "DDUserDetailInfoAPI.h" -#import "GetGroupInfoAPI.h" -@interface RecentUserVCModule() -@property(strong)NSMutableArray *fixedArray; - -@end -@implementation RecentUserVCModule -- (instancetype)init -{ - self = [super init]; - if (self) { - self.items= [NSMutableArray new]; - self.ids = [NSMutableArray new]; - self.fixedArray = [NSMutableArray new]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveStartLoginNotification:) name:DDNotificationStartLogin object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveLoginSuccessNotification:) name:DDNotificationUserLoginSuccess object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(n_receiveMessageNotification:) - name:DDNotificationReceiveMessage - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveRecentContactsUpdateNotification:) name:DDNotificationRecentContactsUpdate object:nil]; - - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUserKickOffNotification:) name:DDNotificationUserKickouted object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sentMessageSuccessfull:) name:@"SentMessageSuccessfull" object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUnreadMessageUpdateNotification:) name:DDNotificationUpdateUnReadMessage object:nil]; -// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLocalGroup) name:DDNotificationLoadLocalGroupFinish object:nil]; - [self loadRecentUserAndGroup]; - } - return self; -} --(void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationStartLogin" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationUserLoginFailure" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationUserLoginSuccess" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationReceiveMessage" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationUserKickouted" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationRecentContactsUpdate" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"SentMessageSuccessfull" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationUpdateUnReadMessage" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DDNotificationLoadLocalGroupFinish" object:nil]; -} - --(void)loadRecentUserAndGroup -{ - //优先加载本地联系人和群 - __block int i =0; - [[DDDatabaseUtil instance] loadContactsCompletion:^(NSArray *contacts, NSError *error) { - [contacts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - DDUserEntity* user = (DDUserEntity*)obj; - [[DDUserModule shareInstance] addRecentUser:user]; - [[DDUserModule shareInstance] addMaintanceUser:user]; - if (![self.ids containsObject:user.objID]) { - [self.ids addObject:user.objID]; - [self.items addObject:user]; - } - - }]; - - if (i == 1) { - [self sortItems]; - }else - { - i=i+1; - } - }]; - [[[DDGroupModule instance] recentlyGroup] enumerateKeysAndObjectsUsingBlock:^(NSString *key, DDGroupEntity *obj, BOOL *stop) { - if (![self.ids containsObject:key]) { - [self.ids addObject:key]; - [self.items addObject:obj]; - } - - }]; - if (i == 1) { - [self sortItems]; - }else - { - i=i+1; - } - __block int j =0; - RecentConactsAPI* recentContactsAPI = [[RecentConactsAPI alloc] init]; - [recentContactsAPI requestWithObject:nil Completion:^(id response, NSError *error) { - if (!error) - { - NSMutableArray* recentContacts = (NSMutableArray*)response; - [recentContacts enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - - [[DDUserModule shareInstance] addRecentUser:obj]; - if (![self.ids containsObject:obj.objID]) { - [self.ids addObject:obj.objID]; - [self.items addObject:obj]; - - }else{ - NSLog(@"没发现最近联系人"); - } - - }]; - - if (j == 1) { - [self sortItems]; - }else - { - j=j+1; - } - } - else{ - - DDLog(@"load recentUsers failure error:%@",error.domain); - } - }]; - - DDRecentGroupAPI *recentGroup = [[DDRecentGroupAPI alloc] init]; - [recentGroup requestWithObject:nil Completion:^(id response, NSError *error) { - if (!error) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [[DDGroupModule instance] addRecentlyGroup:response]; - [[[DDGroupModule instance] recentlyGroup] enumerateKeysAndObjectsUsingBlock:^(NSString *key, DDGroupEntity *obj, BOOL *stop) { - if (![self.ids containsObject:key]) { - [self.ids addObject:key]; - [self.items addObject:obj]; - } - - }]; - }); - - if (j == 1) { - [self sortItems]; - }else - { - j=j+1; - } - - }else{ - DDLog(@"load recentGroup failure error:%@",error.domain); - } - }]; - -} -/** - * 接收未读消息通知 - * - * @param notification <#notification description#> - */ -- (void)n_receiveUnreadMessageUpdateNotification:(NSNotification*)notification - -{ - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSString *senderID = [notification object]; - NSString *newID = [senderID componentsSeparatedByString:@"_"][1]; - if ([senderID hasPrefix:@"user_"]) { - if ([self.ids containsObject:newID]) { - [self.items enumerateObjectsUsingBlock:^(DDBaseEntity *obj, NSUInteger idx, BOOL *stop) { - if ([obj.objID isEqualToString:newID]) { - [self.items removeObjectAtIndex:idx]; - [self.items insertObject:obj atIndex:[TheRuntime getFixedTopCount]]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - }); - - } - }]; - }else - { - [[DDUserModule shareInstance] getUserForUserID:newID Block:^(DDUserEntity *user) { - if (user) { - [self.ids addObject:user.objID]; - [self.items insertObject:user atIndex:[TheRuntime getFixedTopCount]]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - }); - }else{ - DDLog(@"remove id unread message,from user,%@---->",newID); - [[DDMessageModule shareInstance] removeFromUnreadMessageButNotSendRead:newID]; - } - }]; - } - - }else - { - - - if ([self.ids containsObject:newID]) { - [self.items enumerateObjectsUsingBlock:^(DDBaseEntity *obj, NSUInteger idx, BOOL *stop) { - if ([obj.objID isEqualToString:newID]) { - [self.items removeObjectAtIndex:idx]; - [self.items insertObject:obj atIndex:[TheRuntime getFixedTopCount]]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - }); - } - }]; - - }else - { - GetGroupInfoAPI *group = [[GetGroupInfoAPI alloc] init]; - [group requestWithObject:newID Completion:^(DDGroupEntity *response, NSError *error) { - if (response) { - [self.ids addObject:newID]; - [self.items insertObject:group atIndex:[TheRuntime getFixedTopCount]]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - }); - } - }]; - } - - - } - }); - - - - -} -/** - * 收到消息通知 - * - * @param notification - */ -- (void)n_receiveMessageNotification:(NSNotification*)notification -{ - //如果当前items为空,则暂存 - - DDMessageEntity* message = [notification object]; - __block BOOL findID =NO; - [self.items enumerateObjectsUsingBlock:^(DDBaseEntity *obj, NSUInteger idx, BOOL *stop) { - if ([message.sessionId isEqualToString:obj.objID]) { - [self.items removeObject:obj]; - [self insertWhere:obj.objID Object:obj]; - findID=YES; - } - - }]; - if (!findID) { - BOOL isGroup = [message isGroupMessage]; - if (isGroup) { - GetGroupInfoAPI *group = [[GetGroupInfoAPI alloc] init]; - [group requestWithObject:message.sessionId Completion:^(DDGroupEntity *response, NSError *error) { - if (response) { - [self insertWhere:response.objID Object:response]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - } - }]; - }else{ - [[DDUserModule shareInstance] getUserForUserID:message.sessionId Block:^(DDUserEntity *user) { - if (user) { - [self.ids addObject:user.objID]; - [self insertWhere:user.objID Object:user]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - } - }]; - } - } - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; -} -/** - * 对最近联系人和群组进行排序 - */ --(void)sortItems -{ - - NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_lastUpdateTime" ascending:NO]; - [self.items sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; - [self.items enumerateObjectsUsingBlock:^(DDBaseEntity *obj, NSUInteger idx, BOOL *stop) { - if ([TheRuntime isInFixedTop:obj.objID]) { - [self.fixedArray addObject:obj]; - } - - }]; - [self.items removeObjectsInArray:self.fixedArray]; - [self.items insertObjects:self.fixedArray atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [self.fixedArray count])]]; - - [self.fixedArray removeAllObjects]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; -} -- (void)n_receiveStartLoginNotification:(NSNotification*)notification -{ - -} - -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification -{ - //self.title = @"最近联系人"; -} - - -- (void)n_receiveUserKickOffNotification:(NSNotification*)notification -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"您的帐号在别处登录" delegate:self cancelButtonTitle:nil otherButtonTitles:@"重连", nil]; - [alert show]; - -} --(void)sentMessageSuccessfull:(NSNotification *)notification -{ - NSString *senderID = [notification object]; - __block BOOL isInsert = NO; - [self.items enumerateObjectsUsingBlock:^(DDBaseEntity *obj, NSUInteger idx, BOOL *stop) { - if ([senderID isEqualToString:obj.objID]) { - [self.items removeObject:obj]; - [self insertWhere:obj.objID Object:obj]; - isInsert = YES; - } - - }]; - if (!isInsert) { - DDGroupEntity *group = [[DDGroupModule instance] getGroupByGId:senderID]; - if (group) { - [self insertWhere:group.objID Object:group]; - }else - { - [[DDUserModule shareInstance] getUserForUserID:senderID Block:^(DDUserEntity *user) { - [self insertWhere:user.objID Object:user]; - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - }]; - } - } - [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshRecentData" object:nil]; - -} --(void)insertWhere:(NSString *)idString Object:(id)ins -{ - if ([TheRuntime isInFixedTop:idString]) { - [self.items insertObject:ins atIndex:0]; - }else - { - - [self.items insertObject:ins atIndex:[TheRuntime getFixedTopCount]]; - } -} -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.h b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.h deleted file mode 100644 index 9ec7c9e..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDRecentUsersViewController.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -@class RecentUserVCModule; -@interface RecentUsersViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate,UISearchBarDelegate,UISearchDisplayDelegate> -@property(nonatomic,weak)IBOutlet UITableView* tableView; -@property(nonatomic,strong)RecentUserVCModule* module; - -+ (instancetype)shareInstance; --(void)moveSessionToTop:(NSString *)sesstionID; -- (void)showLinking; --(void)setToolbarBadge; -@end diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m deleted file mode 100644 index f1dedc7..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m +++ /dev/null @@ -1,340 +0,0 @@ -// -// DDRecentUsersViewController.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "RecentUsersViewController.h" -#import "RecentUserCell.h" -#import "RecentUserVCModule.h" -#import "DDUserModule.h" -#import "DDMessageModule.h" -#import "ChattingMainViewController.h" -#import "DDSessionEntity.h" -#import "std.h" -#import "RecentConactsAPI.h" -#import "DDDatabaseUtil.h" -#import "LoginModule.h" -#import "DDClientState.h" -#import "RuntimeStatus.h" -#import "DDUserModule.h" -#import "DDRecentGroupAPI.h" -#import "DDUnreadMessageGroupAPI.h" -#import "DDGroupsUnreadMessageAPI.h" -#import "DDGroupModule.h" -#import "DDFixedGroupAPI.h" -#import "SearchContentViewController.h" -#import "MBProgressHUD.h" -@interface RecentUsersViewController () -@property(strong)UISearchDisplayController * searchController; -@property(strong)NSMutableArray *items; -@property(strong)MBProgressHUD *hud; -@property(strong)NSMutableDictionary *lastMsgs; -@property(strong)UISearchBar *bar; -- (void)n_receiveStartLoginNotification:(NSNotification*)notification; -- (void)n_receiveLoginSuccessNotification:(NSNotification*)notification; -- (void)n_receiveLoginFailureNotification:(NSNotification*)notification; -- (void)n_receiveRecentContactsUpdateNotification:(NSNotification*)notification; -- (void)n_receiveUserKickOffNotification:(NSNotification*)notification; -@end - -@implementation RecentUsersViewController - -+ (instancetype)shareInstance -{ - static RecentUsersViewController* g_recentUsersViewController; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_recentUsersViewController = [RecentUsersViewController new]; - }); - return g_recentUsersViewController; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveLoginFailureNotification:) name:DDNotificationUserLoginFailure object:nil]; - } - return self; -} - -- (void)viewDidLoad -{ - if (isIOS7) - { - self.edgesForExtendedLayout = UIRectEdgeNone; - self.extendedLayoutIncludesOpaqueBars = NO; - } - [super viewDidLoad]; -// self.hud = [[MBProgressHUD alloc] initWithView:self.view]; -// [self.view addSubview:self.hud]; -// self.hud.dimBackground = YES; -// self.hud.labelText=@"正在加载..."; -// [self.hud show:YES]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(n_receiveUnreadMessageUpdateNotification:) name:DDNotificationUpdateUnReadMessage object:nil]; - self.items = [NSMutableArray new]; - [_tableView setFrame:self.view.frame]; - UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)]; - searchBar.placeholder=@"搜索"; - [searchBar.layer setBorderWidth:0]; - [searchBar setBarTintColor:RGB(242, 242, 244)]; - searchBar.delegate=self; - _tableView.tableHeaderView=searchBar; - self.title=@"Team Talk"; - self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(searchBar.bounds)); - [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; -[self.tableView setBackgroundColor:RGB(239,239,244)]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshData) name:@"RefreshRecentData" object:nil]; - self.lastMsgs = [NSMutableDictionary new]; - self.module = [RecentUserVCModule new]; - self.items=self.module.items; - - -} - --(void)refreshData -{ - //[self.hud removeFromSuperview]; - [self.tableView reloadData]; - [self setToolbarBadge]; -} - --(void)setToolbarBadge -{ - NSInteger count = [[DDMessageModule shareInstance] getUnreadMessgeCount]; - - if (count !=0) { - if (count > 99) - { - [self.parentViewController.tabBarItem setBadgeValue:@"99+"]; - - } - else - { - [self.parentViewController.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%ld",count]]; - - } - - }else - { - [self.parentViewController.tabBarItem setBadgeValue:nil]; - } -} - - --(void)searchContact -{ - -} -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self setToolbarBadge]; - -} - - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - //[self.tableView reloadData]; - [self.tabBarController.tabBar setHidden:NO]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (RecentUserVCModule*)module -{ - if (!_module) - { - _module = [[RecentUserVCModule alloc] init]; - } - return _module; -} - -#pragma mark public -- (void)showLinking -{ - self.title = @"正在连接..."; -// UIView* titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 44)]; -// -// UIActivityIndicatorView* activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; -// [activity setFrame:CGRectMake(30, 0, 44, 44)]; -// -// UILabel* linkLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)]; -// [linkLabel setTextAlignment:NSTextAlignmentCenter]; -// [linkLabel setText:@"正在连接"]; -// -// [activity startAnimating]; -// [titleView addSubview:activity]; -// [titleView addSubview:linkLabel]; -// -// [self.navigationItem setTitleView:titleView]; -} - -#pragma mark - -#pragma mark UIAlertView Delegate -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ -// switch (buttonIndex) -// { -// case 1: -// { -// NSString* userID = [DDLoginModule instance].userID; -// NSString* token = [DDLoginModule instance].token; -// NSString* did = [DDLoginModule instance].did; -// -// [[DDLoginModule instance] loginIMWithUserID:userID token:token did:did success:^{ -// -// } failure:^(NSString *error) { -// -// }]; -// } -// break; -// } -} - -#pragma mark - UITableView DataSource -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [self.items count]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 72; -} - -- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString* cellIdentifier = @"DDRecentUserCellIdentifier"; - RecentUserCell* cell = (RecentUserCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - if (!cell) - { - UINib* nib = [UINib nibWithNibName:@"RecentUserCell" bundle:nil]; - [tableView registerNib:nib forCellReuseIdentifier:cellIdentifier]; - cell = (RecentUserCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - } - - UIView *view = [[UIView alloc] initWithFrame:cell.bounds]; - view.backgroundColor=RGB(229, 229, 229); - cell.selectedBackgroundView=view; - NSInteger row = [indexPath row]; - if ([self.items[row] isKindOfClass:[DDUserEntity class]]) { - DDUserEntity* user = self.items[row]; - [cell setShowUser:user]; - - }else - { - DDGroupEntity *group = self.items[row]; - [cell setShowGroup:group]; - [cell setName:group.name]; - } - return cell; -} - -#pragma mark - UITableView Delegate -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - NSInteger row = [indexPath row]; - - RecentUserCell* cell = (RecentUserCell*)[tableView cellForRowAtIndexPath:indexPath]; - [cell setUnreadMessageCount:0]; - if ([self.items[row] isKindOfClass:[DDUserEntity class]]) { - DDUserEntity* userID = self.items[row]; - DDSessionEntity* session = [[DDSessionEntity alloc] initWithSessionID:userID.objID type:SESSIONTYPE_SINGLE]; - [[ChattingMainViewController shareInstance] showChattingContentForSession:session]; - [self.navigationController pushViewController:[ChattingMainViewController shareInstance] animated:YES]; - }else - { - DDGroupEntity *group = self.items[row]; - DDSessionEntity* session = [[DDSessionEntity alloc] initWithSessionID:group.objID type:SESSIONTYPE_TEMP_GROUP]; - [[ChattingMainViewController shareInstance] showChattingContentForSession:session]; - [self.navigationController pushViewController:[ChattingMainViewController shareInstance] animated:YES]; - } -} - - --(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSUInteger row = [indexPath row]; - DDBaseEntity *entity = self.items[row]; - if ([entity isKindOfClass:[DDUserEntity class]]) { - DDUserEntity *temp =(DDUserEntity *)entity; - if ([TheRuntime isInFixedTop:temp.objID]) { - [TheRuntime removeFromFixedTop:temp.objID]; - }else - { - [TheRuntime insertToFixedTop:temp.objID]; - } - - }else - { - DDGroupEntity *group = (DDGroupEntity *)entity; - if ([TheRuntime isInFixedTop:group.objID]) { - [TheRuntime removeFromFixedTop:group.objID]; - }else - { - [TheRuntime insertToFixedTop:group.objID]; - } - } - [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight]; -} -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ - return YES; -} - -- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{ - NSUInteger row = [indexPath row]; - DDBaseEntity *entity = self.items[row]; - if ([entity isKindOfClass:[DDUserEntity class]]) { - DDUserEntity *temp =(DDUserEntity *)entity; - if ([TheRuntime isInFixedTop:temp.objID]) { - return @"取消置顶"; - } - }else - { - DDGroupEntity *group = (DDGroupEntity *)entity; - if ([TheRuntime isInFixedTop:group.objID]) { - return @"取消置顶"; - } - } - return @"置顶"; -} -- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar -{ - [self.navigationController pushViewController:[SearchContentViewController new] animated:YES]; - return NO; -} -- (void)n_receiveUnreadMessageUpdateNotification:(NSNotification*)notification -{ - [self.tableView reloadData]; -} -- (void)n_receiveLoginFailureNotification:(NSNotification*)notification -{ - self.title = @"未连接"; -} -- (void)n_receiveStartLoginNotification:(NSNotification*)notification -{ - self.title = @"Team Talk"; -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.xib b/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.xib deleted file mode 100644 index 32ee578..0000000 --- a/TeamTalk/IOSDuoduo/VC/RecentContacts/RecentUsersViewController.xib +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RecentUsersViewController"> - <connections> - <outlet property="tableView" destination="MTQ-pA-RMt" id="MIF-6w-gpE"/> - <outlet property="view" destination="1" id="3"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view contentMode="scaleToFill" id="1"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="MTQ-pA-RMt"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> - <inset key="separatorInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> - <connections> - <outlet property="dataSource" destination="-1" id="Gfz-Vc-GHk"/> - <outlet property="delegate" destination="-1" id="bGB-e6-e4G"/> - </connections> - </tableView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/> - <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/> - </view> - </objects> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.h b/TeamTalk/IOSDuoduo/VC/SearchContentViewController.h deleted file mode 100644 index 389e4f4..0000000 --- a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// SearchContentViewController.h -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface SearchContentViewController : UIViewController<UISearchBarDelegate> - -@end diff --git a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.m b/TeamTalk/IOSDuoduo/VC/SearchContentViewController.m deleted file mode 100644 index d2913e5..0000000 --- a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.m +++ /dev/null @@ -1,186 +0,0 @@ -// -// SearchContentViewController.m -// TeamTalk -// -// Created by Michael Scofield on 2014-10-20. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "SearchContentViewController.h" -#import "std.h" -#import "DDSearch.h" -#import "DDContactsCell.h" -#import "DDUserEntity.h" -#import "PublicProfileViewControll.h" -#import "DDSessionEntity.h" -#import "ContactsViewController.h" -#import "DDAppDelegate.h" -#import "MBProgressHUD.h" -#import "ContactsModule.h" -#import "DDDatabaseUtil.h" -#import "SpellLibrary.h" -@interface SearchContentViewController () -@property(weak) IBOutlet UISearchBar *searchBar; -@property(weak) IBOutlet UITableView *tableView; -@property(strong)NSString *keyString; -@property(strong) ContactsViewController *contact; -@property(strong)NSMutableArray *searchResult; -@property(strong)NSMutableArray *department; -@end - -@implementation SearchContentViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.title=@"搜索"; - [self.searchBar becomeFirstResponder]; - [self.searchBar setBarTintColor:RGB(242, 242, 244)]; - self.searchResult = [NSMutableArray new]; - self.department = [NSMutableArray new]; - self.keyString=@""; - DDLog(@"come to"); - if ([[SpellLibrary instance] isEmpty]) { - DDLog(@"spelllibrary is empty"); - - [[DDDatabaseUtil instance] getAllUsers:^(NSArray *contacts, NSError *error) { - for (DDUserEntity *user in contacts) { - [[SpellLibrary instance] addSpellForObject:user]; - [[SpellLibrary instance] addDeparmentSpellForObject:user]; - }}]; - - } - // Do any additional setup after loading the view from its nib. -} --(void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self.tabBarController.tabBar setHidden:YES]; -} -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText; -{ - if ([searchText isEqualToString:@""]) { - return ; - } - MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view]; - [self.view addSubview:HUD]; - [HUD show:YES]; - HUD.dimBackground = YES; - HUD.labelText = @"正在搜索"; - [[DDSearch instance] searchDepartment:searchText completion:^(NSArray *result, NSError *error) { - if ([result count] >0) { - [self.department removeAllObjects]; - [result enumerateObjectsUsingBlock:^(DDUserEntity *obj, NSUInteger idx, BOOL *stop) { - if (![self.department containsObject:obj.department]) { - [self.department addObject:obj.department]; - } - }]; - - [self.tableView reloadData]; - } - [HUD removeFromSuperview]; - } - ]; - [[DDSearch instance] searchContent:searchText completion:^(NSArray *result, NSError *error) { - self.keyString=searchText; - if ([result count] >0) { - [self.searchResult removeAllObjects]; - [self.searchResult addObjectsFromArray:result]; - [self.tableView reloadData]; - } - [HUD removeFromSuperview]; - }]; - - -} -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - if (section == 0) { - return [self.searchResult count]; - }else - { - return [self.department count]; - } - -} -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 2; -} -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"contactsCell"; - DDContactsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier ]; - if (cell == nil) { - cell = [[DDContactsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } - DDUserEntity *user=nil; - if (indexPath.section == 0) { - user = [self.searchResult objectAtIndex:indexPath.row]; - [cell setCellContent:user.avatar Name:user.name]; - }else - { - NSString *string = [self.department objectAtIndex:indexPath.row]; - [cell setCellContent:user.avatar Name:string]; - } - - - - return cell; -} -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - if (section == 0) { - return [self.searchResult count]?@"联系人":@""; - } - return [self.searchResult count]?@"部门":@""; -} --(void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - if (self.searchBar.isFirstResponder) { - [self.searchBar resignFirstResponder]; - } -} --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (indexPath.section == 0) { - DDUserEntity *user; - user = self.searchResult[indexPath.row]; - PublicProfileViewControll *public = [PublicProfileViewControll new]; - public.user=user; - [self.navigationController pushViewController:public animated:YES]; - return; - - }else - { -// NSString *string = [self.department objectAtIndex:indexPath.row]; -// [self.navigationController popToRootViewControllerAnimated:NO]; -// TheAppDel.mainViewControll.contacts.sectionTitle=string; -// TheAppDel.mainViewControll.selectedIndex=1; - - NSString *string = [self.department objectAtIndex:indexPath.row]; - ContactsViewController *contact = [ContactsViewController new]; - contact.sectionTitle=string; - contact.isSearchResult=YES; - [self.navigationController pushViewController:contact animated:YES]; - - } -} --(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar -{ - [self.searchBar resignFirstResponder]; -} -/* -#pragma mark - Navigation - - In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - Get the new view controller using [segue destinationViewController]. - Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.xib b/TeamTalk/IOSDuoduo/VC/SearchContentViewController.xib deleted file mode 100644 index 616ef43..0000000 --- a/TeamTalk/IOSDuoduo/VC/SearchContentViewController.xib +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SearchContentViewController"> - <connections> - <outlet property="searchBar" destination="T15-TC-n6v" id="VE0-Na-m8b"/> - <outlet property="tableView" destination="PFq-r7-Ppz" id="3DO-IN-y70"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <searchBar contentMode="redraw" fixedFrame="YES" placeholder="联系人、部门" translatesAutoresizingMaskIntoConstraints="NO" id="T15-TC-n6v"> - <rect key="frame" x="0.0" y="65" width="320" height="44"/> - <textInputTraits key="textInputTraits" returnKeyType="done"/> - <connections> - <outlet property="delegate" destination="-1" id="WXv-eI-sRS"/> - </connections> - </searchBar> - <tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="PFq-r7-Ppz"> - <rect key="frame" x="0.0" y="109" width="600" height="461"/> - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> - <connections> - <outlet property="dataSource" destination="-1" id="T5X-gH-6Tj"/> - <outlet property="delegate" destination="-1" id="Wgc-zI-uBh"/> - </connections> - </tableView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/> - <point key="canvasLocation" x="142" y="190"/> - </view> - </objects> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/SettingViewController.h b/TeamTalk/IOSDuoduo/VC/SettingViewController.h deleted file mode 100644 index 70734e5..0000000 --- a/TeamTalk/IOSDuoduo/VC/SettingViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDSettingViewController.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-19. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface SettingViewController : UIViewController<UIAlertViewDelegate,UITableViewDataSource,UITableViewDelegate> -@property (nonatomic,weak)IBOutlet UITableView* tableView; --(IBAction)clearCache:(id)sender; --(IBAction)logout:(id)sender; -@end diff --git a/TeamTalk/IOSDuoduo/VC/SettingViewController.m b/TeamTalk/IOSDuoduo/VC/SettingViewController.m deleted file mode 100644 index a81f054..0000000 --- a/TeamTalk/IOSDuoduo/VC/SettingViewController.m +++ /dev/null @@ -1,144 +0,0 @@ -// -// DDSettingViewController.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-08-19. -// Copyright (c) 2014 dujia. All rights reserved. -// - -#import "SettingViewController.h" -#import "ClearImageCacheViewController.h"' -#import "std.h" -#import "RuntimeStatus.h" -#import "PhotosCache.h" -#import "LogoutAPI.h" -#import "LoginViewController.h" -#import "DDTcpClientManager.h" -#import "DDClientState.h" -@interface SettingViewController () -@end - -@implementation SettingViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Do any additional setup after loading the view from its nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} --(IBAction)clearCache:(id)sender -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"是否清理图片缓存" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; - [alert show]; -} --(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (alertView.tag != 100) { - if (buttonIndex == 1) { - [[PhotosCache sharedPhotoCache] clearAllCache]; - } - }else - { - if (buttonIndex == 1) { - LogoutAPI *logout = [LogoutAPI new]; - [logout requestWithObject:nil Completion:^(id response, NSError *error) { - if (response == 0) { - LoginViewController *login = [LoginViewController new]; - login.isRelogin=YES; - [self presentViewController:login animated:YES completion:^{ - TheRuntime.user =nil; - TheRuntime.userID =nil; - [DDClientState shareInstance].userState = DDUserOffLineInitiative; - [[DDTcpClientManager instance] disconnect]; - }]; - } - }]; - } - } -} - --(IBAction)logout:(id)sender -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"是否确认退出?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; - alert.tag=100; - [alert show]; - - -} -#pragma mark - -#pragma mark DataSource -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 3; -} - -- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString* identifier = @"settingIdentifier"; - UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; - } - NSInteger row = [indexPath row]; - [cell.detailTextLabel setText:nil]; - [cell setAccessoryType:UITableViewCellAccessoryNone]; - switch (row) - { - case 0: - [cell.textLabel setText:@"清理图片缓存"]; - [cell.detailTextLabel setText:@""]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - break; - case 1: - [cell.textLabel setText:@"退出"]; - [cell.detailTextLabel setText:@""]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - break; - case 2: - [cell.textLabel setText:@"版本"]; - [cell.detailTextLabel setText:@"2014102601"]; - default: - break; - } - return cell; -} - -#pragma mark - -#pragma mark UITableView Delegate -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInteger row = [indexPath row]; - switch (row) - { - case 0: - [self clearCache:nil]; - break; - case 1: - [self logout:nil]; - break; - default: - break; - } -} -@end diff --git a/TeamTalk/IOSDuoduo/VC/SettingViewController.xib b/TeamTalk/IOSDuoduo/VC/SettingViewController.xib deleted file mode 100644 index cb2fe99..0000000 --- a/TeamTalk/IOSDuoduo/VC/SettingViewController.xib +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6245" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SettingViewController"> - <connections> - <outlet property="tableView" destination="o4c-UN-42F" id="96D-z0-qkF"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="o4c-UN-42F"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> - <connections> - <outlet property="dataSource" destination="-1" id="VEp-0U-emx"/> - <outlet property="delegate" destination="-1" id="gnw-5z-38T"/> - </connections> - </tableView> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - </view> - </objects> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/IOSDuoduo/VC/minus-sign.png b/TeamTalk/IOSDuoduo/VC/minus-sign.png deleted file mode 100644 index 33d66041cfec5c6bf1d11bd37a2a2d6f03661c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71041 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 diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/config.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/config.h deleted file mode 100755 index 687efc3..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/config.h +++ /dev/null @@ -1,168 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Make use of ARM4 assembly optimizations */ -/* #undef ARM4_ASM */ - -/* Make use of ARM5E assembly optimizations */ -/* #undef ARM5E_ASM */ - -/* Make use of Blackfin assembly optimizations */ -/* #undef BFIN_ASM */ - -/* Disable all parts of the API that are using floats */ -/* #undef DISABLE_FLOAT_API */ - -/* Disable VBR and VAD from the codec */ -/* #undef DISABLE_VBR */ - -/* Enable valgrind extra checks */ -/* #undef ENABLE_VALGRIND */ - -/* Symbol visibility prefix */ -#define EXPORT __attribute__((visibility("default"))) - -/* Debug fixed-point implementation */ -/* #undef FIXED_DEBUG */ - -/* Compile as fixed-point */ -#define FIXED_POINT - -/* Compile as floating-point */ -/*#define FLOATING_POINT */ - -/* Define to 1 if you have the <alloca.h> header file. */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the <getopt.h> header file. */ -#define HAVE_GETOPT_H 1 - -/* Define to 1 if you have the `getopt_long' function. */ -#define HAVE_GETOPT_LONG 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if you have the `winmm' library (-lwinmm). */ -/* #undef HAVE_LIBWINMM */ - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/audioio.h> header file. */ -/* #undef HAVE_SYS_AUDIOIO_H */ - -/* Define to 1 if you have the <sys/soundcard.h> header file. */ -/* #undef HAVE_SYS_SOUNDCARD_H */ - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 8 - -/* The size of `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - - -/* Version extra */ -#define SPEEX_EXTRA_VERSION "" - -/* Version major */ -#define SPEEX_MAJOR_VERSION 1 - -/* Version micro */ -/* #define SPEEX_MICRO_VERSION 16 */ - -/* Version minor */ -#define SPEEX_MINOR_VERSION 1 - -/* Complete version string */ -/* #define SPEEX_VERSION "1.2rc1" */ - - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Enable support for TI C55X DSP */ -/* #undef TI_C55X */ - -/* Make use of alloca */ -/* #undef USE_ALLOCA */ - -/* Use FFTW3 for FFT */ -/* #undef USE_GPL_FFTW3 */ - -/* Use Intel Math Kernel Library for FFT */ -/* #undef USE_INTEL_MKL */ - -/* Use KISS Fast Fourier Transform */ -/* #undef USE_KISS_FFT */ - -/* Use FFT from OggVorbis */ -#define USE_SMALLFT - -/* Use C99 variable-size arrays */ -#define VAR_ARRAYS - -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -/* #undef WORDS_BIGENDIAN */ - -/* Enable SSE support */ -/*#define _USE_SSE */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to equivalent of C99 restrict keyword, or to nothing if this is not - supported. Do not define if restrict is supported directly. */ -#define restrict __restrict diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/bitwise.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/bitwise.c deleted file mode 100755 index b1ffbd1..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/bitwise.c +++ /dev/null @@ -1,857 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE Ogg CONTAINER SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: packing variable sized words into an octet stream - last mod: $Id: bitwise.c 18051 2011-08-04 17:56:39Z giles $ - - ********************************************************************/ - -/* We're 'LSb' endian; if we write a word but read individual bits, - then we'll read the lsb first */ - -#include <string.h> -#include <stdlib.h> -#include <limits.h> -#include "ogg.h" - -#define BUFFER_INCREMENT 256 - -static const unsigned long mask[]= -{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f, - 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff, - 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff, - 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, - 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff, - 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff, - 0x3fffffff,0x7fffffff,0xffffffff }; - -static const unsigned int mask8B[]= -{0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; - -void oggpack_writeinit(oggpack_buffer *b){ - memset(b,0,sizeof(*b)); - b->ptr=b->buffer=_ogg_malloc(BUFFER_INCREMENT); - b->buffer[0]='\0'; - b->storage=BUFFER_INCREMENT; -} - -void oggpackB_writeinit(oggpack_buffer *b){ - oggpack_writeinit(b); -} - -int oggpack_writecheck(oggpack_buffer *b){ - if(!b->ptr || !b->storage)return -1; - return 0; -} - -int oggpackB_writecheck(oggpack_buffer *b){ - return oggpack_writecheck(b); -} - -void oggpack_writetrunc(oggpack_buffer *b,long bits){ - long bytes=bits>>3; - if(b->ptr){ - bits-=bytes*8; - b->ptr=b->buffer+bytes; - b->endbit=bits; - b->endbyte=bytes; - *b->ptr&=mask[bits]; - } -} - -void oggpackB_writetrunc(oggpack_buffer *b,long bits){ - long bytes=bits>>3; - if(b->ptr){ - bits-=bytes*8; - b->ptr=b->buffer+bytes; - b->endbit=bits; - b->endbyte=bytes; - *b->ptr&=mask8B[bits]; - } -} - -/* Takes only up to 32 bits. */ -void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){ - if(bits<0 || bits>32) goto err; - if(b->endbyte>=b->storage-4){ - void *ret; - if(!b->ptr)return; - if(b->storage>LONG_MAX-BUFFER_INCREMENT) goto err; - ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT); - if(!ret) goto err; - b->buffer=ret; - b->storage+=BUFFER_INCREMENT; - b->ptr=b->buffer+b->endbyte; - } - - value&=mask[bits]; - bits+=b->endbit; - - b->ptr[0]|=value<<b->endbit; - - if(bits>=8){ - b->ptr[1]=(unsigned char)(value>>(8-b->endbit)); - if(bits>=16){ - b->ptr[2]=(unsigned char)(value>>(16-b->endbit)); - if(bits>=24){ - b->ptr[3]=(unsigned char)(value>>(24-b->endbit)); - if(bits>=32){ - if(b->endbit) - b->ptr[4]=(unsigned char)(value>>(32-b->endbit)); - else - b->ptr[4]=0; - } - } - } - } - - b->endbyte+=bits/8; - b->ptr+=bits/8; - b->endbit=bits&7; - return; - err: - oggpack_writeclear(b); -} - -/* Takes only up to 32 bits. */ -void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){ - if(bits<0 || bits>32) goto err; - if(b->endbyte>=b->storage-4){ - void *ret; - if(!b->ptr)return; - if(b->storage>LONG_MAX-BUFFER_INCREMENT) goto err; - ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT); - if(!ret) goto err; - b->buffer=ret; - b->storage+=BUFFER_INCREMENT; - b->ptr=b->buffer+b->endbyte; - } - - value=(value&mask[bits])<<(32-bits); - bits+=b->endbit; - - b->ptr[0]|=value>>(24+b->endbit); - - if(bits>=8){ - b->ptr[1]=(unsigned char)(value>>(16+b->endbit)); - if(bits>=16){ - b->ptr[2]=(unsigned char)(value>>(8+b->endbit)); - if(bits>=24){ - b->ptr[3]=(unsigned char)(value>>(b->endbit)); - if(bits>=32){ - if(b->endbit) - b->ptr[4]=(unsigned char)(value<<(8-b->endbit)); - else - b->ptr[4]=0; - } - } - } - } - - b->endbyte+=bits/8; - b->ptr+=bits/8; - b->endbit=bits&7; - return; - err: - oggpack_writeclear(b); -} - -void oggpack_writealign(oggpack_buffer *b){ - int bits=8-b->endbit; - if(bits<8) - oggpack_write(b,0,bits); -} - -void oggpackB_writealign(oggpack_buffer *b){ - int bits=8-b->endbit; - if(bits<8) - oggpackB_write(b,0,bits); -} - -static void oggpack_writecopy_helper(oggpack_buffer *b, - void *source, - long bits, - void (*w)(oggpack_buffer *, - unsigned long, - int), - int msb){ - unsigned char *ptr=(unsigned char *)source; - - long bytes=bits/8; - bits-=bytes*8; - - if(b->endbit){ - int i; - /* unaligned copy. Do it the hard way. */ - for(i=0;i<bytes;i++) - w(b,(unsigned long)(ptr[i]),8); - }else{ - /* aligned block copy */ - if(b->endbyte+bytes+1>=b->storage){ - void *ret; - if(!b->ptr) goto err; - if(b->endbyte+bytes+BUFFER_INCREMENT>b->storage) goto err; - b->storage=b->endbyte+bytes+BUFFER_INCREMENT; - ret=_ogg_realloc(b->buffer,b->storage); - if(!ret) goto err; - b->buffer=ret; - b->ptr=b->buffer+b->endbyte; - } - - memmove(b->ptr,source,bytes); - b->ptr+=bytes; - b->endbyte+=bytes; - *b->ptr=0; - - } - if(bits){ - if(msb) - w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits); - else - w(b,(unsigned long)(ptr[bytes]),bits); - } - return; - err: - oggpack_writeclear(b); -} - -void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){ - oggpack_writecopy_helper(b,source,bits,oggpack_write,0); -} - -void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){ - oggpack_writecopy_helper(b,source,bits,oggpackB_write,1); -} - -void oggpack_reset(oggpack_buffer *b){ - if(!b->ptr)return; - b->ptr=b->buffer; - b->buffer[0]=0; - b->endbit=b->endbyte=0; -} - -void oggpackB_reset(oggpack_buffer *b){ - oggpack_reset(b); -} - -void oggpack_writeclear(oggpack_buffer *b){ - if(b->buffer)_ogg_free(b->buffer); - memset(b,0,sizeof(*b)); -} - -void oggpackB_writeclear(oggpack_buffer *b){ - oggpack_writeclear(b); -} - -void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){ - memset(b,0,sizeof(*b)); - b->buffer=b->ptr=buf; - b->storage=bytes; -} - -void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){ - oggpack_readinit(b,buf,bytes); -} - -/* Read in bits without advancing the bitptr; bits <= 32 */ -long oggpack_look(oggpack_buffer *b,int bits){ - unsigned long ret; - unsigned long m; - - if(bits<0 || bits>32) return -1; - m=mask[bits]; - bits+=b->endbit; - - if(b->endbyte >= b->storage-4){ - /* not the main path */ - if(b->endbyte > b->storage-((bits+7)>>3)) return -1; - /* special case to avoid reading b->ptr[0], which might be past the end of - the buffer; also skips some useless accounting */ - else if(!bits)return(0L); - } - - ret=b->ptr[0]>>b->endbit; - if(bits>8){ - ret|=b->ptr[1]<<(8-b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(16-b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(24-b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]<<(32-b->endbit); - } - } - } - return(m&ret); -} - -/* Read in bits without advancing the bitptr; bits <= 32 */ -long oggpackB_look(oggpack_buffer *b,int bits){ - unsigned long ret; - int m=32-bits; - - if(m<0 || m>32) return -1; - bits+=b->endbit; - - if(b->endbyte >= b->storage-4){ - /* not the main path */ - if(b->endbyte > b->storage-((bits+7)>>3)) return -1; - /* special case to avoid reading b->ptr[0], which might be past the end of - the buffer; also skips some useless accounting */ - else if(!bits)return(0L); - } - - ret=b->ptr[0]<<(24+b->endbit); - if(bits>8){ - ret|=b->ptr[1]<<(16+b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(8+b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]>>(8-b->endbit); - } - } - } - return ((ret&0xffffffff)>>(m>>1))>>((m+1)>>1); -} - -long oggpack_look1(oggpack_buffer *b){ - if(b->endbyte>=b->storage)return(-1); - return((b->ptr[0]>>b->endbit)&1); -} - -long oggpackB_look1(oggpack_buffer *b){ - if(b->endbyte>=b->storage)return(-1); - return((b->ptr[0]>>(7-b->endbit))&1); -} - -void oggpack_adv(oggpack_buffer *b,int bits){ - bits+=b->endbit; - - if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow; - - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; - return; - - overflow: - b->ptr=NULL; - b->endbyte=b->storage; - b->endbit=1; -} - -void oggpackB_adv(oggpack_buffer *b,int bits){ - oggpack_adv(b,bits); -} - -void oggpack_adv1(oggpack_buffer *b){ - if(++(b->endbit)>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } -} - -void oggpackB_adv1(oggpack_buffer *b){ - oggpack_adv1(b); -} - -/* bits <= 32 */ -long oggpack_read(oggpack_buffer *b,int bits){ - long ret; - unsigned long m; - - if(bits<0 || bits>32) goto err; - m=mask[bits]; - bits+=b->endbit; - - if(b->endbyte >= b->storage-4){ - /* not the main path */ - if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow; - /* special case to avoid reading b->ptr[0], which might be past the end of - the buffer; also skips some useless accounting */ - else if(!bits)return(0L); - } - - ret=b->ptr[0]>>b->endbit; - if(bits>8){ - ret|=b->ptr[1]<<(8-b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(16-b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(24-b->endbit); - if(bits>32 && b->endbit){ - ret|=b->ptr[4]<<(32-b->endbit); - } - } - } - } - ret&=m; - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; - return ret; - - overflow: - err: - b->ptr=NULL; - b->endbyte=b->storage; - b->endbit=1; - return -1L; -} - -/* bits <= 32 */ -long oggpackB_read(oggpack_buffer *b,int bits){ - long ret; - long m=32-bits; - - if(m<0 || m>32) goto err; - bits+=b->endbit; - - if(b->endbyte+4>=b->storage){ - /* not the main path */ - if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow; - /* special case to avoid reading b->ptr[0], which might be past the end of - the buffer; also skips some useless accounting */ - else if(!bits)return(0L); - } - - ret=b->ptr[0]<<(24+b->endbit); - if(bits>8){ - ret|=b->ptr[1]<<(16+b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(8+b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]>>(8-b->endbit); - } - } - } - ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1); - - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; - return ret; - - overflow: - err: - b->ptr=NULL; - b->endbyte=b->storage; - b->endbit=1; - return -1L; -} - -long oggpack_read1(oggpack_buffer *b){ - long ret; - - if(b->endbyte >= b->storage) goto overflow; - ret=(b->ptr[0]>>b->endbit)&1; - - b->endbit++; - if(b->endbit>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } - return ret; - - overflow: - b->ptr=NULL; - b->endbyte=b->storage; - b->endbit=1; - return -1L; -} - -long oggpackB_read1(oggpack_buffer *b){ - long ret; - - if(b->endbyte >= b->storage) goto overflow; - ret=(b->ptr[0]>>(7-b->endbit))&1; - - b->endbit++; - if(b->endbit>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } - return ret; - - overflow: - b->ptr=NULL; - b->endbyte=b->storage; - b->endbit=1; - return -1L; -} - -long oggpack_bytes(oggpack_buffer *b){ - return(b->endbyte+(b->endbit+7)/8); -} - -long oggpack_bits(oggpack_buffer *b){ - return(b->endbyte*8+b->endbit); -} - -long oggpackB_bytes(oggpack_buffer *b){ - return oggpack_bytes(b); -} - -long oggpackB_bits(oggpack_buffer *b){ - return oggpack_bits(b); -} - -unsigned char *oggpack_get_buffer(oggpack_buffer *b){ - return(b->buffer); -} - -unsigned char *oggpackB_get_buffer(oggpack_buffer *b){ - return oggpack_get_buffer(b); -} - -/* Self test of the bitwise routines; everything else is based on - them, so they damned well better be solid. */ - -#ifdef _V_SELFTEST -#include <stdio.h> - -static int ilog(unsigned int v){ - int ret=0; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - -oggpack_buffer o; -oggpack_buffer r; - -void report(char *in){ - fprintf(stderr,"%s",in); - exit(1); -} - -void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){ - long bytes,i; - unsigned char *buffer; - - oggpack_reset(&o); - for(i=0;i<vals;i++) - oggpack_write(&o,b[i],bits?bits:ilog(b[i])); - buffer=oggpack_get_buffer(&o); - bytes=oggpack_bytes(&o); - if(bytes!=compsize)report("wrong number of bytes!\n"); - for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){ - for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]); - report("wrote incorrect value!\n"); - } - oggpack_readinit(&r,buffer,bytes); - for(i=0;i<vals;i++){ - int tbit=bits?bits:ilog(b[i]); - if(oggpack_look(&r,tbit)==-1) - report("out of data!\n"); - if(oggpack_look(&r,tbit)!=(b[i]&mask[tbit])) - report("looked at incorrect value!\n"); - if(tbit==1) - if(oggpack_look1(&r)!=(b[i]&mask[tbit])) - report("looked at single bit incorrect value!\n"); - if(tbit==1){ - if(oggpack_read1(&r)!=(b[i]&mask[tbit])) - report("read incorrect single bit value!\n"); - }else{ - if(oggpack_read(&r,tbit)!=(b[i]&mask[tbit])) - report("read incorrect value!\n"); - } - } - if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n"); -} - -void cliptestB(unsigned long *b,int vals,int bits,int *comp,int compsize){ - long bytes,i; - unsigned char *buffer; - - oggpackB_reset(&o); - for(i=0;i<vals;i++) - oggpackB_write(&o,b[i],bits?bits:ilog(b[i])); - buffer=oggpackB_get_buffer(&o); - bytes=oggpackB_bytes(&o); - if(bytes!=compsize)report("wrong number of bytes!\n"); - for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){ - for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]); - report("wrote incorrect value!\n"); - } - oggpackB_readinit(&r,buffer,bytes); - for(i=0;i<vals;i++){ - int tbit=bits?bits:ilog(b[i]); - if(oggpackB_look(&r,tbit)==-1) - report("out of data!\n"); - if(oggpackB_look(&r,tbit)!=(b[i]&mask[tbit])) - report("looked at incorrect value!\n"); - if(tbit==1) - if(oggpackB_look1(&r)!=(b[i]&mask[tbit])) - report("looked at single bit incorrect value!\n"); - if(tbit==1){ - if(oggpackB_read1(&r)!=(b[i]&mask[tbit])) - report("read incorrect single bit value!\n"); - }else{ - if(oggpackB_read(&r,tbit)!=(b[i]&mask[tbit])) - report("read incorrect value!\n"); - } - } - if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n"); -} - -int main(void){ - unsigned char *buffer; - long bytes,i; - static unsigned long testbuffer1[]= - {18,12,103948,4325,543,76,432,52,3,65,4,56,32,42,34,21,1,23,32,546,456,7, - 567,56,8,8,55,3,52,342,341,4,265,7,67,86,2199,21,7,1,5,1,4}; - int test1size=43; - - static unsigned long testbuffer2[]= - {216531625L,1237861823,56732452,131,3212421,12325343,34547562,12313212, - 1233432,534,5,346435231,14436467,7869299,76326614,167548585, - 85525151,0,12321,1,349528352}; - int test2size=21; - - static unsigned long testbuffer3[]= - {1,0,14,0,1,0,12,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1, - 0,1,30,1,1,1,0,0,1,0,0,0,12,0,11,0,1,0,0,1}; - int test3size=56; - - static unsigned long large[]= - {2136531625L,2137861823,56732452,131,3212421,12325343,34547562,12313212, - 1233432,534,5,2146435231,14436467,7869299,76326614,167548585, - 85525151,0,12321,1,2146528352}; - - int onesize=33; - static int one[33]={146,25,44,151,195,15,153,176,233,131,196,65,85,172,47,40, - 34,242,223,136,35,222,211,86,171,50,225,135,214,75,172, - 223,4}; - static int oneB[33]={150,101,131,33,203,15,204,216,105,193,156,65,84,85,222, - 8,139,145,227,126,34,55,244,171,85,100,39,195,173,18, - 245,251,128}; - - int twosize=6; - static int two[6]={61,255,255,251,231,29}; - static int twoB[6]={247,63,255,253,249,120}; - - int threesize=54; - static int three[54]={169,2,232,252,91,132,156,36,89,13,123,176,144,32,254, - 142,224,85,59,121,144,79,124,23,67,90,90,216,79,23,83, - 58,135,196,61,55,129,183,54,101,100,170,37,127,126,10, - 100,52,4,14,18,86,77,1}; - static int threeB[54]={206,128,42,153,57,8,183,251,13,89,36,30,32,144,183, - 130,59,240,121,59,85,223,19,228,180,134,33,107,74,98, - 233,253,196,135,63,2,110,114,50,155,90,127,37,170,104, - 200,20,254,4,58,106,176,144,0}; - - int foursize=38; - static int four[38]={18,6,163,252,97,194,104,131,32,1,7,82,137,42,129,11,72, - 132,60,220,112,8,196,109,64,179,86,9,137,195,208,122,169, - 28,2,133,0,1}; - static int fourB[38]={36,48,102,83,243,24,52,7,4,35,132,10,145,21,2,93,2,41, - 1,219,184,16,33,184,54,149,170,132,18,30,29,98,229,67, - 129,10,4,32}; - - int fivesize=45; - static int five[45]={169,2,126,139,144,172,30,4,80,72,240,59,130,218,73,62, - 241,24,210,44,4,20,0,248,116,49,135,100,110,130,181,169, - 84,75,159,2,1,0,132,192,8,0,0,18,22}; - static int fiveB[45]={1,84,145,111,245,100,128,8,56,36,40,71,126,78,213,226, - 124,105,12,0,133,128,0,162,233,242,67,152,77,205,77, - 172,150,169,129,79,128,0,6,4,32,0,27,9,0}; - - int sixsize=7; - static int six[7]={17,177,170,242,169,19,148}; - static int sixB[7]={136,141,85,79,149,200,41}; - - /* Test read/write together */ - /* Later we test against pregenerated bitstreams */ - oggpack_writeinit(&o); - - fprintf(stderr,"\nSmall preclipped packing (LSb): "); - cliptest(testbuffer1,test1size,0,one,onesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nNull bit call (LSb): "); - cliptest(testbuffer3,test3size,0,two,twosize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nLarge preclipped packing (LSb): "); - cliptest(testbuffer2,test2size,0,three,threesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\n32 bit preclipped packing (LSb): "); - oggpack_reset(&o); - for(i=0;i<test2size;i++) - oggpack_write(&o,large[i],32); - buffer=oggpack_get_buffer(&o); - bytes=oggpack_bytes(&o); - oggpack_readinit(&r,buffer,bytes); - for(i=0;i<test2size;i++){ - if(oggpack_look(&r,32)==-1)report("out of data. failed!"); - if(oggpack_look(&r,32)!=large[i]){ - fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpack_look(&r,32),large[i], - oggpack_look(&r,32),large[i]); - report("read incorrect value!\n"); - } - oggpack_adv(&r,32); - } - if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n"); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nSmall unclipped packing (LSb): "); - cliptest(testbuffer1,test1size,7,four,foursize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nLarge unclipped packing (LSb): "); - cliptest(testbuffer2,test2size,17,five,fivesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nSingle bit unclipped packing (LSb): "); - cliptest(testbuffer3,test3size,1,six,sixsize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nTesting read past end (LSb): "); - oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8); - for(i=0;i<64;i++){ - if(oggpack_read(&r,1)!=0){ - fprintf(stderr,"failed; got -1 prematurely.\n"); - exit(1); - } - } - if(oggpack_look(&r,1)!=-1 || - oggpack_read(&r,1)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8); - if(oggpack_read(&r,30)!=0 || oggpack_read(&r,16)!=0){ - fprintf(stderr,"failed 2; got -1 prematurely.\n"); - exit(1); - } - - if(oggpack_look(&r,18)!=0 || - oggpack_look(&r,18)!=0){ - fprintf(stderr,"failed 3; got -1 prematurely.\n"); - exit(1); - } - if(oggpack_look(&r,19)!=-1 || - oggpack_look(&r,19)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - if(oggpack_look(&r,32)!=-1 || - oggpack_look(&r,32)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - oggpack_writeclear(&o); - fprintf(stderr,"ok.\n"); - - /********** lazy, cut-n-paste retest with MSb packing ***********/ - - /* Test read/write together */ - /* Later we test against pregenerated bitstreams */ - oggpackB_writeinit(&o); - - fprintf(stderr,"\nSmall preclipped packing (MSb): "); - cliptestB(testbuffer1,test1size,0,oneB,onesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nNull bit call (MSb): "); - cliptestB(testbuffer3,test3size,0,twoB,twosize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nLarge preclipped packing (MSb): "); - cliptestB(testbuffer2,test2size,0,threeB,threesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\n32 bit preclipped packing (MSb): "); - oggpackB_reset(&o); - for(i=0;i<test2size;i++) - oggpackB_write(&o,large[i],32); - buffer=oggpackB_get_buffer(&o); - bytes=oggpackB_bytes(&o); - oggpackB_readinit(&r,buffer,bytes); - for(i=0;i<test2size;i++){ - if(oggpackB_look(&r,32)==-1)report("out of data. failed!"); - if(oggpackB_look(&r,32)!=large[i]){ - fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpackB_look(&r,32),large[i], - oggpackB_look(&r,32),large[i]); - report("read incorrect value!\n"); - } - oggpackB_adv(&r,32); - } - if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n"); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nSmall unclipped packing (MSb): "); - cliptestB(testbuffer1,test1size,7,fourB,foursize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nLarge unclipped packing (MSb): "); - cliptestB(testbuffer2,test2size,17,fiveB,fivesize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nSingle bit unclipped packing (MSb): "); - cliptestB(testbuffer3,test3size,1,sixB,sixsize); - fprintf(stderr,"ok."); - - fprintf(stderr,"\nTesting read past end (MSb): "); - oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8); - for(i=0;i<64;i++){ - if(oggpackB_read(&r,1)!=0){ - fprintf(stderr,"failed; got -1 prematurely.\n"); - exit(1); - } - } - if(oggpackB_look(&r,1)!=-1 || - oggpackB_read(&r,1)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8); - if(oggpackB_read(&r,30)!=0 || oggpackB_read(&r,16)!=0){ - fprintf(stderr,"failed 2; got -1 prematurely.\n"); - exit(1); - } - - if(oggpackB_look(&r,18)!=0 || - oggpackB_look(&r,18)!=0){ - fprintf(stderr,"failed 3; got -1 prematurely.\n"); - exit(1); - } - if(oggpackB_look(&r,19)!=-1 || - oggpackB_look(&r,19)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - if(oggpackB_look(&r,32)!=-1 || - oggpackB_look(&r,32)!=-1){ - fprintf(stderr,"failed; read past end without -1.\n"); - exit(1); - } - oggpackB_writeclear(&o); - fprintf(stderr,"ok.\n\n"); - - - return(0); -} -#endif /* _V_SELFTEST */ - -#undef BUFFER_INCREMENT diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/framing.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/framing.c deleted file mode 100755 index 2097d25..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/framing.c +++ /dev/null @@ -1,2093 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE Ogg CONTAINER SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: code raw packets into framed OggSquish stream and - decode Ogg streams back into raw packets - last mod: $Id: framing.c 18052 2011-08-04 17:57:02Z giles $ - - note: The CRC code is directly derived from public domain code by - Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html - for details. - - ********************************************************************/ - -#include <stdlib.h> -#include <string.h> -#include "ogg.h" - -/* A complete description of Ogg framing exists in docs/framing.html */ - -int ogg_page_version(const ogg_page *og){ - return((int)(og->header[4])); -} - -int ogg_page_continued(const ogg_page *og){ - return((int)(og->header[5]&0x01)); -} - -int ogg_page_bos(const ogg_page *og){ - return((int)(og->header[5]&0x02)); -} - -int ogg_page_eos(const ogg_page *og){ - return((int)(og->header[5]&0x04)); -} - -ogg_int64_t ogg_page_granulepos(const ogg_page *og){ - unsigned char *page=og->header; - ogg_int64_t granulepos=page[13]&(0xff); - granulepos= (granulepos<<8)|(page[12]&0xff); - granulepos= (granulepos<<8)|(page[11]&0xff); - granulepos= (granulepos<<8)|(page[10]&0xff); - granulepos= (granulepos<<8)|(page[9]&0xff); - granulepos= (granulepos<<8)|(page[8]&0xff); - granulepos= (granulepos<<8)|(page[7]&0xff); - granulepos= (granulepos<<8)|(page[6]&0xff); - return(granulepos); -} - -int ogg_page_serialno(const ogg_page *og){ - return(og->header[14] | - (og->header[15]<<8) | - (og->header[16]<<16) | - (og->header[17]<<24)); -} - -long ogg_page_pageno(const ogg_page *og){ - return(og->header[18] | - (og->header[19]<<8) | - (og->header[20]<<16) | - (og->header[21]<<24)); -} - - - -/* returns the number of packets that are completed on this page (if - the leading packet is begun on a previous page, but ends on this - page, it's counted */ - -/* NOTE: - If a page consists of a packet begun on a previous page, and a new - packet begun (but not completed) on this page, the return will be: - ogg_page_packets(page) ==1, - ogg_page_continued(page) !=0 - - If a page happens to be a single packet that was begun on a - previous page, and spans to the next page (in the case of a three or - more page packet), the return will be: - ogg_page_packets(page) ==0, - ogg_page_continued(page) !=0 -*/ - -int ogg_page_packets(const ogg_page *og){ - int i,n=og->header[26],count=0; - for(i=0;i<n;i++) - if(og->header[27+i]<255)count++; - return(count); -} - - -#if 0 -/* helper to initialize lookup for direct-table CRC (illustrative; we - use the static init below) */ - -static ogg_uint32_t _ogg_crc_entry(unsigned long index){ - int i; - unsigned long r; - - r = index << 24; - for (i=0; i<8; i++) - if (r & 0x80000000UL) - r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator - polynomial, although we use an - unreflected alg and an init/final - of 0, not 0xffffffff */ - else - r<<=1; - return (r & 0xffffffffUL); -} -#endif - -static const ogg_uint32_t crc_lookup[256]={ - 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9, - 0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005, - 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61, - 0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd, - 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9, - 0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75, - 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011, - 0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd, - 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039, - 0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5, - 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81, - 0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d, - 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49, - 0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95, - 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1, - 0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d, - 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae, - 0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072, - 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16, - 0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca, - 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde, - 0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02, - 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066, - 0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba, - 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e, - 0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692, - 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6, - 0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a, - 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e, - 0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2, - 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686, - 0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a, - 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637, - 0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb, - 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f, - 0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53, - 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47, - 0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b, - 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff, - 0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623, - 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7, - 0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b, - 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f, - 0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3, - 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7, - 0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b, - 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f, - 0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3, - 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640, - 0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c, - 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8, - 0x68860bfd,0x6c47164a,0x61043093,0x65c52d24, - 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30, - 0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec, - 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088, - 0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654, - 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0, - 0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c, - 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18, - 0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4, - 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0, - 0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c, - 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668, - 0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4}; - -/* init the encode/decode logical stream state */ - -int ogg_stream_init(ogg_stream_state *os,int serialno){ - if(os){ - memset(os,0,sizeof(*os)); - os->body_storage=16*1024; - os->lacing_storage=1024; - - os->body_data=_ogg_malloc(os->body_storage*sizeof(*os->body_data)); - os->lacing_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals)); - os->granule_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals)); - - if(!os->body_data || !os->lacing_vals || !os->granule_vals){ - ogg_stream_clear(os); - return -1; - } - - os->serialno=serialno; - - return(0); - } - return(-1); -} - -/* async/delayed error detection for the ogg_stream_state */ -int ogg_stream_check(ogg_stream_state *os){ - if(!os || !os->body_data) return -1; - return 0; -} - -/* _clear does not free os, only the non-flat storage within */ -int ogg_stream_clear(ogg_stream_state *os){ - if(os){ - if(os->body_data)_ogg_free(os->body_data); - if(os->lacing_vals)_ogg_free(os->lacing_vals); - if(os->granule_vals)_ogg_free(os->granule_vals); - - memset(os,0,sizeof(*os)); - } - return(0); -} - -int ogg_stream_destroy(ogg_stream_state *os){ - if(os){ - ogg_stream_clear(os); - _ogg_free(os); - } - return(0); -} - -/* Helpers for ogg_stream_encode; this keeps the structure and - what's happening fairly clear */ - -static int _os_body_expand(ogg_stream_state *os,int needed){ - if(os->body_storage<=os->body_fill+needed){ - void *ret; - ret=_ogg_realloc(os->body_data,(os->body_storage+needed+1024)* - sizeof(*os->body_data)); - if(!ret){ - ogg_stream_clear(os); - return -1; - } - os->body_storage+=(needed+1024); - os->body_data=ret; - } - return 0; -} - -static int _os_lacing_expand(ogg_stream_state *os,int needed){ - if(os->lacing_storage<=os->lacing_fill+needed){ - void *ret; - ret=_ogg_realloc(os->lacing_vals,(os->lacing_storage+needed+32)* - sizeof(*os->lacing_vals)); - if(!ret){ - ogg_stream_clear(os); - return -1; - } - os->lacing_vals=ret; - ret=_ogg_realloc(os->granule_vals,(os->lacing_storage+needed+32)* - sizeof(*os->granule_vals)); - if(!ret){ - ogg_stream_clear(os); - return -1; - } - os->granule_vals=ret; - os->lacing_storage+=(needed+32); - } - return 0; -} - -/* checksum the page */ -/* Direct table CRC; note that this will be faster in the future if we - perform the checksum simultaneously with other copies */ - -void ogg_page_checksum_set(ogg_page *og){ - if(og){ - ogg_uint32_t crc_reg=0; - int i; - - /* safety; needed for API behavior, but not framing code */ - og->header[22]=0; - og->header[23]=0; - og->header[24]=0; - og->header[25]=0; - - for(i=0;i<og->header_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]]; - for(i=0;i<og->body_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]]; - - og->header[22]=(unsigned char)(crc_reg&0xff); - og->header[23]=(unsigned char)((crc_reg>>8)&0xff); - og->header[24]=(unsigned char)((crc_reg>>16)&0xff); - og->header[25]=(unsigned char)((crc_reg>>24)&0xff); - } -} - -/* submit data to the internal buffer of the framing engine */ -int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, int count, - long e_o_s, ogg_int64_t granulepos){ - - int bytes = 0, lacing_vals, i; - - if(ogg_stream_check(os)) return -1; - if(!iov) return 0; - - for (i = 0; i < count; ++i) bytes += (int)iov[i].iov_len; - lacing_vals=bytes/255+1; - - if(os->body_returned){ - /* advance packet data according to the body_returned pointer. We - had to keep it around to return a pointer into the buffer last - call */ - - os->body_fill-=os->body_returned; - if(os->body_fill) - memmove(os->body_data,os->body_data+os->body_returned, - os->body_fill); - os->body_returned=0; - } - - /* make sure we have the buffer storage */ - if(_os_body_expand(os,bytes) || _os_lacing_expand(os,lacing_vals)) - return -1; - - /* Copy in the submitted packet. Yes, the copy is a waste; this is - the liability of overly clean abstraction for the time being. It - will actually be fairly easy to eliminate the extra copy in the - future */ - - for (i = 0; i < count; ++i) { - memcpy(os->body_data+os->body_fill, iov[i].iov_base, iov[i].iov_len); - os->body_fill += (int)iov[i].iov_len; - } - - /* Store lacing vals for this packet */ - for(i=0;i<lacing_vals-1;i++){ - os->lacing_vals[os->lacing_fill+i]=255; - os->granule_vals[os->lacing_fill+i]=os->granulepos; - } - os->lacing_vals[os->lacing_fill+i]=bytes%255; - os->granulepos=os->granule_vals[os->lacing_fill+i]=granulepos; - - /* flag the first segment as the beginning of the packet */ - os->lacing_vals[os->lacing_fill]|= 0x100; - - os->lacing_fill+=lacing_vals; - - /* for the sake of completeness */ - os->packetno++; - - if(e_o_s)os->e_o_s=1; - - return(0); -} - -int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){ - ogg_iovec_t iov; - iov.iov_base = op->packet; - iov.iov_len = op->bytes; - return ogg_stream_iovecin(os, &iov, 1, op->e_o_s, op->granulepos); -} - -/* Conditionally flush a page; force==0 will only flush nominal-size - pages, force==1 forces us to flush a page regardless of page size - so long as there's any data available at all. */ -static int ogg_stream_flush_i(ogg_stream_state *os,ogg_page *og, int force, int nfill){ - int i; - int vals=0; - int maxvals=(os->lacing_fill>255?255:os->lacing_fill); - int bytes=0; - long acc=0; - ogg_int64_t granule_pos=-1; - - if(ogg_stream_check(os)) return(0); - if(maxvals==0) return(0); - - /* construct a page */ - /* decide how many segments to include */ - - /* If this is the initial header case, the first page must only include - the initial header packet */ - if(os->b_o_s==0){ /* 'initial header page' case */ - granule_pos=0; - for(vals=0;vals<maxvals;vals++){ - if((os->lacing_vals[vals]&0x0ff)<255){ - vals++; - break; - } - } - }else{ - - /* The extra packets_done, packet_just_done logic here attempts to do two things: - 1) Don't unneccessarily span pages. - 2) Unless necessary, don't flush pages if there are less than four packets on - them; this expands page size to reduce unneccessary overhead if incoming packets - are large. - These are not necessary behaviors, just 'always better than naive flushing' - without requiring an application to explicitly request a specific optimized - behavior. We'll want an explicit behavior setup pathway eventually as well. */ - - int packets_done=0; - int packet_just_done=0; - for(vals=0;vals<maxvals;vals++){ - if(acc>nfill && packet_just_done>=4){ - force=1; - break; - } - acc+=os->lacing_vals[vals]&0x0ff; - if((os->lacing_vals[vals]&0xff)<255){ - granule_pos=os->granule_vals[vals]; - packet_just_done=++packets_done; - }else - packet_just_done=0; - } - if(vals==255)force=1; - } - - if(!force) return(0); - - /* construct the header in temp storage */ - memcpy(os->header,"OggS",4); - - /* stream structure version */ - os->header[4]=0x00; - - /* continued packet flag? */ - os->header[5]=0x00; - if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01; - /* first page flag? */ - if(os->b_o_s==0)os->header[5]|=0x02; - /* last page flag? */ - if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04; - os->b_o_s=1; - - /* 64 bits of PCM position */ - for(i=6;i<14;i++){ - os->header[i]=(unsigned char)(granule_pos&0xff); - granule_pos>>=8; - } - - /* 32 bits of stream serial number */ - { - long serialno=os->serialno; - for(i=14;i<18;i++){ - os->header[i]=(unsigned char)(serialno&0xff); - serialno>>=8; - } - } - - /* 32 bits of page counter (we have both counter and page header - because this val can roll over) */ - if(os->pageno==-1)os->pageno=0; /* because someone called - stream_reset; this would be a - strange thing to do in an - encode stream, but it has - plausible uses */ - { - long pageno=os->pageno++; - for(i=18;i<22;i++){ - os->header[i]=(unsigned char)(pageno&0xff); - pageno>>=8; - } - } - - /* zero for computation; filled in later */ - os->header[22]=0; - os->header[23]=0; - os->header[24]=0; - os->header[25]=0; - - /* segment table */ - os->header[26]=(unsigned char)(vals&0xff); - for(i=0;i<vals;i++) - bytes+=os->header[i+27]=(unsigned char)(os->lacing_vals[i]&0xff); - - /* set pointers in the ogg_page struct */ - og->header=os->header; - og->header_len=os->header_fill=vals+27; - og->body=os->body_data+os->body_returned; - og->body_len=bytes; - - /* advance the lacing data and set the body_returned pointer */ - - os->lacing_fill-=vals; - memmove(os->lacing_vals,os->lacing_vals+vals,os->lacing_fill*sizeof(*os->lacing_vals)); - memmove(os->granule_vals,os->granule_vals+vals,os->lacing_fill*sizeof(*os->granule_vals)); - os->body_returned+=bytes; - - /* calculate the checksum */ - - ogg_page_checksum_set(og); - - /* done */ - return(1); -} - -/* This will flush remaining packets into a page (returning nonzero), - even if there is not enough data to trigger a flush normally - (undersized page). If there are no packets or partial packets to - flush, ogg_stream_flush returns 0. Note that ogg_stream_flush will - try to flush a normal sized page like ogg_stream_pageout; a call to - ogg_stream_flush does not guarantee that all packets have flushed. - Only a return value of 0 from ogg_stream_flush indicates all packet - data is flushed into pages. - - since ogg_stream_flush will flush the last page in a stream even if - it's undersized, you almost certainly want to use ogg_stream_pageout - (and *not* ogg_stream_flush) unless you specifically need to flush - a page regardless of size in the middle of a stream. */ - -int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){ - return ogg_stream_flush_i(os,og,1,4096); -} - -/* Like the above, but an argument is provided to adjust the nominal - page size for applications which are smart enough to provide their - own delay based flushing */ - -int ogg_stream_flush_fill(ogg_stream_state *os,ogg_page *og, int nfill){ - return ogg_stream_flush_i(os,og,1,nfill); -} - -/* This constructs pages from buffered packet segments. The pointers -returned are to static buffers; do not free. The returned buffers are -good only until the next call (using the same ogg_stream_state) */ - -int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){ - int force=0; - if(ogg_stream_check(os)) return 0; - - if((os->e_o_s&&os->lacing_fill) || /* 'were done, now flush' case */ - (os->lacing_fill&&!os->b_o_s)) /* 'initial header page' case */ - force=1; - - return(ogg_stream_flush_i(os,og,force,4096)); -} - -/* Like the above, but an argument is provided to adjust the nominal -page size for applications which are smart enough to provide their -own delay based flushing */ - -int ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill){ - int force=0; - if(ogg_stream_check(os)) return 0; - - if((os->e_o_s&&os->lacing_fill) || /* 'were done, now flush' case */ - (os->lacing_fill&&!os->b_o_s)) /* 'initial header page' case */ - force=1; - - return(ogg_stream_flush_i(os,og,force,nfill)); -} - -int ogg_stream_eos(ogg_stream_state *os){ - if(ogg_stream_check(os)) return 1; - return os->e_o_s; -} - -/* DECODING PRIMITIVES: packet streaming layer **********************/ - -/* This has two layers to place more of the multi-serialno and paging - control in the application's hands. First, we expose a data buffer - using ogg_sync_buffer(). The app either copies into the - buffer, or passes it directly to read(), etc. We then call - ogg_sync_wrote() to tell how many bytes we just added. - - Pages are returned (pointers into the buffer in ogg_sync_state) - by ogg_sync_pageout(). The page is then submitted to - ogg_stream_pagein() along with the appropriate - ogg_stream_state* (ie, matching serialno). We then get raw - packets out calling ogg_stream_packetout() with a - ogg_stream_state. */ - -/* initialize the struct to a known state */ -int ogg_sync_init(ogg_sync_state *oy){ - if(oy){ - oy->storage = -1; /* used as a readiness flag */ - memset(oy,0,sizeof(*oy)); - } - return(0); -} - -/* clear non-flat storage within */ -int ogg_sync_clear(ogg_sync_state *oy){ - if(oy){ - if(oy->data)_ogg_free(oy->data); - memset(oy,0,sizeof(*oy)); - } - return(0); -} - -int ogg_sync_destroy(ogg_sync_state *oy){ - if(oy){ - ogg_sync_clear(oy); - _ogg_free(oy); - } - return(0); -} - -int ogg_sync_check(ogg_sync_state *oy){ - if(oy->storage<0) return -1; - return 0; -} - -char *ogg_sync_buffer(ogg_sync_state *oy, long size){ - if(ogg_sync_check(oy)) return NULL; - - /* first, clear out any space that has been previously returned */ - if(oy->returned){ - oy->fill-=oy->returned; - if(oy->fill>0) - memmove(oy->data,oy->data+oy->returned,oy->fill); - oy->returned=0; - } - - if(size>oy->storage-oy->fill){ - /* We need to extend the internal buffer */ - long newsize=size+oy->fill+4096; /* an extra page to be nice */ - void *ret; - - if(oy->data) - ret=_ogg_realloc(oy->data,newsize); - else - ret=_ogg_malloc(newsize); - if(!ret){ - ogg_sync_clear(oy); - return NULL; - } - oy->data=ret; - oy->storage=newsize; - } - - /* expose a segment at least as large as requested at the fill mark */ - return((char *)oy->data+oy->fill); -} - -int ogg_sync_wrote(ogg_sync_state *oy, long bytes){ - if(ogg_sync_check(oy))return -1; - if(oy->fill+bytes>oy->storage)return -1; - oy->fill+=bytes; - return(0); -} - -/* sync the stream. This is meant to be useful for finding page - boundaries. - - return values for this: - -n) skipped n bytes - 0) page not ready; more data (no bytes skipped) - n) page synced at current location; page length n bytes - -*/ - -long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){ - unsigned char *page=oy->data+oy->returned; - unsigned char *next; - long bytes=oy->fill-oy->returned; - - if(ogg_sync_check(oy))return 0; - - if(oy->headerbytes==0){ - int headerbytes,i; - if(bytes<27)return(0); /* not enough for a header */ - - /* verify capture pattern */ - if(memcmp(page,"OggS",4))goto sync_fail; - - headerbytes=page[26]+27; - if(bytes<headerbytes)return(0); /* not enough for header + seg table */ - - /* count up body length in the segment table */ - - for(i=0;i<page[26];i++) - oy->bodybytes+=page[27+i]; - oy->headerbytes=headerbytes; - } - - if(oy->bodybytes+oy->headerbytes>bytes)return(0); - - /* The whole test page is buffered. Verify the checksum */ - { - /* Grab the checksum bytes, set the header field to zero */ - char chksum[4]; - ogg_page log; - - memcpy(chksum,page+22,4); - memset(page+22,0,4); - - /* set up a temp page struct and recompute the checksum */ - log.header=page; - log.header_len=oy->headerbytes; - log.body=page+oy->headerbytes; - log.body_len=oy->bodybytes; - ogg_page_checksum_set(&log); - - /* Compare */ - if(memcmp(chksum,page+22,4)){ - /* D'oh. Mismatch! Corrupt page (or miscapture and not a page - at all) */ - /* replace the computed checksum with the one actually read in */ - memcpy(page+22,chksum,4); - - /* Bad checksum. Lose sync */ - goto sync_fail; - } - } - - /* yes, have a whole page all ready to go */ - { - unsigned char *page=oy->data+oy->returned; - long bytes; - - if(og){ - og->header=page; - og->header_len=oy->headerbytes; - og->body=page+oy->headerbytes; - og->body_len=oy->bodybytes; - } - - oy->unsynced=0; - oy->returned+=(bytes=oy->headerbytes+oy->bodybytes); - oy->headerbytes=0; - oy->bodybytes=0; - return(bytes); - } - - sync_fail: - - oy->headerbytes=0; - oy->bodybytes=0; - - /* search for possible capture */ - next=memchr(page+1,'O',bytes-1); - if(!next) - next=oy->data+oy->fill; - - oy->returned=(int)(next-oy->data); - return((long)-(next-page)); -} - -/* sync the stream and get a page. Keep trying until we find a page. - Suppress 'sync errors' after reporting the first. - - return values: - -1) recapture (hole in data) - 0) need more data - 1) page returned - - Returns pointers into buffered data; invalidated by next call to - _stream, _clear, _init, or _buffer */ - -int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){ - - if(ogg_sync_check(oy))return 0; - - /* all we need to do is verify a page at the head of the stream - buffer. If it doesn't verify, we look for the next potential - frame */ - - for(;;){ - long ret=ogg_sync_pageseek(oy,og); - if(ret>0){ - /* have a page */ - return(1); - } - if(ret==0){ - /* need more data */ - return(0); - } - - /* head did not start a synced page... skipped some bytes */ - if(!oy->unsynced){ - oy->unsynced=1; - return(-1); - } - - /* loop. keep looking */ - - } -} - -/* add the incoming page to the stream state; we decompose the page - into packet segments here as well. */ - -int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){ - unsigned char *header=og->header; - unsigned char *body=og->body; - long bodysize=og->body_len; - int segptr=0; - - int version=ogg_page_version(og); - int continued=ogg_page_continued(og); - int bos=ogg_page_bos(og); - int eos=ogg_page_eos(og); - ogg_int64_t granulepos=ogg_page_granulepos(og); - int serialno=ogg_page_serialno(og); - long pageno=ogg_page_pageno(og); - int segments=header[26]; - - if(ogg_stream_check(os)) return -1; - - /* clean up 'returned data' */ - { - long lr=os->lacing_returned; - long br=os->body_returned; - - /* body data */ - if(br){ - os->body_fill-=br; - if(os->body_fill) - memmove(os->body_data,os->body_data+br,os->body_fill); - os->body_returned=0; - } - - if(lr){ - /* segment table */ - if(os->lacing_fill-lr){ - memmove(os->lacing_vals,os->lacing_vals+lr, - (os->lacing_fill-lr)*sizeof(*os->lacing_vals)); - memmove(os->granule_vals,os->granule_vals+lr, - (os->lacing_fill-lr)*sizeof(*os->granule_vals)); - } - os->lacing_fill-=lr; - os->lacing_packet-=lr; - os->lacing_returned=0; - } - } - - /* check the serial number */ - if(serialno!=os->serialno)return(-1); - if(version>0)return(-1); - - if(_os_lacing_expand(os,segments+1)) return -1; - - /* are we in sequence? */ - if(pageno!=os->pageno){ - int i; - - /* unroll previous partial packet (if any) */ - for(i=os->lacing_packet;i<os->lacing_fill;i++) - os->body_fill-=os->lacing_vals[i]&0xff; - os->lacing_fill=os->lacing_packet; - - /* make a note of dropped data in segment table */ - if(os->pageno!=-1){ - os->lacing_vals[os->lacing_fill++]=0x400; - os->lacing_packet++; - } - } - - /* are we a 'continued packet' page? If so, we may need to skip - some segments */ - if(continued){ - if(os->lacing_fill<1 || - os->lacing_vals[os->lacing_fill-1]==0x400){ - bos=0; - for(;segptr<segments;segptr++){ - int val=header[27+segptr]; - body+=val; - bodysize-=val; - if(val<255){ - segptr++; - break; - } - } - } - } - - if(bodysize){ - if(_os_body_expand(os,bodysize)) return -1; - memcpy(os->body_data+os->body_fill,body,bodysize); - os->body_fill+=bodysize; - } - - { - int saved=-1; - while(segptr<segments){ - int val=header[27+segptr]; - os->lacing_vals[os->lacing_fill]=val; - os->granule_vals[os->lacing_fill]=-1; - - if(bos){ - os->lacing_vals[os->lacing_fill]|=0x100; - bos=0; - } - - if(val<255)saved=os->lacing_fill; - - os->lacing_fill++; - segptr++; - - if(val<255)os->lacing_packet=os->lacing_fill; - } - - /* set the granulepos on the last granuleval of the last full packet */ - if(saved!=-1){ - os->granule_vals[saved]=granulepos; - } - - } - - if(eos){ - os->e_o_s=1; - if(os->lacing_fill>0) - os->lacing_vals[os->lacing_fill-1]|=0x200; - } - - os->pageno=pageno+1; - - return(0); -} - -/* clear things to an initial state. Good to call, eg, before seeking */ -int ogg_sync_reset(ogg_sync_state *oy){ - if(ogg_sync_check(oy))return -1; - - oy->fill=0; - oy->returned=0; - oy->unsynced=0; - oy->headerbytes=0; - oy->bodybytes=0; - return(0); -} - -int ogg_stream_reset(ogg_stream_state *os){ - if(ogg_stream_check(os)) return -1; - - os->body_fill=0; - os->body_returned=0; - - os->lacing_fill=0; - os->lacing_packet=0; - os->lacing_returned=0; - - os->header_fill=0; - - os->e_o_s=0; - os->b_o_s=0; - os->pageno=-1; - os->packetno=0; - os->granulepos=0; - - return(0); -} - -int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){ - if(ogg_stream_check(os)) return -1; - ogg_stream_reset(os); - os->serialno=serialno; - return(0); -} - -static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){ - - /* The last part of decode. We have the stream broken into packet - segments. Now we need to group them into packets (or return the - out of sync markers) */ - - int ptr=os->lacing_returned; - - if(os->lacing_packet<=ptr)return(0); - - if(os->lacing_vals[ptr]&0x400){ - /* we need to tell the codec there's a gap; it might need to - handle previous packet dependencies. */ - os->lacing_returned++; - os->packetno++; - return(-1); - } - - if(!op && !adv)return(1); /* just using peek as an inexpensive way - to ask if there's a whole packet - waiting */ - - /* Gather the whole packet. We'll have no holes or a partial packet */ - { - int size=os->lacing_vals[ptr]&0xff; - long bytes=size; - int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */ - int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */ - - while(size==255){ - int val=os->lacing_vals[++ptr]; - size=val&0xff; - if(val&0x200)eos=0x200; - bytes+=size; - } - - if(op){ - op->e_o_s=eos; - op->b_o_s=bos; - op->packet=os->body_data+os->body_returned; - op->packetno=os->packetno; - op->granulepos=os->granule_vals[ptr]; - op->bytes=bytes; - } - - if(adv){ - os->body_returned+=bytes; - os->lacing_returned=ptr+1; - os->packetno++; - } - } - return(1); -} - -int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){ - if(ogg_stream_check(os)) return 0; - return _packetout(os,op,1); -} - -int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){ - if(ogg_stream_check(os)) return 0; - return _packetout(os,op,0); -} - -void ogg_packet_clear(ogg_packet *op) { - _ogg_free(op->packet); - memset(op, 0, sizeof(*op)); -} - -#ifdef _V_SELFTEST -#include <stdio.h> - -ogg_stream_state os_en, os_de; -ogg_sync_state oy; - -void checkpacket(ogg_packet *op,long len, int no, long pos){ - long j; - static int sequence=0; - static int lastno=0; - - if(op->bytes!=len){ - fprintf(stderr,"incorrect packet length (%ld != %ld)!\n",op->bytes,len); - exit(1); - } - if(op->granulepos!=pos){ - fprintf(stderr,"incorrect packet granpos (%ld != %ld)!\n",(long)op->granulepos,pos); - exit(1); - } - - /* packet number just follows sequence/gap; adjust the input number - for that */ - if(no==0){ - sequence=0; - }else{ - sequence++; - if(no>lastno+1) - sequence++; - } - lastno=no; - if(op->packetno!=sequence){ - fprintf(stderr,"incorrect packet sequence %ld != %d\n", - (long)(op->packetno),sequence); - exit(1); - } - - /* Test data */ - for(j=0;j<op->bytes;j++) - if(op->packet[j]!=((j+no)&0xff)){ - fprintf(stderr,"body data mismatch (1) at pos %ld: %x!=%lx!\n\n", - j,op->packet[j],(j+no)&0xff); - exit(1); - } -} - -void check_page(unsigned char *data,const int *header,ogg_page *og){ - long j; - /* Test data */ - for(j=0;j<og->body_len;j++) - if(og->body[j]!=data[j]){ - fprintf(stderr,"body data mismatch (2) at pos %ld: %x!=%x!\n\n", - j,data[j],og->body[j]); - exit(1); - } - - /* Test header */ - for(j=0;j<og->header_len;j++){ - if(og->header[j]!=header[j]){ - fprintf(stderr,"header content mismatch at pos %ld:\n",j); - for(j=0;j<header[26]+27;j++) - fprintf(stderr," (%ld)%02x:%02x",j,header[j],og->header[j]); - fprintf(stderr,"\n"); - exit(1); - } - } - if(og->header_len!=header[26]+27){ - fprintf(stderr,"header length incorrect! (%ld!=%d)\n", - og->header_len,header[26]+27); - exit(1); - } -} - -void print_header(ogg_page *og){ - int j; - fprintf(stderr,"\nHEADER:\n"); - fprintf(stderr," capture: %c %c %c %c version: %d flags: %x\n", - og->header[0],og->header[1],og->header[2],og->header[3], - (int)og->header[4],(int)og->header[5]); - - fprintf(stderr," granulepos: %d serialno: %d pageno: %ld\n", - (og->header[9]<<24)|(og->header[8]<<16)| - (og->header[7]<<8)|og->header[6], - (og->header[17]<<24)|(og->header[16]<<16)| - (og->header[15]<<8)|og->header[14], - ((long)(og->header[21])<<24)|(og->header[20]<<16)| - (og->header[19]<<8)|og->header[18]); - - fprintf(stderr," checksum: %02x:%02x:%02x:%02x\n segments: %d (", - (int)og->header[22],(int)og->header[23], - (int)og->header[24],(int)og->header[25], - (int)og->header[26]); - - for(j=27;j<og->header_len;j++) - fprintf(stderr,"%d ",(int)og->header[j]); - fprintf(stderr,")\n\n"); -} - -void copy_page(ogg_page *og){ - unsigned char *temp=_ogg_malloc(og->header_len); - memcpy(temp,og->header,og->header_len); - og->header=temp; - - temp=_ogg_malloc(og->body_len); - memcpy(temp,og->body,og->body_len); - og->body=temp; -} - -void free_page(ogg_page *og){ - _ogg_free (og->header); - _ogg_free (og->body); -} - -void error(void){ - fprintf(stderr,"error!\n"); - exit(1); -} - -/* 17 only */ -const int head1_0[] = {0x4f,0x67,0x67,0x53,0,0x06, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x15,0xed,0xec,0x91, - 1, - 17}; - -/* 17, 254, 255, 256, 500, 510, 600 byte, pad */ -const int head1_1[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x59,0x10,0x6c,0x2c, - 1, - 17}; -const int head2_1[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x89,0x33,0x85,0xce, - 13, - 254,255,0,255,1,255,245,255,255,0, - 255,255,90}; - -/* nil packets; beginning,middle,end */ -const int head1_2[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; -const int head2_2[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x28,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x5c,0x3f,0x66,0xcb, - 17, - 17,254,255,0,0,255,1,0,255,245,255,255,0, - 255,255,90,0}; - -/* large initial packet */ -const int head1_3[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x01,0x27,0x31,0xaa, - 18, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,10}; - -const int head2_3[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x7f,0x4e,0x8a,0xd2, - 4, - 255,4,255,0}; - - -/* continuing packet test */ -const int head1_4[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_4[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0xf8,0x3c,0x19,0x79, - 255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255}; - -const int head3_4[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0x38,0xe6,0xb6,0x28, - 6, - 255,220,255,4,255,0}; - - -/* spill expansion test */ -const int head1_4b[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_4b[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0xce,0x8f,0x17,0x1a, - 23, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,10,255,4,255,0,0}; - - -const int head3_4b[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x14,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0x9b,0xb2,0x50,0xa1, - 1, - 0}; - -/* page with the 255 segment limit */ -const int head1_5[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_5[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0xfc,0x03,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0xed,0x2a,0x2e,0xa7, - 255, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10}; - -const int head3_5[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x00,0x04,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0x6c,0x3b,0x82,0x3d, - 1, - 50}; - - -/* packet that overspans over an entire page */ -const int head1_6[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_6[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x68,0x22,0x7c,0x3d, - 255, - 100, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255}; - -const int head3_6[] = {0x4f,0x67,0x67,0x53,0,0x01, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0xf4,0x87,0xba,0xf3, - 255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255}; - -const int head4_6[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,3,0,0,0, - 0xf7,0x2f,0x6c,0x60, - 5, - 254,255,4,255,0}; - -/* packet that overspans over an entire page */ -const int head1_7[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_7[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x68,0x22,0x7c,0x3d, - 255, - 100, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255}; - -const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0xd4,0xe0,0x60,0xe5, - 1, - 0}; - -void test_pack(const int *pl, const int **headers, int byteskip, - int pageskip, int packetskip){ - unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */ - long inptr=0; - long outptr=0; - long deptr=0; - long depacket=0; - long granule_pos=7,pageno=0; - int i,j,packets,pageout=pageskip; - int eosflag=0; - int bosflag=0; - - int byteskipcount=0; - - ogg_stream_reset(&os_en); - ogg_stream_reset(&os_de); - ogg_sync_reset(&oy); - - for(packets=0;packets<packetskip;packets++) - depacket+=pl[packets]; - - for(packets=0;;packets++)if(pl[packets]==-1)break; - - for(i=0;i<packets;i++){ - /* construct a test packet */ - ogg_packet op; - int len=pl[i]; - - op.packet=data+inptr; - op.bytes=len; - op.e_o_s=(pl[i+1]<0?1:0); - op.granulepos=granule_pos; - - granule_pos+=1024; - - for(j=0;j<len;j++)data[inptr++]=i+j; - - /* submit the test packet */ - ogg_stream_packetin(&os_en,&op); - - /* retrieve any finished pages */ - { - ogg_page og; - - while(ogg_stream_pageout(&os_en,&og)){ - /* We have a page. Check it carefully */ - - fprintf(stderr,"%ld, ",pageno); - - if(headers[pageno]==NULL){ - fprintf(stderr,"coded too many pages!\n"); - exit(1); - } - - check_page(data+outptr,headers[pageno],&og); - - outptr+=og.body_len; - pageno++; - if(pageskip){ - bosflag=1; - pageskip--; - deptr+=og.body_len; - } - - /* have a complete page; submit it to sync/decode */ - - { - ogg_page og_de; - ogg_packet op_de,op_de2; - char *buf=ogg_sync_buffer(&oy,og.header_len+og.body_len); - char *next=buf; - byteskipcount+=og.header_len; - if(byteskipcount>byteskip){ - memcpy(next,og.header,byteskipcount-byteskip); - next+=byteskipcount-byteskip; - byteskipcount=byteskip; - } - - byteskipcount+=og.body_len; - if(byteskipcount>byteskip){ - memcpy(next,og.body,byteskipcount-byteskip); - next+=byteskipcount-byteskip; - byteskipcount=byteskip; - } - - ogg_sync_wrote(&oy,next-buf); - - while(1){ - int ret=ogg_sync_pageout(&oy,&og_de); - if(ret==0)break; - if(ret<0)continue; - /* got a page. Happy happy. Verify that it's good. */ - - fprintf(stderr,"(%d), ",pageout); - - check_page(data+deptr,headers[pageout],&og_de); - deptr+=og_de.body_len; - pageout++; - - /* submit it to deconstitution */ - ogg_stream_pagein(&os_de,&og_de); - - /* packets out? */ - while(ogg_stream_packetpeek(&os_de,&op_de2)>0){ - ogg_stream_packetpeek(&os_de,NULL); - ogg_stream_packetout(&os_de,&op_de); /* just catching them all */ - - /* verify peek and out match */ - if(memcmp(&op_de,&op_de2,sizeof(op_de))){ - fprintf(stderr,"packetout != packetpeek! pos=%ld\n", - depacket); - exit(1); - } - - /* verify the packet! */ - /* check data */ - if(memcmp(data+depacket,op_de.packet,op_de.bytes)){ - fprintf(stderr,"packet data mismatch in decode! pos=%ld\n", - depacket); - exit(1); - } - /* check bos flag */ - if(bosflag==0 && op_de.b_o_s==0){ - fprintf(stderr,"b_o_s flag not set on packet!\n"); - exit(1); - } - if(bosflag && op_de.b_o_s){ - fprintf(stderr,"b_o_s flag incorrectly set on packet!\n"); - exit(1); - } - bosflag=1; - depacket+=op_de.bytes; - - /* check eos flag */ - if(eosflag){ - fprintf(stderr,"Multiple decoded packets with eos flag!\n"); - exit(1); - } - - if(op_de.e_o_s)eosflag=1; - - /* check granulepos flag */ - if(op_de.granulepos!=-1){ - fprintf(stderr," granule:%ld ",(long)op_de.granulepos); - } - } - } - } - } - } - } - _ogg_free(data); - if(headers[pageno]!=NULL){ - fprintf(stderr,"did not write last page!\n"); - exit(1); - } - if(headers[pageout]!=NULL){ - fprintf(stderr,"did not decode last page!\n"); - exit(1); - } - if(inptr!=outptr){ - fprintf(stderr,"encoded page data incomplete!\n"); - exit(1); - } - if(inptr!=deptr){ - fprintf(stderr,"decoded page data incomplete!\n"); - exit(1); - } - if(inptr!=depacket){ - fprintf(stderr,"decoded packet data incomplete!\n"); - exit(1); - } - if(!eosflag){ - fprintf(stderr,"Never got a packet with EOS set!\n"); - exit(1); - } - fprintf(stderr,"ok.\n"); -} - -int main(void){ - - ogg_stream_init(&os_en,0x04030201); - ogg_stream_init(&os_de,0x04030201); - ogg_sync_init(&oy); - - /* Exercise each code path in the framing code. Also verify that - the checksums are working. */ - - { - /* 17 only */ - const int packets[]={17, -1}; - const int *headret[]={head1_0,NULL}; - - fprintf(stderr,"testing single page encoding... "); - test_pack(packets,headret,0,0,0); - } - - { - /* 17, 254, 255, 256, 500, 510, 600 byte, pad */ - const int packets[]={17, 254, 255, 256, 500, 510, 600, -1}; - const int *headret[]={head1_1,head2_1,NULL}; - - fprintf(stderr,"testing basic page encoding... "); - test_pack(packets,headret,0,0,0); - } - - { - /* nil packets; beginning,middle,end */ - const int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1}; - const int *headret[]={head1_2,head2_2,NULL}; - - fprintf(stderr,"testing basic nil packets... "); - test_pack(packets,headret,0,0,0); - } - - { - /* large initial packet */ - const int packets[]={4345,259,255,-1}; - const int *headret[]={head1_3,head2_3,NULL}; - - fprintf(stderr,"testing initial-packet lacing > 4k... "); - test_pack(packets,headret,0,0,0); - } - - { - /* continuing packet test; with page spill expansion, we have to - overflow the lacing table. */ - const int packets[]={0,65500,259,255,-1}; - const int *headret[]={head1_4,head2_4,head3_4,NULL}; - - fprintf(stderr,"testing single packet page span... "); - test_pack(packets,headret,0,0,0); - } - - { - /* spill expand packet test */ - const int packets[]={0,4345,259,255,0,0,-1}; - const int *headret[]={head1_4b,head2_4b,head3_4b,NULL}; - - fprintf(stderr,"testing page spill expansion... "); - test_pack(packets,headret,0,0,0); - } - - /* page with the 255 segment limit */ - { - - const int packets[]={0,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,50,-1}; - const int *headret[]={head1_5,head2_5,head3_5,NULL}; - - fprintf(stderr,"testing max packet segments... "); - test_pack(packets,headret,0,0,0); - } - - { - /* packet that overspans over an entire page */ - const int packets[]={0,100,130049,259,255,-1}; - const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL}; - - fprintf(stderr,"testing very large packets... "); - test_pack(packets,headret,0,0,0); - } - - { - /* test for the libogg 1.1.1 resync in large continuation bug - found by Josh Coalson) */ - const int packets[]={0,100,130049,259,255,-1}; - const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL}; - - fprintf(stderr,"testing continuation resync in very large packets... "); - test_pack(packets,headret,100,2,3); - } - - { - /* term only page. why not? */ - const int packets[]={0,100,64770,-1}; - const int *headret[]={head1_7,head2_7,head3_7,NULL}; - - fprintf(stderr,"testing zero data page (1 nil packet)... "); - test_pack(packets,headret,0,0,0); - } - - - - { - /* build a bunch of pages for testing */ - unsigned char *data=_ogg_malloc(1024*1024); - int pl[]={0, 1,1,98,4079, 1,1,2954,2057, 76,34,912,0,234,1000,1000, 1000,300,-1}; - int inptr=0,i,j; - ogg_page og[5]; - - ogg_stream_reset(&os_en); - - for(i=0;pl[i]!=-1;i++){ - ogg_packet op; - int len=pl[i]; - - op.packet=data+inptr; - op.bytes=len; - op.e_o_s=(pl[i+1]<0?1:0); - op.granulepos=(i+1)*1000; - - for(j=0;j<len;j++)data[inptr++]=i+j; - ogg_stream_packetin(&os_en,&op); - } - - _ogg_free(data); - - /* retrieve finished pages */ - for(i=0;i<5;i++){ - if(ogg_stream_pageout(&os_en,&og[i])==0){ - fprintf(stderr,"Too few pages output building sync tests!\n"); - exit(1); - } - copy_page(&og[i]); - } - - /* Test lost pages on pagein/packetout: no rollback */ - { - ogg_page temp; - ogg_packet test; - - fprintf(stderr,"Testing loss of pages... "); - - ogg_sync_reset(&oy); - ogg_stream_reset(&os_de); - for(i=0;i<5;i++){ - memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header, - og[i].header_len); - ogg_sync_wrote(&oy,og[i].header_len); - memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len); - ogg_sync_wrote(&oy,og[i].body_len); - } - - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - ogg_sync_pageout(&oy,&temp); - /* skip */ - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - - /* do we get the expected results/packets? */ - - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,0,0,0); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,1,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,2,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,98,3,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,4079,4,5000); - if(ogg_stream_packetout(&os_de,&test)!=-1){ - fprintf(stderr,"Error: loss of page did not return error\n"); - exit(1); - } - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,76,9,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,34,10,-1); - fprintf(stderr,"ok.\n"); - } - - /* Test lost pages on pagein/packetout: rollback with continuation */ - { - ogg_page temp; - ogg_packet test; - - fprintf(stderr,"Testing loss of pages (rollback required)... "); - - ogg_sync_reset(&oy); - ogg_stream_reset(&os_de); - for(i=0;i<5;i++){ - memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header, - og[i].header_len); - ogg_sync_wrote(&oy,og[i].header_len); - memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len); - ogg_sync_wrote(&oy,og[i].body_len); - } - - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - ogg_sync_pageout(&oy,&temp); - /* skip */ - ogg_sync_pageout(&oy,&temp); - ogg_stream_pagein(&os_de,&temp); - - /* do we get the expected results/packets? */ - - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,0,0,0); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,1,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,2,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,98,3,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,4079,4,5000); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,5,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,1,6,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,2954,7,-1); - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,2057,8,9000); - if(ogg_stream_packetout(&os_de,&test)!=-1){ - fprintf(stderr,"Error: loss of page did not return error\n"); - exit(1); - } - if(ogg_stream_packetout(&os_de,&test)!=1)error(); - checkpacket(&test,300,17,18000); - fprintf(stderr,"ok.\n"); - } - - /* the rest only test sync */ - { - ogg_page og_de; - /* Test fractional page inputs: incomplete capture */ - fprintf(stderr,"Testing sync on partial inputs... "); - ogg_sync_reset(&oy); - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - 3); - ogg_sync_wrote(&oy,3); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - /* Test fractional page inputs: incomplete fixed header */ - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+3, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - /* Test fractional page inputs: incomplete header */ - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+23, - 5); - ogg_sync_wrote(&oy,5); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - /* Test fractional page inputs: incomplete body */ - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+28, - og[1].header_len-28); - ogg_sync_wrote(&oy,og[1].header_len-28); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,1000); - ogg_sync_wrote(&oy,1000); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body+1000, - og[1].body_len-1000); - ogg_sync_wrote(&oy,og[1].body_len-1000); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test fractional page inputs: page + incomplete capture */ - { - ogg_page og_de; - fprintf(stderr,"Testing sync on 1+partial inputs... "); - ogg_sync_reset(&oy); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+20, - og[1].header_len-20); - ogg_sync_wrote(&oy,og[1].header_len-20); - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test recapture: garbage + page */ - { - ogg_page og_de; - fprintf(stderr,"Testing search for capture... "); - ogg_sync_reset(&oy); - - /* 'garbage' */ - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header+20, - og[2].header_len-20); - ogg_sync_wrote(&oy,og[2].header_len-20); - memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body, - og[2].body_len); - ogg_sync_wrote(&oy,og[2].body_len); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test recapture: page + garbage + page */ - { - ogg_page og_de; - fprintf(stderr,"Testing recapture... "); - ogg_sync_reset(&oy); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - og[2].header_len); - ogg_sync_wrote(&oy,og[2].header_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - og[2].header_len); - ogg_sync_wrote(&oy,og[2].header_len); - - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body, - og[2].body_len-5); - ogg_sync_wrote(&oy,og[2].body_len-5); - - memcpy(ogg_sync_buffer(&oy,og[3].header_len),og[3].header, - og[3].header_len); - ogg_sync_wrote(&oy,og[3].header_len); - - memcpy(ogg_sync_buffer(&oy,og[3].body_len),og[3].body, - og[3].body_len); - ogg_sync_wrote(&oy,og[3].body_len); - - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Free page data that was previously copied */ - { - for(i=0;i<5;i++){ - free_page(&og[i]); - } - } - } - - return(0); -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/ogg.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/ogg.h deleted file mode 100755 index 00975ca..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/ogg.h +++ /dev/null @@ -1,210 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel libogg include - last mod: $Id: ogg.h 18044 2011-08-01 17:55:20Z gmaxwell $ - - ********************************************************************/ -#ifndef _OGG_H -#define _OGG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stddef.h> -#include "os_types.h" - -typedef struct { - void *iov_base; - size_t iov_len; -} ogg_iovec_t; - -typedef struct { - long endbyte; - int endbit; - - unsigned char *buffer; - unsigned char *ptr; - long storage; -} oggpack_buffer; - -/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/ - -typedef struct { - unsigned char *header; - long header_len; - unsigned char *body; - long body_len; -} ogg_page; - -/* ogg_stream_state contains the current encode/decode state of a logical - Ogg bitstream **********************************************************/ - -typedef struct { - unsigned char *body_data; /* bytes from packet bodies */ - long body_storage; /* storage elements allocated */ - long body_fill; /* elements stored; fill mark */ - long body_returned; /* elements of fill returned */ - - - int *lacing_vals; /* The values that will go to the segment table */ - ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact - this way, but it is simple coupled to the - lacing fifo */ - long lacing_storage; - long lacing_fill; - long lacing_packet; - long lacing_returned; - - unsigned char header[282]; /* working space for header encode */ - int header_fill; - - int e_o_s; /* set when we have buffered the last packet in the - logical bitstream */ - int b_o_s; /* set after we've written the initial page - of a logical bitstream */ - long serialno; - long pageno; - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a separate abstraction - layer) also knows about the gap */ - ogg_int64_t granulepos; - -} ogg_stream_state; - -/* ogg_packet is used to encapsulate the data and metadata belonging - to a single raw Ogg/Vorbis packet *************************************/ - -typedef struct { - unsigned char *packet; - long bytes; - long b_o_s; - long e_o_s; - - ogg_int64_t granulepos; - - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a separate abstraction - layer) also knows about the gap */ -} ogg_packet; - -typedef struct { - unsigned char *data; - int storage; - int fill; - int returned; - - int unsynced; - int headerbytes; - int bodybytes; -} ogg_sync_state; - -/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ - -extern void oggpack_writeinit(oggpack_buffer *b); -extern int oggpack_writecheck(oggpack_buffer *b); -extern void oggpack_writetrunc(oggpack_buffer *b,long bits); -extern void oggpack_writealign(oggpack_buffer *b); -extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpack_reset(oggpack_buffer *b); -extern void oggpack_writeclear(oggpack_buffer *b); -extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpack_look(oggpack_buffer *b,int bits); -extern long oggpack_look1(oggpack_buffer *b); -extern void oggpack_adv(oggpack_buffer *b,int bits); -extern void oggpack_adv1(oggpack_buffer *b); -extern long oggpack_read(oggpack_buffer *b,int bits); -extern long oggpack_read1(oggpack_buffer *b); -extern long oggpack_bytes(oggpack_buffer *b); -extern long oggpack_bits(oggpack_buffer *b); -extern unsigned char *oggpack_get_buffer(oggpack_buffer *b); - -extern void oggpackB_writeinit(oggpack_buffer *b); -extern int oggpackB_writecheck(oggpack_buffer *b); -extern void oggpackB_writetrunc(oggpack_buffer *b,long bits); -extern void oggpackB_writealign(oggpack_buffer *b); -extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpackB_reset(oggpack_buffer *b); -extern void oggpackB_writeclear(oggpack_buffer *b); -extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpackB_look(oggpack_buffer *b,int bits); -extern long oggpackB_look1(oggpack_buffer *b); -extern void oggpackB_adv(oggpack_buffer *b,int bits); -extern void oggpackB_adv1(oggpack_buffer *b); -extern long oggpackB_read(oggpack_buffer *b,int bits); -extern long oggpackB_read1(oggpack_buffer *b); -extern long oggpackB_bytes(oggpack_buffer *b); -extern long oggpackB_bits(oggpack_buffer *b); -extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); - -/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ - -extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, - int count, long e_o_s, ogg_int64_t granulepos); -extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill); -extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_flush_fill(ogg_stream_state *os, ogg_page *og, int nfill); - -/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ - -extern int ogg_sync_init(ogg_sync_state *oy); -extern int ogg_sync_clear(ogg_sync_state *oy); -extern int ogg_sync_reset(ogg_sync_state *oy); -extern int ogg_sync_destroy(ogg_sync_state *oy); -extern int ogg_sync_check(ogg_sync_state *oy); - -extern char *ogg_sync_buffer(ogg_sync_state *oy, long size); -extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); -extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); -extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); -extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); -extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); - -/* Ogg BITSTREAM PRIMITIVES: general ***************************/ - -extern int ogg_stream_init(ogg_stream_state *os,int serialno); -extern int ogg_stream_clear(ogg_stream_state *os); -extern int ogg_stream_reset(ogg_stream_state *os); -extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); -extern int ogg_stream_destroy(ogg_stream_state *os); -extern int ogg_stream_check(ogg_stream_state *os); -extern int ogg_stream_eos(ogg_stream_state *os); - -extern void ogg_page_checksum_set(ogg_page *og); - -extern int ogg_page_version(const ogg_page *og); -extern int ogg_page_continued(const ogg_page *og); -extern int ogg_page_bos(const ogg_page *og); -extern int ogg_page_eos(const ogg_page *og); -extern ogg_int64_t ogg_page_granulepos(const ogg_page *og); -extern int ogg_page_serialno(const ogg_page *og); -extern long ogg_page_pageno(const ogg_page *og); -extern int ogg_page_packets(const ogg_page *og); - -extern void ogg_packet_clear(ogg_packet *op); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OGG_H */ diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/os_types.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/os_types.h deleted file mode 100755 index d6691b7..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libogg/ogg/os_types.h +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 17712 2010-12-03 17:10:02Z xiphmont $ - - ********************************************************************/ -#ifndef _OS_TYPES_H -#define _OS_TYPES_H - -/* make it easy on the folks that want to compile the libs with a - different malloc than stdlib */ -#define _ogg_malloc malloc -#define _ogg_calloc calloc -#define _ogg_realloc realloc -#define _ogg_free free - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include <stdint.h> - typedef int16_t ogg_int16_t; - typedef uint16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef uint32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - typedef uint64_t ogg_uint64_t; -# elif defined(__MINGW32__) -# include <sys/types.h> - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - typedef unsigned long long ogg_uint64_t; -# elif defined(__MWERKS__) - typedef long long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; -# else - /* MSVC/Borland */ - typedef __int64 ogg_int64_t; - typedef __int32 ogg_int32_t; - typedef unsigned __int32 ogg_uint32_t; - typedef __int16 ogg_int16_t; - typedef unsigned __int16 ogg_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include <sys/types.h> - typedef SInt16 ogg_int16_t; - typedef UInt16 ogg_uint16_t; - typedef SInt32 ogg_int32_t; - typedef UInt32 ogg_uint32_t; - typedef SInt64 ogg_int64_t; - -#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ - -# include <inttypes.h> - typedef int16_t ogg_int16_t; - typedef uint16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef uint32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined(__HAIKU__) - - /* Haiku */ -# include <sys/types.h> - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(__BEOS__) - - /* Be */ -# include <inttypes.h> - typedef int16_t ogg_int16_t; - typedef uint16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef uint32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short ogg_int16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned ogg_uint32_t; - typedef short ogg_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#elif defined(__TMS320C6X__) - - /* TI C64x compiler */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#else - -# include <ogg/config_types.h> - -#endif - -#endif /* _OS_TYPES_H */ diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/_kiss_fft_guts.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/_kiss_fft_guts.h deleted file mode 100755 index 6571e79..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/_kiss_fft_guts.h +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright (c) 2003-2004, Mark Borgerding - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define MIN(a,b) ((a)<(b) ? (a):(b)) -#define MAX(a,b) ((a)>(b) ? (a):(b)) - -/* kiss_fft.h - defines kiss_fft_scalar as either short or a float type - and defines - typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ -#include "kiss_fft.h" -#include "math_approx.h" - -#define MAXFACTORS 32 -/* e.g. an fft of length 128 has 4 factors - as far as kissfft is concerned - 4*4*4*2 - */ - -struct kiss_fft_state{ - int nfft; - int inverse; - int factors[2*MAXFACTORS]; - kiss_fft_cpx twiddles[1]; -}; - -/* - Explanation of macros dealing with complex math: - - C_MUL(m,a,b) : m = a*b - C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise - C_SUB( res, a,b) : res = a - b - C_SUBFROM( res , a) : res -= a - C_ADDTO( res , a) : res += a - * */ -#ifdef FIXED_POINT -#include "arch.h" -# define FRACBITS 15 -# define SAMPPROD spx_int32_t -#define SAMP_MAX 32767 - -#define SAMP_MIN -SAMP_MAX - -#if defined(CHECK_OVERFLOW) -# define CHECK_OVERFLOW_OP(a,op,b) \ - if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \ - fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); } -#endif - - -# define smul(a,b) ( (SAMPPROD)(a)*(b) ) -# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS ) - -# define S_MUL(a,b) sround( smul(a,b) ) - -# define C_MUL(m,a,b) \ - do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \ - (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0) - -# define C_MUL4(m,a,b) \ - do{ (m).r = PSHR32( smul((a).r,(b).r) - smul((a).i,(b).i),17 ); \ - (m).i = PSHR32( smul((a).r,(b).i) + smul((a).i,(b).r),17 ); }while(0) - -# define DIVSCALAR(x,k) \ - (x) = sround( smul( x, SAMP_MAX/k ) ) - -# define C_FIXDIV(c,div) \ - do { DIVSCALAR( (c).r , div); \ - DIVSCALAR( (c).i , div); }while (0) - -# define C_MULBYSCALAR( c, s ) \ - do{ (c).r = sround( smul( (c).r , s ) ) ;\ - (c).i = sround( smul( (c).i , s ) ) ; }while(0) - -#else /* not FIXED_POINT*/ - -# define S_MUL(a,b) ( (a)*(b) ) -#define C_MUL(m,a,b) \ - do{ (m).r = (a).r*(b).r - (a).i*(b).i;\ - (m).i = (a).r*(b).i + (a).i*(b).r; }while(0) - -#define C_MUL4(m,a,b) C_MUL(m,a,b) - -# define C_FIXDIV(c,div) /* NOOP */ -# define C_MULBYSCALAR( c, s ) \ - do{ (c).r *= (s);\ - (c).i *= (s); }while(0) -#endif - -#ifndef CHECK_OVERFLOW_OP -# define CHECK_OVERFLOW_OP(a,op,b) /* noop */ -#endif - -#define C_ADD( res, a,b)\ - do { \ - CHECK_OVERFLOW_OP((a).r,+,(b).r)\ - CHECK_OVERFLOW_OP((a).i,+,(b).i)\ - (res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \ - }while(0) -#define C_SUB( res, a,b)\ - do { \ - CHECK_OVERFLOW_OP((a).r,-,(b).r)\ - CHECK_OVERFLOW_OP((a).i,-,(b).i)\ - (res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \ - }while(0) -#define C_ADDTO( res , a)\ - do { \ - CHECK_OVERFLOW_OP((res).r,+,(a).r)\ - CHECK_OVERFLOW_OP((res).i,+,(a).i)\ - (res).r += (a).r; (res).i += (a).i;\ - }while(0) - -#define C_SUBFROM( res , a)\ - do {\ - CHECK_OVERFLOW_OP((res).r,-,(a).r)\ - CHECK_OVERFLOW_OP((res).i,-,(a).i)\ - (res).r -= (a).r; (res).i -= (a).i; \ - }while(0) - - -#ifdef FIXED_POINT -# define KISS_FFT_COS(phase) floor(MIN(32767,MAX(-32767,.5+32768 * cos (phase)))) -# define KISS_FFT_SIN(phase) floor(MIN(32767,MAX(-32767,.5+32768 * sin (phase)))) -# define HALF_OF(x) ((x)>>1) -#elif defined(USE_SIMD) -# define KISS_FFT_COS(phase) _mm_set1_ps( cos(phase) ) -# define KISS_FFT_SIN(phase) _mm_set1_ps( sin(phase) ) -# define HALF_OF(x) ((x)*_mm_set1_ps(.5)) -#else -# define KISS_FFT_COS(phase) (kiss_fft_scalar) cos(phase) -# define KISS_FFT_SIN(phase) (kiss_fft_scalar) sin(phase) -# define HALF_OF(x) ((x)*.5) -#endif - -#define kf_cexp(x,phase) \ - do{ \ - (x)->r = KISS_FFT_COS(phase);\ - (x)->i = KISS_FFT_SIN(phase);\ - }while(0) -#define kf_cexp2(x,phase) \ - do{ \ - (x)->r = spx_cos_norm((phase));\ - (x)->i = spx_cos_norm((phase)-32768);\ -}while(0) - - -/* a debugging function */ -#define pcpx(c)\ - fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) ) diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/arch.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/arch.h deleted file mode 100755 index 08520bd..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/arch.h +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (C) 2003 Jean-Marc Valin */ -/** - @file arch.h - @brief Various architecture definitions Speex -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef ARCH_H -#define ARCH_H - -#ifndef SPEEX_VERSION -#define SPEEX_MAJOR_VERSION 1 /**< Major Speex version. */ -#define SPEEX_MINOR_VERSION 1 /**< Minor Speex version. */ -#define SPEEX_MICRO_VERSION 15 /**< Micro Speex version. */ -#define SPEEX_EXTRA_VERSION "" /**< Extra Speex version. */ -#define SPEEX_VERSION "speex-1.2beta3" /**< Speex version string. */ -#endif - -/* A couple test to catch stupid option combinations */ -#ifdef FIXED_POINT - -#ifdef FLOATING_POINT -#error You cannot compile as floating point and fixed point at the same time -#endif -#ifdef _USE_SSE -#error SSE is only for floating-point -#endif -#if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM)) -#error Make up your mind. What CPU do you have? -#endif -#ifdef VORBIS_PSYCHO -#error Vorbis-psy model currently not implemented in fixed-point -#endif - -#else - -/*#ifndef FLOATING_POINT -#error You now need to define either FIXED_POINT or FLOATING_POINT -#endif*/ -#if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM) -#error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions? -#endif -#ifdef FIXED_POINT_DEBUG -#error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?" -#endif - - -#endif - -#ifndef OUTSIDE_SPEEX -#include "speex/speex_types.h" -#endif - -#include "../config.h" - -#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */ -#define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */ -#define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 16-bit value. */ -#define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */ -#define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */ -#define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 32-bit value. */ -#define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */ - -#ifdef FIXED_POINT - -typedef spx_int16_t spx_word16_t; -typedef spx_int32_t spx_word32_t; -typedef spx_word32_t spx_mem_t; -typedef spx_word16_t spx_coef_t; -typedef spx_word16_t spx_lsp_t; -typedef spx_word32_t spx_sig_t; - -#define Q15ONE 32767 - -#define LPC_SCALING 8192 -#define SIG_SCALING 16384 -#define LSP_SCALING 8192. -#define GAMMA_SCALING 32768. -#define GAIN_SCALING 64 -#define GAIN_SCALING_1 0.015625 - -#define LPC_SHIFT 13 -#define LSP_SHIFT 13 -#define SIG_SHIFT 14 -#define GAIN_SHIFT 6 - -#define VERY_SMALL 0 -#define VERY_LARGE32 ((spx_word32_t)2147483647) -#define VERY_LARGE16 ((spx_word16_t)32767) -#define Q15_ONE ((spx_word16_t)32767) - - -#ifdef FIXED_DEBUG -#include "fixed_debug.h" -#else - -#include "fixed_generic.h" - -#ifdef ARM5E_ASM -#include "fixed_arm5e.h" -#elif defined (ARM4_ASM) -#include "fixed_arm4.h" -#elif defined (BFIN_ASM) -#include "fixed_bfin.h" -#endif - -#endif - - -#else - -typedef float spx_mem_t; -typedef float spx_coef_t; -typedef float spx_lsp_t; -typedef float spx_sig_t; -typedef float spx_word16_t; -typedef float spx_word32_t; - -#define Q15ONE 1.0f -#define LPC_SCALING 1.f -#define SIG_SCALING 1.f -#define LSP_SCALING 1.f -#define GAMMA_SCALING 1.f -#define GAIN_SCALING 1.f -#define GAIN_SCALING_1 1.f - - -#define VERY_SMALL 1e-15f -#define VERY_LARGE32 1e15f -#define VERY_LARGE16 1e15f -#define Q15_ONE ((spx_word16_t)1.f) - -#define QCONST16(x,bits) (x) -#define QCONST32(x,bits) (x) - -#define NEG16(x) (-(x)) -#define NEG32(x) (-(x)) -#define EXTRACT16(x) (x) -#define EXTEND32(x) (x) -#define SHR16(a,shift) (a) -#define SHL16(a,shift) (a) -#define SHR32(a,shift) (a) -#define SHL32(a,shift) (a) -#define PSHR16(a,shift) (a) -#define PSHR32(a,shift) (a) -#define VSHR32(a,shift) (a) -#define SATURATE16(x,a) (x) -#define SATURATE32(x,a) (x) - -#define PSHR(a,shift) (a) -#define SHR(a,shift) (a) -#define SHL(a,shift) (a) -#define SATURATE(x,a) (x) - -#define ADD16(a,b) ((a)+(b)) -#define SUB16(a,b) ((a)-(b)) -#define ADD32(a,b) ((a)+(b)) -#define SUB32(a,b) ((a)-(b)) -#define MULT16_16_16(a,b) ((a)*(b)) -#define MULT16_16(a,b) ((spx_word32_t)(a)*(spx_word32_t)(b)) -#define MAC16_16(c,a,b) ((c)+(spx_word32_t)(a)*(spx_word32_t)(b)) - -#define MULT16_32_Q11(a,b) ((a)*(b)) -#define MULT16_32_Q13(a,b) ((a)*(b)) -#define MULT16_32_Q14(a,b) ((a)*(b)) -#define MULT16_32_Q15(a,b) ((a)*(b)) -#define MULT16_32_P15(a,b) ((a)*(b)) - -#define MAC16_32_Q11(c,a,b) ((c)+(a)*(b)) -#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b)) - -#define MAC16_16_Q11(c,a,b) ((c)+(a)*(b)) -#define MAC16_16_Q13(c,a,b) ((c)+(a)*(b)) -#define MAC16_16_P13(c,a,b) ((c)+(a)*(b)) -#define MULT16_16_Q11_32(a,b) ((a)*(b)) -#define MULT16_16_Q13(a,b) ((a)*(b)) -#define MULT16_16_Q14(a,b) ((a)*(b)) -#define MULT16_16_Q15(a,b) ((a)*(b)) -#define MULT16_16_P15(a,b) ((a)*(b)) -#define MULT16_16_P13(a,b) ((a)*(b)) -#define MULT16_16_P14(a,b) ((a)*(b)) - -#define DIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b)) -#define PDIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b)) -#define DIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) -#define PDIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) - - -#endif - - -#if defined (CONFIG_TI_C54X) || defined (CONFIG_TI_C55X) - -/* 2 on TI C5x DSP */ -#define BYTES_PER_CHAR 2 -#define BITS_PER_CHAR 16 -#define LOG2_BITS_PER_CHAR 4 - -#else - -#define BYTES_PER_CHAR 1 -#define BITS_PER_CHAR 8 -#define LOG2_BITS_PER_CHAR 3 - -#endif - - - -#ifdef FIXED_DEBUG -extern long long spx_mips; -#endif - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/bits.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/bits.c deleted file mode 100755 index 96b4efe..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/bits.c +++ /dev/null @@ -1,372 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: speex_bits.c - - Handles bit packing/unpacking - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "speex/speex_bits.h" -#include "arch.h" -#include "os_support.h" - -/* Maximum size of the bit-stream (for fixed-size allocation) */ -#ifndef MAX_CHARS_PER_FRAME -#define MAX_CHARS_PER_FRAME (2000/BYTES_PER_CHAR) -#endif - -EXPORT void speex_bits_init(SpeexBits *bits) -{ - bits->chars = (char*)speex_alloc(MAX_CHARS_PER_FRAME); - if (!bits->chars) - return; - - bits->buf_size = MAX_CHARS_PER_FRAME; - - bits->owner=1; - - speex_bits_reset(bits); -} - -EXPORT void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size) -{ - bits->chars = (char*)buff; - bits->buf_size = buf_size; - - bits->owner=0; - - speex_bits_reset(bits); -} - -EXPORT void speex_bits_set_bit_buffer(SpeexBits *bits, void *buff, int buf_size) -{ - bits->chars = (char*)buff; - bits->buf_size = buf_size; - - bits->owner=0; - - bits->nbBits=buf_size<<LOG2_BITS_PER_CHAR; - bits->charPtr=0; - bits->bitPtr=0; - bits->overflow=0; - -} - -EXPORT void speex_bits_destroy(SpeexBits *bits) -{ - if (bits->owner) - speex_free(bits->chars); - /* Will do something once the allocation is dynamic */ -} - -EXPORT void speex_bits_reset(SpeexBits *bits) -{ - /* We only need to clear the first byte now */ - bits->chars[0]=0; - bits->nbBits=0; - bits->charPtr=0; - bits->bitPtr=0; - bits->overflow=0; -} - -EXPORT void speex_bits_rewind(SpeexBits *bits) -{ - bits->charPtr=0; - bits->bitPtr=0; - bits->overflow=0; -} - -EXPORT void speex_bits_read_from(SpeexBits *bits, char *chars, int len) -{ - int i; - int nchars = len / BYTES_PER_CHAR; - if (nchars > bits->buf_size) - { - speex_notify("Packet is larger than allocated buffer"); - if (bits->owner) - { - char *tmp = (char*)speex_realloc(bits->chars, nchars); - if (tmp) - { - bits->buf_size=nchars; - bits->chars=tmp; - } else { - nchars=bits->buf_size; - speex_warning("Could not resize input buffer: truncating input"); - } - } else { - speex_warning("Do not own input buffer: truncating oversize input"); - nchars=bits->buf_size; - } - } -#if (BYTES_PER_CHAR==2) -/* Swap bytes to proper endian order (could be done externally) */ -#define HTOLS(A) ((((A) >> 8)&0xff)|(((A) & 0xff)<<8)) -#else -#define HTOLS(A) (A) -#endif - for (i=0;i<nchars;i++) - bits->chars[i]=HTOLS(chars[i]); - - bits->nbBits=nchars<<LOG2_BITS_PER_CHAR; - bits->charPtr=0; - bits->bitPtr=0; - bits->overflow=0; -} - -static void speex_bits_flush(SpeexBits *bits) -{ - int nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); - if (bits->charPtr>0) - SPEEX_MOVE(bits->chars, &bits->chars[bits->charPtr], nchars-bits->charPtr); - bits->nbBits -= bits->charPtr<<LOG2_BITS_PER_CHAR; - bits->charPtr=0; -} - -EXPORT void speex_bits_read_whole_bytes(SpeexBits *bits, char *chars, int nbytes) -{ - int i,pos; - int nchars = nbytes/BYTES_PER_CHAR; - - if (((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)+nchars > bits->buf_size) - { - /* Packet is larger than allocated buffer */ - if (bits->owner) - { - char *tmp = (char*)speex_realloc(bits->chars, (bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1); - if (tmp) - { - bits->buf_size=(bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1; - bits->chars=tmp; - } else { - nchars=bits->buf_size-(bits->nbBits>>LOG2_BITS_PER_CHAR)-1; - speex_warning("Could not resize input buffer: truncating oversize input"); - } - } else { - speex_warning("Do not own input buffer: truncating oversize input"); - nchars=bits->buf_size; - } - } - - speex_bits_flush(bits); - pos=bits->nbBits>>LOG2_BITS_PER_CHAR; - for (i=0;i<nchars;i++) - bits->chars[pos+i]=HTOLS(chars[i]); - bits->nbBits+=nchars<<LOG2_BITS_PER_CHAR; -} - -EXPORT int speex_bits_write(SpeexBits *bits, char *chars, int max_nbytes) -{ - int i; - int max_nchars = max_nbytes/BYTES_PER_CHAR; - int charPtr, bitPtr, nbBits; - - /* Insert terminator, but save the data so we can put it back after */ - bitPtr=bits->bitPtr; - charPtr=bits->charPtr; - nbBits=bits->nbBits; - speex_bits_insert_terminator(bits); - bits->bitPtr=bitPtr; - bits->charPtr=charPtr; - bits->nbBits=nbBits; - - if (max_nchars > ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)) - max_nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); - - for (i=0;i<max_nchars;i++) - chars[i]=HTOLS(bits->chars[i]); - return max_nchars*BYTES_PER_CHAR; -} - -EXPORT int speex_bits_write_whole_bytes(SpeexBits *bits, char *chars, int max_nbytes) -{ - int max_nchars = max_nbytes/BYTES_PER_CHAR; - int i; - if (max_nchars > ((bits->nbBits)>>LOG2_BITS_PER_CHAR)) - max_nchars = ((bits->nbBits)>>LOG2_BITS_PER_CHAR); - for (i=0;i<max_nchars;i++) - chars[i]=HTOLS(bits->chars[i]); - - if (bits->bitPtr>0) - bits->chars[0]=bits->chars[max_nchars]; - else - bits->chars[0]=0; - bits->charPtr=0; - bits->nbBits &= (BITS_PER_CHAR-1); - return max_nchars*BYTES_PER_CHAR; -} - -EXPORT void speex_bits_pack(SpeexBits *bits, int data, int nbBits) -{ - unsigned int d=data; - - if (bits->charPtr+((nbBits+bits->bitPtr)>>LOG2_BITS_PER_CHAR) >= bits->buf_size) - { - speex_notify("Buffer too small to pack bits"); - if (bits->owner) - { - int new_nchars = ((bits->buf_size+5)*3)>>1; - char *tmp = (char*)speex_realloc(bits->chars, new_nchars); - if (tmp) - { - bits->buf_size=new_nchars; - bits->chars=tmp; - } else { - speex_warning("Could not resize input buffer: not packing"); - return; - } - } else { - speex_warning("Do not own input buffer: not packing"); - return; - } - } - - while(nbBits) - { - int bit; - bit = (d>>(nbBits-1))&1; - bits->chars[bits->charPtr] |= bit<<(BITS_PER_CHAR-1-bits->bitPtr); - bits->bitPtr++; - - if (bits->bitPtr==BITS_PER_CHAR) - { - bits->bitPtr=0; - bits->charPtr++; - bits->chars[bits->charPtr] = 0; - } - bits->nbBits++; - nbBits--; - } -} - -EXPORT int speex_bits_unpack_signed(SpeexBits *bits, int nbBits) -{ - unsigned int d=speex_bits_unpack_unsigned(bits,nbBits); - /* If number is negative */ - if (d>>(nbBits-1)) - { - d |= (-1)<<nbBits; - } - return d; -} - -EXPORT unsigned int speex_bits_unpack_unsigned(SpeexBits *bits, int nbBits) -{ - unsigned int d=0; - if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits) - bits->overflow=1; - if (bits->overflow) - return 0; - while(nbBits) - { - d<<=1; - d |= (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1; - bits->bitPtr++; - if (bits->bitPtr==BITS_PER_CHAR) - { - bits->bitPtr=0; - bits->charPtr++; - } - nbBits--; - } - return d; -} - -EXPORT unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits) -{ - unsigned int d=0; - int bitPtr, charPtr; - char *chars; - - if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits) - bits->overflow=1; - if (bits->overflow) - return 0; - - bitPtr=bits->bitPtr; - charPtr=bits->charPtr; - chars = bits->chars; - while(nbBits) - { - d<<=1; - d |= (chars[charPtr]>>(BITS_PER_CHAR-1 - bitPtr))&1; - bitPtr++; - if (bitPtr==BITS_PER_CHAR) - { - bitPtr=0; - charPtr++; - } - nbBits--; - } - return d; -} - -EXPORT int speex_bits_peek(SpeexBits *bits) -{ - if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+1>bits->nbBits) - bits->overflow=1; - if (bits->overflow) - return 0; - return (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1; -} - -EXPORT void speex_bits_advance(SpeexBits *bits, int n) -{ - if (((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+n>bits->nbBits) || bits->overflow){ - bits->overflow=1; - return; - } - bits->charPtr += (bits->bitPtr+n) >> LOG2_BITS_PER_CHAR; /* divide by BITS_PER_CHAR */ - bits->bitPtr = (bits->bitPtr+n) & (BITS_PER_CHAR-1); /* modulo by BITS_PER_CHAR */ -} - -EXPORT int speex_bits_remaining(SpeexBits *bits) -{ - if (bits->overflow) - return -1; - else - return bits->nbBits-((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr); -} - -EXPORT int speex_bits_nbytes(SpeexBits *bits) -{ - return ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR); -} - -EXPORT void speex_bits_insert_terminator(SpeexBits *bits) -{ - if (bits->bitPtr) - speex_bits_pack(bits, 0, 1); - while (bits->bitPtr) - speex_bits_pack(bits, 1, 1); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/buffer.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/buffer.c deleted file mode 100755 index c82cab5..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/buffer.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright (C) 2007 Jean-Marc Valin - - File: buffer.c - This is a very simple ring buffer implementation. It is not thread-safe - so you need to do your own locking. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "os_support.h" -#include "arch.h" -#include "speex/speex_buffer.h" - -struct SpeexBuffer_ { - char *data; - int size; - int read_ptr; - int write_ptr; - int available; -}; - -EXPORT SpeexBuffer *speex_buffer_init(int size) -{ - SpeexBuffer *st = speex_alloc(sizeof(SpeexBuffer)); - st->data = speex_alloc(size); - st->size = size; - st->read_ptr = 0; - st->write_ptr = 0; - st->available = 0; - return st; -} - -EXPORT void speex_buffer_destroy(SpeexBuffer *st) -{ - speex_free(st->data); - speex_free(st); -} - -EXPORT int speex_buffer_write(SpeexBuffer *st, void *_data, int len) -{ - int end; - int end1; - char *data = _data; - if (len > st->size) - { - data += len-st->size; - len = st->size; - } - end = st->write_ptr + len; - end1 = end; - if (end1 > st->size) - end1 = st->size; - SPEEX_COPY(st->data + st->write_ptr, data, end1 - st->write_ptr); - if (end > st->size) - { - end -= st->size; - SPEEX_COPY(st->data, data+end1 - st->write_ptr, end); - } - st->available += len; - if (st->available > st->size) - { - st->available = st->size; - st->read_ptr = st->write_ptr; - } - st->write_ptr += len; - if (st->write_ptr > st->size) - st->write_ptr -= st->size; - return len; -} - -EXPORT int speex_buffer_writezeros(SpeexBuffer *st, int len) -{ - /* This is almost the same as for speex_buffer_write() but using - SPEEX_MEMSET() instead of SPEEX_COPY(). Update accordingly. */ - int end; - int end1; - if (len > st->size) - { - len = st->size; - } - end = st->write_ptr + len; - end1 = end; - if (end1 > st->size) - end1 = st->size; - SPEEX_MEMSET(st->data + st->write_ptr, 0, end1 - st->write_ptr); - if (end > st->size) - { - end -= st->size; - SPEEX_MEMSET(st->data, 0, end); - } - st->available += len; - if (st->available > st->size) - { - st->available = st->size; - st->read_ptr = st->write_ptr; - } - st->write_ptr += len; - if (st->write_ptr > st->size) - st->write_ptr -= st->size; - return len; -} - -EXPORT int speex_buffer_read(SpeexBuffer *st, void *_data, int len) -{ - int end, end1; - char *data = _data; - if (len > st->available) - { - SPEEX_MEMSET(data+st->available, 0, st->size-st->available); - len = st->available; - } - end = st->read_ptr + len; - end1 = end; - if (end1 > st->size) - end1 = st->size; - SPEEX_COPY(data, st->data + st->read_ptr, end1 - st->read_ptr); - - if (end > st->size) - { - end -= st->size; - SPEEX_COPY(data+end1 - st->read_ptr, st->data, end); - } - st->available -= len; - st->read_ptr += len; - if (st->read_ptr > st->size) - st->read_ptr -= st->size; - return len; -} - -EXPORT int speex_buffer_get_available(SpeexBuffer *st) -{ - return st->available; -} - -EXPORT int speex_buffer_resize(SpeexBuffer *st, int len) -{ - int old_len = st->size; - if (len > old_len) - { - st->data = speex_realloc(st->data, len); - /* FIXME: move data/pointers properly for growing the buffer */ - } else { - /* FIXME: move data/pointers properly for shrinking the buffer */ - st->data = speex_realloc(st->data, len); - } - return len; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.c deleted file mode 100755 index 63f4c6a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.c +++ /dev/null @@ -1,612 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: cb_search.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "cb_search.h" -#include "filters.h" -#include "stack_alloc.h" -#include "vq.h" -#include "arch.h" -#include "math_approx.h" -#include "os_support.h" - -#ifdef _USE_SSE -#include "cb_search_sse.h" -#elif defined(ARM4_ASM) || defined(ARM5E_ASM) -#include "cb_search_arm4.h" -#elif defined(BFIN_ASM) -#include "cb_search_bfin.h" -#endif - -#ifndef OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK -static void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) -{ - int i, j, k; - VARDECL(spx_word16_t *shape); - ALLOC(shape, subvect_size, spx_word16_t); - for (i=0;i<shape_cb_size;i++) - { - spx_word16_t *res; - - res = resp+i*subvect_size; - for (k=0;k<subvect_size;k++) - shape[k] = (spx_word16_t)shape_cb[i*subvect_size+k]; - E[i]=0; - - /* Compute codeword response using convolution with impulse response */ - for(j=0;j<subvect_size;j++) - { - spx_word32_t resj=0; - spx_word16_t res16; - for (k=0;k<=j;k++) - resj = MAC16_16(resj,shape[k],r[j-k]); -#ifdef FIXED_POINT - res16 = EXTRACT16(SHR32(resj, 13)); -#else - res16 = 0.03125f*resj; -#endif - /* Compute codeword energy */ - E[i]=MAC16_16(E[i],res16,res16); - res[j] = res16; - /*printf ("%d\n", (int)res[j]);*/ - } - } - -} -#endif - -#ifndef OVERRIDE_TARGET_UPDATE -static inline void target_update(spx_word16_t *t, spx_word16_t g, spx_word16_t *r, int len) -{ - int n; - for (n=0;n<len;n++) - t[n] = SUB16(t[n],PSHR32(MULT16_16(g,r[n]),13)); -} -#endif - - - -static void split_cb_search_shape_sign_N1( -spx_word16_t target[], /* target vector */ -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs for this subframe */ -const void *par, /* Codebook/search parameters*/ -int p, /* number of LPC coeffs */ -int nsf, /* number of samples in subframe */ -spx_sig_t *exc, -spx_word16_t *r, -SpeexBits *bits, -char *stack, -int update_target -) -{ - int i,j,m,q; - VARDECL(spx_word16_t *resp); -#ifdef _USE_SSE - VARDECL(__m128 *resp2); - VARDECL(__m128 *E); -#else - spx_word16_t *resp2; - VARDECL(spx_word32_t *E); -#endif - VARDECL(spx_word16_t *t); - VARDECL(spx_sig_t *e); - const signed char *shape_cb; - int shape_cb_size, subvect_size, nb_subvect; - const split_cb_params *params; - int best_index; - spx_word32_t best_dist; - int have_sign; - - params = (const split_cb_params *) par; - subvect_size = params->subvect_size; - nb_subvect = params->nb_subvect; - shape_cb_size = 1<<params->shape_bits; - shape_cb = params->shape_cb; - have_sign = params->have_sign; - ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t); -#ifdef _USE_SSE - ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128); - ALLOC(E, shape_cb_size>>2, __m128); -#else - resp2 = resp; - ALLOC(E, shape_cb_size, spx_word32_t); -#endif - ALLOC(t, nsf, spx_word16_t); - ALLOC(e, nsf, spx_sig_t); - - /* FIXME: Do we still need to copy the target? */ - SPEEX_COPY(t, target, nsf); - - compute_weighted_codebook(shape_cb, r, resp, resp2, E, shape_cb_size, subvect_size, stack); - - for (i=0;i<nb_subvect;i++) - { - spx_word16_t *x=t+subvect_size*i; - /*Find new n-best based on previous n-best j*/ - if (have_sign) - vq_nbest_sign(x, resp2, subvect_size, shape_cb_size, E, 1, &best_index, &best_dist, stack); - else - vq_nbest(x, resp2, subvect_size, shape_cb_size, E, 1, &best_index, &best_dist, stack); - - speex_bits_pack(bits,best_index,params->shape_bits+have_sign); - - { - int rind; - spx_word16_t *res; - spx_word16_t sign=1; - rind = best_index; - if (rind>=shape_cb_size) - { - sign=-1; - rind-=shape_cb_size; - } - res = resp+rind*subvect_size; - if (sign>0) - for (m=0;m<subvect_size;m++) - t[subvect_size*i+m] = SUB16(t[subvect_size*i+m], res[m]); - else - for (m=0;m<subvect_size;m++) - t[subvect_size*i+m] = ADD16(t[subvect_size*i+m], res[m]); - -#ifdef FIXED_POINT - if (sign==1) - { - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5); - } else { - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5)); - } -#else - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=sign*0.03125*shape_cb[rind*subvect_size+j]; -#endif - - } - - for (m=0;m<subvect_size;m++) - { - spx_word16_t g; - int rind; - spx_word16_t sign=1; - rind = best_index; - if (rind>=shape_cb_size) - { - sign=-1; - rind-=shape_cb_size; - } - - q=subvect_size-m; -#ifdef FIXED_POINT - g=sign*shape_cb[rind*subvect_size+m]; -#else - g=sign*0.03125*shape_cb[rind*subvect_size+m]; -#endif - target_update(t+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1)); - } - } - - /* Update excitation */ - /* FIXME: We could update the excitation directly above */ - for (j=0;j<nsf;j++) - exc[j]=ADD32(exc[j],e[j]); - - /* Update target: only update target if necessary */ - if (update_target) - { - VARDECL(spx_word16_t *r2); - ALLOC(r2, nsf, spx_word16_t); - for (j=0;j<nsf;j++) - r2[j] = EXTRACT16(PSHR32(e[j] ,6)); - syn_percep_zero16(r2, ak, awk1, awk2, r2, nsf,p, stack); - for (j=0;j<nsf;j++) - target[j]=SUB16(target[j],PSHR16(r2[j],2)); - } -} - - - -void split_cb_search_shape_sign( -spx_word16_t target[], /* target vector */ -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs for this subframe */ -const void *par, /* Codebook/search parameters*/ -int p, /* number of LPC coeffs */ -int nsf, /* number of samples in subframe */ -spx_sig_t *exc, -spx_word16_t *r, -SpeexBits *bits, -char *stack, -int complexity, -int update_target -) -{ - int i,j,k,m,n,q; - VARDECL(spx_word16_t *resp); -#ifdef _USE_SSE - VARDECL(__m128 *resp2); - VARDECL(__m128 *E); -#else - spx_word16_t *resp2; - VARDECL(spx_word32_t *E); -#endif - VARDECL(spx_word16_t *t); - VARDECL(spx_sig_t *e); - VARDECL(spx_word16_t *tmp); - VARDECL(spx_word32_t *ndist); - VARDECL(spx_word32_t *odist); - VARDECL(int *itmp); - VARDECL(spx_word16_t **ot2); - VARDECL(spx_word16_t **nt2); - spx_word16_t **ot, **nt; - VARDECL(int **nind); - VARDECL(int **oind); - VARDECL(int *ind); - const signed char *shape_cb; - int shape_cb_size, subvect_size, nb_subvect; - const split_cb_params *params; - int N=2; - VARDECL(int *best_index); - VARDECL(spx_word32_t *best_dist); - VARDECL(int *best_nind); - VARDECL(int *best_ntarget); - int have_sign; - N=complexity; - if (N>10) - N=10; - /* Complexity isn't as important for the codebooks as it is for the pitch */ - N=(2*N)/3; - if (N<1) - N=1; - if (N==1) - { - split_cb_search_shape_sign_N1(target,ak,awk1,awk2,par,p,nsf,exc,r,bits,stack,update_target); - return; - } - ALLOC(ot2, N, spx_word16_t*); - ALLOC(nt2, N, spx_word16_t*); - ALLOC(oind, N, int*); - ALLOC(nind, N, int*); - - params = (const split_cb_params *) par; - subvect_size = params->subvect_size; - nb_subvect = params->nb_subvect; - shape_cb_size = 1<<params->shape_bits; - shape_cb = params->shape_cb; - have_sign = params->have_sign; - ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t); -#ifdef _USE_SSE - ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128); - ALLOC(E, shape_cb_size>>2, __m128); -#else - resp2 = resp; - ALLOC(E, shape_cb_size, spx_word32_t); -#endif - ALLOC(t, nsf, spx_word16_t); - ALLOC(e, nsf, spx_sig_t); - ALLOC(ind, nb_subvect, int); - - ALLOC(tmp, 2*N*nsf, spx_word16_t); - for (i=0;i<N;i++) - { - ot2[i]=tmp+2*i*nsf; - nt2[i]=tmp+(2*i+1)*nsf; - } - ot=ot2; - nt=nt2; - ALLOC(best_index, N, int); - ALLOC(best_dist, N, spx_word32_t); - ALLOC(best_nind, N, int); - ALLOC(best_ntarget, N, int); - ALLOC(ndist, N, spx_word32_t); - ALLOC(odist, N, spx_word32_t); - - ALLOC(itmp, 2*N*nb_subvect, int); - for (i=0;i<N;i++) - { - nind[i]=itmp+2*i*nb_subvect; - oind[i]=itmp+(2*i+1)*nb_subvect; - } - - SPEEX_COPY(t, target, nsf); - - for (j=0;j<N;j++) - SPEEX_COPY(&ot[j][0], t, nsf); - - /* Pre-compute codewords response and energy */ - compute_weighted_codebook(shape_cb, r, resp, resp2, E, shape_cb_size, subvect_size, stack); - - for (j=0;j<N;j++) - odist[j]=0; - - /*For all subvectors*/ - for (i=0;i<nb_subvect;i++) - { - /*"erase" nbest list*/ - for (j=0;j<N;j++) - ndist[j]=VERY_LARGE32; - /* This is not strictly necessary, but it provides an additonal safety - to prevent crashes in case something goes wrong in the previous - steps (e.g. NaNs) */ - for (j=0;j<N;j++) - best_nind[j] = best_ntarget[j] = 0; - /*For all n-bests of previous subvector*/ - for (j=0;j<N;j++) - { - spx_word16_t *x=ot[j]+subvect_size*i; - spx_word32_t tener = 0; - for (m=0;m<subvect_size;m++) - tener = MAC16_16(tener, x[m],x[m]); -#ifdef FIXED_POINT - tener = SHR32(tener,1); -#else - tener *= .5; -#endif - /*Find new n-best based on previous n-best j*/ - if (have_sign) - vq_nbest_sign(x, resp2, subvect_size, shape_cb_size, E, N, best_index, best_dist, stack); - else - vq_nbest(x, resp2, subvect_size, shape_cb_size, E, N, best_index, best_dist, stack); - - /*For all new n-bests*/ - for (k=0;k<N;k++) - { - /* Compute total distance (including previous sub-vectors */ - spx_word32_t err = ADD32(ADD32(odist[j],best_dist[k]),tener); - - /*update n-best list*/ - if (err<ndist[N-1]) - { - for (m=0;m<N;m++) - { - if (err < ndist[m]) - { - for (n=N-1;n>m;n--) - { - ndist[n] = ndist[n-1]; - best_nind[n] = best_nind[n-1]; - best_ntarget[n] = best_ntarget[n-1]; - } - /* n is equal to m here, so they're interchangeable */ - ndist[m] = err; - best_nind[n] = best_index[k]; - best_ntarget[n] = j; - break; - } - } - } - } - if (i==0) - break; - } - for (j=0;j<N;j++) - { - /*previous target (we don't care what happened before*/ - for (m=(i+1)*subvect_size;m<nsf;m++) - nt[j][m]=ot[best_ntarget[j]][m]; - - /* New code: update the rest of the target only if it's worth it */ - for (m=0;m<subvect_size;m++) - { - spx_word16_t g; - int rind; - spx_word16_t sign=1; - rind = best_nind[j]; - if (rind>=shape_cb_size) - { - sign=-1; - rind-=shape_cb_size; - } - - q=subvect_size-m; -#ifdef FIXED_POINT - g=sign*shape_cb[rind*subvect_size+m]; -#else - g=sign*0.03125*shape_cb[rind*subvect_size+m]; -#endif - target_update(nt[j]+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1)); - } - - for (q=0;q<nb_subvect;q++) - nind[j][q]=oind[best_ntarget[j]][q]; - nind[j][i]=best_nind[j]; - } - - /*update old-new data*/ - /* just swap pointers instead of a long copy */ - { - spx_word16_t **tmp2; - tmp2=ot; - ot=nt; - nt=tmp2; - } - for (j=0;j<N;j++) - for (m=0;m<nb_subvect;m++) - oind[j][m]=nind[j][m]; - for (j=0;j<N;j++) - odist[j]=ndist[j]; - } - - /*save indices*/ - for (i=0;i<nb_subvect;i++) - { - ind[i]=nind[0][i]; - speex_bits_pack(bits,ind[i],params->shape_bits+have_sign); - } - - /* Put everything back together */ - for (i=0;i<nb_subvect;i++) - { - int rind; - spx_word16_t sign=1; - rind = ind[i]; - if (rind>=shape_cb_size) - { - sign=-1; - rind-=shape_cb_size; - } -#ifdef FIXED_POINT - if (sign==1) - { - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5); - } else { - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5)); - } -#else - for (j=0;j<subvect_size;j++) - e[subvect_size*i+j]=sign*0.03125*shape_cb[rind*subvect_size+j]; -#endif - } - /* Update excitation */ - for (j=0;j<nsf;j++) - exc[j]=ADD32(exc[j],e[j]); - - /* Update target: only update target if necessary */ - if (update_target) - { - VARDECL(spx_word16_t *r2); - ALLOC(r2, nsf, spx_word16_t); - for (j=0;j<nsf;j++) - r2[j] = EXTRACT16(PSHR32(e[j] ,6)); - syn_percep_zero16(r2, ak, awk1, awk2, r2, nsf,p, stack); - for (j=0;j<nsf;j++) - target[j]=SUB16(target[j],PSHR16(r2[j],2)); - } -} - - -void split_cb_shape_sign_unquant( -spx_sig_t *exc, -const void *par, /* non-overlapping codebook */ -int nsf, /* number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_int32_t *seed -) -{ - int i,j; - VARDECL(int *ind); - VARDECL(int *signs); - const signed char *shape_cb; - int shape_cb_size, subvect_size, nb_subvect; - const split_cb_params *params; - int have_sign; - - params = (const split_cb_params *) par; - subvect_size = params->subvect_size; - nb_subvect = params->nb_subvect; - shape_cb_size = 1<<params->shape_bits; - shape_cb = params->shape_cb; - have_sign = params->have_sign; - - ALLOC(ind, nb_subvect, int); - ALLOC(signs, nb_subvect, int); - - /* Decode codewords and gains */ - for (i=0;i<nb_subvect;i++) - { - if (have_sign) - signs[i] = speex_bits_unpack_unsigned(bits, 1); - else - signs[i] = 0; - ind[i] = speex_bits_unpack_unsigned(bits, params->shape_bits); - } - /* Compute decoded excitation */ - for (i=0;i<nb_subvect;i++) - { - spx_word16_t s=1; - if (signs[i]) - s=-1; -#ifdef FIXED_POINT - if (s==1) - { - for (j=0;j<subvect_size;j++) - exc[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[ind[i]*subvect_size+j]),SIG_SHIFT-5); - } else { - for (j=0;j<subvect_size;j++) - exc[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[ind[i]*subvect_size+j]),SIG_SHIFT-5)); - } -#else - for (j=0;j<subvect_size;j++) - exc[subvect_size*i+j]+=s*0.03125*shape_cb[ind[i]*subvect_size+j]; -#endif - } -} - -void noise_codebook_quant( -spx_word16_t target[], /* target vector */ -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs for this subframe */ -const void *par, /* Codebook/search parameters*/ -int p, /* number of LPC coeffs */ -int nsf, /* number of samples in subframe */ -spx_sig_t *exc, -spx_word16_t *r, -SpeexBits *bits, -char *stack, -int complexity, -int update_target -) -{ - int i; - VARDECL(spx_word16_t *tmp); - ALLOC(tmp, nsf, spx_word16_t); - residue_percep_zero16(target, ak, awk1, awk2, tmp, nsf, p, stack); - - for (i=0;i<nsf;i++) - exc[i]+=SHL32(EXTEND32(tmp[i]),8); - SPEEX_MEMSET(target, 0, nsf); -} - - -void noise_codebook_unquant( -spx_sig_t *exc, -const void *par, /* non-overlapping codebook */ -int nsf, /* number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_int32_t *seed -) -{ - int i; - /* FIXME: This is bad, but I don't think the function ever gets called anyway */ - for (i=0;i<nsf;i++) - exc[i]=SHL32(EXTEND32(speex_rand(1, seed)),SIG_SHIFT); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.h deleted file mode 100755 index 50b530a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin & David Rowe */ -/** - @file cb_search.h - @brief Overlapped codebook search -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CB_SEARCH_H -#define CB_SEARCH_H - -#include "speex/speex_bits.h" -#include "arch.h" - -/** Split codebook parameters. */ -typedef struct split_cb_params { - int subvect_size; - int nb_subvect; - const signed char *shape_cb; - int shape_bits; - int have_sign; -} split_cb_params; - - -void split_cb_search_shape_sign( -spx_word16_t target[], /* target vector */ -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs for this subframe */ -const void *par, /* Codebook/search parameters */ -int p, /* number of LPC coeffs */ -int nsf, /* number of samples in subframe */ -spx_sig_t *exc, -spx_word16_t *r, -SpeexBits *bits, -char *stack, -int complexity, -int update_target -); - -void split_cb_shape_sign_unquant( -spx_sig_t *exc, -const void *par, /* non-overlapping codebook */ -int nsf, /* number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_int32_t *seed -); - - -void noise_codebook_quant( -spx_word16_t target[], /* target vector */ -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs for this subframe */ -const void *par, /* Codebook/search parameters */ -int p, /* number of LPC coeffs */ -int nsf, /* number of samples in subframe */ -spx_sig_t *exc, -spx_word16_t *r, -SpeexBits *bits, -char *stack, -int complexity, -int update_target -); - - -void noise_codebook_unquant( -spx_sig_t *exc, -const void *par, /* non-overlapping codebook */ -int nsf, /* number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_int32_t *seed -); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_arm4.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_arm4.h deleted file mode 100755 index 19b752a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_arm4.h +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file cb_search_arm4.h - @brief Fixed codebook functions (ARM4 version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* This optimization is temporaly disabled until it is fixed to account for the fact - that "r" is now a 16-bit array */ -#if 0 -#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK -static void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) -{ - int i, j, k; - //const signed char *shape; - for (i=0;i<shape_cb_size;i+=4) - { - - //shape = shape_cb; - E[0]=0; - E[1]=0; - E[2]=0; - E[3]=0; - - /* Compute codeword response using convolution with impulse response */ - for(j=0;j<subvect_size;j++) - { -#if 1 - spx_word16_t *res; - res = resp+j; - spx_word32_t resj0,resj1,resj2,resj3; - spx_word32_t dead1, dead2, dead3, dead4, dead5, dead6, dead7, dead8; - __asm__ __volatile__ ( - "mov %0, #0 \n\t" - "mov %1, #0 \n\t" - "mov %2, #0 \n\t" - "mov %3, #0 \n\t" - ".weighted%=: \n\t" - "ldrsb %8, [%6] \n\t" - "ldr %10, [%5], #-4 \n\t" - "mov %9, %6 \n\t" - "ldrsb %11, [%9, %7]! \n\t" - "mla %0, %10, %8, %0 \n\t" - "ldrsb %8, [%9, %7]! \n\t" - "mla %1, %10, %11, %1 \n\t" - "ldrsb %11, [%9, %7]! \n\t" - "mla %2, %10, %8, %2 \n\t" - "subs %4, %4, #1 \n\t" - "mla %3, %10, %11, %3 \n\t" - "add %6, %6, #1 \n\t" - "bne .weighted%= \n\t" - : "=r" (resj0), "=r" (resj1), "=r" (resj2), "=r" (resj3), - "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4), - "=r" (dead5), "=r" (dead6), "=r" (dead7), "=r" (dead8) - : "4" (j+1), "5" (r+j), "6" (shape_cb), "7" (subvect_size) - : "cc", "memory"); -#else - spx_word16_t *res; - res = resp+j; - spx_word32_t resj0=0; - spx_word32_t resj1=0; - spx_word32_t resj2=0; - spx_word32_t resj3=0; - for (k=0;k<=j;k++) - { - const signed char *shape=shape_cb+k; - resj0 = MAC16_16(resj0,*shape,r[j-k]); - shape += subvect_size; - resj1 = MAC16_16(resj1,*shape,r[j-k]); - shape += subvect_size; - resj2 = MAC16_16(resj2,*shape,r[j-k]); - shape += subvect_size; - resj3 = MAC16_16(resj3,*shape,r[j-k]); - shape += subvect_size; - } -#endif - -#ifdef FIXED_POINT - resj0 = SHR(resj0, 11); - resj1 = SHR(resj1, 11); - resj2 = SHR(resj2, 11); - resj3 = SHR(resj3, 11); -#else - resj0 *= 0.03125; - resj1 *= 0.03125; - resj2 *= 0.03125; - resj3 *= 0.03125; -#endif - - /* Compute codeword energy */ - E[0]=ADD32(E[0],MULT16_16(resj0,resj0)); - E[1]=ADD32(E[1],MULT16_16(resj1,resj1)); - E[2]=ADD32(E[2],MULT16_16(resj2,resj2)); - E[3]=ADD32(E[3],MULT16_16(resj3,resj3)); - *res = resj0; - res += subvect_size; - *res = resj1; - res += subvect_size; - *res = resj2; - res += subvect_size; - *res = resj3; - res += subvect_size; - } - resp += subvect_size<<2; - shape_cb += subvect_size<<2; - E+=4; - } - -} -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_bfin.h deleted file mode 100755 index ae9cf83..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_bfin.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @author Jean-Marc Valin - @file cb_search_bfin.h - @brief Fixed codebook functions (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK -void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack) -{ - int i; - for (i=0;i<shape_cb_size;i++) - { - __asm__ __volatile__ ( - "P0 = %0;\n\t" - "LC0 = P0;\n\t" - "P1 = %1;\n\t" - "P2 = %2;\n\t" - "P3 = %3;\n\t" - "P0 = 1;\n\t" - "L0 = 0;\n\t" - "L1 = 0;\n\t" - "R2 = 0;\n\t" - "A1 = 0;\n\t" - "LOOP outter%= LC0;\n\t" - "LOOP_BEGIN outter%=;\n\t" - "A0 = 0;\n\t" - "P4 = P1;\n\t" - "I1 = P2;\n\t" - "R0 = B[P4++] (X) || R1.L = W[I1--];\n\t" - "LOOP inner%= LC1 = P0;\n\t" - "LOOP_BEGIN inner%=;\n\t" - "A0 += R0.L*R1.L (IS) || R0 = B[P4++] (X) || R1.L = W[I1--];\n\t" - "LOOP_END inner%=;\n\t" - "R0 = A0;\n\t" - "R0 >>>= 13;\n\t" - "A1 += R0.L*R0.L (IS);\n\t" - "W[P3++] = R0;\n\t" - "P0 += 1;\n\t" - "P2 += 2;\n\t" - "LOOP_END outter%=;\n\t" - "P4 = %4;\n\t" - "R1 = A1;\n\t" - "[P4] = R1;\n\t" - : - : "m" (subvect_size), "m" (shape_cb), "m" (r), "m" (resp), "m" (E) - : "A0", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "I0", "I1", "L0", - "L1", "A0", "A1", "memory" -#if !(__GNUC__ == 3) - , "LC0", "LC1" /* gcc 3.4 doesn't know about LC registers */ -#endif - ); - shape_cb += subvect_size; - resp += subvect_size; - E++; - } -} - -#define OVERRIDE_TARGET_UPDATE -static inline void target_update(spx_word16_t *t, spx_word16_t g, spx_word16_t *r, int len) -{ - if (!len) - return; - __asm__ __volatile__ - ( - "I0 = %0;\n\t" - "I1 = %1;\n\t" - "L0 = 0;\n\t" - "L1 = 0;\n\t" - "R2 = 4096;\n\t" - "LOOP tupdate%= LC0 = %3;\n\t" - "LOOP_BEGIN tupdate%=;\n\t" - "R0.L = W[I0] || R1.L = W[I1++];\n\t" - "R1 = (A1 = R1.L*%2.L) (IS);\n\t" - "R1 = R1 + R2;\n\t" - "R1 >>>= 13;\n\t" - "R0.L = R0.L - R1.L;\n\t" - "W[I0++] = R0.L;\n\t" - "LOOP_END tupdate%=;\n\t" - : - : "a" (t), "a" (r), "d" (g), "a" (len) - : "R0", "R1", "R2", "A1", "I0", "I1", "L0", "L1" - ); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_sse.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_sse.h deleted file mode 100755 index 8b03968..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/cb_search_sse.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file cb_search_sse.h - @brief Fixed codebook functions (SSE version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <xmmintrin.h> - -static inline void _spx_mm_getr_ps (__m128 U, float *__Z, float *__Y, float *__X, float *__W) -{ - union { - float __a[4]; - __m128 __v; - } __u; - - __u.__v = U; - - *__Z = __u.__a[0]; - *__Y = __u.__a[1]; - *__X = __u.__a[2]; - *__W = __u.__a[3]; - -} - -#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK -static void compute_weighted_codebook(const signed char *shape_cb, const spx_sig_t *_r, float *resp, __m128 *resp2, __m128 *E, int shape_cb_size, int subvect_size, char *stack) -{ - int i, j, k; - __m128 resj, EE; - VARDECL(__m128 *r); - VARDECL(__m128 *shape); - ALLOC(r, subvect_size, __m128); - ALLOC(shape, subvect_size, __m128); - for(j=0;j<subvect_size;j++) - r[j] = _mm_load_ps1(_r+j); - for (i=0;i<shape_cb_size;i+=4) - { - float *_res = resp+i*subvect_size; - const signed char *_shape = shape_cb+i*subvect_size; - EE = _mm_setzero_ps(); - for(j=0;j<subvect_size;j++) - { - shape[j] = _mm_setr_ps(0.03125*_shape[j], 0.03125*_shape[subvect_size+j], 0.03125*_shape[2*subvect_size+j], 0.03125*_shape[3*subvect_size+j]); - } - for(j=0;j<subvect_size;j++) - { - resj = _mm_setzero_ps(); - for (k=0;k<=j;k++) - resj = _mm_add_ps(resj, _mm_mul_ps(shape[k],r[j-k])); - _spx_mm_getr_ps(resj, _res+j, _res+subvect_size+j, _res+2*subvect_size+j, _res+3*subvect_size+j); - *resp2++ = resj; - EE = _mm_add_ps(EE, _mm_mul_ps(resj, resj)); - } - E[i>>2] = EE; - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_16_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_16_table.c deleted file mode 100755 index 98ae357..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_16_table.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_10_16_table.c - Codebook for excitation in narrowband CELP mode (3200 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_10_16_table[160] = { -22,39,14,44,11,35,-2,23,-4,6, -46,-28,13,-27,-23,12,4,20,-5,9, -37,-18,-23,23,0,9,-6,-20,4,-1, --17,-5,-4,17,0,1,9,-2,1,2, -2,-12,8,-25,39,15,9,16,-55,-11, -9,11,5,10,-2,-60,8,13,-6,11, --16,27,-47,-12,11,1,16,-7,9,-3, --29,9,-14,25,-19,34,36,12,40,-10, --3,-24,-14,-37,-21,-35,-2,-36,3,-6, -67,28,6,-17,-3,-12,-16,-15,-17,-7, --59,-36,-13,1,7,1,2,10,2,11, -13,10,8,-2,7,3,5,4,2,2, --3,-8,4,-5,6,7,-42,15,35,-2, --46,38,28,-20,-9,1,7,-3,0,-2, -0,0,0,0,0,0,0,0,0,0, --15,-28,52,32,5,-5,-17,-20,-10,-1}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_32_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_32_table.c deleted file mode 100755 index 1ee56a2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_10_32_table.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_10_32_table.c - Codebook for excitation in narrowband CELP mode (4000 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_10_32_table[320] = { -7,17,17,27,25,22,12,4,-3,0, -28,-36,39,-24,-15,3,-9,15,-5,10, -31,-28,11,31,-21,9,-11,-11,-2,-7, --25,14,-22,31,4,-14,19,-12,14,-5, -4,-7,4,-5,9,0,-2,42,-47,-16, -1,8,0,9,23,-57,0,28,-11,6, --31,55,-45,3,-5,4,2,-2,4,-7, --3,6,-2,7,-3,12,5,8,54,-10, -8,-7,-8,-24,-25,-27,-14,-5,8,5, -44,23,5,-9,-11,-11,-13,-9,-12,-8, --29,-8,-22,6,-15,3,-12,-1,-5,-3, -34,-1,29,-16,17,-4,12,2,1,4, --2,-4,2,-1,11,-3,-52,28,30,-9, --32,25,44,-20,-24,4,6,-1,0,0, -0,0,0,0,0,0,0,0,0,0, --25,-10,22,29,13,-13,-22,-13,-4,0, --4,-16,10,15,-36,-24,28,25,-1,-3, -66,-33,-11,-15,6,0,3,4,-2,5, -24,-20,-47,29,19,-2,-4,-1,0,-1, --2,3,1,8,-11,5,5,-57,28,28, -0,-16,4,-4,12,-6,-1,2,-20,61, --9,24,-22,-42,29,6,17,8,4,2, --65,15,8,10,5,6,5,3,2,-2, --3,5,-9,4,-5,23,13,23,-3,-63, -3,-5,-4,-6,0,-3,23,-36,-46,9, -5,5,8,4,9,-5,1,-3,10,1, --6,10,-11,24,-47,31,22,-12,14,-10, -6,11,-7,-7,7,-31,51,-12,-6,7, -6,-17,9,-11,-20,52,-19,3,-6,-6, --8,-5,23,-41,37,1,-21,10,-14,8, -7,5,-15,-15,23,39,-26,-33,7,2, --32,-30,-21,-8,4,12,17,15,14,11}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_20_32_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_20_32_table.c deleted file mode 100755 index e4098b8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_20_32_table.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_20_32_table.c - Codebook for excitation in narrowband CELP mode (2000 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_20_32_table[640] = { -12,32,25,46,36,33,9,14,-3,6,1,-8,0,-10,-5,-7,-7,-7,-5,-5, -31,-27,24,-32,-4,10,-11,21,-3,19,23,-9,22,24,-10,-1,-10,-13,-7,-11, -42,-33,31,19,-8,0,-10,-16,1,-21,-17,10,-8,14,8,4,11,-2,5,-2, --33,11,-16,33,11,-4,9,-4,11,2,6,-5,8,-5,11,-4,-6,26,-36,-16, -0,4,-2,-8,12,6,-1,34,-46,-22,9,9,21,9,5,-66,-5,26,2,10, -13,2,19,9,12,-81,3,13,13,0,-14,22,-35,6,-7,-4,6,-6,10,-6, --31,38,-33,0,-10,-11,5,-12,12,-17,5,0,-6,13,-9,10,8,25,33,2, --12,8,-6,10,-2,21,7,17,43,5,11,-7,-9,-20,-36,-20,-23,-4,-4,-3, -27,-9,-9,-49,-39,-38,-11,-9,6,5,23,25,5,3,3,4,1,2,-3,-1, -87,39,17,-21,-9,-19,-9,-15,-13,-14,-17,-11,-10,-11,-8,-6,-1,-3,-3,-1, --54,-34,-27,-8,-11,-4,-5,0,0,4,8,6,9,7,9,7,6,5,5,5, -48,10,19,-10,12,-1,9,-3,2,5,-3,2,-2,-2,0,-2,-26,6,9,-7, --16,-9,2,7,7,-5,-43,11,22,-11,-9,34,37,-15,-13,-6,1,-1,1,1, --64,56,52,-11,-27,5,4,3,1,2,1,3,-1,-4,-4,-10,-7,-4,-4,2, --1,-7,-7,-12,-10,-15,-9,-5,-5,-11,-16,-13,6,16,4,-13,-16,-10,-4,2, --47,-13,25,47,19,-14,-20,-8,-17,0,-3,-13,1,6,-17,-14,15,1,10,6, --24,0,-10,19,-69,-8,14,49,17,-5,33,-29,3,-4,0,2,-8,5,-6,2, -120,-56,-12,-47,23,-9,6,-5,1,2,-5,1,-10,4,-1,-1,4,-1,0,-3, -30,-52,-67,30,22,11,-1,-4,3,0,7,2,0,1,-10,-4,-8,-13,5,1, -1,-1,5,13,-9,-3,-10,-62,22,48,-4,-6,2,3,5,1,1,4,1,13, -3,-20,10,-9,13,-2,-4,9,-20,44,-1,20,-32,-67,19,0,28,11,8,2, --11,15,-19,-53,31,2,34,10,6,-4,-58,8,10,13,14,1,12,2,0,0, --128,37,-8,44,-9,26,-3,18,2,6,11,-1,9,1,5,3,0,1,1,2, -12,3,-2,-3,7,25,9,18,-6,-37,3,-8,-16,3,-10,-7,17,-34,-44,11, -17,-15,-3,-16,-1,-13,11,-46,-65,-2,8,13,2,4,4,5,15,5,9,6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, --9,19,-12,12,-28,38,29,-1,12,2,5,23,-10,3,4,-15,21,-4,3,3, -6,17,-9,-4,-8,-20,26,5,-10,6,1,-19,18,-15,-12,47,-6,-2,-7,-9, --1,-17,-2,-2,-14,30,-14,2,-7,-4,-1,-12,11,-25,16,-3,-12,11,-7,7, --17,1,19,-28,31,-7,-10,7,-10,3,12,5,-16,6,24,41,-29,-54,0,1, -7,-1,5,-6,13,10,-4,-8,8,-9,-27,-53,-38,-1,10,19,17,16,12,12, -0,3,-7,-4,13,12,-31,-14,6,-5,3,5,17,43,50,25,10,1,-6,-2}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_256_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_256_table.c deleted file mode 100755 index 4137996..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_256_table.c +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_5_256_table.c - Codebook for excitation in narrowband CELP mode (12800 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_5_256_table[1280] = { --8,-37,5,-43,5, -73,61,39,12,-3, --61,-32,2,42,30, --3,17,-27,9,34, -20,-1,-5,2,23, --7,-46,26,53,-47, -20,-2,-33,-89,-51, --64,27,11,15,-34, --5,-56,25,-9,-1, --29,1,40,67,-23, --16,16,33,19,7, -14,85,22,-10,-10, --12,-7,-1,52,89, -29,11,-20,-37,-46, --15,17,-24,-28,24, -2,1,0,23,-101, -23,14,-1,-23,-18, -9,5,-13,38,1, --28,-28,4,27,51, --26,34,-40,35,47, -54,38,-54,-26,-6, -42,-25,13,-30,-36, -18,41,-4,-33,23, --32,-7,-4,51,-3, -17,-52,56,-47,36, --2,-21,36,10,8, --33,31,19,9,-5, --40,10,-9,-21,19, -18,-78,-18,-5,0, --26,-36,-47,-51,-44, -18,40,27,-2,29, -49,-26,2,32,-54, -30,-73,54,3,-5, -36,22,53,10,-1, --84,-53,-29,-5,3, --44,53,-51,4,22, -71,-35,-1,33,-5, --27,-7,36,17,-23, --39,16,-9,-55,-15, --20,39,-35,6,-39, --14,18,48,-64,-17, --15,9,39,81,37, --68,37,47,-21,-6, --104,13,6,9,-2, -35,8,-23,18,42, -45,21,33,-5,-49, -9,-6,-43,-56,39, -2,-16,-25,87,1, --3,-9,17,-25,-11, --9,-1,10,2,-14, --14,4,-1,-10,28, --23,40,-32,26,-9, -26,4,-27,-23,3, -42,-60,1,49,-3, -27,10,-52,-40,-2, -18,45,-23,17,-44, -3,-3,17,-46,52, --40,-47,25,75,31, --49,53,30,-30,-32, --36,38,-6,-15,-16, -54,-27,-48,3,38, --29,-32,-22,-14,-4, --23,-13,32,-39,9, -8,-45,-13,34,-16, -49,40,32,31,28, -23,23,32,47,59, --68,8,62,44,25, --14,-24,-65,-16,36, -67,-25,-38,-21,4, --33,-2,42,5,-63, -40,11,26,-42,-23, --61,79,-31,23,-20, -10,-32,53,-25,-36, -10,-26,-5,3,0, --71,5,-10,-37,1, --24,21,-54,-17,1, --29,-25,-15,-27,32, -68,45,-16,-37,-18, --5,1,0,-77,71, --6,3,-20,71,-67, -29,-35,10,-30,19, -4,16,17,5,0, --14,19,2,28,26, -59,3,2,24,39, -55,-50,-45,-18,-17, -33,-35,14,-1,1, -8,87,-35,-29,0, --27,13,-7,23,-13, -37,-40,50,-35,14, -19,-7,-14,49,54, --5,22,-2,-29,-8, --27,38,13,27,48, -12,-41,-21,-15,28, -7,-16,-24,-19,-20, -11,-20,9,2,13, -23,-20,11,27,-27, -71,-69,8,2,-6, -22,12,16,16,9, --16,-8,-17,1,25, -1,40,-37,-33,66, -94,53,4,-22,-25, --41,-42,25,35,-16, --15,57,31,-29,-32, -21,16,-60,45,15, --1,7,57,-26,-47, --29,11,8,15,19, --105,-8,54,27,10, --17,6,-12,-1,-10, -4,0,23,-10,31, -13,11,10,12,-64, -23,-3,-8,-19,16, -52,24,-40,16,10, -40,5,9,0,-13, --7,-21,-8,-6,-7, --21,59,16,-53,18, --60,11,-47,14,-18, -25,-13,-24,4,-39, -16,-28,54,26,-67, -30,27,-20,-52,20, --12,55,12,18,-16, -39,-14,-6,-26,56, --88,-55,12,25,26, --37,6,75,0,-34, --81,54,-30,1,-7, -49,-23,-14,21,10, --62,-58,-57,-47,-34, -15,-4,34,-78,31, -25,-11,7,50,-10, -42,-63,14,-36,-4, -57,55,57,53,42, --42,-1,15,40,37, -15,25,-11,6,1, -31,-2,-6,-1,-7, --64,34,28,30,-1, -3,21,0,-88,-12, --56,25,-28,40,8, --28,-14,9,12,2, --6,-17,22,49,-6, --26,14,28,-20,4, --12,50,35,40,13, --38,-58,-29,17,30, -22,60,26,-54,-39, --12,58,-28,-63,10, --21,-8,-12,26,-62, -6,-10,-11,-22,-6, --7,4,1,18,2, --70,11,14,4,13, -19,-24,-34,24,67, -17,51,-21,13,23, -54,-30,48,1,-13, -80,26,-16,-2,13, --4,6,-30,29,-24, -73,-58,30,-27,20, --2,-21,41,45,30, --27,-3,-5,-18,-20, --49,-3,-35,10,42, --19,-67,-53,-11,9, -13,-15,-33,-51,-30, -15,7,25,-30,4, -28,-22,-34,54,-29, -39,-46,20,16,34, --4,47,75,1,-44, --55,-24,7,-1,9, --42,50,-8,-36,41, -68,0,-4,-10,-23, --15,-50,64,36,-9, --27,12,25,-38,-47, --37,32,-49,51,-36, -2,-4,69,-26,19, -7,45,67,46,13, --63,46,15,-47,4, --41,13,-6,5,-21, -37,26,-55,-7,33, --1,-28,10,-17,-64, --14,0,-36,-17,93, --3,-9,-66,44,-21, -3,-12,38,-6,-13, --12,19,13,43,-43, --10,-12,6,-5,9, --49,32,-5,2,4, -5,15,-16,10,-21, -8,-62,-8,64,8, -79,-1,-66,-49,-18, -5,40,-5,-30,-45, -1,-6,21,-32,93, --18,-30,-21,32,21, --18,22,8,5,-41, --54,80,22,-10,-7, --8,-23,-64,66,56, --14,-30,-41,-46,-14, --29,-37,27,-14,42, --2,-9,-29,34,14, -33,-14,22,4,10, -26,26,28,32,23, --72,-32,3,0,-14, -35,-42,-78,-32,6, -29,-18,-45,-5,7, --33,-45,-3,-22,-34, -8,-8,4,-51,-25, --9,59,-78,21,-5, --25,-48,66,-15,-17, --24,-49,-13,25,-23, --64,-6,40,-24,-19, --11,57,-33,-8,1, -10,-52,-54,28,39, -49,34,-11,-61,-41, --43,10,15,-15,51, -30,15,-51,32,-34, --2,-34,14,18,16, -1,1,-3,-3,1, -1,-18,6,16,48, -12,-5,-42,7,36, -48,7,-20,-10,7, -12,2,54,39,-38, -37,54,4,-11,-8, --46,-10,5,-10,-34, -46,-12,29,-37,39, -36,-11,24,56,17, -14,20,25,0,-25, --28,55,-7,-5,27, -3,9,-26,-8,6, --24,-10,-30,-31,-34, -18,4,22,21,40, --1,-29,-37,-8,-21, -92,-29,11,-3,11, -73,23,22,7,4, --44,-9,-11,21,-13, -11,9,-78,-1,47, -114,-12,-37,-19,-5, --11,-22,19,12,-30, -7,38,45,-21,-8, --9,55,-45,56,-21, -7,17,46,-57,-87, --6,27,31,31,7, --56,-12,46,21,-5, --12,36,3,3,-21, -43,19,12,-7,9, --14,0,-9,-33,-91, -7,26,3,-11,64, -83,-31,-46,25,2, -9,5,2,2,-1, -20,-17,10,-5,-27, --8,20,8,-19,16, --21,-13,-31,5,5, -42,24,9,34,-20, -28,-61,22,11,-39, -64,-20,-1,-30,-9, --20,24,-25,-24,-29, -22,-60,6,-5,41, --9,-87,14,34,15, --57,52,69,15,-3, --102,58,16,3,6, -60,-75,-32,26,7, --57,-27,-32,-24,-21, --29,-16,62,-46,31, -30,-27,-15,7,15}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_64_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_64_table.c deleted file mode 100755 index 2c66d51..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_5_64_table.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_5_64_table.c - Codebook for excitation in narrowband CELP mode (9600 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_5_64_table[320]={ -1,5,-15,49,-66, --48,-4,50,-44,7, -37,16,-18,25,-26, --26,-15,19,19,-27, --47,28,57,5,-17, --32,-41,68,21,-2, -64,56,8,-16,-13, --26,-9,-16,11,6, --39,25,-19,22,-31, -20,-45,55,-43,10, --16,47,-40,40,-20, --51,3,-17,-14,-15, --24,53,-20,-46,46, -27,-68,32,3,-18, --5,9,-31,16,-9, --10,-1,-23,48,95, -47,25,-41,-32,-3, -15,-25,-55,36,41, --27,20,5,13,14, --22,5,2,-23,18, -46,-15,17,-18,-34, --5,-8,27,-55,73, -16,2,-1,-17,40, --78,33,0,2,19, -4,53,-16,-15,-16, --28,-3,-13,49,8, --7,-29,27,-13,32, -20,32,-61,16,14, -41,44,40,24,20, -7,4,48,-60,-77, -17,-6,-48,65,-15, -32,-30,-71,-10,-3, --6,10,-2,-7,-29, --56,67,-30,7,-5, -86,-6,-10,0,5, --31,60,34,-38,-3, -24,10,-2,30,23, -24,-41,12,70,-43, -15,-17,6,13,16, --13,8,30,-15,-8, -5,23,-34,-98,-4, --13,13,-48,-31,70, -12,31,25,24,-24, -26,-7,33,-16,8, -5,-11,-14,-8,-65, -13,10,-2,-9,0, --3,-68,5,35,7, -0,-31,-1,-17,-9, --9,16,-37,-18,-1, -69,-48,-28,22,-21, --11,5,49,55,23, --86,-36,16,2,13, -63,-51,30,-11,13, -24,-18,-6,14,-19, -1,41,9,-5,27, --36,-44,-34,-37,-21, --26,31,-39,15,43, -5,-8,29,20,-8, --20,-52,-28,-1,13, -26,-34,-10,-9,27, --8,8,27,-66,4, -12,-22,49,10,-77, -32,-18,3,-38,12, --3,-1,2,2,0}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_8_128_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_8_128_table.c deleted file mode 100755 index 17ee64b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/exc_8_128_table.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: exc_8_128_table.c - Codebook for excitation in narrowband CELP mode (7000 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -const signed char exc_8_128_table[1024] = { --14,9,13,-32,2,-10,31,-10, --8,-8,6,-4,-1,10,-64,23, -6,20,13,6,8,-22,16,34, -7,42,-49,-28,5,26,4,-15, -41,34,41,32,33,24,23,14, -8,40,34,4,-24,-41,-19,-15, -13,-13,33,-54,24,27,-44,33, -27,-15,-15,24,-19,14,-36,14, --9,24,-12,-4,37,-5,16,-34, -5,10,33,-15,-54,-16,12,25, -12,1,2,0,3,-1,-4,-4, -11,2,-56,54,27,-20,13,-6, --46,-41,-33,-11,-5,7,12,14, --14,-5,8,20,6,3,4,-8, --5,-42,11,8,-14,25,-2,2, -13,11,-22,39,-9,9,5,-45, --9,7,-9,12,-7,34,-17,-102, -7,2,-42,18,35,-9,-34,11, --5,-2,3,22,46,-52,-25,-9, --94,8,11,-5,-5,-5,4,-7, --35,-7,54,5,-32,3,24,-9, --22,8,65,37,-1,-12,-23,-6, --9,-28,55,-33,14,-3,2,18, --60,41,-17,8,-16,17,-11,0, --11,29,-28,37,9,-53,33,-14, --9,7,-25,-7,-11,26,-32,-8, -24,-21,22,-19,19,-10,29,-14, -0,0,0,0,0,0,0,0, --5,-52,10,41,6,-30,-4,16, -32,22,-27,-22,32,-3,-28,-3, -3,-35,6,17,23,21,8,2, -4,-45,-17,14,23,-4,-31,-11, --3,14,1,19,-11,2,61,-8, -9,-12,7,-10,12,-3,-24,99, --48,23,50,-37,-5,-23,0,8, --14,35,-64,-5,46,-25,13,-1, --49,-19,-15,9,34,50,25,11, --6,-9,-16,-20,-32,-33,-32,-27, -10,-8,12,-15,56,-14,-32,33, -3,-9,1,65,-9,-9,-10,-2, --6,-23,9,17,3,-28,13,-32, -4,-2,-10,4,-16,76,12,-52, -6,13,33,-6,4,-14,-9,-3, -1,-15,-16,28,1,-15,11,16, -9,4,-21,-37,-40,-6,22,12, --15,-23,-14,-17,-16,-9,-10,-9, -13,-39,41,5,-9,16,-38,25, -46,-47,4,49,-14,17,-2,6, -18,5,-6,-33,-22,44,50,-2, -1,3,-6,7,7,-3,-21,38, --18,34,-14,-41,60,-13,6,16, --24,35,19,-13,-36,24,3,-17, --14,-10,36,44,-44,-29,-3,3, --54,-8,12,55,26,4,-2,-5, -2,-11,22,-23,2,22,1,-25, --39,66,-49,21,-8,-2,10,-14, --60,25,6,10,27,-25,16,5, --2,-9,26,-13,-20,58,-2,7, -52,-9,2,5,-4,-15,23,-1, --38,23,8,27,-6,0,-27,-7, -39,-10,-14,26,11,-45,-12,9, --5,34,4,-35,10,43,-22,-11, -56,-7,20,1,10,1,-26,9, -94,11,-27,-14,-13,1,-11,0, -14,-5,-6,-10,-4,-15,-8,-41, -21,-5,1,-28,-8,22,-9,33, --23,-4,-4,-12,39,4,-7,3, --60,80,8,-17,2,-6,12,-5, -1,9,15,27,31,30,27,23, -61,47,26,10,-5,-8,-12,-13, -5,-18,25,-15,-4,-15,-11,12, --2,-2,-16,-2,-6,24,12,11, --4,9,1,-9,14,-45,57,12, -20,-35,26,11,-64,32,-10,-10, -42,-4,-9,-16,32,24,7,10, -52,-11,-57,29,0,8,0,-6, -17,-17,-56,-40,7,20,18,12, --6,16,5,7,-1,9,1,10, -29,12,16,13,-2,23,7,9, --3,-4,-5,18,-64,13,55,-25, -9,-9,24,14,-25,15,-11,-40, --30,37,1,-19,22,-5,-31,13, --2,0,7,-4,16,-67,12,66, --36,24,-8,18,-15,-23,19,0, --45,-7,4,3,-13,13,35,5, -13,33,10,27,23,0,-7,-11, -43,-74,36,-12,2,5,-8,6, --33,11,-16,-14,-5,-7,-3,17, --34,27,-16,11,-9,15,33,-31, -8,-16,7,-6,-7,63,-55,-17, -11,-1,20,-46,34,-30,6,9, -19,28,-9,5,-24,-8,-23,-2, -31,-19,-16,-5,-15,-18,0,26, -18,37,-5,-15,-2,17,5,-27, -21,-33,44,12,-27,-9,17,11, -25,-21,-31,-7,13,33,-8,-25, --7,7,-10,4,-6,-9,48,-82, --23,-8,6,11,-23,3,-3,49, --29,25,31,4,14,16,9,-4, --18,10,-26,3,5,-44,-9,9, --47,-55,15,9,28,1,4,-3, -46,6,-6,-38,-29,-31,-15,-6, -3,0,14,-6,8,-54,-50,33, --5,1,-14,33,-48,26,-4,-5, --3,-5,-3,-5,-28,-22,77,55, --1,2,10,10,-9,-14,-66,-49, -11,-36,-6,-20,10,-10,16,12, -4,-1,-16,45,-44,-50,31,-2, -25,42,23,-32,-22,0,11,20, --40,-35,-40,-36,-32,-26,-21,-13, -52,-22,6,-24,-20,17,-5,-8, -36,-25,-11,21,-26,6,34,-8, -7,20,-3,5,-25,-8,18,-5, --9,-4,1,-9,20,20,39,48, --24,9,5,-65,22,29,4,3, --43,-11,32,-6,9,19,-27,-10, --47,-14,24,10,-7,-36,-7,-1, --4,-5,-5,16,53,25,-26,-29, --4,-12,45,-58,-34,33,-5,2, --1,27,-48,31,-15,22,-5,4, -7,7,-25,-3,11,-22,16,-12, -8,-3,7,-11,45,14,-73,-19, -56,-46,24,-20,28,-12,-2,-1, --36,-3,-33,19,-6,7,2,-15, -5,-31,-45,8,35,13,20,0, --9,48,-13,-43,-3,-13,2,-5, -72,-68,-27,2,1,-2,-7,5, -36,33,-40,-12,-4,-5,23,19}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.c deleted file mode 100755 index 4f37e1b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.c +++ /dev/null @@ -1,397 +0,0 @@ -/* Copyright (C) 2005-2006 Jean-Marc Valin - File: fftwrap.c - - Wrapper for various FFTs - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "arch.h" -#include "os_support.h" - -#define MAX_FFT_SIZE 2048 - -#ifdef FIXED_POINT -static int maximize_range(spx_word16_t *in, spx_word16_t *out, spx_word16_t bound, int len) -{ - int i, shift; - spx_word16_t max_val = 0; - for (i=0;i<len;i++) - { - if (in[i]>max_val) - max_val = in[i]; - if (-in[i]>max_val) - max_val = -in[i]; - } - shift=0; - while (max_val <= (bound>>1) && max_val != 0) - { - max_val <<= 1; - shift++; - } - for (i=0;i<len;i++) - { - out[i] = SHL16(in[i], shift); - } - return shift; -} - -static void renorm_range(spx_word16_t *in, spx_word16_t *out, int shift, int len) -{ - int i; - for (i=0;i<len;i++) - { - out[i] = PSHR16(in[i], shift); - } -} -#endif - -#ifdef USE_SMALLFT - -#include "smallft.h" -#include <math.h> - -void *spx_fft_init(int size) -{ - struct drft_lookup *table; - table = speex_alloc(sizeof(struct drft_lookup)); - spx_drft_init((struct drft_lookup *)table, size); - return (void*)table; -} - -void spx_fft_destroy(void *table) -{ - spx_drft_clear(table); - speex_free(table); -} - -void spx_fft(void *table, float *in, float *out) -{ - if (in==out) - { - int i; - float scale = 1./((struct drft_lookup *)table)->n; - speex_warning("FFT should not be done in-place"); - for (i=0;i<((struct drft_lookup *)table)->n;i++) - out[i] = scale*in[i]; - } else { - int i; - float scale = 1./((struct drft_lookup *)table)->n; - for (i=0;i<((struct drft_lookup *)table)->n;i++) - out[i] = scale*in[i]; - } - spx_drft_forward((struct drft_lookup *)table, out); -} - -void spx_ifft(void *table, float *in, float *out) -{ - if (in==out) - { - speex_warning("FFT should not be done in-place"); - } else { - int i; - for (i=0;i<((struct drft_lookup *)table)->n;i++) - out[i] = in[i]; - } - spx_drft_backward((struct drft_lookup *)table, out); -} - -#elif defined(USE_INTEL_MKL) -#include <mkl.h> - -struct mkl_config { - DFTI_DESCRIPTOR_HANDLE desc; - int N; -}; - -void *spx_fft_init(int size) -{ - struct mkl_config *table = (struct mkl_config *) speex_alloc(sizeof(struct mkl_config)); - table->N = size; - DftiCreateDescriptor(&table->desc, DFTI_SINGLE, DFTI_REAL, 1, size); - DftiSetValue(table->desc, DFTI_PACKED_FORMAT, DFTI_PACK_FORMAT); - DftiSetValue(table->desc, DFTI_PLACEMENT, DFTI_NOT_INPLACE); - DftiSetValue(table->desc, DFTI_FORWARD_SCALE, 1.0f / size); - DftiCommitDescriptor(table->desc); - return table; -} - -void spx_fft_destroy(void *table) -{ - struct mkl_config *t = (struct mkl_config *) table; - DftiFreeDescriptor(t->desc); - speex_free(table); -} - -void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - struct mkl_config *t = (struct mkl_config *) table; - DftiComputeForward(t->desc, in, out); -} - -void spx_ifft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - struct mkl_config *t = (struct mkl_config *) table; - DftiComputeBackward(t->desc, in, out); -} - -#elif defined(USE_GPL_FFTW3) - -#include <fftw3.h> - -struct fftw_config { - float *in; - float *out; - fftwf_plan fft; - fftwf_plan ifft; - int N; -}; - -void *spx_fft_init(int size) -{ - struct fftw_config *table = (struct fftw_config *) speex_alloc(sizeof(struct fftw_config)); - table->in = fftwf_malloc(sizeof(float) * (size+2)); - table->out = fftwf_malloc(sizeof(float) * (size+2)); - - table->fft = fftwf_plan_dft_r2c_1d(size, table->in, (fftwf_complex *) table->out, FFTW_PATIENT); - table->ifft = fftwf_plan_dft_c2r_1d(size, (fftwf_complex *) table->in, table->out, FFTW_PATIENT); - - table->N = size; - return table; -} - -void spx_fft_destroy(void *table) -{ - struct fftw_config *t = (struct fftw_config *) table; - fftwf_destroy_plan(t->fft); - fftwf_destroy_plan(t->ifft); - fftwf_free(t->in); - fftwf_free(t->out); - speex_free(table); -} - - -void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - int i; - struct fftw_config *t = (struct fftw_config *) table; - const int N = t->N; - float *iptr = t->in; - float *optr = t->out; - const float m = 1.0 / N; - for(i=0;i<N;++i) - iptr[i]=in[i] * m; - - fftwf_execute(t->fft); - - out[0] = optr[0]; - for(i=1;i<N;++i) - out[i] = optr[i+1]; -} - -void spx_ifft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - int i; - struct fftw_config *t = (struct fftw_config *) table; - const int N = t->N; - float *iptr = t->in; - float *optr = t->out; - - iptr[0] = in[0]; - iptr[1] = 0.0f; - for(i=1;i<N;++i) - iptr[i+1] = in[i]; - iptr[N+1] = 0.0f; - - fftwf_execute(t->ifft); - - for(i=0;i<N;++i) - out[i] = optr[i]; -} - -#elif defined(USE_KISS_FFT) - -#include "kiss_fftr.h" -#include "kiss_fft.h" - -struct kiss_config { - kiss_fftr_cfg forward; - kiss_fftr_cfg backward; - int N; -}; - -void *spx_fft_init(int size) -{ - struct kiss_config *table; - table = (struct kiss_config*)speex_alloc(sizeof(struct kiss_config)); - table->forward = kiss_fftr_alloc(size,0,NULL,NULL); - table->backward = kiss_fftr_alloc(size,1,NULL,NULL); - table->N = size; - return table; -} - -void spx_fft_destroy(void *table) -{ - struct kiss_config *t = (struct kiss_config *)table; - kiss_fftr_free(t->forward); - kiss_fftr_free(t->backward); - speex_free(table); -} - -#ifdef FIXED_POINT - -void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - int shift; - struct kiss_config *t = (struct kiss_config *)table; - shift = maximize_range(in, in, 32000, t->N); - kiss_fftr2(t->forward, in, out); - renorm_range(in, in, shift, t->N); - renorm_range(out, out, shift, t->N); -} - -#else - -void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - int i; - float scale; - struct kiss_config *t = (struct kiss_config *)table; - scale = 1./t->N; - kiss_fftr2(t->forward, in, out); - for (i=0;i<t->N;i++) - out[i] *= scale; -} -#endif - -void spx_ifft(void *table, spx_word16_t *in, spx_word16_t *out) -{ - struct kiss_config *t = (struct kiss_config *)table; - kiss_fftri2(t->backward, in, out); -} - - -#else - -#error No other FFT implemented - -#endif - - -#ifdef FIXED_POINT -/*#include "smallft.h"*/ - - -void spx_fft_float(void *table, float *in, float *out) -{ - int i; -#ifdef USE_SMALLFT - int N = ((struct drft_lookup *)table)->n; -#elif defined(USE_KISS_FFT) - int N = ((struct kiss_config *)table)->N; -#else -#endif -#ifdef VAR_ARRAYS - spx_word16_t _in[N]; - spx_word16_t _out[N]; -#else - spx_word16_t _in[MAX_FFT_SIZE]; - spx_word16_t _out[MAX_FFT_SIZE]; -#endif - for (i=0;i<N;i++) - _in[i] = (int)floor(.5+in[i]); - spx_fft(table, _in, _out); - for (i=0;i<N;i++) - out[i] = _out[i]; -#if 0 - if (!fixed_point) - { - float scale; - struct drft_lookup t; - spx_drft_init(&t, ((struct kiss_config *)table)->N); - scale = 1./((struct kiss_config *)table)->N; - for (i=0;i<((struct kiss_config *)table)->N;i++) - out[i] = scale*in[i]; - spx_drft_forward(&t, out); - spx_drft_clear(&t); - } -#endif -} - -void spx_ifft_float(void *table, float *in, float *out) -{ - int i; -#ifdef USE_SMALLFT - int N = ((struct drft_lookup *)table)->n; -#elif defined(USE_KISS_FFT) - int N = ((struct kiss_config *)table)->N; -#else -#endif -#ifdef VAR_ARRAYS - spx_word16_t _in[N]; - spx_word16_t _out[N]; -#else - spx_word16_t _in[MAX_FFT_SIZE]; - spx_word16_t _out[MAX_FFT_SIZE]; -#endif - for (i=0;i<N;i++) - _in[i] = (int)floor(.5+in[i]); - spx_ifft(table, _in, _out); - for (i=0;i<N;i++) - out[i] = _out[i]; -#if 0 - if (!fixed_point) - { - int i; - struct drft_lookup t; - spx_drft_init(&t, ((struct kiss_config *)table)->N); - for (i=0;i<((struct kiss_config *)table)->N;i++) - out[i] = in[i]; - spx_drft_backward(&t, out); - spx_drft_clear(&t); - } -#endif -} - -#else - -void spx_fft_float(void *table, float *in, float *out) -{ - spx_fft(table, in, out); -} -void spx_ifft_float(void *table, float *in, float *out) -{ - spx_ifft(table, in, out); -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.h deleted file mode 100755 index dfaf489..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fftwrap.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2005 Jean-Marc Valin - File: fftwrap.h - - Wrapper for various FFTs - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef FFTWRAP_H -#define FFTWRAP_H - -#include "arch.h" - -/** Compute tables for an FFT */ -void *spx_fft_init(int size); - -/** Destroy tables for an FFT */ -void spx_fft_destroy(void *table); - -/** Forward (real to half-complex) transform */ -void spx_fft(void *table, spx_word16_t *in, spx_word16_t *out); - -/** Backward (half-complex to real) transform */ -void spx_ifft(void *table, spx_word16_t *in, spx_word16_t *out); - -/** Forward (real to half-complex) transform of float data */ -void spx_fft_float(void *table, float *in, float *out); - -/** Backward (half-complex to real) transform of float data */ -void spx_ifft_float(void *table, float *in, float *out); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.c deleted file mode 100755 index e2fb71d..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (C) 2006 Jean-Marc Valin */ -/** - @file filterbank.c - @brief Converting between psd and filterbank - */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "filterbank.h" -#include "arch.h" -#include <math.h> -#include "math_approx.h" -#include "os_support.h" - -#ifdef FIXED_POINT - -#define toBARK(n) (MULT16_16(26829,spx_atan(SHR32(MULT16_16(97,n),2))) + MULT16_16(4588,spx_atan(MULT16_32_Q15(20,MULT16_16(n,n)))) + MULT16_16(3355,n)) - -#else -#define toBARK(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n)) -#endif - -#define toMEL(n) (2595.f*log10(1.f+(n)/700.f)) - -FilterBank *filterbank_new(int banks, spx_word32_t sampling, int len, int type) -{ - FilterBank *bank; - spx_word32_t df; - spx_word32_t max_mel, mel_interval; - int i; - int id1; - int id2; - df = DIV32(SHL32(sampling,15),MULT16_16(2,len)); - max_mel = toBARK(EXTRACT16(sampling/2)); - mel_interval = PDIV32(max_mel,banks-1); - - bank = (FilterBank*)speex_alloc(sizeof(FilterBank)); - bank->nb_banks = banks; - bank->len = len; - bank->bank_left = (int*)speex_alloc(len*sizeof(int)); - bank->bank_right = (int*)speex_alloc(len*sizeof(int)); - bank->filter_left = (spx_word16_t*)speex_alloc(len*sizeof(spx_word16_t)); - bank->filter_right = (spx_word16_t*)speex_alloc(len*sizeof(spx_word16_t)); - /* Think I can safely disable normalisation that for fixed-point (and probably float as well) */ -#ifndef FIXED_POINT - bank->scaling = (float*)speex_alloc(banks*sizeof(float)); -#endif - for (i=0;i<len;i++) - { - spx_word16_t curr_freq; - spx_word32_t mel; - spx_word16_t val; - curr_freq = EXTRACT16(MULT16_32_P15(i,df)); - mel = toBARK(curr_freq); - if (mel > max_mel) - break; -#ifdef FIXED_POINT - id1 = DIV32(mel,mel_interval); -#else - id1 = (int)(floor(mel/mel_interval)); -#endif - if (id1>banks-2) - { - id1 = banks-2; - val = Q15_ONE; - } else { - val = DIV32_16(mel - id1*mel_interval,EXTRACT16(PSHR32(mel_interval,15))); - } - id2 = id1+1; - bank->bank_left[i] = id1; - bank->filter_left[i] = SUB16(Q15_ONE,val); - bank->bank_right[i] = id2; - bank->filter_right[i] = val; - } - - /* Think I can safely disable normalisation for fixed-point (and probably float as well) */ -#ifndef FIXED_POINT - for (i=0;i<bank->nb_banks;i++) - bank->scaling[i] = 0; - for (i=0;i<bank->len;i++) - { - int id = bank->bank_left[i]; - bank->scaling[id] += bank->filter_left[i]; - id = bank->bank_right[i]; - bank->scaling[id] += bank->filter_right[i]; - } - for (i=0;i<bank->nb_banks;i++) - bank->scaling[i] = Q15_ONE/(bank->scaling[i]); -#endif - return bank; -} - -void filterbank_destroy(FilterBank *bank) -{ - speex_free(bank->bank_left); - speex_free(bank->bank_right); - speex_free(bank->filter_left); - speex_free(bank->filter_right); -#ifndef FIXED_POINT - speex_free(bank->scaling); -#endif - speex_free(bank); -} - -void filterbank_compute_bank32(FilterBank *bank, spx_word32_t *ps, spx_word32_t *mel) -{ - int i; - for (i=0;i<bank->nb_banks;i++) - mel[i] = 0; - - for (i=0;i<bank->len;i++) - { - int id; - id = bank->bank_left[i]; - mel[id] += MULT16_32_P15(bank->filter_left[i],ps[i]); - id = bank->bank_right[i]; - mel[id] += MULT16_32_P15(bank->filter_right[i],ps[i]); - } - /* Think I can safely disable normalisation that for fixed-point (and probably float as well) */ -#ifndef FIXED_POINT - /*for (i=0;i<bank->nb_banks;i++) - mel[i] = MULT16_32_P15(Q15(bank->scaling[i]),mel[i]); - */ -#endif -} - -void filterbank_compute_psd16(FilterBank *bank, spx_word16_t *mel, spx_word16_t *ps) -{ - int i; - for (i=0;i<bank->len;i++) - { - spx_word32_t tmp; - int id1, id2; - id1 = bank->bank_left[i]; - id2 = bank->bank_right[i]; - tmp = MULT16_16(mel[id1],bank->filter_left[i]); - tmp += MULT16_16(mel[id2],bank->filter_right[i]); - ps[i] = EXTRACT16(PSHR32(tmp,15)); - } -} - - -#ifndef FIXED_POINT -void filterbank_compute_bank(FilterBank *bank, float *ps, float *mel) -{ - int i; - for (i=0;i<bank->nb_banks;i++) - mel[i] = 0; - - for (i=0;i<bank->len;i++) - { - int id = bank->bank_left[i]; - mel[id] += bank->filter_left[i]*ps[i]; - id = bank->bank_right[i]; - mel[id] += bank->filter_right[i]*ps[i]; - } - for (i=0;i<bank->nb_banks;i++) - mel[i] *= bank->scaling[i]; -} - -void filterbank_compute_psd(FilterBank *bank, float *mel, float *ps) -{ - int i; - for (i=0;i<bank->len;i++) - { - int id = bank->bank_left[i]; - ps[i] = mel[id]*bank->filter_left[i]; - id = bank->bank_right[i]; - ps[i] += mel[id]*bank->filter_right[i]; - } -} - -void filterbank_psy_smooth(FilterBank *bank, float *ps, float *mask) -{ - /* Low freq slope: 14 dB/Bark*/ - /* High freq slope: 9 dB/Bark*/ - /* Noise vs tone: 5 dB difference */ - /* FIXME: Temporary kludge */ - float bark[100]; - int i; - /* Assumes 1/3 Bark resolution */ - float decay_low = 0.34145f; - float decay_high = 0.50119f; - filterbank_compute_bank(bank, ps, bark); - for (i=1;i<bank->nb_banks;i++) - { - /*float decay_high = 13-1.6*log10(bark[i-1]); - decay_high = pow(10,(-decay_high/30.f));*/ - bark[i] = bark[i] + decay_high*bark[i-1]; - } - for (i=bank->nb_banks-2;i>=0;i--) - { - bark[i] = bark[i] + decay_low*bark[i+1]; - } - filterbank_compute_psd(bank, bark, mask); -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.h deleted file mode 100755 index 3e889a2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filterbank.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2006 Jean-Marc Valin */ -/** - @file filterbank.h - @brief Converting between psd and filterbank - */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FILTERBANK_H -#define FILTERBANK_H - -#include "arch.h" - -typedef struct { - int *bank_left; - int *bank_right; - spx_word16_t *filter_left; - spx_word16_t *filter_right; -#ifndef FIXED_POINT - float *scaling; -#endif - int nb_banks; - int len; -} FilterBank; - - -FilterBank *filterbank_new(int banks, spx_word32_t sampling, int len, int type); - -void filterbank_destroy(FilterBank *bank); - -void filterbank_compute_bank32(FilterBank *bank, spx_word32_t *ps, spx_word32_t *mel); - -void filterbank_compute_psd16(FilterBank *bank, spx_word16_t *mel, spx_word16_t *psd); - -#ifndef FIXED_POINT -void filterbank_compute_bank(FilterBank *bank, float *psd, float *mel); -void filterbank_compute_psd(FilterBank *bank, float *mel, float *psd); -#endif - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.c deleted file mode 100755 index 36ef4f6..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.c +++ /dev/null @@ -1,821 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: filters.c - Various analysis/synthesis filters - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "filters.h" -#include "stack_alloc.h" -#include "arch.h" -#include "math_approx.h" -#include "ltp.h" -#include <math.h> - -#ifdef _USE_SSE -#include "filters_sse.h" -#elif defined (ARM4_ASM) || defined(ARM5E_ASM) -#include "filters_arm4.h" -#elif defined (BFIN_ASM) -#include "filters_bfin.h" -#endif - - - -void bw_lpc(spx_word16_t gamma, const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order) -{ - int i; - spx_word16_t tmp=gamma; - for (i=0;i<order;i++) - { - lpc_out[i] = MULT16_16_P15(tmp,lpc_in[i]); - tmp = MULT16_16_P15(tmp, gamma); - } -} - -void sanitize_values32(spx_word32_t *vec, spx_word32_t min_val, spx_word32_t max_val, int len) -{ - int i; - for (i=0;i<len;i++) - { - /* It's important we do the test that way so we can catch NaNs, which are neither greater nor smaller */ - if (!(vec[i]>=min_val && vec[i] <= max_val)) - { - if (vec[i] < min_val) - vec[i] = min_val; - else if (vec[i] > max_val) - vec[i] = max_val; - else /* Has to be NaN */ - vec[i] = 0; - } - } -} - -void highpass(const spx_word16_t *x, spx_word16_t *y, int len, int filtID, spx_mem_t *mem) -{ - int i; -#ifdef FIXED_POINT - const spx_word16_t Pcoef[5][3] = {{16384, -31313, 14991}, {16384, -31569, 15249}, {16384, -31677, 15328}, {16384, -32313, 15947}, {16384, -22446, 6537}}; - const spx_word16_t Zcoef[5][3] = {{15672, -31344, 15672}, {15802, -31601, 15802}, {15847, -31694, 15847}, {16162, -32322, 16162}, {14418, -28836, 14418}}; -#else - const spx_word16_t Pcoef[5][3] = {{1.00000f, -1.91120f, 0.91498f}, {1.00000f, -1.92683f, 0.93071f}, {1.00000f, -1.93338f, 0.93553f}, {1.00000f, -1.97226f, 0.97332f}, {1.00000f, -1.37000f, 0.39900f}}; - const spx_word16_t Zcoef[5][3] = {{0.95654f, -1.91309f, 0.95654f}, {0.96446f, -1.92879f, 0.96446f}, {0.96723f, -1.93445f, 0.96723f}, {0.98645f, -1.97277f, 0.98645f}, {0.88000f, -1.76000f, 0.88000f}}; -#endif - const spx_word16_t *den, *num; - if (filtID>4) - filtID=4; - - den = Pcoef[filtID]; num = Zcoef[filtID]; - /*return;*/ - for (i=0;i<len;i++) - { - spx_word16_t yi; - spx_word32_t vout = ADD32(MULT16_16(num[0], x[i]),mem[0]); - yi = EXTRACT16(SATURATE(PSHR32(vout,14),32767)); - mem[0] = ADD32(MAC16_16(mem[1], num[1],x[i]), SHL32(MULT16_32_Q15(-den[1],vout),1)); - mem[1] = ADD32(MULT16_16(num[2],x[i]), SHL32(MULT16_32_Q15(-den[2],vout),1)); - y[i] = yi; - } -} - -#ifdef FIXED_POINT - -/* FIXME: These functions are ugly and probably introduce too much error */ -void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len) -{ - int i; - for (i=0;i<len;i++) - { - y[i] = SHL32(MULT16_32_Q14(EXTRACT16(SHR32(x[i],7)),scale),7); - } -} - -void signal_div(const spx_word16_t *x, spx_word16_t *y, spx_word32_t scale, int len) -{ - int i; - if (scale > SHL32(EXTEND32(SIG_SCALING), 8)) - { - spx_word16_t scale_1; - scale = PSHR32(scale, SIG_SHIFT); - scale_1 = EXTRACT16(PDIV32_16(SHL32(EXTEND32(SIG_SCALING),7),scale)); - for (i=0;i<len;i++) - { - y[i] = MULT16_16_P15(scale_1, x[i]); - } - } else if (scale > SHR32(EXTEND32(SIG_SCALING), 2)) { - spx_word16_t scale_1; - scale = PSHR32(scale, SIG_SHIFT-5); - scale_1 = DIV32_16(SHL32(EXTEND32(SIG_SCALING),3),scale); - for (i=0;i<len;i++) - { - y[i] = PSHR32(MULT16_16(scale_1, SHL16(x[i],2)),8); - } - } else { - spx_word16_t scale_1; - scale = PSHR32(scale, SIG_SHIFT-7); - if (scale < 5) - scale = 5; - scale_1 = DIV32_16(SHL32(EXTEND32(SIG_SCALING),3),scale); - for (i=0;i<len;i++) - { - y[i] = PSHR32(MULT16_16(scale_1, SHL16(x[i],2)),6); - } - } -} - -#else - -void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len) -{ - int i; - for (i=0;i<len;i++) - y[i] = scale*x[i]; -} - -void signal_div(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len) -{ - int i; - float scale_1 = 1/scale; - for (i=0;i<len;i++) - y[i] = scale_1*x[i]; -} -#endif - - - -#ifdef FIXED_POINT - - - -spx_word16_t compute_rms(const spx_sig_t *x, int len) -{ - int i; - spx_word32_t sum=0; - spx_sig_t max_val=1; - int sig_shift; - - for (i=0;i<len;i++) - { - spx_sig_t tmp = x[i]; - if (tmp<0) - tmp = -tmp; - if (tmp > max_val) - max_val = tmp; - } - - sig_shift=0; - while (max_val>16383) - { - sig_shift++; - max_val >>= 1; - } - - for (i=0;i<len;i+=4) - { - spx_word32_t sum2=0; - spx_word16_t tmp; - tmp = EXTRACT16(SHR32(x[i],sig_shift)); - sum2 = MAC16_16(sum2,tmp,tmp); - tmp = EXTRACT16(SHR32(x[i+1],sig_shift)); - sum2 = MAC16_16(sum2,tmp,tmp); - tmp = EXTRACT16(SHR32(x[i+2],sig_shift)); - sum2 = MAC16_16(sum2,tmp,tmp); - tmp = EXTRACT16(SHR32(x[i+3],sig_shift)); - sum2 = MAC16_16(sum2,tmp,tmp); - sum = ADD32(sum,SHR32(sum2,6)); - } - - return EXTRACT16(PSHR32(SHL32(EXTEND32(spx_sqrt(DIV32(sum,len))),(sig_shift+3)),SIG_SHIFT)); -} - -spx_word16_t compute_rms16(const spx_word16_t *x, int len) -{ - int i; - spx_word16_t max_val=10; - - for (i=0;i<len;i++) - { - spx_sig_t tmp = x[i]; - if (tmp<0) - tmp = -tmp; - if (tmp > max_val) - max_val = tmp; - } - if (max_val>16383) - { - spx_word32_t sum=0; - for (i=0;i<len;i+=4) - { - spx_word32_t sum2=0; - sum2 = MAC16_16(sum2,SHR16(x[i],1),SHR16(x[i],1)); - sum2 = MAC16_16(sum2,SHR16(x[i+1],1),SHR16(x[i+1],1)); - sum2 = MAC16_16(sum2,SHR16(x[i+2],1),SHR16(x[i+2],1)); - sum2 = MAC16_16(sum2,SHR16(x[i+3],1),SHR16(x[i+3],1)); - sum = ADD32(sum,SHR32(sum2,6)); - } - return SHL16(spx_sqrt(DIV32(sum,len)),4); - } else { - spx_word32_t sum=0; - int sig_shift=0; - if (max_val < 8192) - sig_shift=1; - if (max_val < 4096) - sig_shift=2; - if (max_val < 2048) - sig_shift=3; - for (i=0;i<len;i+=4) - { - spx_word32_t sum2=0; - sum2 = MAC16_16(sum2,SHL16(x[i],sig_shift),SHL16(x[i],sig_shift)); - sum2 = MAC16_16(sum2,SHL16(x[i+1],sig_shift),SHL16(x[i+1],sig_shift)); - sum2 = MAC16_16(sum2,SHL16(x[i+2],sig_shift),SHL16(x[i+2],sig_shift)); - sum2 = MAC16_16(sum2,SHL16(x[i+3],sig_shift),SHL16(x[i+3],sig_shift)); - sum = ADD32(sum,SHR32(sum2,6)); - } - return SHL16(spx_sqrt(DIV32(sum,len)),3-sig_shift); - } -} - -#ifndef OVERRIDE_NORMALIZE16 -int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len) -{ - int i; - spx_sig_t max_val=1; - int sig_shift; - - for (i=0;i<len;i++) - { - spx_sig_t tmp = x[i]; - if (tmp<0) - tmp = NEG32(tmp); - if (tmp >= max_val) - max_val = tmp; - } - - sig_shift=0; - while (max_val>max_scale) - { - sig_shift++; - max_val >>= 1; - } - - for (i=0;i<len;i++) - y[i] = EXTRACT16(SHR32(x[i], sig_shift)); - - return sig_shift; -} -#endif - -#else - -spx_word16_t compute_rms(const spx_sig_t *x, int len) -{ - int i; - float sum=0; - for (i=0;i<len;i++) - { - sum += x[i]*x[i]; - } - return sqrt(.1+sum/len); -} -spx_word16_t compute_rms16(const spx_word16_t *x, int len) -{ - return compute_rms(x, len); -} -#endif - - - -#ifndef OVERRIDE_FILTER_MEM16 -void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) -{ - int i,j; - spx_word16_t xi,yi,nyi; - for (i=0;i<N;i++) - { - xi= x[i]; - yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767)); - nyi = NEG16(yi); - for (j=0;j<ord-1;j++) - { - mem[j] = MAC16_16(MAC16_16(mem[j+1], num[j],xi), den[j],nyi); - } - mem[ord-1] = ADD32(MULT16_16(num[ord-1],xi), MULT16_16(den[ord-1],nyi)); - y[i] = yi; - } -} -#endif - -#ifndef OVERRIDE_IIR_MEM16 -void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) -{ - int i,j; - spx_word16_t yi,nyi; - - for (i=0;i<N;i++) - { - yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767)); - nyi = NEG16(yi); - for (j=0;j<ord-1;j++) - { - mem[j] = MAC16_16(mem[j+1],den[j],nyi); - } - mem[ord-1] = MULT16_16(den[ord-1],nyi); - y[i] = yi; - } -} -#endif - -#ifndef OVERRIDE_FIR_MEM16 -void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) -{ - int i,j; - spx_word16_t xi,yi; - - for (i=0;i<N;i++) - { - xi=x[i]; - yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767)); - for (j=0;j<ord-1;j++) - { - mem[j] = MAC16_16(mem[j+1], num[j],xi); - } - mem[ord-1] = MULT16_16(num[ord-1],xi); - y[i] = yi; - } -} -#endif - - -void syn_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) -{ - int i; - VARDECL(spx_mem_t *mem); - ALLOC(mem, ord, spx_mem_t); - for (i=0;i<ord;i++) - mem[i]=0; - iir_mem16(xx, ak, y, N, ord, mem, stack); - for (i=0;i<ord;i++) - mem[i]=0; - filter_mem16(y, awk1, awk2, y, N, ord, mem, stack); -} -void residue_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) -{ - int i; - VARDECL(spx_mem_t *mem); - ALLOC(mem, ord, spx_mem_t); - for (i=0;i<ord;i++) - mem[i]=0; - filter_mem16(xx, ak, awk1, y, N, ord, mem, stack); - for (i=0;i<ord;i++) - mem[i]=0; - fir_mem16(y, awk2, y, N, ord, mem, stack); -} - - -#ifndef OVERRIDE_COMPUTE_IMPULSE_RESPONSE -void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) -{ - int i,j; - spx_word16_t y1, ny1i, ny2i; - VARDECL(spx_mem_t *mem1); - VARDECL(spx_mem_t *mem2); - ALLOC(mem1, ord, spx_mem_t); - ALLOC(mem2, ord, spx_mem_t); - - y[0] = LPC_SCALING; - for (i=0;i<ord;i++) - y[i+1] = awk1[i]; - i++; - for (;i<N;i++) - y[i] = VERY_SMALL; - for (i=0;i<ord;i++) - mem1[i] = mem2[i] = 0; - for (i=0;i<N;i++) - { - y1 = ADD16(y[i], EXTRACT16(PSHR32(mem1[0],LPC_SHIFT))); - ny1i = NEG16(y1); - y[i] = PSHR32(ADD32(SHL32(EXTEND32(y1),LPC_SHIFT+1),mem2[0]),LPC_SHIFT); - ny2i = NEG16(y[i]); - for (j=0;j<ord-1;j++) - { - mem1[j] = MAC16_16(mem1[j+1], awk2[j],ny1i); - mem2[j] = MAC16_16(mem2[j+1], ak[j],ny2i); - } - mem1[ord-1] = MULT16_16(awk2[ord-1],ny1i); - mem2[ord-1] = MULT16_16(ak[ord-1],ny2i); - } -} -#endif - -/* Decomposes a signal into low-band and high-band using a QMF */ -void qmf_decomp(const spx_word16_t *xx, const spx_word16_t *aa, spx_word16_t *y1, spx_word16_t *y2, int N, int M, spx_word16_t *mem, char *stack) -{ - int i,j,k,M2; - VARDECL(spx_word16_t *a); - VARDECL(spx_word16_t *x); - spx_word16_t *x2; - - ALLOC(a, M, spx_word16_t); - ALLOC(x, N+M-1, spx_word16_t); - x2=x+M-1; - M2=M>>1; - for (i=0;i<M;i++) - a[M-i-1]= aa[i]; - for (i=0;i<M-1;i++) - x[i]=mem[M-i-2]; - for (i=0;i<N;i++) - x[i+M-1]=SHR16(xx[i],1); - for (i=0;i<M-1;i++) - mem[i]=SHR16(xx[N-i-1],1); - for (i=0,k=0;i<N;i+=2,k++) - { - spx_word32_t y1k=0, y2k=0; - for (j=0;j<M2;j++) - { - y1k=ADD32(y1k,MULT16_16(a[j],ADD16(x[i+j],x2[i-j]))); - y2k=SUB32(y2k,MULT16_16(a[j],SUB16(x[i+j],x2[i-j]))); - j++; - y1k=ADD32(y1k,MULT16_16(a[j],ADD16(x[i+j],x2[i-j]))); - y2k=ADD32(y2k,MULT16_16(a[j],SUB16(x[i+j],x2[i-j]))); - } - y1[k] = EXTRACT16(SATURATE(PSHR32(y1k,15),32767)); - y2[k] = EXTRACT16(SATURATE(PSHR32(y2k,15),32767)); - } -} - -/* Re-synthesised a signal from the QMF low-band and high-band signals */ -void qmf_synth(const spx_word16_t *x1, const spx_word16_t *x2, const spx_word16_t *a, spx_word16_t *y, int N, int M, spx_word16_t *mem1, spx_word16_t *mem2, char *stack) - /* assumptions: - all odd x[i] are zero -- well, actually they are left out of the array now - N and M are multiples of 4 */ -{ - int i, j; - int M2, N2; - VARDECL(spx_word16_t *xx1); - VARDECL(spx_word16_t *xx2); - - M2 = M>>1; - N2 = N>>1; - ALLOC(xx1, M2+N2, spx_word16_t); - ALLOC(xx2, M2+N2, spx_word16_t); - - for (i = 0; i < N2; i++) - xx1[i] = x1[N2-1-i]; - for (i = 0; i < M2; i++) - xx1[N2+i] = mem1[2*i+1]; - for (i = 0; i < N2; i++) - xx2[i] = x2[N2-1-i]; - for (i = 0; i < M2; i++) - xx2[N2+i] = mem2[2*i+1]; - - for (i = 0; i < N2; i += 2) { - spx_sig_t y0, y1, y2, y3; - spx_word16_t x10, x20; - - y0 = y1 = y2 = y3 = 0; - x10 = xx1[N2-2-i]; - x20 = xx2[N2-2-i]; - - for (j = 0; j < M2; j += 2) { - spx_word16_t x11, x21; - spx_word16_t a0, a1; - - a0 = a[2*j]; - a1 = a[2*j+1]; - x11 = xx1[N2-1+j-i]; - x21 = xx2[N2-1+j-i]; - -#ifdef FIXED_POINT - /* We multiply twice by the same coef to avoid overflows */ - y0 = MAC16_16(MAC16_16(y0, a0, x11), NEG16(a0), x21); - y1 = MAC16_16(MAC16_16(y1, a1, x11), a1, x21); - y2 = MAC16_16(MAC16_16(y2, a0, x10), NEG16(a0), x20); - y3 = MAC16_16(MAC16_16(y3, a1, x10), a1, x20); -#else - y0 = ADD32(y0,MULT16_16(a0, x11-x21)); - y1 = ADD32(y1,MULT16_16(a1, x11+x21)); - y2 = ADD32(y2,MULT16_16(a0, x10-x20)); - y3 = ADD32(y3,MULT16_16(a1, x10+x20)); -#endif - a0 = a[2*j+2]; - a1 = a[2*j+3]; - x10 = xx1[N2+j-i]; - x20 = xx2[N2+j-i]; - -#ifdef FIXED_POINT - /* We multiply twice by the same coef to avoid overflows */ - y0 = MAC16_16(MAC16_16(y0, a0, x10), NEG16(a0), x20); - y1 = MAC16_16(MAC16_16(y1, a1, x10), a1, x20); - y2 = MAC16_16(MAC16_16(y2, a0, x11), NEG16(a0), x21); - y3 = MAC16_16(MAC16_16(y3, a1, x11), a1, x21); -#else - y0 = ADD32(y0,MULT16_16(a0, x10-x20)); - y1 = ADD32(y1,MULT16_16(a1, x10+x20)); - y2 = ADD32(y2,MULT16_16(a0, x11-x21)); - y3 = ADD32(y3,MULT16_16(a1, x11+x21)); -#endif - } -#ifdef FIXED_POINT - y[2*i] = EXTRACT16(SATURATE32(PSHR32(y0,15),32767)); - y[2*i+1] = EXTRACT16(SATURATE32(PSHR32(y1,15),32767)); - y[2*i+2] = EXTRACT16(SATURATE32(PSHR32(y2,15),32767)); - y[2*i+3] = EXTRACT16(SATURATE32(PSHR32(y3,15),32767)); -#else - /* Normalize up explicitly if we're in float */ - y[2*i] = 2.f*y0; - y[2*i+1] = 2.f*y1; - y[2*i+2] = 2.f*y2; - y[2*i+3] = 2.f*y3; -#endif - } - - for (i = 0; i < M2; i++) - mem1[2*i+1] = xx1[i]; - for (i = 0; i < M2; i++) - mem2[2*i+1] = xx2[i]; -} - -#ifdef FIXED_POINT -#if 0 -const spx_word16_t shift_filt[3][7] = {{-33, 1043, -4551, 19959, 19959, -4551, 1043}, - {-98, 1133, -4425, 29179, 8895, -2328, 444}, - {444, -2328, 8895, 29179, -4425, 1133, -98}}; -#else -const spx_word16_t shift_filt[3][7] = {{-390, 1540, -4993, 20123, 20123, -4993, 1540}, - {-1064, 2817, -6694, 31589, 6837, -990, -209}, - {-209, -990, 6837, 31589, -6694, 2817, -1064}}; -#endif -#else -#if 0 -const float shift_filt[3][7] = {{-9.9369e-04, 3.1831e-02, -1.3889e-01, 6.0910e-01, 6.0910e-01, -1.3889e-01, 3.1831e-02}, - {-0.0029937, 0.0345613, -0.1350474, 0.8904793, 0.2714479, -0.0710304, 0.0135403}, - {0.0135403, -0.0710304, 0.2714479, 0.8904793, -0.1350474, 0.0345613, -0.0029937}}; -#else -const float shift_filt[3][7] = {{-0.011915f, 0.046995f, -0.152373f, 0.614108f, 0.614108f, -0.152373f, 0.046995f}, - {-0.0324855f, 0.0859768f, -0.2042986f, 0.9640297f, 0.2086420f, -0.0302054f, -0.0063646f}, - {-0.0063646f, -0.0302054f, 0.2086420f, 0.9640297f, -0.2042986f, 0.0859768f, -0.0324855f}}; -#endif -#endif - -int interp_pitch( -spx_word16_t *exc, /*decoded excitation*/ -spx_word16_t *interp, /*decoded excitation*/ -int pitch, /*pitch period*/ -int len -) -{ - int i,j,k; - spx_word32_t corr[4][7]; - spx_word32_t maxcorr; - int maxi, maxj; - for (i=0;i<7;i++) - { - corr[0][i] = inner_prod(exc, exc-pitch-3+i, len); - } - for (i=0;i<3;i++) - { - for (j=0;j<7;j++) - { - int i1, i2; - spx_word32_t tmp=0; - i1 = 3-j; - if (i1<0) - i1 = 0; - i2 = 10-j; - if (i2>7) - i2 = 7; - for (k=i1;k<i2;k++) - tmp += MULT16_32_Q15(shift_filt[i][k],corr[0][j+k-3]); - corr[i+1][j] = tmp; - } - } - maxi=maxj=0; - maxcorr = corr[0][0]; - for (i=0;i<4;i++) - { - for (j=0;j<7;j++) - { - if (corr[i][j] > maxcorr) - { - maxcorr = corr[i][j]; - maxi=i; - maxj=j; - } - } - } - for (i=0;i<len;i++) - { - spx_word32_t tmp = 0; - if (maxi>0) - { - for (k=0;k<7;k++) - { - tmp += MULT16_16(exc[i-(pitch-maxj+3)+k-3],shift_filt[maxi-1][k]); - } - } else { - tmp = SHL32(exc[i-(pitch-maxj+3)],15); - } - interp[i] = PSHR32(tmp,15); - } - return pitch-maxj+3; -} - -void multicomb( -spx_word16_t *exc, /*decoded excitation*/ -spx_word16_t *new_exc, /*enhanced excitation*/ -spx_coef_t *ak, /*LPC filter coefs*/ -int p, /*LPC order*/ -int nsf, /*sub-frame size*/ -int pitch, /*pitch period*/ -int max_pitch, -spx_word16_t comb_gain, /*gain of comb filter*/ -char *stack -) -{ - int i; - VARDECL(spx_word16_t *iexc); - spx_word16_t old_ener, new_ener; - int corr_pitch; - - spx_word16_t iexc0_mag, iexc1_mag, exc_mag; - spx_word32_t corr0, corr1; - spx_word16_t gain0, gain1; - spx_word16_t pgain1, pgain2; - spx_word16_t c1, c2; - spx_word16_t g1, g2; - spx_word16_t ngain; - spx_word16_t gg1, gg2; -#ifdef FIXED_POINT - int scaledown=0; -#endif -#if 0 /* Set to 1 to enable full pitch search */ - int nol_pitch[6]; - spx_word16_t nol_pitch_coef[6]; - spx_word16_t ol_pitch_coef; - open_loop_nbest_pitch(exc, 20, 120, nsf, - nol_pitch, nol_pitch_coef, 6, stack); - corr_pitch=nol_pitch[0]; - ol_pitch_coef = nol_pitch_coef[0]; - /*Try to remove pitch multiples*/ - for (i=1;i<6;i++) - { -#ifdef FIXED_POINT - if ((nol_pitch_coef[i]>MULT16_16_Q15(nol_pitch_coef[0],19661)) && -#else - if ((nol_pitch_coef[i]>.6*nol_pitch_coef[0]) && -#endif - (ABS(2*nol_pitch[i]-corr_pitch)<=2 || ABS(3*nol_pitch[i]-corr_pitch)<=3 || - ABS(4*nol_pitch[i]-corr_pitch)<=4 || ABS(5*nol_pitch[i]-corr_pitch)<=5)) - { - corr_pitch = nol_pitch[i]; - } - } -#else - corr_pitch = pitch; -#endif - - ALLOC(iexc, 2*nsf, spx_word16_t); - - interp_pitch(exc, iexc, corr_pitch, 80); - if (corr_pitch>max_pitch) - interp_pitch(exc, iexc+nsf, 2*corr_pitch, 80); - else - interp_pitch(exc, iexc+nsf, -corr_pitch, 80); - -#ifdef FIXED_POINT - for (i=0;i<nsf;i++) - { - if (ABS16(exc[i])>16383) - { - scaledown = 1; - break; - } - } - if (scaledown) - { - for (i=0;i<nsf;i++) - exc[i] = SHR16(exc[i],1); - for (i=0;i<2*nsf;i++) - iexc[i] = SHR16(iexc[i],1); - } -#endif - /*interp_pitch(exc, iexc+2*nsf, 2*corr_pitch, 80);*/ - - /*printf ("%d %d %f\n", pitch, corr_pitch, max_corr*ener_1);*/ - iexc0_mag = spx_sqrt(1000+inner_prod(iexc,iexc,nsf)); - iexc1_mag = spx_sqrt(1000+inner_prod(iexc+nsf,iexc+nsf,nsf)); - exc_mag = spx_sqrt(1+inner_prod(exc,exc,nsf)); - corr0 = inner_prod(iexc,exc,nsf); - if (corr0<0) - corr0=0; - corr1 = inner_prod(iexc+nsf,exc,nsf); - if (corr1<0) - corr1=0; -#ifdef FIXED_POINT - /* Doesn't cost much to limit the ratio and it makes the rest easier */ - if (SHL32(EXTEND32(iexc0_mag),6) < EXTEND32(exc_mag)) - iexc0_mag = ADD16(1,PSHR16(exc_mag,6)); - if (SHL32(EXTEND32(iexc1_mag),6) < EXTEND32(exc_mag)) - iexc1_mag = ADD16(1,PSHR16(exc_mag,6)); -#endif - if (corr0 > MULT16_16(iexc0_mag,exc_mag)) - pgain1 = QCONST16(1., 14); - else - pgain1 = PDIV32_16(SHL32(PDIV32(corr0, exc_mag),14),iexc0_mag); - if (corr1 > MULT16_16(iexc1_mag,exc_mag)) - pgain2 = QCONST16(1., 14); - else - pgain2 = PDIV32_16(SHL32(PDIV32(corr1, exc_mag),14),iexc1_mag); - gg1 = PDIV32_16(SHL32(EXTEND32(exc_mag),8), iexc0_mag); - gg2 = PDIV32_16(SHL32(EXTEND32(exc_mag),8), iexc1_mag); - if (comb_gain>0) - { -#ifdef FIXED_POINT - c1 = (MULT16_16_Q15(QCONST16(.4,15),comb_gain)+QCONST16(.07,15)); - c2 = QCONST16(.5,15)+MULT16_16_Q14(QCONST16(1.72,14),(c1-QCONST16(.07,15))); -#else - c1 = .4*comb_gain+.07; - c2 = .5+1.72*(c1-.07); -#endif - } else - { - c1=c2=0; - } -#ifdef FIXED_POINT - g1 = 32767 - MULT16_16_Q13(MULT16_16_Q15(c2, pgain1),pgain1); - g2 = 32767 - MULT16_16_Q13(MULT16_16_Q15(c2, pgain2),pgain2); -#else - g1 = 1-c2*pgain1*pgain1; - g2 = 1-c2*pgain2*pgain2; -#endif - if (g1<c1) - g1 = c1; - if (g2<c1) - g2 = c1; - g1 = (spx_word16_t)PDIV32_16(SHL32(EXTEND32(c1),14),(spx_word16_t)g1); - g2 = (spx_word16_t)PDIV32_16(SHL32(EXTEND32(c1),14),(spx_word16_t)g2); - if (corr_pitch>max_pitch) - { - gain0 = MULT16_16_Q15(QCONST16(.7,15),MULT16_16_Q14(g1,gg1)); - gain1 = MULT16_16_Q15(QCONST16(.3,15),MULT16_16_Q14(g2,gg2)); - } else { - gain0 = MULT16_16_Q15(QCONST16(.6,15),MULT16_16_Q14(g1,gg1)); - gain1 = MULT16_16_Q15(QCONST16(.6,15),MULT16_16_Q14(g2,gg2)); - } - for (i=0;i<nsf;i++) - new_exc[i] = ADD16(exc[i], EXTRACT16(PSHR32(ADD32(MULT16_16(gain0,iexc[i]), MULT16_16(gain1,iexc[i+nsf])),8))); - /* FIXME: compute_rms16 is currently not quite accurate enough (but close) */ - new_ener = compute_rms16(new_exc, nsf); - old_ener = compute_rms16(exc, nsf); - - if (old_ener < 1) - old_ener = 1; - if (new_ener < 1) - new_ener = 1; - if (old_ener > new_ener) - old_ener = new_ener; - ngain = PDIV32_16(SHL32(EXTEND32(old_ener),14),new_ener); - - for (i=0;i<nsf;i++) - new_exc[i] = MULT16_16_Q14(ngain, new_exc[i]); -#ifdef FIXED_POINT - if (scaledown) - { - for (i=0;i<nsf;i++) - exc[i] = SHL16(exc[i],1); - for (i=0;i<nsf;i++) - new_exc[i] = SHL16(SATURATE16(new_exc[i],16383),1); - } -#endif -} - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.h deleted file mode 100755 index e3a5980..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file filters.h - @brief Various analysis/synthesis filters -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FILTERS_H -#define FILTERS_H - -#include "arch.h" - -spx_word16_t compute_rms(const spx_sig_t *x, int len); -spx_word16_t compute_rms16(const spx_word16_t *x, int len); -void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len); -void signal_div(const spx_word16_t *x, spx_word16_t *y, spx_word32_t scale, int len); - -#ifdef FIXED_POINT - -int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len); - -#endif - - -#define HIGHPASS_NARROWBAND 0 -#define HIGHPASS_WIDEBAND 2 -#define HIGHPASS_INPUT 0 -#define HIGHPASS_OUTPUT 1 -#define HIGHPASS_IRS 4 - -void highpass(const spx_word16_t *x, spx_word16_t *y, int len, int filtID, spx_mem_t *mem); - - -void qmf_decomp(const spx_word16_t *xx, const spx_word16_t *aa, spx_word16_t *, spx_word16_t *y2, int N, int M, spx_word16_t *mem, char *stack); -void qmf_synth(const spx_word16_t *x1, const spx_word16_t *x2, const spx_word16_t *a, spx_word16_t *y, int N, int M, spx_word16_t *mem1, spx_word16_t *mem2, char *stack); - -void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack); -void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack); -void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack); - -/* Apply bandwidth expansion on LPC coef */ -void bw_lpc(spx_word16_t , const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order); -void sanitize_values32(spx_word32_t *vec, spx_word32_t min_val, spx_word32_t max_val, int len); - - -void syn_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack); -void residue_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack); - -void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack); - -void multicomb( -spx_word16_t *exc, /*decoded excitation*/ -spx_word16_t *new_exc, /*enhanced excitation*/ -spx_coef_t *ak, /*LPC filter coefs*/ -int p, /*LPC order*/ -int nsf, /*sub-frame size*/ -int pitch, /*pitch period*/ -int max_pitch, /*pitch gain (3-tap)*/ -spx_word16_t comb_gain, /*gain of comb filter*/ -char *stack -); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_arm4.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_arm4.h deleted file mode 100755 index 7a74042..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_arm4.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file filters_arm4.h - @brief Various analysis/synthesis filters (ARM4 version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_NORMALIZE16 -int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len) -{ - spx_sig_t max_val=1; - int sig_shift; - int dead1, dead2, dead3, dead4, dead5, dead6; - - __asm__ __volatile__ ( - "\tmov %1, #1 \n" - "\tmov %3, #0 \n" - - ".normalize16loop1%=: \n" - - "\tldr %4, [%0], #4 \n" - "\tcmps %4, %1 \n" - "\tmovgt %1, %4 \n" - "\tcmps %4, %3 \n" - "\tmovlt %3, %4 \n" - - "\tsubs %2, %2, #1 \n" - "\tbne .normalize16loop1%=\n" - - "\trsb %3, %3, #0 \n" - "\tcmp %1, %3 \n" - "\tmovlt %1, %3 \n" - : "=r" (dead1), "=r" (max_val), "=r" (dead3), "=r" (dead4), - "=r" (dead5), "=r" (dead6) - : "0" (x), "2" (len) - : "cc"); - - sig_shift=0; - while (max_val>max_scale) - { - sig_shift++; - max_val >>= 1; - } - - __asm__ __volatile__ ( - ".normalize16loop%=: \n" - - "\tldr %4, [%0], #4 \n" - "\tldr %5, [%0], #4 \n" - "\tmov %4, %4, asr %3 \n" - "\tstrh %4, [%1], #2 \n" - "\tldr %4, [%0], #4 \n" - "\tmov %5, %5, asr %3 \n" - "\tstrh %5, [%1], #2 \n" - "\tldr %5, [%0], #4 \n" - "\tmov %4, %4, asr %3 \n" - "\tstrh %4, [%1], #2 \n" - "\tsubs %2, %2, #1 \n" - "\tmov %5, %5, asr %3 \n" - "\tstrh %5, [%1], #2 \n" - - "\tbgt .normalize16loop%=\n" - : "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4), - "=r" (dead5), "=r" (dead6) - : "0" (x), "1" (y), "2" (len>>2), "3" (sig_shift) - : "cc", "memory"); - return sig_shift; -} - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_bfin.h deleted file mode 100755 index 1e433ee..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_bfin.h +++ /dev/null @@ -1,515 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @file filters_bfin.h - @brief Various analysis/synthesis filters (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_NORMALIZE16 -int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len) -{ - spx_sig_t max_val=1; - int sig_shift; - __asm__ - ( - "%0 = 0;\n\t" - "I0 = %1;\n\t" - "L0 = 0;\n\t" - "R1 = [I0++];\n\t" - "LOOP norm_max%= LC0 = %2;\n\t" - "LOOP_BEGIN norm_max%=;\n\t" - "R2 = ABS R1 || R1 = [I0++];\n\t" - "%0 = MAX(%0, R2);\n\t" - "LOOP_END norm_max%=;\n\t" - : "=&d" (max_val) - : "a" (x), "a" (len) - : "R1", "R2" - ); - - sig_shift=0; - while (max_val>max_scale) - { - sig_shift++; - max_val >>= 1; - } - - __asm__ __volatile__ - ( - "I0 = %0;\n\t" - "L0 = 0;\n\t" - "P1 = %1;\n\t" - "R0 = [I0++];\n\t" - "LOOP norm_shift%= LC0 = %3;\n\t" - "LOOP_BEGIN norm_shift%=;\n\t" - "R1 = ASHIFT R0 by %2.L || R0 = [I0++];\n\t" - "W[P1++] = R1;\n\t" - "LOOP_END norm_shift%=;\n\t" - "R1 = ASHIFT R0 by %2.L;\n\t" - "W[P1++] = R1;\n\t" - : : "a" (x), "a" (y), "d" (-sig_shift), "a" (len-1) - : "I0", "L0", "P1", "R0", "R1", "memory" - ); - return sig_shift; -} - - - -#define OVERRIDE_FILTER_MEM16 -void filter_mem16(const spx_word16_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *_y, int N, int ord, spx_mem_t *mem, char *stack) -{ - VARDECL(spx_word32_t *xy2); - VARDECL(spx_word32_t *numden_a); - spx_word32_t *xy; - spx_word16_t *numden; - int i; - - ALLOC(xy2, (N+1), spx_word32_t); - ALLOC(numden_a, (2*ord+2), spx_word32_t); - xy = xy2+1; - numden = (spx_word16_t*) numden_a; - - for (i=0;i<ord;i++) - { - numden[2*i] = num[i]; - numden[2*i+1] = den[i]; - } - __asm__ __volatile__ - ( - /* Register setup */ - "R0 = %5;\n\t" /*ord */ - - "P0 = %3;\n\t" - "I0 = P0;\n\t" - "B0 = P0;\n\t" /* numden */ - "L0 = 0;\n\t" - - "P2 = %0;\n\t" /* Fused xy */ - "I2 = P2;\n\t" - "L2 = 0;\n\t" - - "P4 = %6;\n\t" /* mem */ - "P0 = %1;\n\t" /* _x */ - "P1 = %2;\n\t" /* _y */ - - /* First sample */ - "R1 = [P4++];\n\t" - "R1 <<= 3;\n\t" /* shift mem */ - "R1.L = R1 (RND);\n\t" - "R2 = W[P0++];\n\t" /* load x[0] */ - "R1.L = R1.L + R2.L;\n\t" - "W[P1++] = R1;\n\t" /* store y[0] */ - "R2 = PACK(R1.L, R2.L);\n\t" /* pack x16 and y16 */ - "[P2] = R2;\n\t" - - /* Samples 1 to ord-1 (using memory) */ - "R0 += -1;\n\t" - "R3 = 0;\n\t" - "LC0 = R0;\n\t" - "LOOP filter_start%= LC0;\n\t" - "LOOP_BEGIN filter_start%=;\n\t" - "R3 += 1;\n\t" - "LC1 = R3;\n\t" - - "R1 = [P4++];\n\t" - "A1 = R1;\n\t" - "A0 = 0;\n\t" - "I0 = B0;\n\t" - "I2 = P2;\n\t" - "P2 += 4;\n\t" - "R4 = [I0++] || R5 = [I2--];\n\t" - "LOOP filter_start_inner%= LC1;\n\t" - "LOOP_BEGIN filter_start_inner%=;\n\t" - "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t" - "LOOP_END filter_start_inner%=;\n\t" - "A0 += A1;\n\t" - "R4 = A0;\n\t" - "R4 <<= 3;\n\t" /* shift mem */ - "R4.L = R4 (RND);\n\t" - "R2 = W[P0++];\n\t" /* load x */ - "R4.L = R4.L + R2.L;\n\t" - "W[P1++] = R4;\n\t" /* store y */ - //"R4 <<= 2;\n\t" - //"R2 <<= 2;\n\t" - "R2 = PACK(R4.L, R2.L);\n\t" /* pack x16 and y16 */ - "[P2] = R2;\n\t" - - "LOOP_END filter_start%=;\n\t" - - /* Samples ord to N*/ - "R0 = %5;\n\t" - "R0 <<= 1;\n\t" - "I0 = B0;\n\t" /* numden */ - "R0 <<= 1;\n\t" - "L0 = R0;\n\t" - - "R0 = %5;\n\t" /* org */ - "R2 = %4;\n\t" /* N */ - "R2 = R2 - R0;\n\t" - "R4 = [I0++];\n\t" /* numden */ - "LC0 = R2;\n\t" - "P3 = R0;\n\t" - "R0 <<= 2;\n\t" - "R0 += 8;\n\t" - "I2 = P2;\n\t" - "M0 = R0;\n\t" - "A1 = A0 = 0;\n\t" - "R5 = [I2--];\n\t" /* load xy */ - "LOOP filter_mid%= LC0;\n\t" - "LOOP_BEGIN filter_mid%=;\n\t" - "LOOP filter_mid_inner%= LC1=P3;\n\t" - "LOOP_BEGIN filter_mid_inner%=;\n\t" - "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t" - "LOOP_END filter_mid_inner%=;\n\t" - "R0 = (A0 += A1) || I2 += M0;\n\t" - "R0 = R0 << 3 || R5 = W[P0++];\n\t" /* load x */ - "R0.L = R0 (RND);\n\t" - "R0.L = R0.L + R5.L;\n\t" - "R5 = PACK(R0.L, R5.L) || W[P1++] = R0;\n\t" /* shift y | store y */ - "A1 = A0 = 0 || [I2--] = R5\n\t" - "LOOP_END filter_mid%=;\n\t" - "I2 += 4;\n\t" - "P2 = I2;\n\t" - /* Update memory */ - "P4 = %6;\n\t" - "R0 = %5;\n\t" - "LC0 = R0;\n\t" - "P0 = B0;\n\t" - "A1 = A0 = 0;\n\t" - "LOOP mem_update%= LC0;\n\t" - "LOOP_BEGIN mem_update%=;\n\t" - "I2 = P2;\n\t" - "I0 = P0;\n\t" - "P0 += 4;\n\t" - "R0 = LC0;\n\t" - "LC1 = R0;\n\t" - "R5 = [I2--] || R4 = [I0++];\n\t" - "LOOP mem_accum%= LC1;\n\t" - "LOOP_BEGIN mem_accum%=;\n\t" - "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t" - "LOOP_END mem_accum%=;\n\t" - "R0 = (A0 += A1);\n\t" - "A1 = A0 = 0 || [P4++] = R0;\n\t" - "LOOP_END mem_update%=;\n\t" - "L0 = 0;\n\t" - : : "m" (xy), "m" (_x), "m" (_y), "m" (numden), "m" (N), "m" (ord), "m" (mem) - : "A0", "A1", "R0", "R1", "R2", "R3", "R4", "R5", "P0", "P1", "P2", "P3", "P4", "B0", "I0", "I2", "L0", "L2", "M0", "memory" - ); - -} - - - -#define OVERRIDE_IIR_MEM16 -void iir_mem16(const spx_word16_t *_x, const spx_coef_t *den, spx_word16_t *_y, int N, int ord, spx_mem_t *mem, char *stack) -{ - VARDECL(spx_word16_t *y); - spx_word16_t *yy; - - ALLOC(y, (N+2), spx_word16_t); - yy = y+2; - - __asm__ __volatile__ - ( - /* Register setup */ - "R0 = %5;\n\t" /*ord */ - - "P1 = %3;\n\t" - "I1 = P1;\n\t" - "B1 = P1;\n\t" - "L1 = 0;\n\t" - - "P3 = %0;\n\t" - "I3 = P3;\n\t" - "L3 = 0;\n\t" - - "P4 = %6;\n\t" - "P0 = %1;\n\t" - "P1 = %2;\n\t" - - /* First sample */ - "R1 = [P4++];\n\t" - "R1 = R1 << 3 (S);\n\t" - "R1.L = R1 (RND);\n\t" - "R2 = W[P0++];\n\t" - "R1 = R1 + R2;\n\t" - "W[P1++] = R1;\n\t" - "W[P3] = R1;\n\t" - - /* Samples 1 to ord-1 (using memory) */ - "R0 += -1;\n\t" - "R3 = 0;\n\t" - "LC0 = R0;\n\t" - "LOOP filter_start%= LC0;\n\t" - "LOOP_BEGIN filter_start%=;\n\t" - "R3 += 1;\n\t" - "LC1 = R3;\n\t" - - "R1 = [P4++];\n\t" - "A1 = R1;\n\t" - "I1 = B1;\n\t" - "I3 = P3;\n\t" - "P3 += 2;\n\t" - "LOOP filter_start_inner%= LC1;\n\t" - "LOOP_BEGIN filter_start_inner%=;\n\t" - "R4.L = W[I1++];\n\t" - "R5.L = W[I3--];\n\t" - "A1 -= R4.L*R5.L (IS);\n\t" - "LOOP_END filter_start_inner%=;\n\t" - - "R1 = A1;\n\t" - "R1 <<= 3;\n\t" - "R1.L = R1 (RND);\n\t" - "R2 = W[P0++];\n\t" - "R1 = R1 + R2;\n\t" - "W[P1++] = R1;\n\t" - "W[P3] = R1;\n\t" - "LOOP_END filter_start%=;\n\t" - - /* Samples ord to N*/ - "R0 = %5;\n\t" - "R0 <<= 1;\n\t" - "I1 = B1;\n\t" - "L1 = R0;\n\t" - - "R0 = %5;\n\t" - "R2 = %4;\n\t" - "R2 = R2 - R0;\n\t" - "R4.L = W[I1++];\n\t" - "LC0 = R2;\n\t" - "LOOP filter_mid%= LC0;\n\t" - "LOOP_BEGIN filter_mid%=;\n\t" - "LC1 = R0;\n\t" - "A1 = 0;\n\t" - "I3 = P3;\n\t" - "P3 += 2;\n\t" - "R5.L = W[I3--];\n\t" - "LOOP filter_mid_inner%= LC1;\n\t" - "LOOP_BEGIN filter_mid_inner%=;\n\t" - "A1 -= R4.L*R5.L (IS) || R4.L = W[I1++] || R5.L = W[I3--];\n\t" - "LOOP_END filter_mid_inner%=;\n\t" - "R1 = A1;\n\t" - "R1 = R1 << 3 || R2 = W[P0++];\n\t" - "R1.L = R1 (RND);\n\t" - "R1 = R1 + R2;\n\t" - "W[P1++] = R1;\n\t" - "W[P3] = R1;\n\t" - "LOOP_END filter_mid%=;\n\t" - - /* Update memory */ - "P4 = %6;\n\t" - "R0 = %5;\n\t" - "LC0 = R0;\n\t" - "P1 = B1;\n\t" - "LOOP mem_update%= LC0;\n\t" - "LOOP_BEGIN mem_update%=;\n\t" - "A0 = 0;\n\t" - "I3 = P3;\n\t" - "I1 = P1;\n\t" - "P1 += 2;\n\t" - "R0 = LC0;\n\t" - "LC1=R0;\n\t" - "R5.L = W[I3--] || R4.L = W[I1++];\n\t" - "LOOP mem_accum%= LC1;\n\t" - "LOOP_BEGIN mem_accum%=;\n\t" - "A0 -= R4.L*R5.L (IS) || R4.L = W[I1++] || R5.L = W[I3--];\n\t" - "LOOP_END mem_accum%=;\n\t" - "R0 = A0;\n\t" - "[P4++] = R0;\n\t" - "LOOP_END mem_update%=;\n\t" - "L1 = 0;\n\t" - : : "m" (yy), "m" (_x), "m" (_y), "m" (den), "m" (N), "m" (ord), "m" (mem) - : "A0", "A1", "R0", "R1", "R2", "R3", "R4", "R5", "P0", "P1", "P2", "P3", "P4", "B1", "I1", "I3", "L1", "L3", "memory" - ); - -} - - -#define OVERRIDE_FIR_MEM16 -void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) -{ - int i; - spx_coef_t den2[12]; - spx_coef_t *den; - den = (spx_coef_t*)((((int)den2)+4)&0xfffffffc); - for (i=0;i<10;i++) - den[i] = 0; - filter_mem16(x, num, den, y, N, ord, mem, stack); -} - - -#define OVERRIDE_COMPUTE_IMPULSE_RESPONSE -void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) -{ - int i; - VARDECL(spx_word16_t *ytmp); - ALLOC(ytmp, N, spx_word16_t); - spx_word16_t *ytmp2 = ytmp; - y[0] = LPC_SCALING; - for (i=0;i<ord;i++) - y[i+1] = awk1[i]; - i++; - for (;i<N;i++) - y[i] = 0; - - N-=1; - __asm__ __volatile__ - ( - "I0 = %0;\n\t" - "I1 = %1;\n\t" - "L0 = 0;\n\t" - "L1 = 0;\n\t" - "L2 = 0;\n\t" - "L3 = 0;\n\t" - "R0 = 1;\n\t" - "R0 <<= 13;\n\t" - "W[I0] = R0.L;\n\t" - "R0 <<= 1;\n\t" - "W[I1] = R0.L;\n\t" - "R0 = %5;\n\t" - "LC0 = R0;\n\t" - "R2 = 0;\n\t" - "LOOP samples%= LC0;\n\t" - "LOOP_BEGIN samples%=;\n\t" - "R2 += 1;\n\t" - "R2 = MIN(R2, %4);\n\t" - "I0 = %0;\n\t" - "I1 = %1;\n\t" - "I2 = %2;\n\t" - "I3 = %3;\n\t" - "%0 += 2;\n\t" - "%1 += 2;\n\t" - "A1 = A0 = 0;\n\t" - "R0.L = W[I0--] || R1.L = W[I2++];\n\t" - "LC1 = R2;\n\t" - "LOOP filter%= LC1;\n\t" - "LOOP_BEGIN filter%=;\n\t" - "A0 -= R0.L*R1.L (IS) || R0.L = W[I1--] || R1.L = W[I3++];\n\t" - "A1 -= R0.L*R1.L (IS) || R0.L = W[I0--] || R1.L = W[I2++];\n\t" - "LOOP_END filter%=;\n\t" - "R0 = A0, R1 = A1;\n\t" - "R3 = W[%1] (X);\n\t" - "R3 <<= 13;\n\t" - "R0 = R0 + R3;\n\t" - "R3 = R0 >>> 13;\n\t" - "W[%0] = R3.L;\n\t" - "R0 <<= 1;\n\t" - "R1 = R1 + R0;\n\t" - "R1 >>>= 13;\n\t" - "W[%1] = R1.L;\n\t" - "LOOP_END samples%=;\n\t" - : "=a" (ytmp2), "=a" (y) - : "a" (awk2), "a" (ak), "d" (ord), "m" (N), "0" (ytmp2), "1" (y) - : "A0", "A1", "R0", "R1", "R2", "R3", "I0", "I1", "I2", "I3", "L0", "L1", "L2", "L3", "A0", "A1" - ); -} - - - -#if 0 /* Equivalent C function for filter_mem2 and compute_impulse_response */ -#define min(a,b) ((a)<(b) ? (a):(b)) - -void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack) -{ - int i,j; - VARDECL(spx_word16_t *ytmp); - ALLOC(ytmp, N, spx_word16_t); - - y[0] = LPC_SCALING; - for (i=0;i<ord;i++) - y[i+1] = awk1[i]; - i++; - for (;i<N;i++) - y[i] = 0; - - for (i=0;i<N;i++) - { - spx_word32_t yi = SHL32(EXTEND32(y[i]),LPC_SHIFT); - spx_word32_t yi2 = 0; - for (j=0;j<min(i,ord);j++) - { - yi = MAC16_16(yi, awk2[j], -ytmp[i-j-1]); - yi2 = MAC16_16(yi2, ak[j], -y[i-j-1]); - } - ytmp[i] = EXTRACT16(SHR32(yi,LPC_SHIFT)); - yi2 = ADD32(yi2,SHL32(yi,1)); - y[i] = EXTRACT16(SHR32(yi2,LPC_SHIFT)); - } - -} - - -void filter_mem2(const spx_sig_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *_y, int N, int ord, spx_mem_t *mem) -{ - int i,j; - spx_word16_t xi,yi,nyi; - spx_word16_t x[N],y[N]; - spx_word16_t *xx, *yy; - xx = x; - yy = y; - for (i=0;i<N;i++) - { - x[i] = EXTRACT16(SHR32(_x[i],SIG_SHIFT)); - } - - for (i=0;i<ord;i++) - { - spx_word32_t yi = mem[i]; - for (j=0;j<i;j++) - { - yi = MAC16_16(yi, num[j], x[i-j-1]); - yi = MAC16_16(yi, den[j], -y[i-j-1]); - } - _y[i] = ADD32(_x[i],SHL32(yi,1)); - y[i] = EXTRACT16(SHR32(_y[i],SIG_SHIFT)); - } - for (i=ord;i<N;i++) - { - spx_word32_t yi = 0; - for (j=0;j<ord;j++) - { - yi = MAC16_16(yi, num[j], x[i-j-1]); - yi = MAC16_16(yi, den[j], -y[i-j-1]); - } - _y[i] = ADD32(_x[i],SHL32(yi,1)); - y[i] = EXTRACT16(SHR32(_y[i],SIG_SHIFT)); - } - - for (i=0;i<ord;i++) - { - spx_mem_t m = 0; - for (j=0;j<ord-i;j++) - { - m = MAC16_16(m, x[N-1-j], num[j+i]); - m = MAC16_16(m, -y[N-1-j], den[j+i]); - } - mem[i] = m; - } -} -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_sse.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_sse.h deleted file mode 100755 index 4bb333d..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/filters_sse.h +++ /dev/null @@ -1,336 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file filters_sse.h - @brief Various analysis/synthesis filters (SSE version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <xmmintrin.h> - -void filter_mem16_10(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem) -{ - __m128 num[3], den[3], mem[3]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - num[i] = _mm_loadu_ps(_num+4*i); - den[i] = _mm_loadu_ps(_den+4*i); - } - mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0); - num[2] = _mm_setr_ps(_num[8], _num[9], 0, 0); - den[2] = _mm_setr_ps(_den[8], _den[9], 0, 0); - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0])); - mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0])); - - mem[1] = _mm_move_ss(mem[1], mem[2]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1])); - mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1])); - - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd); - - mem[2] = _mm_add_ps(mem[2], _mm_mul_ps(xx, num[2])); - mem[2] = _mm_sub_ps(mem[2], _mm_mul_ps(yy, den[2])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); - _mm_store_ss(_mem+8, mem[2]); - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55); - _mm_store_ss(_mem+9, mem[2]); -} - -void filter_mem16_8(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem) -{ - __m128 num[2], den[2], mem[2]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - num[i] = _mm_loadu_ps(_num+4*i); - den[i] = _mm_loadu_ps(_den+4*i); - } - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0])); - mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0])); - - mem[1] = _mm_sub_ss(mem[1], mem[1]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1])); - mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); -} - - -#define OVERRIDE_FILTER_MEM16 -void filter_mem16(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem, char *stack) -{ - if(ord==10) - filter_mem16_10(x, _num, _den, y, N, ord, _mem); - else if (ord==8) - filter_mem16_8(x, _num, _den, y, N, ord, _mem); -} - - - -void iir_mem16_10(const float *x, const float *_den, float *y, int N, int ord, float *_mem) -{ - __m128 den[3], mem[3]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - den[i] = _mm_loadu_ps(_den+4*i); - } - mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0); - den[2] = _mm_setr_ps(_den[8], _den[9], 0, 0); - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0])); - - mem[1] = _mm_move_ss(mem[1], mem[2]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1])); - - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd); - - mem[2] = _mm_sub_ps(mem[2], _mm_mul_ps(yy, den[2])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); - _mm_store_ss(_mem+8, mem[2]); - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55); - _mm_store_ss(_mem+9, mem[2]); -} - - -void iir_mem16_8(const float *x, const float *_den, float *y, int N, int ord, float *_mem) -{ - __m128 den[2], mem[2]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - den[i] = _mm_loadu_ps(_den+4*i); - } - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0])); - - mem[1] = _mm_sub_ss(mem[1], mem[1]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); -} - -#define OVERRIDE_IIR_MEM16 -void iir_mem16(const float *x, const float *_den, float *y, int N, int ord, float *_mem, char *stack) -{ - if(ord==10) - iir_mem16_10(x, _den, y, N, ord, _mem); - else if (ord==8) - iir_mem16_8(x, _den, y, N, ord, _mem); -} - - -void fir_mem16_10(const float *x, const float *_num, float *y, int N, int ord, float *_mem) -{ - __m128 num[3], mem[3]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - num[i] = _mm_loadu_ps(_num+4*i); - } - mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0); - num[2] = _mm_setr_ps(_num[8], _num[9], 0, 0); - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0])); - - mem[1] = _mm_move_ss(mem[1], mem[2]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1])); - - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd); - - mem[2] = _mm_add_ps(mem[2], _mm_mul_ps(xx, num[2])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); - _mm_store_ss(_mem+8, mem[2]); - mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55); - _mm_store_ss(_mem+9, mem[2]); -} - -void fir_mem16_8(const float *x, const float *_num, float *y, int N, int ord, float *_mem) -{ - __m128 num[2], mem[2]; - - int i; - - /* Copy numerator, denominator and memory to aligned xmm */ - for (i=0;i<2;i++) - { - mem[i] = _mm_loadu_ps(_mem+4*i); - num[i] = _mm_loadu_ps(_num+4*i); - } - - for (i=0;i<N;i++) - { - __m128 xx; - __m128 yy; - /* Compute next filter result */ - xx = _mm_load_ps1(x+i); - yy = _mm_add_ss(xx, mem[0]); - _mm_store_ss(y+i, yy); - yy = _mm_shuffle_ps(yy, yy, 0); - - /* Update memory */ - mem[0] = _mm_move_ss(mem[0], mem[1]); - mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39); - - mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0])); - - mem[1] = _mm_sub_ss(mem[1], mem[1]); - mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39); - - mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1])); - } - /* Put memory back in its place */ - _mm_storeu_ps(_mem, mem[0]); - _mm_storeu_ps(_mem+4, mem[1]); -} - -#define OVERRIDE_FIR_MEM16 -void fir_mem16(const float *x, const float *_num, float *y, int N, int ord, float *_mem, char *stack) -{ - if(ord==10) - fir_mem16_10(x, _num, y, N, ord, _mem); - else if (ord==8) - fir_mem16_8(x, _num, y, N, ord, _mem); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm4.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm4.h deleted file mode 100755 index b6981ca..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm4.h +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file fixed_arm4.h - @brief ARM4 fixed-point operations -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FIXED_ARM4_H -#define FIXED_ARM4_H - -#undef MULT16_32_Q14 -static inline spx_word32_t MULT16_32_Q14(spx_word16_t x, spx_word32_t y) { - int res; - int dummy; - asm ( - "smull %0,%1,%2,%3 \n\t" - "mov %0, %0, lsr #14 \n\t" - "add %0, %0, %1, lsl #18 \n\t" - : "=&r"(res), "=&r" (dummy) - : "r"(y),"r"((int)x)); - return(res); -} - -#undef MULT16_32_Q15 -static inline spx_word32_t MULT16_32_Q15(spx_word16_t x, spx_word32_t y) { - int res; - int dummy; - asm ( - "smull %0,%1,%2,%3 \n\t" - "mov %0, %0, lsr #15 \n\t" - "add %0, %0, %1, lsl #17 \n\t" - : "=&r"(res), "=&r" (dummy) - : "r"(y),"r"((int)x)); - return(res); -} - -#undef DIV32_16 -static inline short DIV32_16(int a, int b) -{ - int res=0; - int dead1, dead2, dead3, dead4, dead5; - __asm__ __volatile__ ( - "\teor %5, %0, %1\n" - "\tmovs %4, %0\n" - "\trsbmi %0, %0, #0 \n" - "\tmovs %4, %1\n" - "\trsbmi %1, %1, #0 \n" - "\tmov %4, #1\n" - - "\tsubs %3, %0, %1, asl #14 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #14 \n" - - "\tsubs %3, %0, %1, asl #13 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #13 \n" - - "\tsubs %3, %0, %1, asl #12 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #12 \n" - - "\tsubs %3, %0, %1, asl #11 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #11 \n" - - "\tsubs %3, %0, %1, asl #10 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #10 \n" - - "\tsubs %3, %0, %1, asl #9 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #9 \n" - - "\tsubs %3, %0, %1, asl #8 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #8 \n" - - "\tsubs %3, %0, %1, asl #7 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #7 \n" - - "\tsubs %3, %0, %1, asl #6 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #6 \n" - - "\tsubs %3, %0, %1, asl #5 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #5 \n" - - "\tsubs %3, %0, %1, asl #4 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #4 \n" - - "\tsubs %3, %0, %1, asl #3 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #3 \n" - - "\tsubs %3, %0, %1, asl #2 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #2 \n" - - "\tsubs %3, %0, %1, asl #1 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4, asl #1 \n" - - "\tsubs %3, %0, %1 \n" - "\tmovpl %0, %3 \n" - "\torrpl %2, %2, %4 \n" - - "\tmovs %5, %5, lsr #31 \n" - "\trsbne %2, %2, #0 \n" - : "=r" (dead1), "=r" (dead2), "=r" (res), - "=r" (dead3), "=r" (dead4), "=r" (dead5) - : "0" (a), "1" (b), "2" (res) - : "cc" - ); - return res; -} - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm5e.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm5e.h deleted file mode 100755 index 9b4861c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_arm5e.h +++ /dev/null @@ -1,178 +0,0 @@ -/* Copyright (C) 2003 Jean-Marc Valin */ -/** - @file fixed_arm5e.h - @brief ARM-tuned fixed-point operations -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FIXED_ARM5E_H -#define FIXED_ARM5E_H - -#undef MULT16_16 -static inline spx_word32_t MULT16_16(spx_word16_t x, spx_word16_t y) { - int res; - asm ("smulbb %0,%1,%2;\n" - : "=&r"(res) - : "%r"(x),"r"(y)); - return(res); -} - -#undef MAC16_16 -static inline spx_word32_t MAC16_16(spx_word32_t a, spx_word16_t x, spx_word32_t y) { - int res; - asm ("smlabb %0,%1,%2,%3;\n" - : "=&r"(res) - : "%r"(x),"r"(y),"r"(a)); - return(res); -} - -#undef MULT16_32_Q15 -static inline spx_word32_t MULT16_32_Q15(spx_word16_t x, spx_word32_t y) { - int res; - asm ("smulwb %0,%1,%2;\n" - : "=&r"(res) - : "%r"(y<<1),"r"(x)); - return(res); -} - -#undef MAC16_32_Q15 -static inline spx_word32_t MAC16_32_Q15(spx_word32_t a, spx_word16_t x, spx_word32_t y) { - int res; - asm ("smlawb %0,%1,%2,%3;\n" - : "=&r"(res) - : "%r"(y<<1),"r"(x),"r"(a)); - return(res); -} - -#undef MULT16_32_Q11 -static inline spx_word32_t MULT16_32_Q11(spx_word16_t x, spx_word32_t y) { - int res; - asm ("smulwb %0,%1,%2;\n" - : "=&r"(res) - : "%r"(y<<5),"r"(x)); - return(res); -} - -#undef MAC16_32_Q11 -static inline spx_word32_t MAC16_32_Q11(spx_word32_t a, spx_word16_t x, spx_word32_t y) { - int res; - asm ("smlawb %0,%1,%2,%3;\n" - : "=&r"(res) - : "%r"(y<<5),"r"(x),"r"(a)); - return(res); -} - -#undef DIV32_16 -static inline short DIV32_16(int a, int b) -{ - int res=0; - int dead1, dead2, dead3, dead4, dead5; - __asm__ __volatile__ ( - "\teor %5, %0, %1\n" - "\tmovs %4, %0\n" - "\trsbmi %0, %0, #0 \n" - "\tmovs %4, %1\n" - "\trsbmi %1, %1, #0 \n" - "\tmov %4, #1\n" - - "\tsubs %3, %0, %1, asl #14 \n" - "\torrpl %2, %2, %4, asl #14 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #13 \n" - "\torrpl %2, %2, %4, asl #13 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #12 \n" - "\torrpl %2, %2, %4, asl #12 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #11 \n" - "\torrpl %2, %2, %4, asl #11 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #10 \n" - "\torrpl %2, %2, %4, asl #10 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #9 \n" - "\torrpl %2, %2, %4, asl #9 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #8 \n" - "\torrpl %2, %2, %4, asl #8 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #7 \n" - "\torrpl %2, %2, %4, asl #7 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #6 \n" - "\torrpl %2, %2, %4, asl #6 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #5 \n" - "\torrpl %2, %2, %4, asl #5 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #4 \n" - "\torrpl %2, %2, %4, asl #4 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #3 \n" - "\torrpl %2, %2, %4, asl #3 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #2 \n" - "\torrpl %2, %2, %4, asl #2 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1, asl #1 \n" - "\torrpl %2, %2, %4, asl #1 \n" - "\tmovpl %0, %3 \n" - - "\tsubs %3, %0, %1 \n" - "\torrpl %2, %2, %4 \n" - "\tmovpl %0, %3 \n" - - "\tmovs %5, %5, lsr #31 \n" - "\trsbne %2, %2, #0 \n" - : "=r" (dead1), "=r" (dead2), "=r" (res), - "=r" (dead3), "=r" (dead4), "=r" (dead5) - : "0" (a), "1" (b), "2" (res) - : "memory", "cc" - ); - return res; -} - - - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_bfin.h deleted file mode 100755 index aa26f6a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_bfin.h +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright (C) 2005 Analog Devices - Author: Jean-Marc Valin */ -/** - @file fixed_bfin.h - @brief Blackfin fixed-point operations -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FIXED_BFIN_H -#define FIXED_BFIN_H - -#undef PDIV32_16 -static inline spx_word16_t PDIV32_16(spx_word32_t a, spx_word16_t b) -{ - spx_word32_t res, bb; - bb = b; - a += b>>1; - __asm__ ( - "P0 = 15;\n\t" - "R0 = %1;\n\t" - "R1 = %2;\n\t" - //"R0 = R0 + R1;\n\t" - "R0 <<= 1;\n\t" - "DIVS (R0, R1);\n\t" - "LOOP divide%= LC0 = P0;\n\t" - "LOOP_BEGIN divide%=;\n\t" - "DIVQ (R0, R1);\n\t" - "LOOP_END divide%=;\n\t" - "R0 = R0.L;\n\t" - "%0 = R0;\n\t" - : "=m" (res) - : "m" (a), "m" (bb) - : "P0", "R0", "R1", "cc"); - return res; -} - -#undef DIV32_16 -static inline spx_word16_t DIV32_16(spx_word32_t a, spx_word16_t b) -{ - spx_word32_t res, bb; - bb = b; - /* Make the roundinf consistent with the C version - (do we need to do that?)*/ - if (a<0) - a += (b-1); - __asm__ ( - "P0 = 15;\n\t" - "R0 = %1;\n\t" - "R1 = %2;\n\t" - "R0 <<= 1;\n\t" - "DIVS (R0, R1);\n\t" - "LOOP divide%= LC0 = P0;\n\t" - "LOOP_BEGIN divide%=;\n\t" - "DIVQ (R0, R1);\n\t" - "LOOP_END divide%=;\n\t" - "R0 = R0.L;\n\t" - "%0 = R0;\n\t" - : "=m" (res) - : "m" (a), "m" (bb) - : "P0", "R0", "R1", "cc"); - return res; -} - -#undef MAX16 -static inline spx_word16_t MAX16(spx_word16_t a, spx_word16_t b) -{ - spx_word32_t res; - __asm__ ( - "%1 = %1.L (X);\n\t" - "%2 = %2.L (X);\n\t" - "%0 = MAX(%1,%2);" - : "=d" (res) - : "%d" (a), "d" (b) - ); - return res; -} - -#undef MULT16_32_Q15 -static inline spx_word32_t MULT16_32_Q15(spx_word16_t a, spx_word32_t b) -{ - spx_word32_t res; - __asm__ - ( - "A1 = %2.L*%1.L (M);\n\t" - "A1 = A1 >>> 15;\n\t" - "%0 = (A1 += %2.L*%1.H) ;\n\t" - : "=&W" (res), "=&d" (b) - : "d" (a), "1" (b) - : "A1" - ); - return res; -} - -#undef MAC16_32_Q15 -static inline spx_word32_t MAC16_32_Q15(spx_word32_t c, spx_word16_t a, spx_word32_t b) -{ - spx_word32_t res; - __asm__ - ( - "A1 = %2.L*%1.L (M);\n\t" - "A1 = A1 >>> 15;\n\t" - "%0 = (A1 += %2.L*%1.H);\n\t" - "%0 = %0 + %4;\n\t" - : "=&W" (res), "=&d" (b) - : "d" (a), "1" (b), "d" (c) - : "A1" - ); - return res; -} - -#undef MULT16_32_Q14 -static inline spx_word32_t MULT16_32_Q14(spx_word16_t a, spx_word32_t b) -{ - spx_word32_t res; - __asm__ - ( - "%2 <<= 1;\n\t" - "A1 = %1.L*%2.L (M);\n\t" - "A1 = A1 >>> 15;\n\t" - "%0 = (A1 += %1.L*%2.H);\n\t" - : "=W" (res), "=d" (a), "=d" (b) - : "1" (a), "2" (b) - : "A1" - ); - return res; -} - -#undef MAC16_32_Q14 -static inline spx_word32_t MAC16_32_Q14(spx_word32_t c, spx_word16_t a, spx_word32_t b) -{ - spx_word32_t res; - __asm__ - ( - "%1 <<= 1;\n\t" - "A1 = %2.L*%1.L (M);\n\t" - "A1 = A1 >>> 15;\n\t" - "%0 = (A1 += %2.L*%1.H);\n\t" - "%0 = %0 + %4;\n\t" - : "=&W" (res), "=&d" (b) - : "d" (a), "1" (b), "d" (c) - : "A1" - ); - return res; -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_debug.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_debug.h deleted file mode 100755 index 54f3866..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_debug.h +++ /dev/null @@ -1,487 +0,0 @@ -/* Copyright (C) 2003 Jean-Marc Valin */ -/** - @file fixed_debug.h - @brief Fixed-point operations with debugging -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FIXED_DEBUG_H -#define FIXED_DEBUG_H - -#include <stdio.h> - -extern long long spx_mips; -#define MIPS_INC spx_mips++, - -#define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(((spx_word32_t)1)<<(bits)))) -#define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(((spx_word32_t)1)<<(bits)))) - - -#define VERIFY_SHORT(x) ((x)<=32767&&(x)>=-32768) -#define VERIFY_INT(x) ((x)<=2147483647LL&&(x)>=-2147483648LL) - -static inline short NEG16(int x) -{ - int res; - if (!VERIFY_SHORT(x)) - { - fprintf (stderr, "NEG16: input is not short: %d\n", (int)x); - } - res = -x; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "NEG16: output is not short: %d\n", (int)res); - spx_mips++; - return res; -} -static inline int NEG32(long long x) -{ - long long res; - if (!VERIFY_INT(x)) - { - fprintf (stderr, "NEG16: input is not int: %d\n", (int)x); - } - res = -x; - if (!VERIFY_INT(res)) - fprintf (stderr, "NEG16: output is not int: %d\n", (int)res); - spx_mips++; - return res; -} - -#define EXTRACT16(x) _EXTRACT16(x, __FILE__, __LINE__) -static inline short _EXTRACT16(int x, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(x)) - { - fprintf (stderr, "EXTRACT16: input is not short: %d in %s: line %d\n", x, file, line); - } - res = x; - spx_mips++; - return res; -} - -#define EXTEND32(x) _EXTEND32(x, __FILE__, __LINE__) -static inline int _EXTEND32(int x, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(x)) - { - fprintf (stderr, "EXTEND32: input is not short: %d in %s: line %d\n", x, file, line); - } - res = x; - spx_mips++; - return res; -} - -#define SHR16(a, shift) _SHR16(a, shift, __FILE__, __LINE__) -static inline short _SHR16(int a, int shift, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift)) - { - fprintf (stderr, "SHR16: inputs are not short: %d >> %d in %s: line %d\n", a, shift, file, line); - } - res = a>>shift; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "SHR16: output is not short: %d in %s: line %d\n", res, file, line); - spx_mips++; - return res; -} -#define SHL16(a, shift) _SHL16(a, shift, __FILE__, __LINE__) -static inline short _SHL16(int a, int shift, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift)) - { - fprintf (stderr, "SHL16: inputs are not short: %d %d in %s: line %d\n", a, shift, file, line); - } - res = a<<shift; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "SHL16: output is not short: %d in %s: line %d\n", res, file, line); - spx_mips++; - return res; -} - -static inline int SHR32(long long a, int shift) -{ - long long res; - if (!VERIFY_INT(a) || !VERIFY_SHORT(shift)) - { - fprintf (stderr, "SHR32: inputs are not int: %d %d\n", (int)a, shift); - } - res = a>>shift; - if (!VERIFY_INT(res)) - { - fprintf (stderr, "SHR32: output is not int: %d\n", (int)res); - } - spx_mips++; - return res; -} -static inline int SHL32(long long a, int shift) -{ - long long res; - if (!VERIFY_INT(a) || !VERIFY_SHORT(shift)) - { - fprintf (stderr, "SHL32: inputs are not int: %d %d\n", (int)a, shift); - } - res = a<<shift; - if (!VERIFY_INT(res)) - { - fprintf (stderr, "SHL32: output is not int: %d\n", (int)res); - } - spx_mips++; - return res; -} - -#define PSHR16(a,shift) (SHR16(ADD16((a),((1<<((shift))>>1))),shift)) -#define PSHR32(a,shift) (SHR32(ADD32((a),((EXTEND32(1)<<((shift))>>1))),shift)) -#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift))) - -#define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) -#define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) - -//#define SHR(a,shift) ((a) >> (shift)) -//#define SHL(a,shift) ((a) << (shift)) - -#define ADD16(a, b) _ADD16(a, b, __FILE__, __LINE__) -static inline short _ADD16(int a, int b, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "ADD16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line); - } - res = a+b; - if (!VERIFY_SHORT(res)) - { - fprintf (stderr, "ADD16: output is not short: %d+%d=%d in %s: line %d\n", a,b,res, file, line); - } - spx_mips++; - return res; -} - -#define SUB16(a, b) _SUB16(a, b, __FILE__, __LINE__) -static inline short _SUB16(int a, int b, char *file, int line) -{ - int res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "SUB16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line); - } - res = a-b; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "SUB16: output is not short: %d in %s: line %d\n", res, file, line); - spx_mips++; - return res; -} - -#define ADD32(a, b) _ADD32(a, b, __FILE__, __LINE__) -static inline int _ADD32(long long a, long long b, char *file, int line) -{ - long long res; - if (!VERIFY_INT(a) || !VERIFY_INT(b)) - { - fprintf (stderr, "ADD32: inputs are not int: %d %d in %s: line %d\n", (int)a, (int)b, file, line); - } - res = a+b; - if (!VERIFY_INT(res)) - { - fprintf (stderr, "ADD32: output is not int: %d in %s: line %d\n", (int)res, file, line); - } - spx_mips++; - return res; -} - -static inline int SUB32(long long a, long long b) -{ - long long res; - if (!VERIFY_INT(a) || !VERIFY_INT(b)) - { - fprintf (stderr, "SUB32: inputs are not int: %d %d\n", (int)a, (int)b); - } - res = a-b; - if (!VERIFY_INT(res)) - fprintf (stderr, "SUB32: output is not int: %d\n", (int)res); - spx_mips++; - return res; -} - -#define ADD64(a,b) (MIPS_INC(a)+(b)) - -/* result fits in 16 bits */ -static inline short MULT16_16_16(int a, int b) -{ - int res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_16: inputs are not short: %d %d\n", a, b); - } - res = a*b; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_16: output is not short: %d\n", res); - spx_mips++; - return res; -} - -#define MULT16_16(a, b) _MULT16_16(a, b, __FILE__, __LINE__) -static inline int _MULT16_16(int a, int b, char *file, int line) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line); - } - res = ((long long)a)*b; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_16: output is not int: %d in %s: line %d\n", (int)res, file, line); - spx_mips++; - return res; -} - -#define MAC16_16(c,a,b) (spx_mips--,ADD32((c),MULT16_16((a),(b)))) -#define MAC16_16_Q11(c,a,b) (EXTRACT16(ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),11))))) -#define MAC16_16_Q13(c,a,b) (EXTRACT16(ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),13))))) -#define MAC16_16_P13(c,a,b) (EXTRACT16(ADD32((c),SHR32(ADD32(4096,MULT16_16((a),(b))),13)))) - - -#define MULT16_32_QX(a, b, Q) _MULT16_32_QX(a, b, Q, __FILE__, __LINE__) -static inline int _MULT16_32_QX(int a, long long b, int Q, char *file, int line) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_INT(b)) - { - fprintf (stderr, "MULT16_32_Q%d: inputs are not short+int: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line); - } - if (ABS32(b)>=(EXTEND32(1)<<(15+Q))) - fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line); - res = (((long long)a)*(long long)b) >> Q; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_32_Q%d: output is not int: %d*%d=%d in %s: line %d\n", Q, (int)a, (int)b,(int)res, file, line); - spx_mips+=5; - return res; -} - -static inline int MULT16_32_PX(int a, long long b, int Q) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_INT(b)) - { - fprintf (stderr, "MULT16_32_P%d: inputs are not short+int: %d %d\n", Q, (int)a, (int)b); - } - if (ABS32(b)>=(EXTEND32(1)<<(15+Q))) - fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d\n", Q, (int)a, (int)b); - res = ((((long long)a)*(long long)b) + ((EXTEND32(1)<<Q)>>1))>> Q; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_32_P%d: output is not int: %d*%d=%d\n", Q, (int)a, (int)b,(int)res); - spx_mips+=5; - return res; -} - - -#define MULT16_32_Q11(a,b) MULT16_32_QX(a,b,11) -#define MAC16_32_Q11(c,a,b) ADD32((c),MULT16_32_Q11((a),(b))) -#define MULT16_32_Q12(a,b) MULT16_32_QX(a,b,12) -#define MULT16_32_Q13(a,b) MULT16_32_QX(a,b,13) -#define MULT16_32_Q14(a,b) MULT16_32_QX(a,b,14) -#define MULT16_32_Q15(a,b) MULT16_32_QX(a,b,15) -#define MULT16_32_P15(a,b) MULT16_32_PX(a,b,15) -#define MAC16_32_Q15(c,a,b) ADD32((c),MULT16_32_Q15((a),(b))) - -static inline int SATURATE(int a, int b) -{ - if (a>b) - a=b; - if (a<-b) - a = -b; - return a; -} - -static inline int MULT16_16_Q11_32(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_Q11: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res >>= 11; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_16_Q11: output is not short: %d*%d=%d\n", (int)a, (int)b, (int)res); - spx_mips+=3; - return res; -} -static inline short MULT16_16_Q13(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_Q13: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res >>= 13; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_Q13: output is not short: %d*%d=%d\n", a, b, (int)res); - spx_mips+=3; - return res; -} -static inline short MULT16_16_Q14(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_Q14: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res >>= 14; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_Q14: output is not short: %d\n", (int)res); - spx_mips+=3; - return res; -} -static inline short MULT16_16_Q15(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_Q15: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res >>= 15; - if (!VERIFY_SHORT(res)) - { - fprintf (stderr, "MULT16_16_Q15: output is not short: %d\n", (int)res); - } - spx_mips+=3; - return res; -} - -static inline short MULT16_16_P13(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_P13: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res += 4096; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_16_P13: overflow: %d*%d=%d\n", a, b, (int)res); - res >>= 13; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_P13: output is not short: %d*%d=%d\n", a, b, (int)res); - spx_mips+=4; - return res; -} -static inline short MULT16_16_P14(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_P14: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res += 8192; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_16_P14: overflow: %d*%d=%d\n", a, b, (int)res); - res >>= 14; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_P14: output is not short: %d*%d=%d\n", a, b, (int)res); - spx_mips+=4; - return res; -} -static inline short MULT16_16_P15(int a, int b) -{ - long long res; - if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "MULT16_16_P15: inputs are not short: %d %d\n", a, b); - } - res = ((long long)a)*b; - res += 16384; - if (!VERIFY_INT(res)) - fprintf (stderr, "MULT16_16_P15: overflow: %d*%d=%d\n", a, b, (int)res); - res >>= 15; - if (!VERIFY_SHORT(res)) - fprintf (stderr, "MULT16_16_P15: output is not short: %d*%d=%d\n", a, b, (int)res); - spx_mips+=4; - return res; -} - -#define DIV32_16(a, b) _DIV32_16(a, b, __FILE__, __LINE__) - -static inline int _DIV32_16(long long a, long long b, char *file, int line) -{ - long long res; - if (b==0) - { - fprintf(stderr, "DIV32_16: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line); - return 0; - } - if (!VERIFY_INT(a) || !VERIFY_SHORT(b)) - { - fprintf (stderr, "DIV32_16: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line); - } - res = a/b; - if (!VERIFY_SHORT(res)) - { - fprintf (stderr, "DIV32_16: output is not short: %d / %d = %d in %s: line %d\n", (int)a,(int)b,(int)res, file, line); - if (res>32767) - res = 32767; - if (res<-32768) - res = -32768; - } - spx_mips+=20; - return res; -} - -#define DIV32(a, b) _DIV32(a, b, __FILE__, __LINE__) -static inline int _DIV32(long long a, long long b, char *file, int line) -{ - long long res; - if (b==0) - { - fprintf(stderr, "DIV32: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line); - return 0; - } - - if (!VERIFY_INT(a) || !VERIFY_INT(b)) - { - fprintf (stderr, "DIV32: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line); - } - res = a/b; - if (!VERIFY_INT(res)) - fprintf (stderr, "DIV32: output is not int: %d in %s: line %d\n", (int)res, file, line); - spx_mips+=36; - return res; -} -#define PDIV32(a,b) DIV32(ADD32((a),(b)>>1),b) -#define PDIV32_16(a,b) DIV32_16(ADD32((a),(b)>>1),b) - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_generic.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_generic.h deleted file mode 100755 index 3fb096e..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/fixed_generic.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2003 Jean-Marc Valin */ -/** - @file fixed_generic.h - @brief Generic fixed-point operations -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef FIXED_GENERIC_H -#define FIXED_GENERIC_H - -#define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(((spx_word32_t)1)<<(bits)))) -#define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(((spx_word32_t)1)<<(bits)))) - -#define NEG16(x) (-(x)) -#define NEG32(x) (-(x)) -#define EXTRACT16(x) ((spx_word16_t)(x)) -#define EXTEND32(x) ((spx_word32_t)(x)) -#define SHR16(a,shift) ((a) >> (shift)) -#define SHL16(a,shift) ((a) << (shift)) -#define SHR32(a,shift) ((a) >> (shift)) -#define SHL32(a,shift) ((a) << (shift)) -#define PSHR16(a,shift) (SHR16((a)+((1<<((shift))>>1)),shift)) -#define PSHR32(a,shift) (SHR32((a)+((EXTEND32(1)<<((shift))>>1)),shift)) -#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift))) -#define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) -#define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) - -#define SHR(a,shift) ((a) >> (shift)) -#define SHL(a,shift) ((spx_word32_t)(a) << (shift)) -#define PSHR(a,shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift)) -#define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) - - -#define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b))) -#define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b)) -#define ADD32(a,b) ((spx_word32_t)(a)+(spx_word32_t)(b)) -#define SUB32(a,b) ((spx_word32_t)(a)-(spx_word32_t)(b)) - - -/* result fits in 16 bits */ -#define MULT16_16_16(a,b) ((((spx_word16_t)(a))*((spx_word16_t)(b)))) - -/* (spx_word32_t)(spx_word16_t) gives TI compiler a hint that it's 16x16->32 multiply */ -#define MULT16_16(a,b) (((spx_word32_t)(spx_word16_t)(a))*((spx_word32_t)(spx_word16_t)(b))) - -#define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b)))) -#define MULT16_32_Q12(a,b) ADD32(MULT16_16((a),SHR((b),12)), SHR(MULT16_16((a),((b)&0x00000fff)),12)) -#define MULT16_32_Q13(a,b) ADD32(MULT16_16((a),SHR((b),13)), SHR(MULT16_16((a),((b)&0x00001fff)),13)) -#define MULT16_32_Q14(a,b) ADD32(MULT16_16((a),SHR((b),14)), SHR(MULT16_16((a),((b)&0x00003fff)),14)) - -#define MULT16_32_Q11(a,b) ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)) -#define MAC16_32_Q11(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11))) - -#define MULT16_32_P15(a,b) ADD32(MULT16_16((a),SHR((b),15)), PSHR(MULT16_16((a),((b)&0x00007fff)),15)) -#define MULT16_32_Q15(a,b) ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)) -#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) - - -#define MAC16_16_Q11(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),11))) -#define MAC16_16_Q13(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),13))) -#define MAC16_16_P13(c,a,b) (ADD32((c),SHR(ADD32(4096,MULT16_16((a),(b))),13))) - -#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11)) -#define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13)) -#define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14)) -#define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15)) - -#define MULT16_16_P13(a,b) (SHR(ADD32(4096,MULT16_16((a),(b))),13)) -#define MULT16_16_P14(a,b) (SHR(ADD32(8192,MULT16_16((a),(b))),14)) -#define MULT16_16_P15(a,b) (SHR(ADD32(16384,MULT16_16((a),(b))),15)) - -#define MUL_16_32_R15(a,bh,bl) ADD32(MULT16_16((a),(bh)), SHR(MULT16_16((a),(bl)),15)) - -#define DIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a))/((spx_word16_t)(b)))) -#define PDIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word16_t)(b)))) -#define DIV32(a,b) (((spx_word32_t)(a))/((spx_word32_t)(b))) -#define PDIV32(a,b) (((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word32_t)(b))) - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table.c deleted file mode 100755 index 00b8244..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: gain_table.c - Codebook for 3-tap pitch prediction gain (128 entries) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char gain_cdbk_nb[512] = { --32, -32, -32, 0, --28, -67, -5, 33, --42, -6, -32, 18, --57, -10, -54, 35, --16, 27, -41, 42, -19, -19, -40, 36, --45, 24, -21, 40, --8, -14, -18, 28, -1, 14, -58, 53, --18, -88, -39, 39, --38, 21, -18, 37, --19, 20, -43, 38, -10, 17, -48, 54, --52, -58, -13, 33, --44, -1, -11, 32, --12, -11, -34, 22, -14, 0, -46, 46, --37, -35, -34, 5, --25, 44, -30, 43, -6, -4, -63, 49, --31, 43, -41, 43, --23, 30, -43, 41, --43, 26, -14, 44, --33, 1, -13, 27, --13, 18, -37, 37, --46, -73, -45, 34, --36, 24, -25, 34, --36, -11, -20, 19, --25, 12, -18, 33, --36, -69, -59, 34, --45, 6, 8, 46, --22, -14, -24, 18, --1, 13, -44, 44, --39, -48, -26, 15, --32, 31, -37, 34, --33, 15, -46, 31, --24, 30, -36, 37, --41, 31, -23, 41, --50, 22, -4, 50, --22, 2, -21, 28, --17, 30, -34, 40, --7, -60, -28, 29, --38, 42, -28, 42, --44, -11, 21, 43, --16, 8, -44, 34, --39, -55, -43, 21, --11, -35, 26, 41, --9, 0, -34, 29, --8, 121, -81, 113, -7, -16, -22, 33, --37, 33, -31, 36, --27, -7, -36, 17, --34, 70, -57, 65, --37, -11, -48, 21, --40, 17, -1, 44, --33, 6, -6, 33, --9, 0, -20, 34, --21, 69, -33, 57, --29, 33, -31, 35, --55, 12, -1, 49, --33, 27, -22, 35, --50, -33, -47, 17, --50, 54, 51, 94, --1, -5, -44, 35, --4, 22, -40, 45, --39, -66, -25, 24, --33, 1, -26, 20, --24, -23, -25, 12, --11, 21, -45, 44, --25, -45, -19, 17, --43, 105, -16, 82, -5, -21, 1, 41, --16, 11, -33, 30, --13, -99, -4, 57, --37, 33, -15, 44, --25, 37, -63, 54, --36, 24, -31, 31, --53, -56, -38, 26, --41, -4, 4, 37, --33, 13, -30, 24, -49, 52, -94, 114, --5, -30, -15, 23, -1, 38, -40, 56, --23, 12, -36, 29, --17, 40, -47, 51, --37, -41, -39, 11, --49, 34, 0, 58, --18, -7, -4, 34, --16, 17, -27, 35, -30, 5, -62, 65, -4, 48, -68, 76, --43, 11, -11, 38, --18, 19, -15, 41, --23, -62, -39, 23, --42, 10, -2, 41, --21, -13, -13, 25, --9, 13, -47, 42, --23, -62, -24, 24, --44, 60, -21, 58, --18, -3, -52, 32, --22, 22, -36, 34, --75, 57, 16, 90, --19, 3, 10, 45, --29, 23, -38, 32, --5, -62, -51, 38, --51, 40, -18, 53, --42, 13, -24, 32, --34, 14, -20, 30, --56, -75, -26, 37, --26, 32, 15, 59, --26, 17, -29, 29, --7, 28, -52, 53, --12, -30, 5, 30, --5, -48, -5, 35, -2, 2, -43, 40, -21, 16, 16, 75, --25, -45, -32, 10, --43, 18, -10, 42, -9, 0, -1, 52, --1, 7, -30, 36, -19, -48, -4, 48, --28, 25, -29, 32, --22, 0, -31, 22, --32, 17, -10, 36, --64, -41, -62, 36, --52, 15, 16, 58, --30, -22, -32, 6, --7, 9, -38, 36}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table_lbr.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table_lbr.c deleted file mode 100755 index 3c1c3db..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/gain_table_lbr.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: gain_table_lbr.c - Codebook for 3-tap pitch prediction gain (32 entries) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char gain_cdbk_lbr[128] = { --32, -32, -32, 0, --31, -58, -16, 22, --41, -24, -43, 14, --56, -22, -55, 29, --13, 33, -41, 47, --4, -39, -9, 29, --41, 15, -12, 38, --8, -15, -12, 31, -1, 2, -44, 40, --22, -66, -42, 27, --38, 28, -23, 38, --21, 14, -37, 31, -0, 21, -50, 52, --53, -71, -27, 33, --37, -1, -19, 25, --19, -5, -28, 22, -6, 65, -44, 74, --33, -48, -33, 9, --40, 57, -14, 58, --17, 4, -45, 32, --31, 38, -33, 36, --23, 28, -40, 39, --43, 29, -12, 46, --34, 13, -23, 28, --16, 15, -27, 34, --14, -82, -15, 43, --31, 25, -32, 29, --21, 5, -5, 38, --47, -63, -51, 33, --46, 12, 3, 47, --28, -17, -29, 11, --10, 14, -40, 38}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_10_32_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_10_32_table.c deleted file mode 100755 index 8dd408f..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_10_32_table.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: hexc_10_32_table.c - Codebook for high-band excitation in SB-CELP mode (4000 bps) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char hexc_10_32_table[320] = { --3, -2, -1, 0, -4, 5, 35, -40, -9, 13, --44, 5, -27, -1, -7, 6, -11, 7, -8, 7, -19, -14, 15, -4, 9, -10, 10, -8, 10, -9, --1, 1, 0, 0, 2, 5, -18, 22, -53, 50, -1, -23, 50, -36, 15, 3, -13, 14, -10, 6, -1, 5, -3, 4, -2, 5, -32, 25, 5, -2, --1, -4, 1, 11, -29, 26, -6, -15, 30, -18, -0, 15, -17, 40, -41, 3, 9, -2, -2, 3, --3, -1, -5, 2, 21, -6, -16, -21, 23, 2, -60, 15, 16, -16, -9, 14, 9, -1, 7, -9, -0, 1, 1, 0, -1, -6, 17, -28, 54, -45, --1, 1, -1, -6, -6, 2, 11, 26, -29, -2, -46, -21, 34, 12, -23, 32, -23, 16, -10, 3, -66, 19, -20, 24, 7, 11, -3, 0, -3, -1, --50, -46, 2, -18, -3, 4, -1, -2, 3, -3, --19, 41, -36, 9, 11, -24, 21, -16, 9, -3, --25, -3, 10, 18, -9, -2, -5, -1, -5, 6, --4, -3, 2, -26, 21, -19, 35, -15, 7, -13, -17, -19, 39, -43, 48, -31, 16, -9, 7, -2, --5, 3, -4, 9, -19, 27, -55, 63, -35, 10, -26, -44, -2, 9, 4, 1, -6, 8, -9, 5, --8, -1, -3, -16, 45, -42, 5, 15, -16, 10, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, --16, 24, -55, 47, -38, 27, -19, 7, -3, 1, -16, 27, 20, -19, 18, 5, -7, 1, -5, 2, --6, 8, -22, 0, -3, -3, 8, -1, 7, -8, -1, -3, 5, 0, 17, -48, 58, -52, 29, -7, --2, 3, -10, 6, -26, 58, -31, 1, -6, 3, -93, -29, 39, 3, 17, 5, 6, -1, -1, -1, -27, 13, 10, 19, -7, -34, 12, 10, -4, 9, --76, 9, 8, -28, -2, -11, 2, -1, 3, 1, --83, 38, -39, 4, -16, -6, -2, -5, 5, -2, -}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_table.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_table.c deleted file mode 100755 index 268408a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/hexc_table.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: hexc_table.c - Codebook for high-band excitation in SB-CELP mode (8000 bps with sign) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char hexc_table[1024] = { --24, 21, -20, 5, -5, -7, 14, -10, -2, -27, 16, -20, 0, -32, 26, 19, -8, -11, -41, 31, 28, -27, -32, 34, -42, 34, -17, 22, -10, 13, -29, 18, --12, -26, -24, 11, 22, 5, -5, -5, -54, -68, -43, 57, -25, 24, 4, 4, -26, -8, -12, -17, 54, 30, -45, 1, -10, -15, 18, -41, 11, 68, -67, 37, --16, -24, -16, 38, -22, 6, -29, 30, -66, -27, 5, 7, -16, 13, 2, -12, --7, -3, -20, 36, 4, -28, 9, 3, -32, 48, 26, 39, 3, 0, 7, -21, --13, 5, -82, -7, 73, -20, 34, -9, --5, 1, -1, 10, -5, -10, -1, 9, -1, -9, 10, 0, -14, 11, -1, -2, --1, 11, 20, 96, -81, -22, -12, -9, --58, 9, 24, -30, 26, -35, 27, -12, -13, -18, 56, -59, 15, -7, 23, -15, --1, 6, -25, 14, -22, -20, 47, -11, -16, 2, 38, -23, -19, -30, -9, 40, --11, 5, 4, -6, 8, 26, -21, -11, -127, 4, 1, 6, -9, 2, -7, -2, --3, 7, -5, 10, -19, 7, -106, 91, --3, 9, -4, 21, -8, 26, -80, 8, -1, -2, -10, -17, -17, -27, 32, 71, -6, -29, 11, -23, 54, -38, 29, -22, -39, 87, -31, -12, -20, 3, -2, -2, -2, 20, 0, -1, -35, 27, 9, -6, --12, 3, -12, -6, 13, 1, 14, -22, --59, -15, -17, -25, 13, -7, 7, 3, -0, 1, -7, 6, -3, 61, -37, -23, --23, -29, 38, -31, 27, 1, -8, 2, --27, 23, -26, 36, -34, 5, 24, -24, --6, 7, 3, -59, 78, -62, 44, -16, -1, 6, 0, 17, 8, 45, 0, -110, -6, 14, -2, 32, -77, -56, 62, -3, -3, -13, 4, -16, 102, -15, -36, -1, -9, -113, 6, 23, 0, 9, 9, 5, --8, -1, -14, 5, -12, 121, -53, -27, --8, -9, 22, -13, 3, 2, -3, 1, --2, -71, 95, 38, -19, 15, -16, -5, -71, 10, 2, -32, -13, -5, 15, -1, --2, -14, -85, 30, 29, 6, 3, 2, -0, 0, 0, 0, 0, 0, 0, 0, -2, -65, -56, -9, 18, 18, 23, -14, --2, 0, 12, -29, 26, -12, 1, 2, --12, -64, 90, -6, 4, 1, 5, -5, --110, -3, -31, 22, -29, 9, 0, 8, --40, -5, 21, -5, -5, 13, 10, -18, -40, 1, 35, -20, 30, -28, 11, -6, -19, 7, 14, 18, -64, 9, -6, 16, -51, 68, 8, 16, 12, -8, 0, -9, -20, -22, 25, 7, -4, -13, 41, -35, -93, -18, -54, 11, -1, 1, -9, 4, --66, 66, -31, 20, -22, 25, -23, 11, -10, 9, 19, 15, 11, -5, -31, -10, --23, -28, -6, -6, -3, -4, 5, 3, --28, 22, -11, -42, 25, -25, -16, 41, -34, 47, -6, 2, 42, -19, -22, 5, --39, 32, 6, -35, 22, 17, -30, 8, --26, -11, -11, 3, -12, 33, 33, -37, -21, -1, 6, -4, 3, 0, -5, 5, -12, -12, 57, 27, -61, -3, 20, -17, -2, 0, 4, 0, -2, -33, -58, 81, --23, 39, -10, -5, 2, 6, -7, 5, -4, -3, -2, -13, -23, -72, 107, 15, --5, 0, -7, -3, -6, 5, -4, 15, -47, 12, -31, 25, -16, 8, 22, -25, --62, -56, -18, 14, 28, 12, 2, -11, -74, -66, 41, -20, -7, 16, -20, 16, --8, 0, -16, 4, -19, 92, 12, -59, --14, -39, 49, -25, -16, 23, -27, 19, --3, -33, 19, 85, -29, 6, -7, -10, -16, -7, -12, 1, -6, 2, 4, -2, -64, 10, -25, 41, -2, -31, 15, 0, -110, 50, 69, 35, 28, 19, -10, 2, --43, -49, -56, -15, -16, 10, 3, 12, --1, -8, 1, 26, -12, -1, 7, -11, --27, 41, 25, 1, -11, -18, 22, -7, --1, -47, -8, 23, -3, -17, -7, 18, --125, 59, -5, 3, 18, 1, 2, 3, -27, -35, 65, -53, 50, -46, 37, -21, --28, 7, 14, -37, -5, -5, 12, 5, --8, 78, -19, 21, -6, -16, 8, -7, -5, 2, 7, 2, 10, -6, 12, -60, -44, 11, -36, -32, 31, 0, 2, -2, -2, 1, -3, 7, -10, 17, -21, 10, -6, -2, 19, -2, 59, -38, -86, 38, -8, -41, -30, -45, -33, 7, 15, 28, -29, -7, 24, -40, 7, 7, 5, -2, -9, 24, -23, -18, 6, -29, 30, 2, -28, 49, -11, -46, 10, 43, -13, -9, --1, -3, -7, -7, -17, -6, 97, -33, --21, 3, 5, 1, 12, -43, -8, 28, -7, -43, -7, 17, -20, 19, -1, 2, --13, 9, 54, 34, 9, -28, -11, -9, --17, 110, -59, 44, -26, 0, 3, -12, --47, 73, -34, -43, 38, -33, 16, -5, --46, -4, -6, -2, -25, 19, -29, 28, --13, 5, 14, 27, -40, -43, 4, 32, --13, -2, -35, -4, 112, -42, 9, -12, -37, -28, 17, 14, -19, 35, -39, 23, -3, -14, -1, -57, -5, 94, -9, 3, --39, 5, 30, -10, -32, 42, -13, -14, --97, -63, 30, -9, 1, -7, 12, 5, -20, 17, -9, -36, -30, 25, 47, -9, --15, 12, -22, 98, -8, -50, 15, -27, -21, -16, -11, 2, 12, -10, 10, -3, -33, 36, -96, 0, -17, 31, -9, 9, -3, -20, 13, -11, 8, -4, 10, -10, -9, 1, 112, -70, -27, 5, -21, 2, --57, -3, -29, 10, 19, -21, 21, -10, --66, -3, 91, -35, 30, -12, 0, -7, -59, -28, 26, 2, 14, -18, 1, 1, -11, 17, 20, -54, -59, 27, 4, 29, -32, 5, 19, 12, -4, 1, 7, -10, -5, -2, 10, 0, 23, -5, 28, -104, -46, 11, 16, 3, 29, 1, -8, -14, -1, 7, -50, 88, -62, 26, 8, -17, --14, 50, 0, 32, -12, -3, -27, 18, --8, -5, 8, 3, -20, -11, 37, -12, -9, 33, 46, -101, -1, -4, 1, 6, --1, 28, -42, -15, 16, 5, -1, -2, --55, 85, 38, -9, -4, 11, -2, -9, --6, 3, -20, -10, -77, 89, 24, -3, --104, -57, -26, -31, -20, -6, -9, 14, -20, -23, 46, -15, -31, 28, 1, -15, --2, 6, -2, 31, 45, -76, 23, -25, -}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/high_lsp_tables.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/high_lsp_tables.c deleted file mode 100755 index e82e875..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/high_lsp_tables.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: high_lsp_tables.c - Codebooks for high-band LSPs in SB-CELP mode - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char high_lsp_cdbk[512]={ -39,12,-14,-20,-29,-61,-67,-76, --32,-71,-67,68,77,46,34,5, --13,-48,-46,-72,-81,-84,-60,-58, --40,-28,82,93,68,45,29,3, --19,-47,-28,-43,-35,-30,-8,-13, --39,-91,-91,-123,-96,10,10,-6, --18,-55,-60,-91,-56,-36,-27,-16, --48,-75,40,28,-10,-28,35,9, -37,19,1,-20,-31,-41,-18,-25, --35,-68,-80,45,27,-1,47,13, -0,-29,-35,-57,-50,-79,-73,-38, --19,5,35,14,-10,-23,16,-8, -5,-24,-40,-62,-23,-27,-22,-16, --18,-46,-72,-77,43,21,33,1, --80,-70,-70,-64,-56,-52,-39,-33, --31,-38,-19,-19,-15,32,33,-2, -7,-15,-15,-24,-23,-33,-41,-56, --24,-57,5,89,64,41,27,5, --9,-47,-60,-97,-97,-124,-20,-9, --44,-73,31,29,-4,64,48,7, --35,-57,0,-3,-26,-47,-3,-6, --40,-76,-79,-48,12,81,55,10, -9,-24,-43,-73,-57,-69,16,5, --28,-53,18,29,20,0,-4,-11, -6,-13,23,7,-17,-35,-37,-37, --30,-68,-63,6,24,-9,-14,3, -21,-13,-27,-57,-49,-80,-24,-41, --5,-16,-5,1,45,25,12,-7, -3,-15,-6,-16,-15,-8,6,-13, --42,-81,-80,-87,14,1,-10,-3, --43,-69,-46,-24,-28,-29,36,6, --43,-56,-12,12,54,79,43,9, -54,22,2,8,-12,-43,-46,-52, --38,-69,-89,-5,75,38,33,5, --13,-53,-62,-87,-89,-113,-99,-55, --34,-37,62,55,33,16,21,-2, --17,-46,-29,-38,-38,-48,-39,-42, --36,-75,-72,-88,-48,-30,21,2, --15,-57,-64,-98,-84,-76,25,1, --46,-80,-12,18,-7,3,34,6, -38,31,23,4,-1,20,14,-15, --43,-78,-91,-24,14,-3,54,16, -0,-27,-28,-44,-56,-83,-92,-89, --3,34,56,41,36,22,20,-8, --7,-35,-42,-62,-49,3,12,-10, --50,-87,-96,-66,92,70,38,9, --70,-71,-62,-42,-39,-43,-11,-7, --50,-79,-58,-50,-31,32,31,-6, --4,-25,7,-17,-38,-70,-58,-27, --43,-83,-28,59,36,20,31,2, --27,-71,-80,-109,-98,-75,-33,-32, --31,-2,33,15,-6,43,33,-5, -0,-22,-10,-27,-34,-49,-11,-20, --41,-91,-100,-121,-39,57,41,10, --19,-50,-38,-59,-60,-70,-18,-20, --8,-31,-8,-15,1,-14,-26,-25, -33,21,32,17,1,-19,-19,-26, --58,-81,-35,-22,45,30,11,-11, -3,-26,-48,-87,-67,-83,-58,3, --1,-26,-20,44,10,25,39,5, --9,-35,-27,-38,7,10,4,-9, --42,-85,-102,-127,52,44,28,10, --47,-61,-40,-39,-17,-1,-10,-33, --42,-74,-48,21,-4,70,52,10}; - - -const signed char high_lsp_cdbk2[512]={ --36,-62,6,-9,-10,-14,-56,23, -1,-26,23,-48,-17,12,8,-7, -23,29,-36,-28,-6,-29,-17,-5, -40,23,10,10,-46,-13,36,6, -4,-30,-29,62,32,-32,-1,22, --14,1,-4,-22,-45,2,54,4, --30,-57,-59,-12,27,-3,-31,8, --9,5,10,-14,32,66,19,9, -2,-25,-37,23,-15,18,-38,-31, -5,-9,-21,15,0,22,62,30, -15,-12,-14,-46,77,21,33,3, -34,29,-19,50,2,11,9,-38, --12,-37,62,1,-15,54,32,6, -2,-24,20,35,-21,2,19,24, --13,55,4,9,39,-19,30,-1, --21,73,54,33,8,18,3,15, -6,-19,-47,6,-3,-48,-50,1, -26,20,8,-23,-50,65,-14,-55, --17,-31,-37,-28,53,-1,-17,-53, -1,57,11,-8,-25,-30,-37,64, -5,-52,-45,15,23,31,15,14, --25,24,33,-2,-44,-56,-18,6, --21,-43,4,-12,17,-37,20,-10, -34,15,2,15,55,21,-11,-31, --6,46,25,16,-9,-25,-8,-62, -28,17,20,-32,-29,26,30,25, --19,2,-16,-17,26,-51,2,50, -42,19,-66,23,29,-2,3,19, --19,-37,32,15,6,30,-34,13, -11,-5,40,31,10,-42,4,-9, -26,-9,-70,17,-2,-23,20,-22, --55,51,-24,-31,22,-22,15,-13, -3,-10,-28,-16,56,4,-63,11, --18,-15,-18,-38,-35,16,-7,34, --1,-21,-49,-47,9,-37,7,8, -69,55,20,6,-33,-45,-10,-9, -6,-9,12,71,15,-3,-42,-7, --24,32,-35,-2,-42,-17,-5,0, --2,-33,-54,13,-12,-34,47,23, -19,55,7,-8,74,31,14,16, --23,-26,19,12,-18,-49,-28,-31, --20,2,-14,-20,-47,78,40,13, --23,-11,21,-6,18,1,47,5, -38,35,32,46,22,8,13,16, --14,18,51,19,40,39,11,-26, --1,-17,47,2,-53,-15,31,-22, -38,21,-15,-16,5,-33,53,15, --38,86,11,-3,-24,49,13,-4, --11,-18,28,20,-12,-27,-26,35, --25,-35,-3,-20,-61,30,10,-55, --12,-22,-52,-54,-14,19,-32,-12, -45,15,-8,-48,-9,11,-32,8, --16,-34,-13,51,18,38,-2,-32, --17,22,-2,-18,-28,-70,59,27, --28,-19,-10,-20,-9,-9,-8,-21, -21,-8,35,-2,45,-3,-9,12, -0,30,7,-39,43,27,-38,-91, -30,26,19,-55,-4,63,14,-17, -13,9,13,2,7,4,6,61, -72,-1,-17,29,-1,-22,-17,8, --28,-37,63,44,41,3,2,14, -9,-6,75,-8,-7,-12,-15,-12, -13,9,-4,30,-22,-65,15,0, --45,4,-4,1,5,22,11,23}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/jitter.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/jitter.c deleted file mode 100755 index 84e4afc..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/jitter.c +++ /dev/null @@ -1,843 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: speex_jitter.h - - Adaptive jitter buffer for Speex - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -/* -TODO: -- Add short-term estimate -- Defensive programming - + warn when last returned < last desired (begative buffering) - + warn if update_delay not called between get() and tick() or is called twice in a row -- Linked list structure for holding the packets instead of the current fixed-size array - + return memory to a pool - + allow pre-allocation of the pool - + optional max number of elements -- Statistics - + drift - + loss - + late - + jitter - + buffering delay -*/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "arch.h" -#include "speex/speex.h" -#include "speex/speex_bits.h" -#include "speex/speex_jitter.h" -#include "os_support.h" - -#ifndef NULL -#define NULL 0 -#endif - -#define SPEEX_JITTER_MAX_BUFFER_SIZE 200 /**< Maximum number of packets in jitter buffer */ - -#define TSUB(a,b) ((spx_int32_t)((a)-(b))) - -#define GT32(a,b) (((spx_int32_t)((a)-(b)))>0) -#define GE32(a,b) (((spx_int32_t)((a)-(b)))>=0) -#define LT32(a,b) (((spx_int32_t)((a)-(b)))<0) -#define LE32(a,b) (((spx_int32_t)((a)-(b)))<=0) - -#define ROUND_DOWN(x, step) ((x)<0 ? ((x)-(step)+1)/(step)*(step) : (x)/(step)*(step)) - -#define MAX_TIMINGS 40 -#define MAX_BUFFERS 3 -#define TOP_DELAY 40 - -/** Buffer that keeps the time of arrival of the latest packets */ -struct TimingBuffer { - int filled; /**< Number of entries occupied in "timing" and "counts"*/ - int curr_count; /**< Number of packet timings we got (including those we discarded) */ - spx_int32_t timing[MAX_TIMINGS]; /**< Sorted list of all timings ("latest" packets first) */ - spx_int16_t counts[MAX_TIMINGS]; /**< Order the packets were put in (will be used for short-term estimate) */ -}; - -static void tb_init(struct TimingBuffer *tb) -{ - tb->filled = 0; - tb->curr_count = 0; -} - -/* Add the timing of a new packet to the TimingBuffer */ -static void tb_add(struct TimingBuffer *tb, spx_int16_t timing) -{ - int pos; - /* Discard packet that won't make it into the list because they're too early */ - if (tb->filled >= MAX_TIMINGS && timing >= tb->timing[tb->filled-1]) - { - tb->curr_count++; - return; - } - - /* Find where the timing info goes in the sorted list */ - pos = 0; - /* FIXME: Do bisection instead of linear search */ - while (pos<tb->filled && timing >= tb->timing[pos]) - { - pos++; - } - - speex_assert(pos <= tb->filled && pos < MAX_TIMINGS); - - /* Shift everything so we can perform the insertion */ - if (pos < tb->filled) - { - int move_size = tb->filled-pos; - if (tb->filled == MAX_TIMINGS) - move_size -= 1; - SPEEX_MOVE(&tb->timing[pos+1], &tb->timing[pos], move_size); - SPEEX_MOVE(&tb->counts[pos+1], &tb->counts[pos], move_size); - } - /* Insert */ - tb->timing[pos] = timing; - tb->counts[pos] = tb->curr_count; - - tb->curr_count++; - if (tb->filled<MAX_TIMINGS) - tb->filled++; -} - - - -/** Jitter buffer structure */ -struct JitterBuffer_ { - spx_uint32_t pointer_timestamp; /**< Timestamp of what we will *get* next */ - spx_uint32_t last_returned_timestamp; /**< Useful for getting the next packet with the same timestamp (for fragmented media) */ - spx_uint32_t next_stop; /**< Estimated time the next get() will be called */ - - spx_int32_t buffered; /**< Amount of data we think is still buffered by the application (timestamp units)*/ - - JitterBufferPacket packets[SPEEX_JITTER_MAX_BUFFER_SIZE]; /**< Packets stored in the buffer */ - spx_uint32_t arrival[SPEEX_JITTER_MAX_BUFFER_SIZE]; /**< Packet arrival time (0 means it was late, even though it's a valid timestamp) */ - - void (*destroy) (void *); /**< Callback for destroying a packet */ - - spx_int32_t delay_step; /**< Size of the steps when adjusting buffering (timestamp units) */ - spx_int32_t concealment_size; /**< Size of the packet loss concealment "units" */ - int reset_state; /**< True if state was just reset */ - int buffer_margin; /**< How many frames we want to keep in the buffer (lower bound) */ - int late_cutoff; /**< How late must a packet be for it not to be considered at all */ - int interp_requested; /**< An interpolation is requested by speex_jitter_update_delay() */ - int auto_adjust; /**< Whether to automatically adjust the delay at any time */ - - struct TimingBuffer _tb[MAX_BUFFERS]; /**< Don't use those directly */ - struct TimingBuffer *timeBuffers[MAX_BUFFERS]; /**< Storing arrival time of latest frames so we can compute some stats */ - int window_size; /**< Total window over which the late frames are counted */ - int subwindow_size; /**< Sub-window size for faster computation */ - int max_late_rate; /**< Absolute maximum amount of late packets tolerable (in percent) */ - int latency_tradeoff; /**< Latency equivalent of losing one percent of packets */ - int auto_tradeoff; /**< Latency equivalent of losing one percent of packets (automatic default) */ - - int lost_count; /**< Number of consecutive lost packets */ -}; - -/** Based on available data, this computes the optimal delay for the jitter buffer. - The optimised function is in timestamp units and is: - cost = delay + late_factor*[number of frames that would be late if we used that delay] - @param tb Array of buffers - @param late_factor Equivalent cost of a late frame (in timestamp units) - */ -static spx_int16_t compute_opt_delay(JitterBuffer *jitter) -{ - int i; - spx_int16_t opt=0; - spx_int32_t best_cost=0x7fffffff; - int late = 0; - int pos[MAX_BUFFERS]; - int tot_count; - float late_factor; - int penalty_taken = 0; - int best = 0; - int worst = 0; - spx_int32_t deltaT; - struct TimingBuffer *tb; - - tb = jitter->_tb; - - /* Number of packet timings we have received (including those we didn't keep) */ - tot_count = 0; - for (i=0;i<MAX_BUFFERS;i++) - tot_count += tb[i].curr_count; - if (tot_count==0) - return 0; - - /* Compute cost for one lost packet */ - if (jitter->latency_tradeoff != 0) - late_factor = jitter->latency_tradeoff * 100.0f / tot_count; - else - late_factor = jitter->auto_tradeoff * jitter->window_size/tot_count; - - /*fprintf(stderr, "late_factor = %f\n", late_factor);*/ - for (i=0;i<MAX_BUFFERS;i++) - pos[i] = 0; - - /* Pick the TOP_DELAY "latest" packets (doesn't need to actually be late - for the current settings) */ - for (i=0;i<TOP_DELAY;i++) - { - int j; - int next=-1; - int latest = 32767; - /* Pick latest amoung all sub-windows */ - for (j=0;j<MAX_BUFFERS;j++) - { - if (pos[j] < tb[j].filled && tb[j].timing[pos[j]] < latest) - { - next = j; - latest = tb[j].timing[pos[j]]; - } - } - if (next != -1) - { - spx_int32_t cost; - - if (i==0) - worst = latest; - best = latest; - latest = ROUND_DOWN(latest, jitter->delay_step); - pos[next]++; - - /* Actual cost function that tells us how bad using this delay would be */ - cost = -latest + late_factor*late; - /*fprintf(stderr, "cost %d = %d + %f * %d\n", cost, -latest, late_factor, late);*/ - if (cost < best_cost) - { - best_cost = cost; - opt = latest; - } - } else { - break; - } - - /* For the next timing we will consider, there will be one more late packet to count */ - late++; - /* Two-frame penalty if we're going to increase the amount of late frames (hysteresis) */ - if (latest >= 0 && !penalty_taken) - { - penalty_taken = 1; - late+=4; - } - } - - deltaT = best-worst; - /* This is a default "automatic latency tradeoff" when none is provided */ - jitter->auto_tradeoff = 1 + deltaT/TOP_DELAY; - /*fprintf(stderr, "auto_tradeoff = %d (%d %d %d)\n", jitter->auto_tradeoff, best, worst, i);*/ - - /* FIXME: Compute a short-term estimate too and combine with the long-term one */ - - /* Prevents reducing the buffer size when we haven't really had much data */ - if (tot_count < TOP_DELAY && opt > 0) - return 0; - return opt; -} - - -/** Initialise jitter buffer */ -EXPORT JitterBuffer *jitter_buffer_init(int step_size) -{ - JitterBuffer *jitter = (JitterBuffer*)speex_alloc(sizeof(JitterBuffer)); - if (jitter) - { - int i; - spx_int32_t tmp; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - jitter->packets[i].data=NULL; - jitter->delay_step = step_size; - jitter->concealment_size = step_size; - /*FIXME: Should this be 0 or 1?*/ - jitter->buffer_margin = 0; - jitter->late_cutoff = 50; - jitter->destroy = NULL; - jitter->latency_tradeoff = 0; - jitter->auto_adjust = 1; - tmp = 4; - jitter_buffer_ctl(jitter, JITTER_BUFFER_SET_MAX_LATE_RATE, &tmp); - jitter_buffer_reset(jitter); - } - return jitter; -} - -/** Reset jitter buffer */ -EXPORT void jitter_buffer_reset(JitterBuffer *jitter) -{ - int i; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data) - { - if (jitter->destroy) - jitter->destroy(jitter->packets[i].data); - else - speex_free(jitter->packets[i].data); - jitter->packets[i].data = NULL; - } - } - /* Timestamp is actually undefined at this point */ - jitter->pointer_timestamp = 0; - jitter->next_stop = 0; - jitter->reset_state = 1; - jitter->lost_count = 0; - jitter->buffered = 0; - jitter->auto_tradeoff = 32000; - - for (i=0;i<MAX_BUFFERS;i++) - { - tb_init(&jitter->_tb[i]); - jitter->timeBuffers[i] = &jitter->_tb[i]; - } - /*fprintf (stderr, "reset\n");*/ -} - -/** Destroy jitter buffer */ -EXPORT void jitter_buffer_destroy(JitterBuffer *jitter) -{ - jitter_buffer_reset(jitter); - speex_free(jitter); -} - -/** Take the following timing into consideration for future calculations */ -static void update_timings(JitterBuffer *jitter, spx_int32_t timing) -{ - if (timing < -32767) - timing = -32767; - if (timing > 32767) - timing = 32767; - /* If the current sub-window is full, perform a rotation and discard oldest sub-widow */ - if (jitter->timeBuffers[0]->curr_count >= jitter->subwindow_size) - { - int i; - /*fprintf(stderr, "Rotate buffer\n");*/ - struct TimingBuffer *tmp = jitter->timeBuffers[MAX_BUFFERS-1]; - for (i=MAX_BUFFERS-1;i>=1;i--) - jitter->timeBuffers[i] = jitter->timeBuffers[i-1]; - jitter->timeBuffers[0] = tmp; - tb_init(jitter->timeBuffers[0]); - } - tb_add(jitter->timeBuffers[0], timing); -} - -/** Compensate all timings when we do an adjustment of the buffering */ -static void shift_timings(JitterBuffer *jitter, spx_int16_t amount) -{ - int i, j; - for (i=0;i<MAX_BUFFERS;i++) - { - for (j=0;j<jitter->timeBuffers[i]->filled;j++) - jitter->timeBuffers[i]->timing[j] += amount; - } -} - - -/** Put one packet into the jitter buffer */ -EXPORT void jitter_buffer_put(JitterBuffer *jitter, const JitterBufferPacket *packet) -{ - int i,j; - int late; - /*fprintf (stderr, "put packet %d %d\n", timestamp, span);*/ - - /* Cleanup buffer (remove old packets that weren't played) */ - if (!jitter->reset_state) - { - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - /* Make sure we don't discard a "just-late" packet in case we want to play it next (if we interpolate). */ - if (jitter->packets[i].data && LE32(jitter->packets[i].timestamp + jitter->packets[i].span, jitter->pointer_timestamp)) - { - /*fprintf (stderr, "cleaned (not played)\n");*/ - if (jitter->destroy) - jitter->destroy(jitter->packets[i].data); - else - speex_free(jitter->packets[i].data); - jitter->packets[i].data = NULL; - } - } - } - - /*fprintf(stderr, "arrival: %d %d %d\n", packet->timestamp, jitter->next_stop, jitter->pointer_timestamp);*/ - /* Check if packet is late (could still be useful though) */ - if (!jitter->reset_state && LT32(packet->timestamp, jitter->next_stop)) - { - update_timings(jitter, ((spx_int32_t)packet->timestamp) - ((spx_int32_t)jitter->next_stop) - jitter->buffer_margin); - late = 1; - } else { - late = 0; - } - - /* For some reason, the consumer has failed the last 20 fetches. Make sure this packet is - * used to resync. */ - if (jitter->lost_count>20) - { - jitter_buffer_reset(jitter); - } - - /* Only insert the packet if it's not hopelessly late (i.e. totally useless) */ - if (jitter->reset_state || GE32(packet->timestamp+packet->span+jitter->delay_step, jitter->pointer_timestamp)) - { - - /*Find an empty slot in the buffer*/ - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data==NULL) - break; - } - - /*No place left in the buffer, need to make room for it by discarding the oldest packet */ - if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) - { - int earliest=jitter->packets[0].timestamp; - i=0; - for (j=1;j<SPEEX_JITTER_MAX_BUFFER_SIZE;j++) - { - if (!jitter->packets[i].data || LT32(jitter->packets[j].timestamp,earliest)) - { - earliest = jitter->packets[j].timestamp; - i=j; - } - } - if (jitter->destroy) - jitter->destroy(jitter->packets[i].data); - else - speex_free(jitter->packets[i].data); - jitter->packets[i].data=NULL; - /*fprintf (stderr, "Buffer is full, discarding earliest frame %d (currently at %d)\n", timestamp, jitter->pointer_timestamp);*/ - } - - /* Copy packet in buffer */ - if (jitter->destroy) - { - jitter->packets[i].data = packet->data; - } else { - jitter->packets[i].data=(char*)speex_alloc(packet->len); - for (j=0;j<packet->len;j++) - jitter->packets[i].data[j]=packet->data[j]; - } - jitter->packets[i].timestamp=packet->timestamp; - jitter->packets[i].span=packet->span; - jitter->packets[i].len=packet->len; - jitter->packets[i].sequence=packet->sequence; - jitter->packets[i].user_data=packet->user_data; - if (jitter->reset_state || late) - jitter->arrival[i] = 0; - else - jitter->arrival[i] = jitter->next_stop; - } - - -} - -/** Get one packet from the jitter buffer */ -EXPORT int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t desired_span, spx_int32_t *start_offset) -{ - int i; - unsigned int j; - int incomplete = 0; - spx_int16_t opt; - - if (start_offset != NULL) - *start_offset = 0; - - /* Syncing on the first call */ - if (jitter->reset_state) - { - int found = 0; - /* Find the oldest packet */ - spx_uint32_t oldest=0; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && (!found || LT32(jitter->packets[i].timestamp,oldest))) - { - oldest = jitter->packets[i].timestamp; - found = 1; - } - } - if (found) - { - jitter->reset_state=0; - jitter->pointer_timestamp = oldest; - jitter->next_stop = oldest; - } else { - packet->timestamp = 0; - packet->span = jitter->interp_requested; - return JITTER_BUFFER_MISSING; - } - } - - - jitter->last_returned_timestamp = jitter->pointer_timestamp; - - if (jitter->interp_requested != 0) - { - packet->timestamp = jitter->pointer_timestamp; - packet->span = jitter->interp_requested; - - /* Increment the pointer because it got decremented in the delay update */ - jitter->pointer_timestamp += jitter->interp_requested; - packet->len = 0; - /*fprintf (stderr, "Deferred interpolate\n");*/ - - jitter->interp_requested = 0; - - jitter->buffered = packet->span - desired_span; - - return JITTER_BUFFER_INSERTION; - } - - /* Searching for the packet that fits best */ - - /* Search the buffer for a packet with the right timestamp and spanning the whole current chunk */ - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && jitter->packets[i].timestamp==jitter->pointer_timestamp && GE32(jitter->packets[i].timestamp+jitter->packets[i].span,jitter->pointer_timestamp+desired_span)) - break; - } - - /* If no match, try for an "older" packet that still spans (fully) the current chunk */ - if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) - { - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && LE32(jitter->packets[i].timestamp, jitter->pointer_timestamp) && GE32(jitter->packets[i].timestamp+jitter->packets[i].span,jitter->pointer_timestamp+desired_span)) - break; - } - } - - /* If still no match, try for an "older" packet that spans part of the current chunk */ - if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) - { - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && LE32(jitter->packets[i].timestamp, jitter->pointer_timestamp) && GT32(jitter->packets[i].timestamp+jitter->packets[i].span,jitter->pointer_timestamp)) - break; - } - } - - /* If still no match, try for earliest packet possible */ - if (i==SPEEX_JITTER_MAX_BUFFER_SIZE) - { - int found = 0; - spx_uint32_t best_time=0; - int best_span=0; - int besti=0; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - /* check if packet starts within current chunk */ - if (jitter->packets[i].data && LT32(jitter->packets[i].timestamp,jitter->pointer_timestamp+desired_span) && GE32(jitter->packets[i].timestamp,jitter->pointer_timestamp)) - { - if (!found || LT32(jitter->packets[i].timestamp,best_time) || (jitter->packets[i].timestamp==best_time && GT32(jitter->packets[i].span,best_span))) - { - best_time = jitter->packets[i].timestamp; - best_span = jitter->packets[i].span; - besti = i; - found = 1; - } - } - } - if (found) - { - i=besti; - incomplete = 1; - /*fprintf (stderr, "incomplete: %d %d %d %d\n", jitter->packets[i].timestamp, jitter->pointer_timestamp, chunk_size, jitter->packets[i].span);*/ - } - } - - /* If we find something */ - if (i!=SPEEX_JITTER_MAX_BUFFER_SIZE) - { - spx_int32_t offset; - - /* We (obviously) haven't lost this packet */ - jitter->lost_count = 0; - - /* In this case, 0 isn't as a valid timestamp */ - if (jitter->arrival[i] != 0) - { - update_timings(jitter, ((spx_int32_t)jitter->packets[i].timestamp) - ((spx_int32_t)jitter->arrival[i]) - jitter->buffer_margin); - } - - - /* Copy packet */ - if (jitter->destroy) - { - packet->data = jitter->packets[i].data; - packet->len = jitter->packets[i].len; - } else { - if (jitter->packets[i].len > packet->len) - { - speex_warning_int("jitter_buffer_get(): packet too large to fit. Size is", jitter->packets[i].len); - } else { - packet->len = jitter->packets[i].len; - } - for (j=0;j<packet->len;j++) - packet->data[j] = jitter->packets[i].data[j]; - /* Remove packet */ - speex_free(jitter->packets[i].data); - } - jitter->packets[i].data = NULL; - /* Set timestamp and span (if requested) */ - offset = (spx_int32_t)jitter->packets[i].timestamp-(spx_int32_t)jitter->pointer_timestamp; - if (start_offset != NULL) - *start_offset = offset; - else if (offset != 0) - speex_warning_int("jitter_buffer_get() discarding non-zero start_offset", offset); - - packet->timestamp = jitter->packets[i].timestamp; - jitter->last_returned_timestamp = packet->timestamp; - - packet->span = jitter->packets[i].span; - packet->sequence = jitter->packets[i].sequence; - packet->user_data = jitter->packets[i].user_data; - /* Point to the end of the current packet */ - jitter->pointer_timestamp = jitter->packets[i].timestamp+jitter->packets[i].span; - - jitter->buffered = packet->span - desired_span; - - if (start_offset != NULL) - jitter->buffered += *start_offset; - - return JITTER_BUFFER_OK; - } - - - /* If we haven't found anything worth returning */ - - /*fprintf (stderr, "not found\n");*/ - jitter->lost_count++; - /*fprintf (stderr, "m");*/ - /*fprintf (stderr, "lost_count = %d\n", jitter->lost_count);*/ - - opt = compute_opt_delay(jitter); - - /* Should we force an increase in the buffer or just do normal interpolation? */ - if (opt < 0) - { - /* Need to increase buffering */ - - /* Shift histogram to compensate */ - shift_timings(jitter, -opt); - - packet->timestamp = jitter->pointer_timestamp; - packet->span = -opt; - /* Don't move the pointer_timestamp forward */ - packet->len = 0; - - jitter->buffered = packet->span - desired_span; - return JITTER_BUFFER_INSERTION; - /*jitter->pointer_timestamp -= jitter->delay_step;*/ - /*fprintf (stderr, "Forced to interpolate\n");*/ - } else { - /* Normal packet loss */ - packet->timestamp = jitter->pointer_timestamp; - - desired_span = ROUND_DOWN(desired_span, jitter->concealment_size); - packet->span = desired_span; - jitter->pointer_timestamp += desired_span; - packet->len = 0; - - jitter->buffered = packet->span - desired_span; - return JITTER_BUFFER_MISSING; - /*fprintf (stderr, "Normal loss\n");*/ - } - - -} - -EXPORT int jitter_buffer_get_another(JitterBuffer *jitter, JitterBufferPacket *packet) -{ - int i, j; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && jitter->packets[i].timestamp==jitter->last_returned_timestamp) - break; - } - if (i!=SPEEX_JITTER_MAX_BUFFER_SIZE) - { - /* Copy packet */ - packet->len = jitter->packets[i].len; - if (jitter->destroy) - { - packet->data = jitter->packets[i].data; - } else { - for (j=0;j<packet->len;j++) - packet->data[j] = jitter->packets[i].data[j]; - /* Remove packet */ - speex_free(jitter->packets[i].data); - } - jitter->packets[i].data = NULL; - packet->timestamp = jitter->packets[i].timestamp; - packet->span = jitter->packets[i].span; - packet->sequence = jitter->packets[i].sequence; - packet->user_data = jitter->packets[i].user_data; - return JITTER_BUFFER_OK; - } else { - packet->data = NULL; - packet->len = 0; - packet->span = 0; - return JITTER_BUFFER_MISSING; - } -} - -/* Let the jitter buffer know it's the right time to adjust the buffering delay to the network conditions */ -static int _jitter_buffer_update_delay(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset) -{ - spx_int16_t opt = compute_opt_delay(jitter); - /*fprintf(stderr, "opt adjustment is %d ", opt);*/ - - if (opt < 0) - { - shift_timings(jitter, -opt); - - jitter->pointer_timestamp += opt; - jitter->interp_requested = -opt; - /*fprintf (stderr, "Decision to interpolate %d samples\n", -opt);*/ - } else if (opt > 0) - { - shift_timings(jitter, -opt); - jitter->pointer_timestamp += opt; - /*fprintf (stderr, "Decision to drop %d samples\n", opt);*/ - } - - return opt; -} - -/* Let the jitter buffer know it's the right time to adjust the buffering delay to the network conditions */ -EXPORT int jitter_buffer_update_delay(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset) -{ - /* If the programmer calls jitter_buffer_update_delay() directly, - automatically disable auto-adjustment */ - jitter->auto_adjust = 0; - - return _jitter_buffer_update_delay(jitter, packet, start_offset); -} - -/** Get pointer timestamp of jitter buffer */ -EXPORT int jitter_buffer_get_pointer_timestamp(JitterBuffer *jitter) -{ - return jitter->pointer_timestamp; -} - -EXPORT void jitter_buffer_tick(JitterBuffer *jitter) -{ - /* Automatically-adjust the buffering delay if requested */ - if (jitter->auto_adjust) - _jitter_buffer_update_delay(jitter, NULL, NULL); - - if (jitter->buffered >= 0) - { - jitter->next_stop = jitter->pointer_timestamp - jitter->buffered; - } else { - jitter->next_stop = jitter->pointer_timestamp; - speex_warning_int("jitter buffer sees negative buffering, your code might be broken. Value is ", jitter->buffered); - } - jitter->buffered = 0; -} - -EXPORT void jitter_buffer_remaining_span(JitterBuffer *jitter, spx_uint32_t rem) -{ - /* Automatically-adjust the buffering delay if requested */ - if (jitter->auto_adjust) - _jitter_buffer_update_delay(jitter, NULL, NULL); - - if (jitter->buffered < 0) - speex_warning_int("jitter buffer sees negative buffering, your code might be broken. Value is ", jitter->buffered); - jitter->next_stop = jitter->pointer_timestamp - rem; -} - - -/* Used like the ioctl function to control the jitter buffer parameters */ -EXPORT int jitter_buffer_ctl(JitterBuffer *jitter, int request, void *ptr) -{ - int count, i; - switch(request) - { - case JITTER_BUFFER_SET_MARGIN: - jitter->buffer_margin = *(spx_int32_t*)ptr; - break; - case JITTER_BUFFER_GET_MARGIN: - *(spx_int32_t*)ptr = jitter->buffer_margin; - break; - case JITTER_BUFFER_GET_AVALIABLE_COUNT: - count = 0; - for (i=0;i<SPEEX_JITTER_MAX_BUFFER_SIZE;i++) - { - if (jitter->packets[i].data && LE32(jitter->pointer_timestamp, jitter->packets[i].timestamp)) - { - count++; - } - } - *(spx_int32_t*)ptr = count; - break; - case JITTER_BUFFER_SET_DESTROY_CALLBACK: - jitter->destroy = (void (*) (void *))ptr; - break; - case JITTER_BUFFER_GET_DESTROY_CALLBACK: - *(void (**) (void *))ptr = jitter->destroy; - break; - case JITTER_BUFFER_SET_DELAY_STEP: - jitter->delay_step = *(spx_int32_t*)ptr; - break; - case JITTER_BUFFER_GET_DELAY_STEP: - *(spx_int32_t*)ptr = jitter->delay_step; - break; - case JITTER_BUFFER_SET_CONCEALMENT_SIZE: - jitter->concealment_size = *(spx_int32_t*)ptr; - break; - case JITTER_BUFFER_GET_CONCEALMENT_SIZE: - *(spx_int32_t*)ptr = jitter->concealment_size; - break; - case JITTER_BUFFER_SET_MAX_LATE_RATE: - jitter->max_late_rate = *(spx_int32_t*)ptr; - jitter->window_size = 100*TOP_DELAY/jitter->max_late_rate; - jitter->subwindow_size = jitter->window_size/MAX_BUFFERS; - break; - case JITTER_BUFFER_GET_MAX_LATE_RATE: - *(spx_int32_t*)ptr = jitter->max_late_rate; - break; - case JITTER_BUFFER_SET_LATE_COST: - jitter->latency_tradeoff = *(spx_int32_t*)ptr; - break; - case JITTER_BUFFER_GET_LATE_COST: - *(spx_int32_t*)ptr = jitter->latency_tradeoff; - break; - default: - speex_warning_int("Unknown jitter_buffer_ctl request: ", request); - return -1; - } - return 0; -} - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.c deleted file mode 100755 index 6778281..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.c +++ /dev/null @@ -1,523 +0,0 @@ -/* -Copyright (c) 2003-2004, Mark Borgerding -Copyright (c) 2005-2007, Jean-Marc Valin - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "_kiss_fft_guts.h" -#include "arch.h" -#include "os_support.h" - -/* The guts header contains all the multiplication and addition macros that are defined for - fixed or floating point complex numbers. It also delares the kf_ internal functions. - */ - -static void kf_bfly2( - kiss_fft_cpx * Fout, - const size_t fstride, - const kiss_fft_cfg st, - int m, - int N, - int mm - ) -{ - kiss_fft_cpx * Fout2; - kiss_fft_cpx * tw1; - kiss_fft_cpx t; - if (!st->inverse) { - int i,j; - kiss_fft_cpx * Fout_beg = Fout; - for (i=0;i<N;i++) - { - Fout = Fout_beg + i*mm; - Fout2 = Fout + m; - tw1 = st->twiddles; - for(j=0;j<m;j++) - { - /* Almost the same as the code path below, except that we divide the input by two - (while keeping the best accuracy possible) */ - spx_word32_t tr, ti; - tr = SHR32(SUB32(MULT16_16(Fout2->r , tw1->r),MULT16_16(Fout2->i , tw1->i)), 1); - ti = SHR32(ADD32(MULT16_16(Fout2->i , tw1->r),MULT16_16(Fout2->r , tw1->i)), 1); - tw1 += fstride; - Fout2->r = PSHR32(SUB32(SHL32(EXTEND32(Fout->r), 14), tr), 15); - Fout2->i = PSHR32(SUB32(SHL32(EXTEND32(Fout->i), 14), ti), 15); - Fout->r = PSHR32(ADD32(SHL32(EXTEND32(Fout->r), 14), tr), 15); - Fout->i = PSHR32(ADD32(SHL32(EXTEND32(Fout->i), 14), ti), 15); - ++Fout2; - ++Fout; - } - } - } else { - int i,j; - kiss_fft_cpx * Fout_beg = Fout; - for (i=0;i<N;i++) - { - Fout = Fout_beg + i*mm; - Fout2 = Fout + m; - tw1 = st->twiddles; - for(j=0;j<m;j++) - { - C_MUL (t, *Fout2 , *tw1); - tw1 += fstride; - C_SUB( *Fout2 , *Fout , t ); - C_ADDTO( *Fout , t ); - ++Fout2; - ++Fout; - } - } - } -} - -static void kf_bfly4( - kiss_fft_cpx * Fout, - const size_t fstride, - const kiss_fft_cfg st, - int m, - int N, - int mm - ) -{ - kiss_fft_cpx *tw1,*tw2,*tw3; - kiss_fft_cpx scratch[6]; - const size_t m2=2*m; - const size_t m3=3*m; - int i, j; - - if (st->inverse) - { - kiss_fft_cpx * Fout_beg = Fout; - for (i=0;i<N;i++) - { - Fout = Fout_beg + i*mm; - tw3 = tw2 = tw1 = st->twiddles; - for (j=0;j<m;j++) - { - C_MUL(scratch[0],Fout[m] , *tw1 ); - C_MUL(scratch[1],Fout[m2] , *tw2 ); - C_MUL(scratch[2],Fout[m3] , *tw3 ); - - C_SUB( scratch[5] , *Fout, scratch[1] ); - C_ADDTO(*Fout, scratch[1]); - C_ADD( scratch[3] , scratch[0] , scratch[2] ); - C_SUB( scratch[4] , scratch[0] , scratch[2] ); - C_SUB( Fout[m2], *Fout, scratch[3] ); - tw1 += fstride; - tw2 += fstride*2; - tw3 += fstride*3; - C_ADDTO( *Fout , scratch[3] ); - - Fout[m].r = scratch[5].r - scratch[4].i; - Fout[m].i = scratch[5].i + scratch[4].r; - Fout[m3].r = scratch[5].r + scratch[4].i; - Fout[m3].i = scratch[5].i - scratch[4].r; - ++Fout; - } - } - } else - { - kiss_fft_cpx * Fout_beg = Fout; - for (i=0;i<N;i++) - { - Fout = Fout_beg + i*mm; - tw3 = tw2 = tw1 = st->twiddles; - for (j=0;j<m;j++) - { - C_MUL4(scratch[0],Fout[m] , *tw1 ); - C_MUL4(scratch[1],Fout[m2] , *tw2 ); - C_MUL4(scratch[2],Fout[m3] , *tw3 ); - - Fout->r = PSHR16(Fout->r, 2); - Fout->i = PSHR16(Fout->i, 2); - C_SUB( scratch[5] , *Fout, scratch[1] ); - C_ADDTO(*Fout, scratch[1]); - C_ADD( scratch[3] , scratch[0] , scratch[2] ); - C_SUB( scratch[4] , scratch[0] , scratch[2] ); - Fout[m2].r = PSHR16(Fout[m2].r, 2); - Fout[m2].i = PSHR16(Fout[m2].i, 2); - C_SUB( Fout[m2], *Fout, scratch[3] ); - tw1 += fstride; - tw2 += fstride*2; - tw3 += fstride*3; - C_ADDTO( *Fout , scratch[3] ); - - Fout[m].r = scratch[5].r + scratch[4].i; - Fout[m].i = scratch[5].i - scratch[4].r; - Fout[m3].r = scratch[5].r - scratch[4].i; - Fout[m3].i = scratch[5].i + scratch[4].r; - ++Fout; - } - } - } -} - -static void kf_bfly3( - kiss_fft_cpx * Fout, - const size_t fstride, - const kiss_fft_cfg st, - size_t m - ) -{ - size_t k=m; - const size_t m2 = 2*m; - kiss_fft_cpx *tw1,*tw2; - kiss_fft_cpx scratch[5]; - kiss_fft_cpx epi3; - epi3 = st->twiddles[fstride*m]; - - tw1=tw2=st->twiddles; - - do{ - if (!st->inverse) { - C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3); - } - - C_MUL(scratch[1],Fout[m] , *tw1); - C_MUL(scratch[2],Fout[m2] , *tw2); - - C_ADD(scratch[3],scratch[1],scratch[2]); - C_SUB(scratch[0],scratch[1],scratch[2]); - tw1 += fstride; - tw2 += fstride*2; - - Fout[m].r = Fout->r - HALF_OF(scratch[3].r); - Fout[m].i = Fout->i - HALF_OF(scratch[3].i); - - C_MULBYSCALAR( scratch[0] , epi3.i ); - - C_ADDTO(*Fout,scratch[3]); - - Fout[m2].r = Fout[m].r + scratch[0].i; - Fout[m2].i = Fout[m].i - scratch[0].r; - - Fout[m].r -= scratch[0].i; - Fout[m].i += scratch[0].r; - - ++Fout; - }while(--k); -} - -static void kf_bfly5( - kiss_fft_cpx * Fout, - const size_t fstride, - const kiss_fft_cfg st, - int m - ) -{ - kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4; - int u; - kiss_fft_cpx scratch[13]; - kiss_fft_cpx * twiddles = st->twiddles; - kiss_fft_cpx *tw; - kiss_fft_cpx ya,yb; - ya = twiddles[fstride*m]; - yb = twiddles[fstride*2*m]; - - Fout0=Fout; - Fout1=Fout0+m; - Fout2=Fout0+2*m; - Fout3=Fout0+3*m; - Fout4=Fout0+4*m; - - tw=st->twiddles; - for ( u=0; u<m; ++u ) { - if (!st->inverse) { - C_FIXDIV( *Fout0,5); C_FIXDIV( *Fout1,5); C_FIXDIV( *Fout2,5); C_FIXDIV( *Fout3,5); C_FIXDIV( *Fout4,5); - } - scratch[0] = *Fout0; - - C_MUL(scratch[1] ,*Fout1, tw[u*fstride]); - C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]); - C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]); - C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]); - - C_ADD( scratch[7],scratch[1],scratch[4]); - C_SUB( scratch[10],scratch[1],scratch[4]); - C_ADD( scratch[8],scratch[2],scratch[3]); - C_SUB( scratch[9],scratch[2],scratch[3]); - - Fout0->r += scratch[7].r + scratch[8].r; - Fout0->i += scratch[7].i + scratch[8].i; - - scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r); - scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r); - - scratch[6].r = S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i); - scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i); - - C_SUB(*Fout1,scratch[5],scratch[6]); - C_ADD(*Fout4,scratch[5],scratch[6]); - - scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r); - scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r); - scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i); - scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i); - - C_ADD(*Fout2,scratch[11],scratch[12]); - C_SUB(*Fout3,scratch[11],scratch[12]); - - ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; - } -} - -/* perform the butterfly for one stage of a mixed radix FFT */ -static void kf_bfly_generic( - kiss_fft_cpx * Fout, - const size_t fstride, - const kiss_fft_cfg st, - int m, - int p - ) -{ - int u,k,q1,q; - kiss_fft_cpx * twiddles = st->twiddles; - kiss_fft_cpx t; - kiss_fft_cpx scratchbuf[17]; - int Norig = st->nfft; - - /*CHECKBUF(scratchbuf,nscratchbuf,p);*/ - if (p>17) - speex_fatal("KissFFT: max radix supported is 17"); - - for ( u=0; u<m; ++u ) { - k=u; - for ( q1=0 ; q1<p ; ++q1 ) { - scratchbuf[q1] = Fout[ k ]; - if (!st->inverse) { - C_FIXDIV(scratchbuf[q1],p); - } - k += m; - } - - k=u; - for ( q1=0 ; q1<p ; ++q1 ) { - int twidx=0; - Fout[ k ] = scratchbuf[0]; - for (q=1;q<p;++q ) { - twidx += fstride * k; - if (twidx>=Norig) twidx-=Norig; - C_MUL(t,scratchbuf[q] , twiddles[twidx] ); - C_ADDTO( Fout[ k ] ,t); - } - k += m; - } - } -} - -static -void kf_shuffle( - kiss_fft_cpx * Fout, - const kiss_fft_cpx * f, - const size_t fstride, - int in_stride, - int * factors, - const kiss_fft_cfg st - ) -{ - const int p=*factors++; /* the radix */ - const int m=*factors++; /* stage's fft length/p */ - - /*printf ("fft %d %d %d %d %d %d\n", p*m, m, p, s2, fstride*in_stride, N);*/ - if (m==1) - { - int j; - for (j=0;j<p;j++) - { - Fout[j] = *f; - f += fstride*in_stride; - } - } else { - int j; - for (j=0;j<p;j++) - { - kf_shuffle( Fout , f, fstride*p, in_stride, factors,st); - f += fstride*in_stride; - Fout += m; - } - } -} - -static -void kf_work( - kiss_fft_cpx * Fout, - const kiss_fft_cpx * f, - const size_t fstride, - int in_stride, - int * factors, - const kiss_fft_cfg st, - int N, - int s2, - int m2 - ) -{ - int i; - kiss_fft_cpx * Fout_beg=Fout; - const int p=*factors++; /* the radix */ - const int m=*factors++; /* stage's fft length/p */ -#if 0 - /*printf ("fft %d %d %d %d %d %d\n", p*m, m, p, s2, fstride*in_stride, N);*/ - if (m==1) - { - /* int j; - for (j=0;j<p;j++) - { - Fout[j] = *f; - f += fstride*in_stride; - }*/ - } else { - int j; - for (j=0;j<p;j++) - { - kf_work( Fout , f, fstride*p, in_stride, factors,st, N*p, fstride*in_stride, m); - f += fstride*in_stride; - Fout += m; - } - } - - Fout=Fout_beg; - - switch (p) { - case 2: kf_bfly2(Fout,fstride,st,m); break; - case 3: kf_bfly3(Fout,fstride,st,m); break; - case 4: kf_bfly4(Fout,fstride,st,m); break; - case 5: kf_bfly5(Fout,fstride,st,m); break; - default: kf_bfly_generic(Fout,fstride,st,m,p); break; - } -#else - /*printf ("fft %d %d %d %d %d %d %d\n", p*m, m, p, s2, fstride*in_stride, N, m2);*/ - if (m==1) - { - /*for (i=0;i<N;i++) - { - int j; - Fout = Fout_beg+i*m2; - const kiss_fft_cpx * f2 = f+i*s2; - for (j=0;j<p;j++) - { - *Fout++ = *f2; - f2 += fstride*in_stride; - } - }*/ - }else{ - kf_work( Fout , f, fstride*p, in_stride, factors,st, N*p, fstride*in_stride, m); - } - - - - - switch (p) { - case 2: kf_bfly2(Fout,fstride,st,m, N, m2); break; - case 3: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly3(Fout,fstride,st,m);} break; - case 4: kf_bfly4(Fout,fstride,st,m, N, m2); break; - case 5: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly5(Fout,fstride,st,m);} break; - default: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly_generic(Fout,fstride,st,m,p);} break; - } -#endif -} - -/* facbuf is populated by p1,m1,p2,m2, ... - where - p[i] * m[i] = m[i-1] - m0 = n */ -static -void kf_factor(int n,int * facbuf) -{ - int p=4; - - /*factor out powers of 4, powers of 2, then any remaining primes */ - do { - while (n % p) { - switch (p) { - case 4: p = 2; break; - case 2: p = 3; break; - default: p += 2; break; - } - if (p>32000 || (spx_int32_t)p*(spx_int32_t)p > n) - p = n; /* no more factors, skip to end */ - } - n /= p; - *facbuf++ = p; - *facbuf++ = n; - } while (n > 1); -} -/* - * - * User-callable function to allocate all necessary storage space for the fft. - * - * The return value is a contiguous block of memory, allocated with malloc. As such, - * It can be freed with free(), rather than a kiss_fft-specific function. - * */ -kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ) -{ - kiss_fft_cfg st=NULL; - size_t memneeded = sizeof(struct kiss_fft_state) - + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/ - - if ( lenmem==NULL ) { - st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded ); - }else{ - if (mem != NULL && *lenmem >= memneeded) - st = (kiss_fft_cfg)mem; - *lenmem = memneeded; - } - if (st) { - int i; - st->nfft=nfft; - st->inverse = inverse_fft; -#ifdef FIXED_POINT - for (i=0;i<nfft;++i) { - spx_word32_t phase = i; - if (!st->inverse) - phase = -phase; - kf_cexp2(st->twiddles+i, DIV32(SHL32(phase,17),nfft)); - } -#else - for (i=0;i<nfft;++i) { - const double pi=3.14159265358979323846264338327; - double phase = ( -2*pi /nfft ) * i; - if (st->inverse) - phase *= -1; - kf_cexp(st->twiddles+i, phase ); - } -#endif - kf_factor(nfft,st->factors); - } - return st; -} - - - - -void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride) -{ - if (fin == fout) - { - speex_fatal("In-place FFT not supported"); - /*CHECKBUF(tmpbuf,ntmpbuf,st->nfft); - kf_work(tmpbuf,fin,1,in_stride, st->factors,st); - SPEEX_MOVE(fout,tmpbuf,st->nfft);*/ - } else { - kf_shuffle( fout, fin, 1,in_stride, st->factors,st); - kf_work( fout, fin, 1,in_stride, st->factors,st, 1, in_stride, 1); - } -} - -void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) -{ - kiss_fft_stride(cfg,fin,fout,1); -} - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.h deleted file mode 100755 index fa3f2c6..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fft.h +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef KISS_FFT_H -#define KISS_FFT_H - -#include <stdlib.h> -#include <math.h> -#include "arch.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - ATTENTION! - If you would like a : - -- a utility that will handle the caching of fft objects - -- real-only (no imaginary time component ) FFT - -- a multi-dimensional FFT - -- a command-line utility to perform ffts - -- a command-line utility to perform fast-convolution filtering - - Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c - in the tools/ directory. -*/ - -#ifdef USE_SIMD -# include <xmmintrin.h> -# define kiss_fft_scalar __m128 -#define KISS_FFT_MALLOC(nbytes) memalign(16,nbytes) -#else -#define KISS_FFT_MALLOC speex_alloc -#endif - - -#ifdef FIXED_POINT -#include "arch.h" -# define kiss_fft_scalar spx_int16_t -#else -# ifndef kiss_fft_scalar -/* default is float */ -# define kiss_fft_scalar float -# endif -#endif - -typedef struct { - kiss_fft_scalar r; - kiss_fft_scalar i; -}kiss_fft_cpx; - -typedef struct kiss_fft_state* kiss_fft_cfg; - -/* - * kiss_fft_alloc - * - * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. - * - * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); - * - * The return value from fft_alloc is a cfg buffer used internally - * by the fft routine or NULL. - * - * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc. - * The returned value should be free()d when done to avoid memory leaks. - * - * The state can be placed in a user supplied buffer 'mem': - * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, - * then the function places the cfg in mem and the size used in *lenmem - * and returns mem. - * - * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), - * then the function returns NULL and places the minimum cfg - * buffer size in *lenmem. - * */ - -kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); - -/* - * kiss_fft(cfg,in_out_buf) - * - * Perform an FFT on a complex input buffer. - * for a forward FFT, - * fin should be f[0] , f[1] , ... ,f[nfft-1] - * fout will be F[0] , F[1] , ... ,F[nfft-1] - * Note that each element is complex and can be accessed like - f[k].r and f[k].i - * */ -void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); - -/* - A more generic version of the above function. It reads its input from every Nth sample. - * */ -void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); - -/* If kiss_fft_alloc allocated a buffer, it is one contiguous - buffer and can be simply free()d when no longer needed*/ -#define kiss_fft_free speex_free - -/* - Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up - your compiler output to call this before you exit. -*/ -void kiss_fft_cleanup(void); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.c deleted file mode 100755 index f6275b8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.c +++ /dev/null @@ -1,297 +0,0 @@ -/* -Copyright (c) 2003-2004, Mark Borgerding - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "os_support.h" -#include "kiss_fftr.h" -#include "_kiss_fft_guts.h" - -struct kiss_fftr_state{ - kiss_fft_cfg substate; - kiss_fft_cpx * tmpbuf; - kiss_fft_cpx * super_twiddles; -#ifdef USE_SIMD - long pad; -#endif -}; - -kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem) -{ - int i; - kiss_fftr_cfg st = NULL; - size_t subsize, memneeded; - - if (nfft & 1) { - speex_warning("Real FFT optimization must be even.\n"); - return NULL; - } - nfft >>= 1; - - kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize); - memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 2); - - if (lenmem == NULL) { - st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); - } else { - if (*lenmem >= memneeded) - st = (kiss_fftr_cfg) mem; - *lenmem = memneeded; - } - if (!st) - return NULL; - - st->substate = (kiss_fft_cfg) (st + 1); /*just beyond kiss_fftr_state struct */ - st->tmpbuf = (kiss_fft_cpx *) (((char *) st->substate) + subsize); - st->super_twiddles = st->tmpbuf + nfft; - kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); - -#ifdef FIXED_POINT - for (i=0;i<nfft;++i) { - spx_word32_t phase = i+(nfft>>1); - if (!inverse_fft) - phase = -phase; - kf_cexp2(st->super_twiddles+i, DIV32(SHL32(phase,16),nfft)); - } -#else - for (i=0;i<nfft;++i) { - const double pi=3.14159265358979323846264338327; - double phase = pi*(((double)i) /nfft + .5); - if (!inverse_fft) - phase = -phase; - kf_cexp(st->super_twiddles+i, phase ); - } -#endif - return st; -} - -void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata) -{ - /* input buffer timedata is stored row-wise */ - int k,ncfft; - kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc; - - if ( st->substate->inverse) { - speex_fatal("kiss fft usage error: improper alloc\n"); - } - - ncfft = st->substate->nfft; - - /*perform the parallel fft of two real signals packed in real,imag*/ - kiss_fft( st->substate , (const kiss_fft_cpx*)timedata, st->tmpbuf ); - /* The real part of the DC element of the frequency spectrum in st->tmpbuf - * contains the sum of the even-numbered elements of the input time sequence - * The imag part is the sum of the odd-numbered elements - * - * The sum of tdc.r and tdc.i is the sum of the input time sequence. - * yielding DC of input time sequence - * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... - * yielding Nyquist bin of input time sequence - */ - - tdc.r = st->tmpbuf[0].r; - tdc.i = st->tmpbuf[0].i; - C_FIXDIV(tdc,2); - CHECK_OVERFLOW_OP(tdc.r ,+, tdc.i); - CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i); - freqdata[0].r = tdc.r + tdc.i; - freqdata[ncfft].r = tdc.r - tdc.i; -#ifdef USE_SIMD - freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0); -#else - freqdata[ncfft].i = freqdata[0].i = 0; -#endif - - for ( k=1;k <= ncfft/2 ; ++k ) { - fpk = st->tmpbuf[k]; - fpnk.r = st->tmpbuf[ncfft-k].r; - fpnk.i = - st->tmpbuf[ncfft-k].i; - C_FIXDIV(fpk,2); - C_FIXDIV(fpnk,2); - - C_ADD( f1k, fpk , fpnk ); - C_SUB( f2k, fpk , fpnk ); - C_MUL( tw , f2k , st->super_twiddles[k]); - - freqdata[k].r = HALF_OF(f1k.r + tw.r); - freqdata[k].i = HALF_OF(f1k.i + tw.i); - freqdata[ncfft-k].r = HALF_OF(f1k.r - tw.r); - freqdata[ncfft-k].i = HALF_OF(tw.i - f1k.i); - } -} - -void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata, kiss_fft_scalar *timedata) -{ - /* input buffer timedata is stored row-wise */ - int k, ncfft; - - if (st->substate->inverse == 0) { - speex_fatal("kiss fft usage error: improper alloc\n"); - } - - ncfft = st->substate->nfft; - - st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r; - st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r; - /*C_FIXDIV(st->tmpbuf[0],2);*/ - - for (k = 1; k <= ncfft / 2; ++k) { - kiss_fft_cpx fk, fnkc, fek, fok, tmp; - fk = freqdata[k]; - fnkc.r = freqdata[ncfft - k].r; - fnkc.i = -freqdata[ncfft - k].i; - /*C_FIXDIV( fk , 2 ); - C_FIXDIV( fnkc , 2 );*/ - - C_ADD (fek, fk, fnkc); - C_SUB (tmp, fk, fnkc); - C_MUL (fok, tmp, st->super_twiddles[k]); - C_ADD (st->tmpbuf[k], fek, fok); - C_SUB (st->tmpbuf[ncfft - k], fek, fok); -#ifdef USE_SIMD - st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); -#else - st->tmpbuf[ncfft - k].i *= -1; -#endif - } - kiss_fft (st->substate, st->tmpbuf, (kiss_fft_cpx *) timedata); -} - -void kiss_fftr2(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar *freqdata) -{ - /* input buffer timedata is stored row-wise */ - int k,ncfft; - kiss_fft_cpx f2k,tdc; - spx_word32_t f1kr, f1ki, twr, twi; - - if ( st->substate->inverse) { - speex_fatal("kiss fft usage error: improper alloc\n"); - } - - ncfft = st->substate->nfft; - - /*perform the parallel fft of two real signals packed in real,imag*/ - kiss_fft( st->substate , (const kiss_fft_cpx*)timedata, st->tmpbuf ); - /* The real part of the DC element of the frequency spectrum in st->tmpbuf - * contains the sum of the even-numbered elements of the input time sequence - * The imag part is the sum of the odd-numbered elements - * - * The sum of tdc.r and tdc.i is the sum of the input time sequence. - * yielding DC of input time sequence - * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... - * yielding Nyquist bin of input time sequence - */ - - tdc.r = st->tmpbuf[0].r; - tdc.i = st->tmpbuf[0].i; - C_FIXDIV(tdc,2); - CHECK_OVERFLOW_OP(tdc.r ,+, tdc.i); - CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i); - freqdata[0] = tdc.r + tdc.i; - freqdata[2*ncfft-1] = tdc.r - tdc.i; - - for ( k=1;k <= ncfft/2 ; ++k ) - { - /*fpk = st->tmpbuf[k]; - fpnk.r = st->tmpbuf[ncfft-k].r; - fpnk.i = - st->tmpbuf[ncfft-k].i; - C_FIXDIV(fpk,2); - C_FIXDIV(fpnk,2); - - C_ADD( f1k, fpk , fpnk ); - C_SUB( f2k, fpk , fpnk ); - - C_MUL( tw , f2k , st->super_twiddles[k]); - - freqdata[2*k-1] = HALF_OF(f1k.r + tw.r); - freqdata[2*k] = HALF_OF(f1k.i + tw.i); - freqdata[2*(ncfft-k)-1] = HALF_OF(f1k.r - tw.r); - freqdata[2*(ncfft-k)] = HALF_OF(tw.i - f1k.i); - */ - - /*f1k.r = PSHR32(ADD32(EXTEND32(st->tmpbuf[k].r), EXTEND32(st->tmpbuf[ncfft-k].r)),1); - f1k.i = PSHR32(SUB32(EXTEND32(st->tmpbuf[k].i), EXTEND32(st->tmpbuf[ncfft-k].i)),1); - f2k.r = PSHR32(SUB32(EXTEND32(st->tmpbuf[k].r), EXTEND32(st->tmpbuf[ncfft-k].r)),1); - f2k.i = SHR32(ADD32(EXTEND32(st->tmpbuf[k].i), EXTEND32(st->tmpbuf[ncfft-k].i)),1); - - C_MUL( tw , f2k , st->super_twiddles[k]); - - freqdata[2*k-1] = HALF_OF(f1k.r + tw.r); - freqdata[2*k] = HALF_OF(f1k.i + tw.i); - freqdata[2*(ncfft-k)-1] = HALF_OF(f1k.r - tw.r); - freqdata[2*(ncfft-k)] = HALF_OF(tw.i - f1k.i); - */ - f2k.r = SHR32(SUB32(EXTEND32(st->tmpbuf[k].r), EXTEND32(st->tmpbuf[ncfft-k].r)),1); - f2k.i = PSHR32(ADD32(EXTEND32(st->tmpbuf[k].i), EXTEND32(st->tmpbuf[ncfft-k].i)),1); - - f1kr = SHL32(ADD32(EXTEND32(st->tmpbuf[k].r), EXTEND32(st->tmpbuf[ncfft-k].r)),13); - f1ki = SHL32(SUB32(EXTEND32(st->tmpbuf[k].i), EXTEND32(st->tmpbuf[ncfft-k].i)),13); - - twr = SHR32(SUB32(MULT16_16(f2k.r,st->super_twiddles[k].r),MULT16_16(f2k.i,st->super_twiddles[k].i)), 1); - twi = SHR32(ADD32(MULT16_16(f2k.i,st->super_twiddles[k].r),MULT16_16(f2k.r,st->super_twiddles[k].i)), 1); - -#ifdef FIXED_POINT - freqdata[2*k-1] = PSHR32(f1kr + twr, 15); - freqdata[2*k] = PSHR32(f1ki + twi, 15); - freqdata[2*(ncfft-k)-1] = PSHR32(f1kr - twr, 15); - freqdata[2*(ncfft-k)] = PSHR32(twi - f1ki, 15); -#else - freqdata[2*k-1] = .5f*(f1kr + twr); - freqdata[2*k] = .5f*(f1ki + twi); - freqdata[2*(ncfft-k)-1] = .5f*(f1kr - twr); - freqdata[2*(ncfft-k)] = .5f*(twi - f1ki); - -#endif - } -} - -void kiss_fftri2(kiss_fftr_cfg st,const kiss_fft_scalar *freqdata,kiss_fft_scalar *timedata) -{ - /* input buffer timedata is stored row-wise */ - int k, ncfft; - - if (st->substate->inverse == 0) { - speex_fatal ("kiss fft usage error: improper alloc\n"); - } - - ncfft = st->substate->nfft; - - st->tmpbuf[0].r = freqdata[0] + freqdata[2*ncfft-1]; - st->tmpbuf[0].i = freqdata[0] - freqdata[2*ncfft-1]; - /*C_FIXDIV(st->tmpbuf[0],2);*/ - - for (k = 1; k <= ncfft / 2; ++k) { - kiss_fft_cpx fk, fnkc, fek, fok, tmp; - fk.r = freqdata[2*k-1]; - fk.i = freqdata[2*k]; - fnkc.r = freqdata[2*(ncfft - k)-1]; - fnkc.i = -freqdata[2*(ncfft - k)]; - /*C_FIXDIV( fk , 2 ); - C_FIXDIV( fnkc , 2 );*/ - - C_ADD (fek, fk, fnkc); - C_SUB (tmp, fk, fnkc); - C_MUL (fok, tmp, st->super_twiddles[k]); - C_ADD (st->tmpbuf[k], fek, fok); - C_SUB (st->tmpbuf[ncfft - k], fek, fok); -#ifdef USE_SIMD - st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); -#else - st->tmpbuf[ncfft - k].i *= -1; -#endif - } - kiss_fft (st->substate, st->tmpbuf, (kiss_fft_cpx *) timedata); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.h deleted file mode 100755 index 7bfb423..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/kiss_fftr.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef KISS_FTR_H -#define KISS_FTR_H - -#include "kiss_fft.h" -#ifdef __cplusplus -extern "C" { -#endif - - -/* - - Real optimized version can save about 45% cpu time vs. complex fft of a real seq. - - - - */ - -typedef struct kiss_fftr_state *kiss_fftr_cfg; - - -kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem); -/* - nfft must be even - - If you don't care to allocate space, use mem = lenmem = NULL -*/ - - -void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata); -/* - input timedata has nfft scalar points - output freqdata has nfft/2+1 complex points -*/ - -void kiss_fftr2(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar *freqdata); - -void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata); - -void kiss_fftri2(kiss_fftr_cfg st,const kiss_fft_scalar *freqdata, kiss_fft_scalar *timedata); - -/* - input freqdata has nfft/2+1 complex points - output timedata has nfft scalar points -*/ - -#define kiss_fftr_free speex_free - -#ifdef __cplusplus -} -#endif -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.c deleted file mode 100755 index fd5d382..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, - Technische Universitaet Berlin - - Any use of this software is permitted provided that this notice is not - removed and that neither the authors nor the Technische Universitaet Berlin - are deemed to have made any representations as to the suitability of this - software for any purpose nor are held responsible for any defects of - this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - - As a matter of courtesy, the authors request to be informed about uses - this software has found, about bugs in this software, and about any - improvements that may be of general interest. - - Berlin, 28.11.1994 - Jutta Degener - Carsten Bormann - - - Code modified by Jean-Marc Valin - - Speex License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "lpc.h" - -#ifdef BFIN_ASM -#include "lpc_bfin.h" -#endif - -/* LPC analysis - * - * The next two functions calculate linear prediction coefficients - * and/or the related reflection coefficients from the first P_MAX+1 - * values of the autocorrelation function. - */ - -/* Invented by N. Levinson in 1947, modified by J. Durbin in 1959. - */ - -/* returns minimum mean square error */ -spx_word32_t _spx_lpc( -spx_coef_t *lpc, /* out: [0...p-1] LPC coefficients */ -const spx_word16_t *ac, /* in: [0...p] autocorrelation values */ -int p -) -{ - int i, j; - spx_word16_t r; - spx_word16_t error = ac[0]; - - if (ac[0] == 0) - { - for (i = 0; i < p; i++) - lpc[i] = 0; - return 0; - } - - for (i = 0; i < p; i++) { - - /* Sum up this iteration's reflection coefficient */ - spx_word32_t rr = NEG32(SHL32(EXTEND32(ac[i + 1]),13)); - for (j = 0; j < i; j++) - rr = SUB32(rr,MULT16_16(lpc[j],ac[i - j])); -#ifdef FIXED_POINT - r = DIV32_16(rr+PSHR32(error,1),ADD16(error,8)); -#else - r = rr/(error+.003*ac[0]); -#endif - /* Update LPC coefficients and total error */ - lpc[i] = r; - for (j = 0; j < i>>1; j++) - { - spx_word16_t tmp = lpc[j]; - lpc[j] = MAC16_16_P13(lpc[j],r,lpc[i-1-j]); - lpc[i-1-j] = MAC16_16_P13(lpc[i-1-j],r,tmp); - } - if (i & 1) - lpc[j] = MAC16_16_P13(lpc[j],lpc[j],r); - - error = SUB16(error,MULT16_16_Q13(r,MULT16_16_Q13(error,r))); - } - return error; -} - - -#ifdef FIXED_POINT - -/* Compute the autocorrelation - * ,--, - * ac(i) = > x(n) * x(n-i) for all n - * `--' - * for lags between 0 and lag-1, and x == 0 outside 0...n-1 - */ - -#ifndef OVERRIDE_SPEEX_AUTOCORR -void _spx_autocorr( -const spx_word16_t *x, /* in: [0...n-1] samples x */ -spx_word16_t *ac, /* out: [0...lag-1] ac values */ -int lag, -int n -) -{ - spx_word32_t d; - int i, j; - spx_word32_t ac0=1; - int shift, ac_shift; - - for (j=0;j<n;j++) - ac0 = ADD32(ac0,SHR32(MULT16_16(x[j],x[j]),8)); - ac0 = ADD32(ac0,n); - shift = 8; - while (shift && ac0<0x40000000) - { - shift--; - ac0 <<= 1; - } - ac_shift = 18; - while (ac_shift && ac0<0x40000000) - { - ac_shift--; - ac0 <<= 1; - } - - - for (i=0;i<lag;i++) - { - d=0; - for (j=i;j<n;j++) - { - d = ADD32(d,SHR32(MULT16_16(x[j],x[j-i]), shift)); - } - - ac[i] = SHR32(d, ac_shift); - } -} -#endif - - -#else - - - -/* Compute the autocorrelation - * ,--, - * ac(i) = > x(n) * x(n-i) for all n - * `--' - * for lags between 0 and lag-1, and x == 0 outside 0...n-1 - */ -void _spx_autocorr( -const spx_word16_t *x, /* in: [0...n-1] samples x */ -float *ac, /* out: [0...lag-1] ac values */ -int lag, -int n -) -{ - float d; - int i; - while (lag--) - { - for (i = lag, d = 0; i < n; i++) - d += x[i] * x[i-lag]; - ac[lag] = d; - } - ac[0] += 10; -} - -#endif - - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.h deleted file mode 100755 index 952ecdd..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file lpc.h - @brief Functions for LPC (Linear Prediction Coefficients) analysis -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef LPC_H -#define LPC_H - -#include "arch.h" - -void _spx_autocorr( - const spx_word16_t * x, /* in: [0...n-1] samples x */ - spx_word16_t *ac, /* out: [0...lag-1] ac values */ - int lag, int n); - -spx_word32_t /* returns minimum mean square error */ -_spx_lpc( - spx_coef_t * lpc, /* [0...p-1] LPC coefficients */ - const spx_word16_t * ac, /* in: [0...p] autocorrelation values */ - int p - ); - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc_bfin.h deleted file mode 100755 index 7310ffb..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lpc_bfin.h +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @file lpc_bfin.h - @author Jean-Marc Valin - @brief Functions for LPC (Linear Prediction Coefficients) analysis (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_SPEEX_AUTOCORR -void _spx_autocorr( -const spx_word16_t *x, /* in: [0...n-1] samples x */ -spx_word16_t *ac, /* out: [0...lag-1] ac values */ -int lag, -int n - ) -{ - spx_word32_t d; - const spx_word16_t *xs; - int i, j; - spx_word32_t ac0=1; - spx_word32_t ac32[11], *ac32top; - int shift, ac_shift; - ac32top = ac32+lag-1; - int lag_1, N_lag; - int nshift; - lag_1 = lag-1; - N_lag = n-lag_1; - for (j=0;j<n;j++) - ac0 = ADD32(ac0,SHR32(MULT16_16(x[j],x[j]),8)); - ac0 = ADD32(ac0,n); - shift = 8; - while (shift && ac0<0x40000000) - { - shift--; - ac0 <<= 1; - } - ac_shift = 18; - while (ac_shift && ac0<0x40000000) - { - ac_shift--; - ac0 <<= 1; - } - - xs = x+lag-1; - nshift = -shift; - __asm__ __volatile__ - ( - "P2 = %0;\n\t" - "I0 = P2;\n\t" /* x in I0 */ - "B0 = P2;\n\t" /* x in B0 */ - "R0 = %3;\n\t" /* len in R0 */ - "P3 = %3;\n\t" /* len in R0 */ - "P4 = %4;\n\t" /* nb_pitch in R0 */ - "R1 = R0 << 1;\n\t" /* number of bytes in x */ - "L0 = R1;\n\t" - "P0 = %1;\n\t" - "P1 = %2;\n\t" - "B1 = P1;\n\t" - "R4 = %5;\n\t" - "L1 = 0;\n\t" /*Disable looping on I1*/ - - "r0 = [I0++];\n\t" - "R2 = 0;R3=0;" - "LOOP pitch%= LC0 = P4 >> 1;\n\t" - "LOOP_BEGIN pitch%=;\n\t" - "I1 = P0;\n\t" - "A1 = A0 = 0;\n\t" - "R1 = [I1++];\n\t" - "LOOP inner_prod%= LC1 = P3 >> 1;\n\t" - "LOOP_BEGIN inner_prod%=;\n\t" - "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t" - "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R1.H = W[I1++] || R0 = [I0++];\n\t" - "LOOP_END inner_prod%=;\n\t" - "A0 = ASHIFT A0 by R4.L;\n\t" - "A1 = ASHIFT A1 by R4.L;\n\t" - - "R2 = A0, R3 = A1;\n\t" - "[P1--] = R2;\n\t" - "[P1--] = R3;\n\t" - "P0 += 4;\n\t" - "LOOP_END pitch%=;\n\t" - : : "m" (xs), "m" (x), "m" (ac32top), "m" (N_lag), "m" (lag_1), "m" (nshift) - : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "R4", "I0", "I1", "L0", "L1", "B0", "B1", "memory" - ); - d=0; - for (j=0;j<n;j++) - { - d = ADD32(d,SHR32(MULT16_16(x[j],x[j]), shift)); - } - ac32[0] = d; - - for (i=0;i<lag;i++) - { - d=0; - for (j=i;j<lag_1;j++) - { - d = ADD32(d,SHR32(MULT16_16(x[j],x[j-i]), shift)); - } - if (i) - ac32[i] += d; - ac[i] = SHR32(ac32[i], ac_shift); - } -} - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.c deleted file mode 100755 index a73d883..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.c +++ /dev/null @@ -1,656 +0,0 @@ -/*---------------------------------------------------------------------------*\ -Original copyright - FILE........: lsp.c - AUTHOR......: David Rowe - DATE CREATED: 24/2/93 - -Heavily modified by Jean-Marc Valin (c) 2002-2006 (fixed-point, - optimizations, additional functions, ...) - - This file contains functions for converting Linear Prediction - Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the - LSP coefficients are not in radians format but in the x domain of the - unit circle. - - Speex License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*---------------------------------------------------------------------------*\ - - Introduction to Line Spectrum Pairs (LSPs) - ------------------------------------------ - - LSPs are used to encode the LPC filter coefficients {ak} for - transmission over the channel. LSPs have several properties (like - less sensitivity to quantisation noise) that make them superior to - direct quantisation of {ak}. - - A(z) is a polynomial of order lpcrdr with {ak} as the coefficients. - - A(z) is transformed to P(z) and Q(z) (using a substitution and some - algebra), to obtain something like: - - A(z) = 0.5[P(z)(z+z^-1) + Q(z)(z-z^-1)] (1) - - As you can imagine A(z) has complex zeros all over the z-plane. P(z) - and Q(z) have the very neat property of only having zeros _on_ the - unit circle. So to find them we take a test point z=exp(jw) and - evaluate P (exp(jw)) and Q(exp(jw)) using a grid of points between 0 - and pi. - - The zeros (roots) of P(z) also happen to alternate, which is why we - swap coefficients as we find roots. So the process of finding the - LSP frequencies is basically finding the roots of 5th order - polynomials. - - The root so P(z) and Q(z) occur in symmetrical pairs at +/-w, hence - the name Line Spectrum Pairs (LSPs). - - To convert back to ak we just evaluate (1), "clocking" an impulse - thru it lpcrdr times gives us the impulse response of A(z) which is - {ak}. - -\*---------------------------------------------------------------------------*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "lsp.h" -#include "stack_alloc.h" -#include "math_approx.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#ifdef FIXED_POINT - -#define FREQ_SCALE 16384 - -/*#define ANGLE2X(a) (32768*cos(((a)/8192.)))*/ -#define ANGLE2X(a) (SHL16(spx_cos(a),2)) - -/*#define X2ANGLE(x) (acos(.00006103515625*(x))*LSP_SCALING)*/ -#define X2ANGLE(x) (spx_acos(x)) - -#ifdef BFIN_ASM -#include "lsp_bfin.h" -#endif - -#else - -/*#define C1 0.99940307 -#define C2 -0.49558072 -#define C3 0.03679168*/ - -#define FREQ_SCALE 1. -#define ANGLE2X(a) (spx_cos(a)) -#define X2ANGLE(x) (acos(x)) - -#endif - - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: cheb_poly_eva() - - AUTHOR......: David Rowe - DATE CREATED: 24/2/93 - - This function evaluates a series of Chebyshev polynomials - -\*---------------------------------------------------------------------------*/ - -#ifdef FIXED_POINT - -#ifndef OVERRIDE_CHEB_POLY_EVA -static inline spx_word32_t cheb_poly_eva( - spx_word16_t *coef, /* P or Q coefs in Q13 format */ - spx_word16_t x, /* cos of freq (-1.0 to 1.0) in Q14 format */ - int m, /* LPC order/2 */ - char *stack -) -{ - int i; - spx_word16_t b0, b1; - spx_word32_t sum; - - /*Prevents overflows*/ - if (x>16383) - x = 16383; - if (x<-16383) - x = -16383; - - /* Initialise values */ - b1=16384; - b0=x; - - /* Evaluate Chebyshev series formulation usin g iterative approach */ - sum = ADD32(EXTEND32(coef[m]), EXTEND32(MULT16_16_P14(coef[m-1],x))); - for(i=2;i<=m;i++) - { - spx_word16_t tmp=b0; - b0 = SUB16(MULT16_16_Q13(x,b0), b1); - b1 = tmp; - sum = ADD32(sum, EXTEND32(MULT16_16_P14(coef[m-i],b0))); - } - - return sum; -} -#endif - -#else - -static float cheb_poly_eva(spx_word32_t *coef, spx_word16_t x, int m, char *stack) -{ - int k; - float b0, b1, tmp; - - /* Initial conditions */ - b0=0; /* b_(m+1) */ - b1=0; /* b_(m+2) */ - - x*=2; - - /* Calculate the b_(k) */ - for(k=m;k>0;k--) - { - tmp=b0; /* tmp holds the previous value of b0 */ - b0=x*b0-b1+coef[m-k]; /* b0 holds its new value based on b0 and b1 */ - b1=tmp; /* b1 holds the previous value of b0 */ - } - - return(-b1+.5*x*b0+coef[m]); -} -#endif - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: lpc_to_lsp() - - AUTHOR......: David Rowe - DATE CREATED: 24/2/93 - - This function converts LPC coefficients to LSP - coefficients. - -\*---------------------------------------------------------------------------*/ - -#ifdef FIXED_POINT -#define SIGN_CHANGE(a,b) (((a)&0x70000000)^((b)&0x70000000)||(b==0)) -#else -#define SIGN_CHANGE(a,b) (((a)*(b))<0.0) -#endif - - -int lpc_to_lsp (spx_coef_t *a,int lpcrdr,spx_lsp_t *freq,int nb,spx_word16_t delta, char *stack) -/* float *a lpc coefficients */ -/* int lpcrdr order of LPC coefficients (10) */ -/* float *freq LSP frequencies in the x domain */ -/* int nb number of sub-intervals (4) */ -/* float delta grid spacing interval (0.02) */ - - -{ - spx_word16_t temp_xr,xl,xr,xm=0; - spx_word32_t psuml,psumr,psumm,temp_psumr/*,temp_qsumr*/; - int i,j,m,flag,k; - VARDECL(spx_word32_t *Q); /* ptrs for memory allocation */ - VARDECL(spx_word32_t *P); - VARDECL(spx_word16_t *Q16); /* ptrs for memory allocation */ - VARDECL(spx_word16_t *P16); - spx_word32_t *px; /* ptrs of respective P'(z) & Q'(z) */ - spx_word32_t *qx; - spx_word32_t *p; - spx_word32_t *q; - spx_word16_t *pt; /* ptr used for cheb_poly_eval() - whether P' or Q' */ - int roots=0; /* DR 8/2/94: number of roots found */ - flag = 1; /* program is searching for a root when, - 1 else has found one */ - m = lpcrdr/2; /* order of P'(z) & Q'(z) polynomials */ - - /* Allocate memory space for polynomials */ - ALLOC(Q, (m+1), spx_word32_t); - ALLOC(P, (m+1), spx_word32_t); - - /* determine P'(z)'s and Q'(z)'s coefficients where - P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */ - - px = P; /* initialise ptrs */ - qx = Q; - p = px; - q = qx; - -#ifdef FIXED_POINT - *px++ = LPC_SCALING; - *qx++ = LPC_SCALING; - for(i=0;i<m;i++){ - *px++ = SUB32(ADD32(EXTEND32(a[i]),EXTEND32(a[lpcrdr-i-1])), *p++); - *qx++ = ADD32(SUB32(EXTEND32(a[i]),EXTEND32(a[lpcrdr-i-1])), *q++); - } - px = P; - qx = Q; - for(i=0;i<m;i++) - { - /*if (fabs(*px)>=32768) - speex_warning_int("px", *px); - if (fabs(*qx)>=32768) - speex_warning_int("qx", *qx);*/ - *px = PSHR32(*px,2); - *qx = PSHR32(*qx,2); - px++; - qx++; - } - /* The reason for this lies in the way cheb_poly_eva() is implemented for fixed-point */ - P[m] = PSHR32(P[m],3); - Q[m] = PSHR32(Q[m],3); -#else - *px++ = LPC_SCALING; - *qx++ = LPC_SCALING; - for(i=0;i<m;i++){ - *px++ = (a[i]+a[lpcrdr-1-i]) - *p++; - *qx++ = (a[i]-a[lpcrdr-1-i]) + *q++; - } - px = P; - qx = Q; - for(i=0;i<m;i++){ - *px = 2**px; - *qx = 2**qx; - px++; - qx++; - } -#endif - - px = P; /* re-initialise ptrs */ - qx = Q; - - /* now that we have computed P and Q convert to 16 bits to - speed up cheb_poly_eval */ - - ALLOC(P16, m+1, spx_word16_t); - ALLOC(Q16, m+1, spx_word16_t); - - for (i=0;i<m+1;i++) - { - P16[i] = P[i]; - Q16[i] = Q[i]; - } - - /* Search for a zero in P'(z) polynomial first and then alternate to Q'(z). - Keep alternating between the two polynomials as each zero is found */ - - xr = 0; /* initialise xr to zero */ - xl = FREQ_SCALE; /* start at point xl = 1 */ - - for(j=0;j<lpcrdr;j++){ - if(j&1) /* determines whether P' or Q' is eval. */ - pt = Q16; - else - pt = P16; - - psuml = cheb_poly_eva(pt,xl,m,stack); /* evals poly. at xl */ - flag = 1; - while(flag && (xr >= -FREQ_SCALE)){ - spx_word16_t dd; - /* Modified by JMV to provide smaller steps around x=+-1 */ -#ifdef FIXED_POINT - dd = MULT16_16_Q15(delta,SUB16(FREQ_SCALE, MULT16_16_Q14(MULT16_16_Q14(xl,xl),14000))); - if (psuml<512 && psuml>-512) - dd = PSHR16(dd,1); -#else - dd=delta*(1-.9*xl*xl); - if (fabs(psuml)<.2) - dd *= .5; -#endif - xr = SUB16(xl, dd); /* interval spacing */ - psumr = cheb_poly_eva(pt,xr,m,stack);/* poly(xl-delta_x) */ - temp_psumr = psumr; - temp_xr = xr; - - /* if no sign change increment xr and re-evaluate poly(xr). Repeat til - sign change. - if a sign change has occurred the interval is bisected and then - checked again for a sign change which determines in which - interval the zero lies in. - If there is no sign change between poly(xm) and poly(xl) set interval - between xm and xr else set interval between xl and xr and repeat till - root is located within the specified limits */ - - if(SIGN_CHANGE(psumr,psuml)) - { - roots++; - - psumm=psuml; - for(k=0;k<=nb;k++){ -#ifdef FIXED_POINT - xm = ADD16(PSHR16(xl,1),PSHR16(xr,1)); /* bisect the interval */ -#else - xm = .5*(xl+xr); /* bisect the interval */ -#endif - psumm=cheb_poly_eva(pt,xm,m,stack); - /*if(psumm*psuml>0.)*/ - if(!SIGN_CHANGE(psumm,psuml)) - { - psuml=psumm; - xl=xm; - } else { - psumr=psumm; - xr=xm; - } - } - - /* once zero is found, reset initial interval to xr */ - freq[j] = X2ANGLE(xm); - xl = xm; - flag = 0; /* reset flag for next search */ - } - else{ - psuml=temp_psumr; - xl=temp_xr; - } - } - } - return(roots); -} - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: lsp_to_lpc() - - AUTHOR......: David Rowe - DATE CREATED: 24/2/93 - - Converts LSP coefficients to LPC coefficients. - -\*---------------------------------------------------------------------------*/ - -#ifdef FIXED_POINT - -void lsp_to_lpc(spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack) -/* float *freq array of LSP frequencies in the x domain */ -/* float *ak array of LPC coefficients */ -/* int lpcrdr order of LPC coefficients */ -{ - int i,j; - spx_word32_t xout1,xout2,xin; - spx_word32_t mult, a; - VARDECL(spx_word16_t *freqn); - VARDECL(spx_word32_t **xp); - VARDECL(spx_word32_t *xpmem); - VARDECL(spx_word32_t **xq); - VARDECL(spx_word32_t *xqmem); - int m = lpcrdr>>1; - - /* - - Reconstruct P(z) and Q(z) by cascading second order polynomials - in form 1 - 2cos(w)z(-1) + z(-2), where w is the LSP frequency. - In the time domain this is: - - y(n) = x(n) - 2cos(w)x(n-1) + x(n-2) - - This is what the ALLOCS below are trying to do: - - int xp[m+1][lpcrdr+1+2]; // P matrix in QIMP - int xq[m+1][lpcrdr+1+2]; // Q matrix in QIMP - - These matrices store the output of each stage on each row. The - final (m-th) row has the output of the final (m-th) cascaded - 2nd order filter. The first row is the impulse input to the - system (not written as it is known). - - The version below takes advantage of the fact that a lot of the - outputs are zero or known, for example if we put an inpulse - into the first section the "clock" it 10 times only the first 3 - outputs samples are non-zero (it's an FIR filter). - */ - - ALLOC(xp, (m+1), spx_word32_t*); - ALLOC(xpmem, (m+1)*(lpcrdr+1+2), spx_word32_t); - - ALLOC(xq, (m+1), spx_word32_t*); - ALLOC(xqmem, (m+1)*(lpcrdr+1+2), spx_word32_t); - - for(i=0; i<=m; i++) { - xp[i] = xpmem + i*(lpcrdr+1+2); - xq[i] = xqmem + i*(lpcrdr+1+2); - } - - /* work out 2cos terms in Q14 */ - - ALLOC(freqn, lpcrdr, spx_word16_t); - for (i=0;i<lpcrdr;i++) - freqn[i] = ANGLE2X(freq[i]); - - #define QIMP 21 /* scaling for impulse */ - - xin = SHL32(EXTEND32(1), (QIMP-1)); /* 0.5 in QIMP format */ - - /* first col and last non-zero values of each row are trivial */ - - for(i=0;i<=m;i++) { - xp[i][1] = 0; - xp[i][2] = xin; - xp[i][2+2*i] = xin; - xq[i][1] = 0; - xq[i][2] = xin; - xq[i][2+2*i] = xin; - } - - /* 2nd row (first output row) is trivial */ - - xp[1][3] = -MULT16_32_Q14(freqn[0],xp[0][2]); - xq[1][3] = -MULT16_32_Q14(freqn[1],xq[0][2]); - - xout1 = xout2 = 0; - - /* now generate remaining rows */ - - for(i=1;i<m;i++) { - - for(j=1;j<2*(i+1)-1;j++) { - mult = MULT16_32_Q14(freqn[2*i],xp[i][j+1]); - xp[i+1][j+2] = ADD32(SUB32(xp[i][j+2], mult), xp[i][j]); - mult = MULT16_32_Q14(freqn[2*i+1],xq[i][j+1]); - xq[i+1][j+2] = ADD32(SUB32(xq[i][j+2], mult), xq[i][j]); - } - - /* for last col xp[i][j+2] = xq[i][j+2] = 0 */ - - mult = MULT16_32_Q14(freqn[2*i],xp[i][j+1]); - xp[i+1][j+2] = SUB32(xp[i][j], mult); - mult = MULT16_32_Q14(freqn[2*i+1],xq[i][j+1]); - xq[i+1][j+2] = SUB32(xq[i][j], mult); - } - - /* process last row to extra a{k} */ - - for(j=1;j<=lpcrdr;j++) { - int shift = QIMP-13; - - /* final filter sections */ - a = PSHR32(xp[m][j+2] + xout1 + xq[m][j+2] - xout2, shift); - xout1 = xp[m][j+2]; - xout2 = xq[m][j+2]; - - /* hard limit ak's to +/- 32767 */ - - if (a < -32767) a = -32767; - if (a > 32767) a = 32767; - ak[j-1] = (short)a; - - } - -} - -#else - -void lsp_to_lpc(spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack) -/* float *freq array of LSP frequencies in the x domain */ -/* float *ak array of LPC coefficients */ -/* int lpcrdr order of LPC coefficients */ - - -{ - int i,j; - float xout1,xout2,xin1,xin2; - VARDECL(float *Wp); - float *pw,*n1,*n2,*n3,*n4=NULL; - VARDECL(float *x_freq); - int m = lpcrdr>>1; - - ALLOC(Wp, 4*m+2, float); - pw = Wp; - - /* initialise contents of array */ - - for(i=0;i<=4*m+1;i++){ /* set contents of buffer to 0 */ - *pw++ = 0.0; - } - - /* Set pointers up */ - - pw = Wp; - xin1 = 1.0; - xin2 = 1.0; - - ALLOC(x_freq, lpcrdr, float); - for (i=0;i<lpcrdr;i++) - x_freq[i] = ANGLE2X(freq[i]); - - /* reconstruct P(z) and Q(z) by cascading second order - polynomials in form 1 - 2xz(-1) +z(-2), where x is the - LSP coefficient */ - - for(j=0;j<=lpcrdr;j++){ - int i2=0; - for(i=0;i<m;i++,i2+=2){ - n1 = pw+(i*4); - n2 = n1 + 1; - n3 = n2 + 1; - n4 = n3 + 1; - xout1 = xin1 - 2.f*x_freq[i2] * *n1 + *n2; - xout2 = xin2 - 2.f*x_freq[i2+1] * *n3 + *n4; - *n2 = *n1; - *n4 = *n3; - *n1 = xin1; - *n3 = xin2; - xin1 = xout1; - xin2 = xout2; - } - xout1 = xin1 + *(n4+1); - xout2 = xin2 - *(n4+2); - if (j>0) - ak[j-1] = (xout1 + xout2)*0.5f; - *(n4+1) = xin1; - *(n4+2) = xin2; - - xin1 = 0.0; - xin2 = 0.0; - } - -} -#endif - - -#ifdef FIXED_POINT - -/*Makes sure the LSPs are stable*/ -void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin) -{ - int i; - spx_word16_t m = margin; - spx_word16_t m2 = 25736-margin; - - if (lsp[0]<m) - lsp[0]=m; - if (lsp[len-1]>m2) - lsp[len-1]=m2; - for (i=1;i<len-1;i++) - { - if (lsp[i]<lsp[i-1]+m) - lsp[i]=lsp[i-1]+m; - - if (lsp[i]>lsp[i+1]-m) - lsp[i]= SHR16(lsp[i],1) + SHR16(lsp[i+1]-m,1); - } -} - - -void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes) -{ - int i; - spx_word16_t tmp = DIV32_16(SHL32(EXTEND32(1 + subframe),14),nb_subframes); - spx_word16_t tmp2 = 16384-tmp; - for (i=0;i<len;i++) - { - interp_lsp[i] = MULT16_16_P14(tmp2,old_lsp[i]) + MULT16_16_P14(tmp,new_lsp[i]); - } -} - -#else - -/*Makes sure the LSPs are stable*/ -void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin) -{ - int i; - if (lsp[0]<LSP_SCALING*margin) - lsp[0]=LSP_SCALING*margin; - if (lsp[len-1]>LSP_SCALING*(M_PI-margin)) - lsp[len-1]=LSP_SCALING*(M_PI-margin); - for (i=1;i<len-1;i++) - { - if (lsp[i]<lsp[i-1]+LSP_SCALING*margin) - lsp[i]=lsp[i-1]+LSP_SCALING*margin; - - if (lsp[i]>lsp[i+1]-LSP_SCALING*margin) - lsp[i]= .5f* (lsp[i] + lsp[i+1]-LSP_SCALING*margin); - } -} - - -void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes) -{ - int i; - float tmp = (1.0f + subframe)/nb_subframes; - for (i=0;i<len;i++) - { - interp_lsp[i] = (1-tmp)*old_lsp[i] + tmp*new_lsp[i]; - } -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.h deleted file mode 100755 index 648652f..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp.h +++ /dev/null @@ -1,64 +0,0 @@ -/*---------------------------------------------------------------------------*\ -Original Copyright - FILE........: AK2LSPD.H - TYPE........: Turbo C header file - COMPANY.....: Voicetronix - AUTHOR......: James Whitehall - DATE CREATED: 21/11/95 - -Modified by Jean-Marc Valin - - This file contains functions for converting Linear Prediction - Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the - LSP coefficients are not in radians format but in the x domain of the - unit circle. - -\*---------------------------------------------------------------------------*/ -/** - @file lsp.h - @brief Line Spectral Pair (LSP) functions. -*/ -/* Speex License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __AK2LSPD__ -#define __AK2LSPD__ - -#include "arch.h" - -int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack); -void lsp_to_lpc(spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack); - -/*Added by JMV*/ -void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin); - -void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes); - -#endif /* __AK2LSPD__ */ diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_bfin.h deleted file mode 100755 index 20e5052..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_bfin.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2006 David Rowe */ -/** - @file lsp_bfin.h - @author David Rowe - @brief LSP routines optimised for the Blackfin -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_CHEB_POLY_EVA -#ifdef OVERRIDE_CHEB_POLY_EVA -static inline spx_word32_t cheb_poly_eva( - spx_word16_t *coef, /* P or Q coefs in Q13 format */ - spx_word16_t x, /* cos of freq (-1.0 to 1.0) in Q14 format */ - int m, /* LPC order/2 */ - char *stack -) -{ - spx_word32_t sum; - - __asm__ __volatile__ - ( - "P0 = %2;\n\t" /* P0: coef[m], coef[m-1],..., coef[0] */ - "R4 = 8192;\n\t" /* R4: rounding constant */ - "R2 = %1;\n\t" /* R2: x */ - - "R5 = -16383;\n\t" - "R2 = MAX(R2,R5);\n\t" - "R5 = 16383;\n\t" - "R2 = MIN(R2,R5);\n\t" - - "R3 = W[P0--] (X);\n\t" /* R3: sum */ - "R5 = W[P0--] (X);\n\t" - "R5 = R5.L * R2.L (IS);\n\t" - "R5 = R5 + R4;\n\t" - "R5 >>>= 14;\n\t" - "R3 = R3 + R5;\n\t" - - "R0 = R2;\n\t" /* R0: b0 */ - "R1 = 16384;\n\t" /* R1: b1 */ - "LOOP cpe%= LC0 = %3;\n\t" - "LOOP_BEGIN cpe%=;\n\t" - "P1 = R0;\n\t" - "R0 = R2.L * R0.L (IS) || R5 = W[P0--] (X);\n\t" - "R0 >>>= 13;\n\t" - "R0 = R0 - R1;\n\t" - "R1 = P1;\n\t" - "R5 = R5.L * R0.L (IS);\n\t" - "R5 = R5 + R4;\n\t" - "R5 >>>= 14;\n\t" - "R3 = R3 + R5;\n\t" - "LOOP_END cpe%=;\n\t" - "%0 = R3;\n\t" - : "=&d" (sum) - : "a" (x), "a" (&coef[m]), "a" (m-1) - : "R0", "R1", "R3", "R2", "R4", "R5", "P0", "P1" - ); - return sum; -} -#endif - - - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_tables_nb.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_tables_nb.c deleted file mode 100755 index 16f2e1b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/lsp_tables_nb.c +++ /dev/null @@ -1,360 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: lsp_tables_nb.c - Codebooks for LSPs in narrowband CELP mode - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -const signed char cdbk_nb[640]={ -30,19,38,34,40,32,46,43,58,43, -5,-18,-25,-40,-33,-55,-52,20,34,28, --20,-63,-97,-92,61,53,47,49,53,75, --14,-53,-77,-79,0,-3,-5,19,22,26, --9,-53,-55,66,90,72,85,68,74,52, --4,-41,-58,-31,-18,-31,27,32,30,18, -24,3,8,5,-12,-3,26,28,74,63, --2,-39,-67,-77,-106,-74,59,59,73,65, -44,40,71,72,82,83,98,88,89,60, --6,-31,-47,-48,-13,-39,-9,7,2,79, --1,-39,-60,-17,87,81,65,50,45,19, --21,-67,-91,-87,-41,-50,7,18,39,74, -10,-31,-28,39,24,13,23,5,56,45, -29,10,-5,-13,-11,-35,-18,-8,-10,-8, --25,-71,-77,-21,2,16,50,63,87,87, -5,-32,-40,-51,-68,0,12,6,54,34, -5,-12,32,52,68,64,69,59,65,45, -14,-16,-31,-40,-65,-67,41,49,47,37, --11,-52,-75,-84,-4,57,48,42,42,33, --11,-51,-68,-6,13,0,8,-8,26,32, --23,-53,0,36,56,76,97,105,111,97, --1,-28,-39,-40,-43,-54,-44,-40,-18,35, -16,-20,-19,-28,-42,29,47,38,74,45, -3,-29,-48,-62,-80,-104,-33,56,59,59, -10,17,46,72,84,101,117,123,123,106, --7,-33,-49,-51,-70,-67,-27,-31,70,67, --16,-62,-85,-20,82,71,86,80,85,74, --19,-58,-75,-45,-29,-33,-18,-25,45,57, --12,-42,-5,12,28,36,52,64,81,82, -13,-9,-27,-28,22,3,2,22,26,6, --6,-44,-51,2,15,10,48,43,49,34, --19,-62,-84,-89,-102,-24,8,17,61,68, -39,24,23,19,16,-5,12,15,27,15, --8,-44,-49,-60,-18,-32,-28,52,54,62, --8,-48,-77,-70,66,101,83,63,61,37, --12,-50,-75,-64,33,17,13,25,15,77, -1,-42,-29,72,64,46,49,31,61,44, --8,-47,-54,-46,-30,19,20,-1,-16,0, -16,-12,-18,-9,-26,-27,-10,-22,53,45, --10,-47,-75,-82,-105,-109,8,25,49,77, -50,65,114,117,124,118,115,96,90,61, --9,-45,-63,-60,-75,-57,8,11,20,29, -0,-35,-49,-43,40,47,35,40,55,38, --24,-76,-103,-112,-27,3,23,34,52,75, -8,-29,-43,12,63,38,35,29,24,8, -25,11,1,-15,-18,-43,-7,37,40,21, --20,-56,-19,-19,-4,-2,11,29,51,63, --2,-44,-62,-75,-89,30,57,51,74,51, -50,46,68,64,65,52,63,55,65,43, -18,-9,-26,-35,-55,-69,3,6,8,17, --15,-61,-86,-97,1,86,93,74,78,67, --1,-38,-66,-48,48,39,29,25,17,-1, -13,13,29,39,50,51,69,82,97,98, --2,-36,-46,-27,-16,-30,-13,-4,-7,-4, -25,-5,-11,-6,-25,-21,33,12,31,29, --8,-38,-52,-63,-68,-89,-33,-1,10,74, --2,-15,59,91,105,105,101,87,84,62, --7,-33,-50,-35,-54,-47,25,17,82,81, --13,-56,-83,21,58,31,42,25,72,65, --24,-66,-91,-56,9,-2,21,10,69,75, -2,-24,11,22,25,28,38,34,48,33, -7,-29,-26,17,15,-1,14,0,-2,0, --6,-41,-67,6,-2,-9,19,2,85,74, --22,-67,-84,-71,-50,3,11,-9,2,62}; - -const signed char cdbk_nb_low1[320]={ --34,-52,-15,45,2, -23,21,52,24,-33, --9,-1,9,-44,-41, --13,-17,44,22,-17, --6,-4,-1,22,38, -26,16,2,50,27, --35,-34,-9,-41,6, -0,-16,-34,51,8, --14,-31,-49,15,-33, -45,49,33,-11,-37, --62,-54,45,11,-5, --72,11,-1,-12,-11, -24,27,-11,-43,46, -43,33,-12,-9,-1, -1,-4,-23,-57,-71, -11,8,16,17,-8, --20,-31,-41,53,48, --16,3,65,-24,-8, --23,-32,-37,-32,-49, --10,-17,6,38,5, --9,-17,-46,8,52, -3,6,45,40,39, --7,-6,-34,-74,31, -8,1,-16,43,68, --11,-19,-31,4,6, -0,-6,-17,-16,-38, --16,-30,2,9,-39, --16,-1,43,-10,48, -3,3,-16,-31,-3, -62,68,43,13,3, --10,8,20,-56,12, -12,-2,-18,22,-15, --40,-36,1,7,41, -0,1,46,-6,-62, --4,-12,-2,-11,-83, --13,-2,91,33,-10, -0,4,-11,-16,79, -32,37,14,9,51, --21,-28,-56,-34,0, -21,9,-26,11,28, --42,-54,-23,-2,-15, -31,30,8,-39,-66, --39,-36,31,-28,-40, --46,35,40,22,24, -33,48,23,-34,14, -40,32,17,27,-3, -25,26,-13,-61,-17, -11,4,31,60,-6, --26,-41,-64,13,16, --26,54,31,-11,-23, --9,-11,-34,-71,-21, --34,-35,55,50,29, --22,-27,-50,-38,57, -33,42,57,48,26, -11,0,-49,-31,26, --4,-14,5,78,37, -17,0,-49,-12,-23, -26,14,2,2,-43, --17,-12,10,-8,-4, -8,18,12,-6,20, --12,-6,-13,-25,34, -15,40,49,7,8, -13,20,20,-19,-22, --2,-8,2,51,-51}; - -const signed char cdbk_nb_low2[320]={ --6,53,-21,-24,4, -26,17,-4,-37,25, -17,-36,-13,31,3, --6,27,15,-10,31, -28,26,-10,-10,-40, -16,-7,15,13,41, --9,0,-4,50,-6, --7,14,38,22,0, --48,2,1,-13,-19, -32,-3,-60,11,-17, --1,-24,-34,-1,35, --5,-27,28,44,13, -25,15,42,-11,15, -51,35,-36,20,8, --4,-12,-29,19,-47, -49,-15,-4,16,-29, --39,14,-30,4,25, --9,-5,-51,-14,-3, --40,-32,38,5,-9, --8,-4,-1,-22,71, --3,14,26,-18,-22, -24,-41,-25,-24,6, -23,19,-10,39,-26, --27,65,45,2,-7, --26,-8,22,-12,16, -15,16,-35,-5,33, --21,-8,0,23,33, -34,6,21,36,6, --7,-22,8,-37,-14, -31,38,11,-4,-3, --39,-32,-8,32,-23, --6,-12,16,20,-28, --4,23,13,-52,-1, -22,6,-33,-40,-6, -4,-62,13,5,-26, -35,39,11,2,57, --11,9,-20,-28,-33, -52,-5,-6,-2,22, --14,-16,-48,35,1, --58,20,13,33,-1, --74,56,-18,-22,-31, -12,6,-14,4,-2, --9,-47,10,-3,29, --17,-5,61,14,47, --12,2,72,-39,-17, -92,64,-53,-51,-15, --30,-38,-41,-29,-28, -27,9,36,9,-35, --42,81,-21,20,25, --16,-5,-17,-35,21, -15,-28,48,2,-2, -9,-19,29,-40,30, --18,-18,18,-16,-57, -15,-20,-12,-15,-37, --15,33,-39,21,-22, --13,35,11,13,-38, --63,29,23,-27,32, -18,3,-26,42,33, --64,-66,-17,16,56, -2,36,3,31,21, --41,-39,8,-57,14, -37,-2,19,-36,-19, --23,-29,-16,1,-3, --8,-10,31,64,-65}; - -const signed char cdbk_nb_high1[320]={ --26,-8,29,21,4, -19,-39,33,-7,-36, -56,54,48,40,29, --4,-24,-42,-66,-43, --60,19,-2,37,41, --10,-37,-60,-64,18, --22,77,73,40,25, -4,19,-19,-66,-2, -11,5,21,14,26, --25,-86,-4,18,1, -26,-37,10,37,-1, -24,-12,-59,-11,20, --6,34,-16,-16,42, -19,-28,-51,53,32, -4,10,62,21,-12, --34,27,4,-48,-48, --50,-49,31,-7,-21, --42,-25,-4,-43,-22, -59,2,27,12,-9, --6,-16,-8,-32,-58, --16,-29,-5,41,23, --30,-33,-46,-13,-10, --38,52,52,1,-17, --9,10,26,-25,-6, -33,-20,53,55,25, --32,-5,-42,23,21, -66,5,-28,20,9, -75,29,-7,-42,-39, -15,3,-23,21,6, -11,1,-29,14,63, -10,54,26,-24,-51, --49,7,-23,-51,15, --66,1,60,25,10, -0,-30,-4,-15,17, -19,59,40,4,-5, -33,6,-22,-58,-70, --5,23,-6,60,44, --29,-16,-47,-29,52, --19,50,28,16,35, -31,36,0,-21,6, -21,27,22,42,7, --66,-40,-8,7,19, -46,0,-4,60,36, -45,-7,-29,-6,-32, --39,2,6,-9,33, -20,-51,-34,18,-6, -19,6,11,5,-19, --29,-2,42,-11,-45, --21,-55,57,37,2, --14,-67,-16,-27,-38, -69,48,19,2,-17, -20,-20,-16,-34,-17, --25,-61,10,73,45, -16,-40,-64,-17,-29, --22,56,17,-39,8, --11,8,-25,-18,-13, --19,8,54,57,36, --17,-26,-4,6,-21, -40,42,-4,20,31, -53,10,-34,-53,31, --17,35,0,15,-6, --20,-63,-73,22,25, -29,17,8,-29,-39, --69,18,15,-15,-5}; - -const signed char cdbk_nb_high2[320]={ -11,47,16,-9,-46, --32,26,-64,34,-5, -38,-7,47,20,2, --73,-99,-3,-45,20, -70,-52,15,-6,-7, --82,31,21,47,51, -39,-3,9,0,-41, --7,-15,-54,2,0, -27,-31,9,-45,-22, --38,-24,-24,8,-33, -23,5,50,-36,-17, --18,-51,-2,13,19, -43,12,-15,-12,61, -38,38,7,13,0, -6,-1,3,62,9, -27,22,-33,38,-35, --9,30,-43,-9,-32, --1,4,-4,1,-5, --11,-8,38,31,11, --10,-42,-21,-37,1, -43,15,-13,-35,-19, --18,15,23,-26,59, -1,-21,53,8,-41, --50,-14,-28,4,21, -25,-28,-40,5,-40, --41,4,51,-33,-8, --8,1,17,-60,12, -25,-41,17,34,43, -19,45,7,-37,24, --15,56,-2,35,-10, -48,4,-47,-2,5, --5,-54,5,-3,-33, --10,30,-2,-44,-24, --38,9,-9,42,4, -6,-56,44,-16,9, --40,-26,18,-20,10, -28,-41,-21,-4,13, --18,32,-30,-3,37, -15,22,28,50,-40, -3,-29,-64,7,51, --19,-11,17,-27,-40, --64,24,-12,-7,-27, -3,37,48,-1,2, --9,-38,-34,46,1, -27,-6,19,-13,26, -10,34,20,25,40, -50,-6,-7,30,9, --24,0,-23,71,-61, -22,58,-34,-4,2, --49,-33,25,30,-8, --6,-16,77,2,38, --8,-35,-6,-30,56, -78,31,33,-20,13, --39,20,22,4,21, --8,4,-6,10,-83, --41,9,-25,-43,15, --7,-12,-34,-39,-37, --33,19,30,16,-33, -42,-25,25,-68,44, --15,-11,-4,23,50, -14,4,-39,-43,20, --30,60,9,-20,7, -16,19,-33,37,29, -16,-35,7,38,-27}; diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.c deleted file mode 100755 index a8c051c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.c +++ /dev/null @@ -1,839 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: ltp.c - Long-Term Prediction functions - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "ltp.h" -#include "stack_alloc.h" -#include "filters.h" -#include "speex/speex_bits.h" -#include "math_approx.h" -#include "os_support.h" - -#ifndef NULL -#define NULL 0 -#endif - - -#ifdef _USE_SSE -#include "ltp_sse.h" -#elif defined (ARM4_ASM) || defined(ARM5E_ASM) -#include "ltp_arm4.h" -#elif defined (BFIN_ASM) -#include "ltp_bfin.h" -#endif - -#ifndef OVERRIDE_INNER_PROD -spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) -{ - spx_word32_t sum=0; - len >>= 2; - while(len--) - { - spx_word32_t part=0; - part = MAC16_16(part,*x++,*y++); - part = MAC16_16(part,*x++,*y++); - part = MAC16_16(part,*x++,*y++); - part = MAC16_16(part,*x++,*y++); - /* HINT: If you had a 40-bit accumulator, you could shift only at the end */ - sum = ADD32(sum,SHR32(part,6)); - } - return sum; -} -#endif - -#ifndef OVERRIDE_PITCH_XCORR -#if 0 /* HINT: Enable this for machines with enough registers (i.e. not x86) */ -void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) -{ - int i,j; - for (i=0;i<nb_pitch;i+=4) - { - /* Compute correlation*/ - /*corr[nb_pitch-1-i]=inner_prod(x, _y+i, len);*/ - spx_word32_t sum1=0; - spx_word32_t sum2=0; - spx_word32_t sum3=0; - spx_word32_t sum4=0; - const spx_word16_t *y = _y+i; - const spx_word16_t *x = _x; - spx_word16_t y0, y1, y2, y3; - /*y0=y[0];y1=y[1];y2=y[2];y3=y[3];*/ - y0=*y++; - y1=*y++; - y2=*y++; - y3=*y++; - for (j=0;j<len;j+=4) - { - spx_word32_t part1; - spx_word32_t part2; - spx_word32_t part3; - spx_word32_t part4; - part1 = MULT16_16(*x,y0); - part2 = MULT16_16(*x,y1); - part3 = MULT16_16(*x,y2); - part4 = MULT16_16(*x,y3); - x++; - y0=*y++; - part1 = MAC16_16(part1,*x,y1); - part2 = MAC16_16(part2,*x,y2); - part3 = MAC16_16(part3,*x,y3); - part4 = MAC16_16(part4,*x,y0); - x++; - y1=*y++; - part1 = MAC16_16(part1,*x,y2); - part2 = MAC16_16(part2,*x,y3); - part3 = MAC16_16(part3,*x,y0); - part4 = MAC16_16(part4,*x,y1); - x++; - y2=*y++; - part1 = MAC16_16(part1,*x,y3); - part2 = MAC16_16(part2,*x,y0); - part3 = MAC16_16(part3,*x,y1); - part4 = MAC16_16(part4,*x,y2); - x++; - y3=*y++; - - sum1 = ADD32(sum1,SHR32(part1,6)); - sum2 = ADD32(sum2,SHR32(part2,6)); - sum3 = ADD32(sum3,SHR32(part3,6)); - sum4 = ADD32(sum4,SHR32(part4,6)); - } - corr[nb_pitch-1-i]=sum1; - corr[nb_pitch-2-i]=sum2; - corr[nb_pitch-3-i]=sum3; - corr[nb_pitch-4-i]=sum4; - } - -} -#else -void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) -{ - int i; - for (i=0;i<nb_pitch;i++) - { - /* Compute correlation*/ - corr[nb_pitch-1-i]=inner_prod(_x, _y+i, len); - } - -} -#endif -#endif - -#ifndef OVERRIDE_COMPUTE_PITCH_ERROR -static inline spx_word32_t compute_pitch_error(spx_word16_t *C, spx_word16_t *g, spx_word16_t pitch_control) -{ - spx_word32_t sum = 0; - sum = ADD32(sum,MULT16_16(MULT16_16_16(g[0],pitch_control),C[0])); - sum = ADD32(sum,MULT16_16(MULT16_16_16(g[1],pitch_control),C[1])); - sum = ADD32(sum,MULT16_16(MULT16_16_16(g[2],pitch_control),C[2])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[0],g[1]),C[3])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[1]),C[4])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[0]),C[5])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[0],g[0]),C[6])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[1],g[1]),C[7])); - sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[2]),C[8])); - return sum; -} -#endif - -#ifndef OVERRIDE_OPEN_LOOP_NBEST_PITCH -void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack) -{ - int i,j,k; - VARDECL(spx_word32_t *best_score); - VARDECL(spx_word32_t *best_ener); - spx_word32_t e0; - VARDECL(spx_word32_t *corr); -#ifdef FIXED_POINT - /* In fixed-point, we need only one (temporary) array of 32-bit values and two (corr16, ener16) - arrays for (normalized) 16-bit values */ - VARDECL(spx_word16_t *corr16); - VARDECL(spx_word16_t *ener16); - spx_word32_t *energy; - int cshift=0, eshift=0; - int scaledown = 0; - ALLOC(corr16, end-start+1, spx_word16_t); - ALLOC(ener16, end-start+1, spx_word16_t); - ALLOC(corr, end-start+1, spx_word32_t); - energy = corr; -#else - /* In floating-point, we need to float arrays and no normalized copies */ - VARDECL(spx_word32_t *energy); - spx_word16_t *corr16; - spx_word16_t *ener16; - ALLOC(energy, end-start+2, spx_word32_t); - ALLOC(corr, end-start+1, spx_word32_t); - corr16 = corr; - ener16 = energy; -#endif - - ALLOC(best_score, N, spx_word32_t); - ALLOC(best_ener, N, spx_word32_t); - for (i=0;i<N;i++) - { - best_score[i]=-1; - best_ener[i]=0; - pitch[i]=start; - } - -#ifdef FIXED_POINT - for (i=-end;i<len;i++) - { - if (ABS16(sw[i])>16383) - { - scaledown=1; - break; - } - } - /* If the weighted input is close to saturation, then we scale it down */ - if (scaledown) - { - for (i=-end;i<len;i++) - { - sw[i]=SHR16(sw[i],1); - } - } -#endif - energy[0]=inner_prod(sw-start, sw-start, len); - e0=inner_prod(sw, sw, len); - for (i=start;i<end;i++) - { - /* Update energy for next pitch*/ - energy[i-start+1] = SUB32(ADD32(energy[i-start],SHR32(MULT16_16(sw[-i-1],sw[-i-1]),6)), SHR32(MULT16_16(sw[-i+len-1],sw[-i+len-1]),6)); - if (energy[i-start+1] < 0) - energy[i-start+1] = 0; - } - -#ifdef FIXED_POINT - eshift = normalize16(energy, ener16, 32766, end-start+1); -#endif - - /* In fixed-point, this actually overrites the energy array (aliased to corr) */ - pitch_xcorr(sw, sw-end, corr, len, end-start+1, stack); - -#ifdef FIXED_POINT - /* Normalize to 180 so we can square it and it still fits in 16 bits */ - cshift = normalize16(corr, corr16, 180, end-start+1); - /* If we scaled weighted input down, we need to scale it up again (OK, so we've just lost the LSB, who cares?) */ - if (scaledown) - { - for (i=-end;i<len;i++) - { - sw[i]=SHL16(sw[i],1); - } - } -#endif - - /* Search for the best pitch prediction gain */ - for (i=start;i<=end;i++) - { - spx_word16_t tmp = MULT16_16_16(corr16[i-start],corr16[i-start]); - /* Instead of dividing the tmp by the energy, we multiply on the other side */ - if (MULT16_16(tmp,best_ener[N-1])>MULT16_16(best_score[N-1],ADD16(1,ener16[i-start]))) - { - /* We can safely put it last and then check */ - best_score[N-1]=tmp; - best_ener[N-1]=ener16[i-start]+1; - pitch[N-1]=i; - /* Check if it comes in front of others */ - for (j=0;j<N-1;j++) - { - if (MULT16_16(tmp,best_ener[j])>MULT16_16(best_score[j],ADD16(1,ener16[i-start]))) - { - for (k=N-1;k>j;k--) - { - best_score[k]=best_score[k-1]; - best_ener[k]=best_ener[k-1]; - pitch[k]=pitch[k-1]; - } - best_score[j]=tmp; - best_ener[j]=ener16[i-start]+1; - pitch[j]=i; - break; - } - } - } - } - - /* Compute open-loop gain if necessary */ - if (gain) - { - for (j=0;j<N;j++) - { - spx_word16_t g; - i=pitch[j]; - g = DIV32(SHL32(EXTEND32(corr16[i-start]),cshift), 10+SHR32(MULT16_16(spx_sqrt(e0),spx_sqrt(SHL32(EXTEND32(ener16[i-start]),eshift))),6)); - /* FIXME: g = max(g,corr/energy) */ - if (g<0) - g = 0; - gain[j]=g; - } - } - - -} -#endif - -#ifndef OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ -static int pitch_gain_search_3tap_vq( - const signed char *gain_cdbk, - int gain_cdbk_size, - spx_word16_t *C16, - spx_word16_t max_gain -) -{ - const signed char *ptr=gain_cdbk; - int best_cdbk=0; - spx_word32_t best_sum=-VERY_LARGE32; - spx_word32_t sum=0; - spx_word16_t g[3]; - spx_word16_t pitch_control=64; - spx_word16_t gain_sum; - int i; - - for (i=0;i<gain_cdbk_size;i++) { - - ptr = gain_cdbk+4*i; - g[0]=ADD16((spx_word16_t)ptr[0],32); - g[1]=ADD16((spx_word16_t)ptr[1],32); - g[2]=ADD16((spx_word16_t)ptr[2],32); - gain_sum = (spx_word16_t)ptr[3]; - - sum = compute_pitch_error(C16, g, pitch_control); - - if (sum>best_sum && gain_sum<=max_gain) { - best_sum=sum; - best_cdbk=i; - } - } - - return best_cdbk; -} -#endif - -/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */ -static spx_word32_t pitch_gain_search_3tap( -const spx_word16_t target[], /* Target vector */ -const spx_coef_t ak[], /* LPCs for this subframe */ -const spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ -const spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ -spx_sig_t exc[], /* Excitation */ -const signed char *gain_cdbk, -int gain_cdbk_size, -int pitch, /* Pitch value */ -int p, /* Number of LPC coeffs */ -int nsf, /* Number of samples in subframe */ -SpeexBits *bits, -char *stack, -const spx_word16_t *exc2, -const spx_word16_t *r, -spx_word16_t *new_target, -int *cdbk_index, -int plc_tuning, -spx_word32_t cumul_gain, -int scaledown -) -{ - int i,j; - VARDECL(spx_word16_t *tmp1); - VARDECL(spx_word16_t *e); - spx_word16_t *x[3]; - spx_word32_t corr[3]; - spx_word32_t A[3][3]; - spx_word16_t gain[3]; - spx_word32_t err; - spx_word16_t max_gain=128; - int best_cdbk=0; - - ALLOC(tmp1, 3*nsf, spx_word16_t); - ALLOC(e, nsf, spx_word16_t); - - if (cumul_gain > 262144) - max_gain = 31; - - x[0]=tmp1; - x[1]=tmp1+nsf; - x[2]=tmp1+2*nsf; - - for (j=0;j<nsf;j++) - new_target[j] = target[j]; - - { - VARDECL(spx_mem_t *mm); - int pp=pitch-1; - ALLOC(mm, p, spx_mem_t); - for (j=0;j<nsf;j++) - { - if (j-pp<0) - e[j]=exc2[j-pp]; - else if (j-pp-pitch<0) - e[j]=exc2[j-pp-pitch]; - else - e[j]=0; - } -#ifdef FIXED_POINT - /* Scale target and excitation down if needed (avoiding overflow) */ - if (scaledown) - { - for (j=0;j<nsf;j++) - e[j] = SHR16(e[j],1); - for (j=0;j<nsf;j++) - new_target[j] = SHR16(new_target[j],1); - } -#endif - for (j=0;j<p;j++) - mm[j] = 0; - iir_mem16(e, ak, e, nsf, p, mm, stack); - for (j=0;j<p;j++) - mm[j] = 0; - filter_mem16(e, awk1, awk2, e, nsf, p, mm, stack); - for (j=0;j<nsf;j++) - x[2][j] = e[j]; - } - for (i=1;i>=0;i--) - { - spx_word16_t e0=exc2[-pitch-1+i]; -#ifdef FIXED_POINT - /* Scale excitation down if needed (avoiding overflow) */ - if (scaledown) - e0 = SHR16(e0,1); -#endif - x[i][0]=MULT16_16_Q14(r[0], e0); - for (j=0;j<nsf-1;j++) - x[i][j+1]=ADD32(x[i+1][j],MULT16_16_P14(r[j+1], e0)); - } - - for (i=0;i<3;i++) - corr[i]=inner_prod(x[i],new_target,nsf); - for (i=0;i<3;i++) - for (j=0;j<=i;j++) - A[i][j]=A[j][i]=inner_prod(x[i],x[j],nsf); - - { - spx_word32_t C[9]; -#ifdef FIXED_POINT - spx_word16_t C16[9]; -#else - spx_word16_t *C16=C; -#endif - C[0]=corr[2]; - C[1]=corr[1]; - C[2]=corr[0]; - C[3]=A[1][2]; - C[4]=A[0][1]; - C[5]=A[0][2]; - C[6]=A[2][2]; - C[7]=A[1][1]; - C[8]=A[0][0]; - - /*plc_tuning *= 2;*/ - if (plc_tuning<2) - plc_tuning=2; - if (plc_tuning>30) - plc_tuning=30; -#ifdef FIXED_POINT - C[0] = SHL32(C[0],1); - C[1] = SHL32(C[1],1); - C[2] = SHL32(C[2],1); - C[3] = SHL32(C[3],1); - C[4] = SHL32(C[4],1); - C[5] = SHL32(C[5],1); - C[6] = MAC16_32_Q15(C[6],MULT16_16_16(plc_tuning,655),C[6]); - C[7] = MAC16_32_Q15(C[7],MULT16_16_16(plc_tuning,655),C[7]); - C[8] = MAC16_32_Q15(C[8],MULT16_16_16(plc_tuning,655),C[8]); - normalize16(C, C16, 32767, 9); -#else - C[6]*=.5*(1+.02*plc_tuning); - C[7]*=.5*(1+.02*plc_tuning); - C[8]*=.5*(1+.02*plc_tuning); -#endif - - best_cdbk = pitch_gain_search_3tap_vq(gain_cdbk, gain_cdbk_size, C16, max_gain); - -#ifdef FIXED_POINT - gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4]); - gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4+1]); - gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4+2]); - /*printf ("%d %d %d %d\n",gain[0],gain[1],gain[2], best_cdbk);*/ -#else - gain[0] = 0.015625*gain_cdbk[best_cdbk*4] + .5; - gain[1] = 0.015625*gain_cdbk[best_cdbk*4+1]+ .5; - gain[2] = 0.015625*gain_cdbk[best_cdbk*4+2]+ .5; -#endif - *cdbk_index=best_cdbk; - } - - SPEEX_MEMSET(exc, 0, nsf); - for (i=0;i<3;i++) - { - int j; - int tmp1, tmp3; - int pp=pitch+1-i; - tmp1=nsf; - if (tmp1>pp) - tmp1=pp; - for (j=0;j<tmp1;j++) - exc[j]=MAC16_16(exc[j],SHL16(gain[2-i],7),exc2[j-pp]); - tmp3=nsf; - if (tmp3>pp+pitch) - tmp3=pp+pitch; - for (j=tmp1;j<tmp3;j++) - exc[j]=MAC16_16(exc[j],SHL16(gain[2-i],7),exc2[j-pp-pitch]); - } - for (i=0;i<nsf;i++) - { - spx_word32_t tmp = ADD32(ADD32(MULT16_16(gain[0],x[2][i]),MULT16_16(gain[1],x[1][i])), - MULT16_16(gain[2],x[0][i])); - new_target[i] = SUB16(new_target[i], EXTRACT16(PSHR32(tmp,6))); - } - err = inner_prod(new_target, new_target, nsf); - - return err; -} - -/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */ -int pitch_search_3tap( -spx_word16_t target[], /* Target vector */ -spx_word16_t *sw, -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ -spx_sig_t exc[], /* Excitation */ -const void *par, -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -int p, /* Number of LPC coeffs */ -int nsf, /* Number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_word16_t *exc2, -spx_word16_t *r, -int complexity, -int cdbk_offset, -int plc_tuning, -spx_word32_t *cumul_gain -) -{ - int i; - int cdbk_index, pitch=0, best_gain_index=0; - VARDECL(spx_sig_t *best_exc); - VARDECL(spx_word16_t *new_target); - VARDECL(spx_word16_t *best_target); - int best_pitch=0; - spx_word32_t err, best_err=-1; - int N; - const ltp_params *params; - const signed char *gain_cdbk; - int gain_cdbk_size; - int scaledown=0; - - VARDECL(int *nbest); - - params = (const ltp_params*) par; - gain_cdbk_size = 1<<params->gain_bits; - gain_cdbk = params->gain_cdbk + 4*gain_cdbk_size*cdbk_offset; - - N=complexity; - if (N>10) - N=10; - if (N<1) - N=1; - - ALLOC(nbest, N, int); - params = (const ltp_params*) par; - - if (end<start) - { - speex_bits_pack(bits, 0, params->pitch_bits); - speex_bits_pack(bits, 0, params->gain_bits); - SPEEX_MEMSET(exc, 0, nsf); - return start; - } - -#ifdef FIXED_POINT - /* Check if we need to scale everything down in the pitch search to avoid overflows */ - for (i=0;i<nsf;i++) - { - if (ABS16(target[i])>16383) - { - scaledown=1; - break; - } - } - for (i=-end;i<nsf;i++) - { - if (ABS16(exc2[i])>16383) - { - scaledown=1; - break; - } - } -#endif - if (N>end-start+1) - N=end-start+1; - if (end != start) - open_loop_nbest_pitch(sw, start, end, nsf, nbest, NULL, N, stack); - else - nbest[0] = start; - - ALLOC(best_exc, nsf, spx_sig_t); - ALLOC(new_target, nsf, spx_word16_t); - ALLOC(best_target, nsf, spx_word16_t); - - for (i=0;i<N;i++) - { - pitch=nbest[i]; - SPEEX_MEMSET(exc, 0, nsf); - err=pitch_gain_search_3tap(target, ak, awk1, awk2, exc, gain_cdbk, gain_cdbk_size, pitch, p, nsf, - bits, stack, exc2, r, new_target, &cdbk_index, plc_tuning, *cumul_gain, scaledown); - if (err<best_err || best_err<0) - { - SPEEX_COPY(best_exc, exc, nsf); - SPEEX_COPY(best_target, new_target, nsf); - best_err=err; - best_pitch=pitch; - best_gain_index=cdbk_index; - } - } - /*printf ("pitch: %d %d\n", best_pitch, best_gain_index);*/ - speex_bits_pack(bits, best_pitch-start, params->pitch_bits); - speex_bits_pack(bits, best_gain_index, params->gain_bits); -#ifdef FIXED_POINT - *cumul_gain = MULT16_32_Q13(SHL16(params->gain_cdbk[4*best_gain_index+3],8), MAX32(1024,*cumul_gain)); -#else - *cumul_gain = 0.03125*MAX32(1024,*cumul_gain)*params->gain_cdbk[4*best_gain_index+3]; -#endif - /*printf ("%f\n", cumul_gain);*/ - /*printf ("encode pitch: %d %d\n", best_pitch, best_gain_index);*/ - SPEEX_COPY(exc, best_exc, nsf); - SPEEX_COPY(target, best_target, nsf); -#ifdef FIXED_POINT - /* Scale target back up if needed */ - if (scaledown) - { - for (i=0;i<nsf;i++) - target[i]=SHL16(target[i],1); - } -#endif - return pitch; -} - -void pitch_unquant_3tap( -spx_word16_t exc[], /* Input excitation */ -spx_word32_t exc_out[], /* Output excitation */ -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -const void *par, -int nsf, /* Number of samples in subframe */ -int *pitch_val, -spx_word16_t *gain_val, -SpeexBits *bits, -char *stack, -int count_lost, -int subframe_offset, -spx_word16_t last_pitch_gain, -int cdbk_offset -) -{ - int i; - int pitch; - int gain_index; - spx_word16_t gain[3]; - const signed char *gain_cdbk; - int gain_cdbk_size; - const ltp_params *params; - - params = (const ltp_params*) par; - gain_cdbk_size = 1<<params->gain_bits; - gain_cdbk = params->gain_cdbk + 4*gain_cdbk_size*cdbk_offset; - - pitch = speex_bits_unpack_unsigned(bits, params->pitch_bits); - pitch += start; - gain_index = speex_bits_unpack_unsigned(bits, params->gain_bits); - /*printf ("decode pitch: %d %d\n", pitch, gain_index);*/ -#ifdef FIXED_POINT - gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4]); - gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4+1]); - gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4+2]); -#else - gain[0] = 0.015625*gain_cdbk[gain_index*4]+.5; - gain[1] = 0.015625*gain_cdbk[gain_index*4+1]+.5; - gain[2] = 0.015625*gain_cdbk[gain_index*4+2]+.5; -#endif - - if (count_lost && pitch > subframe_offset) - { - spx_word16_t gain_sum; - if (1) { -#ifdef FIXED_POINT - spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : SHR16(last_pitch_gain,1); - if (tmp>62) - tmp=62; -#else - spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : 0.5 * last_pitch_gain; - if (tmp>.95) - tmp=.95; -#endif - gain_sum = gain_3tap_to_1tap(gain); - - if (gain_sum > tmp) - { - spx_word16_t fact = DIV32_16(SHL32(EXTEND32(tmp),14),gain_sum); - for (i=0;i<3;i++) - gain[i]=MULT16_16_Q14(fact,gain[i]); - } - - } - - } - - *pitch_val = pitch; - gain_val[0]=gain[0]; - gain_val[1]=gain[1]; - gain_val[2]=gain[2]; - gain[0] = SHL16(gain[0],7); - gain[1] = SHL16(gain[1],7); - gain[2] = SHL16(gain[2],7); - SPEEX_MEMSET(exc_out, 0, nsf); - for (i=0;i<3;i++) - { - int j; - int tmp1, tmp3; - int pp=pitch+1-i; - tmp1=nsf; - if (tmp1>pp) - tmp1=pp; - for (j=0;j<tmp1;j++) - exc_out[j]=MAC16_16(exc_out[j],gain[2-i],exc[j-pp]); - tmp3=nsf; - if (tmp3>pp+pitch) - tmp3=pp+pitch; - for (j=tmp1;j<tmp3;j++) - exc_out[j]=MAC16_16(exc_out[j],gain[2-i],exc[j-pp-pitch]); - } - /*for (i=0;i<nsf;i++) - exc[i]=PSHR32(exc32[i],13);*/ -} - - -/** Forced pitch delay and gain */ -int forced_pitch_quant( -spx_word16_t target[], /* Target vector */ -spx_word16_t *sw, -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ -spx_sig_t exc[], /* Excitation */ -const void *par, -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -int p, /* Number of LPC coeffs */ -int nsf, /* Number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_word16_t *exc2, -spx_word16_t *r, -int complexity, -int cdbk_offset, -int plc_tuning, -spx_word32_t *cumul_gain -) -{ - int i; - VARDECL(spx_word16_t *res); - ALLOC(res, nsf, spx_word16_t); -#ifdef FIXED_POINT - if (pitch_coef>63) - pitch_coef=63; -#else - if (pitch_coef>.99) - pitch_coef=.99; -#endif - for (i=0;i<nsf&&i<start;i++) - { - exc[i]=MULT16_16(SHL16(pitch_coef, 7),exc2[i-start]); - } - for (;i<nsf;i++) - { - exc[i]=MULT16_32_Q15(SHL16(pitch_coef, 9),exc[i-start]); - } - for (i=0;i<nsf;i++) - res[i] = EXTRACT16(PSHR32(exc[i], SIG_SHIFT-1)); - syn_percep_zero16(res, ak, awk1, awk2, res, nsf, p, stack); - for (i=0;i<nsf;i++) - target[i]=EXTRACT16(SATURATE(SUB32(EXTEND32(target[i]),EXTEND32(res[i])),32700)); - return start; -} - -/** Unquantize forced pitch delay and gain */ -void forced_pitch_unquant( -spx_word16_t exc[], /* Input excitation */ -spx_word32_t exc_out[], /* Output excitation */ -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -const void *par, -int nsf, /* Number of samples in subframe */ -int *pitch_val, -spx_word16_t *gain_val, -SpeexBits *bits, -char *stack, -int count_lost, -int subframe_offset, -spx_word16_t last_pitch_gain, -int cdbk_offset -) -{ - int i; -#ifdef FIXED_POINT - if (pitch_coef>63) - pitch_coef=63; -#else - if (pitch_coef>.99) - pitch_coef=.99; -#endif - for (i=0;i<nsf;i++) - { - exc_out[i]=MULT16_16(exc[i-start],SHL16(pitch_coef,7)); - exc[i] = EXTRACT16(PSHR32(exc_out[i],13)); - } - *pitch_val = start; - gain_val[0]=gain_val[2]=0; - gain_val[1] = pitch_coef; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.h deleted file mode 100755 index 872f072..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp.h +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file ltp.h - @brief Long-Term Prediction functions -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "speex/speex_bits.h" -#include "arch.h" - -/** LTP parameters. */ -typedef struct { - const signed char *gain_cdbk; - int gain_bits; - int pitch_bits; -} ltp_params; - -#ifdef FIXED_POINT -#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -SHR16(g[0],1)) + (g[2]>0 ? g[2] : -SHR16(g[2],1))) -#else -#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -.5*g[0]) + (g[2]>0 ? g[2] : -.5*g[2])) -#endif - -spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len); -void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack); - -void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack); - - -/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */ -int pitch_search_3tap( -spx_word16_t target[], /* Target vector */ -spx_word16_t *sw, -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ -spx_sig_t exc[], /* Overlapping codebook */ -const void *par, -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -int p, /* Number of LPC coeffs */ -int nsf, /* Number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_word16_t *exc2, -spx_word16_t *r, -int complexity, -int cdbk_offset, -int plc_tuning, -spx_word32_t *cumul_gain -); - -/*Unquantize adaptive codebook and update pitch contribution*/ -void pitch_unquant_3tap( -spx_word16_t exc[], /* Input excitation */ -spx_word32_t exc_out[], /* Output excitation */ -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -const void *par, -int nsf, /* Number of samples in subframe */ -int *pitch_val, -spx_word16_t *gain_val, -SpeexBits *bits, -char *stack, -int lost, -int subframe_offset, -spx_word16_t last_pitch_gain, -int cdbk_offset -); - -/** Forced pitch delay and gain */ -int forced_pitch_quant( -spx_word16_t target[], /* Target vector */ -spx_word16_t *sw, -spx_coef_t ak[], /* LPCs for this subframe */ -spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */ -spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */ -spx_sig_t exc[], /* Excitation */ -const void *par, -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -int p, /* Number of LPC coeffs */ -int nsf, /* Number of samples in subframe */ -SpeexBits *bits, -char *stack, -spx_word16_t *exc2, -spx_word16_t *r, -int complexity, -int cdbk_offset, -int plc_tuning, -spx_word32_t *cumul_gain -); - -/** Unquantize forced pitch delay and gain */ -void forced_pitch_unquant( -spx_word16_t exc[], /* Input excitation */ -spx_word32_t exc_out[], /* Output excitation */ -int start, /* Smallest pitch value allowed */ -int end, /* Largest pitch value allowed */ -spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */ -const void *par, -int nsf, /* Number of samples in subframe */ -int *pitch_val, -spx_word16_t *gain_val, -SpeexBits *bits, -char *stack, -int lost, -int subframe_offset, -spx_word16_t last_pitch_gain, -int cdbk_offset -); diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_arm4.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_arm4.h deleted file mode 100755 index cdb94e6..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_arm4.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file ltp_arm4.h - @brief Long-Term Prediction functions (ARM4 version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_INNER_PROD -spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) -{ - spx_word32_t sum1=0,sum2=0; - spx_word16_t *deadx, *deady; - int deadlen, dead1, dead2, dead3, dead4, dead5, dead6; - __asm__ __volatile__ ( - "\tldrsh %5, [%0], #2 \n" - "\tldrsh %6, [%1], #2 \n" - ".inner_prod_loop%=:\n" - "\tsub %7, %7, %7\n" - "\tsub %10, %10, %10\n" - - "\tldrsh %8, [%0], #2 \n" - "\tldrsh %9, [%1], #2 \n" - "\tmla %7, %5, %6, %7\n" - "\tldrsh %5, [%0], #2 \n" - "\tldrsh %6, [%1], #2 \n" - "\tmla %10, %8, %9, %10\n" - "\tldrsh %8, [%0], #2 \n" - "\tldrsh %9, [%1], #2 \n" - "\tmla %7, %5, %6, %7\n" - "\tldrsh %5, [%0], #2 \n" - "\tldrsh %6, [%1], #2 \n" - "\tmla %10, %8, %9, %10\n" - - "\tldrsh %8, [%0], #2 \n" - "\tldrsh %9, [%1], #2 \n" - "\tmla %7, %5, %6, %7\n" - "\tldrsh %5, [%0], #2 \n" - "\tldrsh %6, [%1], #2 \n" - "\tmla %10, %8, %9, %10\n" - "\tldrsh %8, [%0], #2 \n" - "\tldrsh %9, [%1], #2 \n" - "\tmla %7, %5, %6, %7\n" - "\tldrsh %5, [%0], #2 \n" - "\tldrsh %6, [%1], #2 \n" - "\tmla %10, %8, %9, %10\n" - - "\tsubs %4, %4, #1\n" - "\tadd %2, %2, %7, asr #5\n" - "\tadd %3, %3, %10, asr #5\n" - "\tbne .inner_prod_loop%=\n" - : "=r" (deadx), "=r" (deady), "+r" (sum1), "+r" (sum2), - "=r" (deadlen), "=r" (dead1), "=r" (dead2), "=r" (dead3), - "=r" (dead4), "=r" (dead5), "=r" (dead6) - : "0" (x), "1" (y), "4" (len>>3) - : "cc" - ); - return (sum1+sum2)>>1; -} - -#define OVERRIDE_PITCH_XCORR -void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) -{ - int i,j; - for (i=0;i<nb_pitch;i+=4) - { - /* Compute correlation*/ - //corr[nb_pitch-1-i]=inner_prod(x, _y+i, len); - spx_word32_t sum1=0; - spx_word32_t sum2=0; - spx_word32_t sum3=0; - spx_word32_t sum4=0; - const spx_word16_t *y = _y+i; - const spx_word16_t *x = _x; - spx_word32_t y0, y1, y2, y3; - y0=*y++; - y1=*y++; - y2=*y++; - y3=*y++; - for (j=0;j<len;j+=4) - { - spx_word32_t part1, part2, part3, part4, x0; - spx_word32_t dead1; - __asm__ __volatile__ ( -#ifdef SHORTCUTS - "\tldrsh %10, [%8], #4 \n" - "\tmul %4, %10, %0 \n" - "\tldrsh %15, [%8], #4 \n" - "\tmul %5, %10, %1 \n" - "\tldrsh %0, [%9], #2 \n" - "\tmul %6, %10, %2 \n" - "\tldrsh %1, [%9], #2 \n" - "\tmul %7, %10, %3 \n" - - - "\tmla %4, %15, %2, %4 \n" - "\tldrsh %2, [%9], #2 \n" - "\tmla %5, %15, %3, %5 \n" - "\tldrsh %3, [%9], #2 \n" - "\tmla %6, %15, %0, %6 \n" - "\tmla %7, %15, %1, %7 \n" - -#else - "\tldrsh %10, [%8], #2 \n" - "\tmul %4, %10, %0 \n" - "\tmul %5, %10, %1 \n" - "\tmul %6, %10, %2 \n" - "\tmul %7, %10, %3 \n" - - "\tldrsh %10, [%8], #2 \n" - "\tldrsh %0, [%9], #2 \n" - "\tmla %4, %10, %1, %4 \n" - "\tmla %5, %10, %2, %5 \n" - "\tmla %6, %10, %3, %6 \n" - "\tmla %7, %10, %0, %7 \n" - - "\tldrsh %10, [%8], #2 \n" - "\tldrsh %1, [%9], #2 \n" - "\tmla %4, %10, %2, %4 \n" - "\tmla %5, %10, %3, %5 \n" - "\tmla %6, %10, %0, %6 \n" - "\tmla %7, %10, %1, %7 \n" - - "\tldrsh %10, [%8], #2 \n" - "\tldrsh %2, [%9], #2 \n" - "\tmla %4, %10, %3, %4 \n" - "\tmla %5, %10, %0, %5 \n" - "\tmla %6, %10, %1, %6 \n" - "\tmla %7, %10, %2, %7 \n" - - "\tldrsh %3, [%9], #2 \n" -#endif - - "\tldr %10, %11 \n" - "\tldr %15, %12 \n" - "\tadd %4, %10, %4, asr #6 \n" - "\tstr %4, %11 \n" - "\tldr %10, %13 \n" - "\tadd %5, %15, %5, asr #6 \n" - "\tstr %5, %12 \n" - "\tldr %15, %14 \n" - "\tadd %6, %10, %6, asr #6 \n" - "\tadd %7, %15, %7, asr #6 \n" - "\tstr %6, %13 \n" - "\tstr %7, %14 \n" - - : "+r" (y0), "+r" (y1), "+r" (y2), "+r" (y3), - "=r" (part1), "=r" (part2), "=r" (part3), "=r" (part4), - "+r" (x), "+r" (y), "=r" (x0), "+m" (sum1), - "+m" (sum2), "+m" (sum3), "+m" (sum4), "=r" (dead1) - : - : "cc", "memory" - ); - } - corr[nb_pitch-1-i]=sum1; - corr[nb_pitch-2-i]=sum2; - corr[nb_pitch-3-i]=sum3; - corr[nb_pitch-4-i]=sum4; - } - -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_bfin.h deleted file mode 100755 index b530f85..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_bfin.h +++ /dev/null @@ -1,419 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @file ltp_bfin.h - @author Jean-Marc Valin - @brief Long-Term Prediction functions (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_INNER_PROD -spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) -{ - spx_word32_t sum=0; - __asm__ __volatile__ ( - "P0 = %3;\n\t" - "P1 = %1;\n\t" - "P2 = %2;\n\t" - "I0 = P1;\n\t" - "I1 = P2;\n\t" - "L0 = 0;\n\t" - "L1 = 0;\n\t" - "A0 = 0;\n\t" - "R0.L = W[I0++] || R1.L = W[I1++];\n\t" - "LOOP inner%= LC0 = P0;\n\t" - "LOOP_BEGIN inner%=;\n\t" - "A0 += R0.L*R1.L (IS) || R0.L = W[I0++] || R1.L = W[I1++];\n\t" - "LOOP_END inner%=;\n\t" - "A0 += R0.L*R1.L (IS);\n\t" - "A0 = A0 >>> 6;\n\t" - "R0 = A0;\n\t" - "%0 = R0;\n\t" - : "=m" (sum) - : "m" (x), "m" (y), "d" (len-1) - : "P0", "P1", "P2", "R0", "R1", "A0", "I0", "I1", "L0", "L1", "R3" - ); - return sum; -} - -#define OVERRIDE_PITCH_XCORR -void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack) -{ - corr += nb_pitch - 1; - __asm__ __volatile__ ( - "P2 = %0;\n\t" - "I0 = P2;\n\t" /* x in I0 */ - "B0 = P2;\n\t" /* x in B0 */ - "R0 = %3;\n\t" /* len in R0 */ - "P3 = %3;\n\t" - "P3 += -2;\n\t" /* len in R0 */ - "P4 = %4;\n\t" /* nb_pitch in R0 */ - "R1 = R0 << 1;\n\t" /* number of bytes in x */ - "L0 = R1;\n\t" - "P0 = %1;\n\t" - - "P1 = %2;\n\t" - "B1 = P1;\n\t" - "L1 = 0;\n\t" /*Disable looping on I1*/ - - "r0 = [I0++];\n\t" - "LOOP pitch%= LC0 = P4 >> 1;\n\t" - "LOOP_BEGIN pitch%=;\n\t" - "I1 = P0;\n\t" - "A1 = A0 = 0;\n\t" - "R1 = [I1++];\n\t" - "LOOP inner_prod%= LC1 = P3 >> 1;\n\t" - "LOOP_BEGIN inner_prod%=;\n\t" - "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t" - "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R1.H = W[I1++] || R0 = [I0++];\n\t" - "LOOP_END inner_prod%=;\n\t" - "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t" - "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R0 = [I0++];\n\t" - "A0 = A0 >>> 6;\n\t" - "A1 = A1 >>> 6;\n\t" - "R2 = A0, R3 = A1;\n\t" - "[P1--] = r2;\n\t" - "[P1--] = r3;\n\t" - "P0 += 4;\n\t" - "LOOP_END pitch%=;\n\t" - "L0 = 0;\n\t" - : : "m" (_x), "m" (_y), "m" (corr), "m" (len), "m" (nb_pitch) - : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "I0", "I1", "L0", "L1", "B0", "B1", "memory" - ); -} - -#define OVERRIDE_COMPUTE_PITCH_ERROR -static inline spx_word32_t compute_pitch_error(spx_word16_t *C, spx_word16_t *g, spx_word16_t pitch_control) -{ - spx_word32_t sum; - __asm__ __volatile__ - ( - "A0 = 0;\n\t" - - "R0 = W[%1++];\n\t" - "R1.L = %2.L*%5.L (IS);\n\t" - "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %3.L*%5.L (IS);\n\t" - "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %4.L*%5.L (IS);\n\t" - "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %2.L*%3.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %4.L*%3.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %4.L*%2.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %2.L*%2.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %3.L*%3.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t" - - "R1.L = %4.L*%4.L (IS);\n\t" - "A0 -= R1.L*R0.L (IS);\n\t" - - "%0 = A0;\n\t" - : "=&D" (sum), "=a" (C) - : "d" (g[0]), "d" (g[1]), "d" (g[2]), "d" (pitch_control), "1" (C) - : "R0", "R1", "R2", "A0" - ); - return sum; -} - -#define OVERRIDE_OPEN_LOOP_NBEST_PITCH -#ifdef OVERRIDE_OPEN_LOOP_NBEST_PITCH -void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack) -{ - int i,j,k; - VARDECL(spx_word32_t *best_score); - VARDECL(spx_word32_t *best_ener); - spx_word32_t e0; - VARDECL(spx_word32_t *corr); - VARDECL(spx_word32_t *energy); - - ALLOC(best_score, N, spx_word32_t); - ALLOC(best_ener, N, spx_word32_t); - ALLOC(corr, end-start+1, spx_word32_t); - ALLOC(energy, end-start+2, spx_word32_t); - - for (i=0;i<N;i++) - { - best_score[i]=-1; - best_ener[i]=0; - pitch[i]=start; - } - - energy[0]=inner_prod(sw-start, sw-start, len); - e0=inner_prod(sw, sw, len); - - /* energy update -------------------------------------*/ - - __asm__ __volatile__ - ( -" P0 = %0;\n\t" -" I1 = %1;\n\t" -" L1 = 0;\n\t" -" I2 = %2;\n\t" -" L2 = 0;\n\t" -" R2 = [P0++];\n\t" -" R3 = 0;\n\t" -" LSETUP (eu1, eu2) LC1 = %3;\n\t" -"eu1: R1.L = W [I1--] || R0.L = W [I2--] ;\n\t" -" R1 = R1.L * R1.L (IS);\n\t" -" R0 = R0.L * R0.L (IS);\n\t" -" R1 >>>= 6;\n\t" -" R1 = R1 + R2;\n\t" -" R0 >>>= 6;\n\t" -" R1 = R1 - R0;\n\t" -" R2 = MAX(R1,R3);\n\t" -"eu2: [P0++] = R2;\n\t" - : : "d" (energy), "d" (&sw[-start-1]), "d" (&sw[-start+len-1]), - "a" (end-start) - : "P0", "I1", "I2", "R0", "R1", "R2", "R3" -#if (__GNUC__ == 4) - , "LC1" -#endif - ); - - pitch_xcorr(sw, sw-end, corr, len, end-start+1, stack); - - /* FIXME: Fixed-point and floating-point code should be merged */ - { - VARDECL(spx_word16_t *corr16); - VARDECL(spx_word16_t *ener16); - ALLOC(corr16, end-start+1, spx_word16_t); - ALLOC(ener16, end-start+1, spx_word16_t); - /* Normalize to 180 so we can square it and it still fits in 16 bits */ - normalize16(corr, corr16, 180, end-start+1); - normalize16(energy, ener16, 180, end-start+1); - - if (N == 1) { - /* optimised asm to handle N==1 case */ - __asm__ __volatile__ - ( -" I0 = %1;\n\t" /* I0: corr16[] */ -" L0 = 0;\n\t" -" I1 = %2;\n\t" /* I1: energy */ -" L1 = 0;\n\t" -" R2 = -1;\n\t" /* R2: best score */ -" R3 = 0;\n\t" /* R3: best energy */ -" P0 = %4;\n\t" /* P0: best pitch */ -" P1 = %4;\n\t" /* P1: counter */ -" LSETUP (sl1, sl2) LC1 = %3;\n\t" -"sl1: R0.L = W [I0++] || R1.L = W [I1++];\n\t" -" R0 = R0.L * R0.L (IS);\n\t" -" R1 += 1;\n\t" -" R4 = R0.L * R3.L;\n\t" -" R5 = R2.L * R1.L;\n\t" -" cc = R5 < R4;\n\t" -" if cc R2 = R0;\n\t" -" if cc R3 = R1;\n\t" -" if cc P0 = P1;\n\t" -"sl2: P1 += 1;\n\t" -" %0 = P0;\n\t" - : "=&d" (pitch[0]) - : "a" (corr16), "a" (ener16), "a" (end+1-start), "d" (start) - : "P0", "P1", "I0", "I1", "R0", "R1", "R2", "R3", "R4", "R5" -#if (__GNUC__ == 4) - , "LC1" -#endif - ); - - } - else { - for (i=start;i<=end;i++) - { - spx_word16_t tmp = MULT16_16_16(corr16[i-start],corr16[i-start]); - /* Instead of dividing the tmp by the energy, we multiply on the other side */ - if (MULT16_16(tmp,best_ener[N-1])>MULT16_16(best_score[N-1],ADD16(1,ener16[i-start]))) - { - /* We can safely put it last and then check */ - best_score[N-1]=tmp; - best_ener[N-1]=ener16[i-start]+1; - pitch[N-1]=i; - /* Check if it comes in front of others */ - for (j=0;j<N-1;j++) - { - if (MULT16_16(tmp,best_ener[j])>MULT16_16(best_score[j],ADD16(1,ener16[i-start]))) - { - for (k=N-1;k>j;k--) - { - best_score[k]=best_score[k-1]; - best_ener[k]=best_ener[k-1]; - pitch[k]=pitch[k-1]; - } - best_score[j]=tmp; - best_ener[j]=ener16[i-start]+1; - pitch[j]=i; - break; - } - } - } - } - } - } - - /* Compute open-loop gain */ - if (gain) - { - for (j=0;j<N;j++) - { - spx_word16_t g; - i=pitch[j]; - g = DIV32(corr[i-start], 10+SHR32(MULT16_16(spx_sqrt(e0),spx_sqrt(energy[i-start])),6)); - /* FIXME: g = max(g,corr/energy) */ - if (g<0) - g = 0; - gain[j]=g; - } - } -} -#endif - -#define OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ -#ifdef OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ -static int pitch_gain_search_3tap_vq( - const signed char *gain_cdbk, - int gain_cdbk_size, - spx_word16_t *C16, - spx_word16_t max_gain -) -{ - const signed char *ptr=gain_cdbk; - int best_cdbk=0; - spx_word32_t best_sum=-VERY_LARGE32; - spx_word32_t sum=0; - spx_word16_t g[3]; - spx_word16_t pitch_control=64; - spx_word16_t gain_sum; - int i; - - /* fast asm version of VQ codebook search */ - - __asm__ __volatile__ - ( - -" P0 = %2;\n\t" /* P0: ptr to gain_cdbk */ -" L1 = 0;\n\t" /* no circ addr for L1 */ -" %0 = 0;\n\t" /* %0: best_sum */ -" %1 = 0;\n\t" /* %1: best_cbdk */ -" P1 = 0;\n\t" /* P1: loop counter */ - -" LSETUP (pgs1, pgs2) LC1 = %4;\n\t" -"pgs1: R2 = B [P0++] (X);\n\t" /* R2: g[0] */ -" R3 = B [P0++] (X);\n\t" /* R3: g[1] */ -" R4 = B [P0++] (X);\n\t" /* R4: g[2] */ -" R2 += 32;\n\t" -" R3 += 32;\n\t" -" R4 += 32;\n\t" -" R4.H = 64;\n\t" /* R4.H: pitch_control */ - -" R0 = B [P0++] (X);\n\t" -" B0 = R0;\n\t" /* BO: gain_sum */ - - /* compute_pitch_error() -------------------------------*/ - -" I1 = %3;\n\t" /* I1: ptr to C */ -" A0 = 0;\n\t" - -" R0.L = W[I1++];\n\t" -" R1.L = R2.L*R4.H (IS);\n\t" -" A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R3.L*R4.H (IS);\n\t" -" A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R4.L*R4.H (IS);\n\t" -" A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R2.L*R3.L (IS);\n\t" -" A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R4.L*R3.L (IS);\n\t" -" A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R4.L*R2.L (IS);\n\t" -" A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R2.L*R2.L (IS);\n\t" -" A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R3.L*R3.L (IS);\n\t" -" A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t" - -" R1.L = R4.L*R4.L (IS);\n\t" -" R0 = (A0 -= R1.L*R0.L) (IS);\n\t" - -/* - Re-arrange the if-then to code efficiently on the Blackfin: - - if (sum>best_sum && gain_sum<=max_gain) ------ (1) - - if (sum>best_sum && !(gain_sum>max_gain)) ------ (2) - - if (max_gain<=gain_sum) { ------ (3) - sum = -VERY_LARGE32; - } - if (best_sum<=sum) - - The blackin cc instructions are all of the form: - - cc = x < y (or cc = x <= y) -*/ -" R1 = B0\n\t" -" R2 = %5\n\t" -" R3 = %6\n\t" -" cc = R2 <= R1;\n\t" -" if cc R0 = R3;\n\t" -" cc = %0 <= R0;\n\t" -" if cc %0 = R0;\n\t" -" if cc %1 = P1;\n\t" - -"pgs2: P1 += 1;\n\t" - - : "=&d" (best_sum), "=&d" (best_cdbk) - : "a" (gain_cdbk), "a" (C16), "a" (gain_cdbk_size), "a" (max_gain), - "b" (-VERY_LARGE32) - : "R0", "R1", "R2", "R3", "R4", "P0", - "P1", "I1", "L1", "A0", "B0" -#if (__GNUC__ == 4) - , "LC1" -#endif - ); - - return best_cdbk; -} -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_sse.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_sse.h deleted file mode 100755 index bed6eaa..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/ltp_sse.h +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file ltp_sse.h - @brief Long-Term Prediction functions (SSE version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <xmmintrin.h> - -#define OVERRIDE_INNER_PROD -float inner_prod(const float *a, const float *b, int len) -{ - int i; - float ret; - __m128 sum = _mm_setzero_ps(); - for (i=0;i<(len>>2);i+=2) - { - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+0), _mm_loadu_ps(b+0))); - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+4), _mm_loadu_ps(b+4))); - a += 8; - b += 8; - } - sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum)); - sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55)); - _mm_store_ss(&ret, sum); - return ret; -} - -#define OVERRIDE_PITCH_XCORR -void pitch_xcorr(const float *_x, const float *_y, float *corr, int len, int nb_pitch, char *stack) -{ - int i, offset; - VARDECL(__m128 *x); - VARDECL(__m128 *y); - int N, L; - N = len>>2; - L = nb_pitch>>2; - ALLOC(x, N, __m128); - ALLOC(y, N+L, __m128); - for (i=0;i<N;i++) - x[i] = _mm_loadu_ps(_x+(i<<2)); - for (offset=0;offset<4;offset++) - { - for (i=0;i<N+L;i++) - y[i] = _mm_loadu_ps(_y+(i<<2)+offset); - for (i=0;i<L;i++) - { - int j; - __m128 sum, *xx, *yy; - sum = _mm_setzero_ps(); - yy = y+i; - xx = x; - for (j=0;j<N;j+=2) - { - sum = _mm_add_ps(sum, _mm_mul_ps(xx[0], yy[0])); - sum = _mm_add_ps(sum, _mm_mul_ps(xx[1], yy[1])); - xx += 2; - yy += 2; - } - sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum)); - sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55)); - _mm_store_ss(corr+nb_pitch-1-(i<<2)-offset, sum); - } - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/math_approx.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/math_approx.h deleted file mode 100755 index 9ca8307..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/math_approx.h +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file math_approx.h - @brief Various math approximation functions for Speex -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef MATH_APPROX_H -#define MATH_APPROX_H - -#include "arch.h" - -#ifndef FIXED_POINT - -#define spx_sqrt sqrt -#define spx_acos acos -#define spx_exp exp -#define spx_cos_norm(x) (cos((.5f*M_PI)*(x))) -#define spx_atan atan - -/** Generate a pseudo-random number */ -static inline spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed) -{ - const unsigned int jflone = 0x3f800000; - const unsigned int jflmsk = 0x007fffff; - union {int i; float f;} ran; - *seed = 1664525 * *seed + 1013904223; - ran.i = jflone | (jflmsk & *seed); - ran.f -= 1.5; - return 3.4642*std*ran.f; -} - - -#endif - - -static inline spx_int16_t spx_ilog2(spx_uint32_t x) -{ - int r=0; - if (x>=(spx_int32_t)65536) - { - x >>= 16; - r += 16; - } - if (x>=256) - { - x >>= 8; - r += 8; - } - if (x>=16) - { - x >>= 4; - r += 4; - } - if (x>=4) - { - x >>= 2; - r += 2; - } - if (x>=2) - { - r += 1; - } - return r; -} - -static inline spx_int16_t spx_ilog4(spx_uint32_t x) -{ - int r=0; - if (x>=(spx_int32_t)65536) - { - x >>= 16; - r += 8; - } - if (x>=256) - { - x >>= 8; - r += 4; - } - if (x>=16) - { - x >>= 4; - r += 2; - } - if (x>=4) - { - r += 1; - } - return r; -} - -#ifdef FIXED_POINT - -/** Generate a pseudo-random number */ -static inline spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed) -{ - spx_word32_t res; - *seed = 1664525 * *seed + 1013904223; - res = MULT16_16(EXTRACT16(SHR32(*seed,16)),std); - return EXTRACT16(PSHR32(SUB32(res, SHR32(res, 3)),14)); -} - -/* sqrt(x) ~= 0.22178 + 1.29227*x - 0.77070*x^2 + 0.25723*x^3 (for .25 < x < 1) */ -/*#define C0 3634 -#define C1 21173 -#define C2 -12627 -#define C3 4215*/ - -/* sqrt(x) ~= 0.22178 + 1.29227*x - 0.77070*x^2 + 0.25659*x^3 (for .25 < x < 1) */ -#define C0 3634 -#define C1 21173 -#define C2 -12627 -#define C3 4204 - -static inline spx_word16_t spx_sqrt(spx_word32_t x) -{ - int k; - spx_word32_t rt; - k = spx_ilog4(x)-6; - x = VSHR32(x, (k<<1)); - rt = ADD16(C0, MULT16_16_Q14(x, ADD16(C1, MULT16_16_Q14(x, ADD16(C2, MULT16_16_Q14(x, (C3))))))); - rt = VSHR32(rt,7-k); - return rt; -} - -/* log(x) ~= -2.18151 + 4.20592*x - 2.88938*x^2 + 0.86535*x^3 (for .5 < x < 1) */ - - -#define A1 16469 -#define A2 2242 -#define A3 1486 - -static inline spx_word16_t spx_acos(spx_word16_t x) -{ - int s=0; - spx_word16_t ret; - spx_word16_t sq; - if (x<0) - { - s=1; - x = NEG16(x); - } - x = SUB16(16384,x); - - x = x >> 1; - sq = MULT16_16_Q13(x, ADD16(A1, MULT16_16_Q13(x, ADD16(A2, MULT16_16_Q13(x, (A3)))))); - ret = spx_sqrt(SHL32(EXTEND32(sq),13)); - - /*ret = spx_sqrt(67108864*(-1.6129e-04 + 2.0104e+00*f + 2.7373e-01*f*f + 1.8136e-01*f*f*f));*/ - if (s) - ret = SUB16(25736,ret); - return ret; -} - - -#define K1 8192 -#define K2 -4096 -#define K3 340 -#define K4 -10 - -static inline spx_word16_t spx_cos(spx_word16_t x) -{ - spx_word16_t x2; - - if (x<12868) - { - x2 = MULT16_16_P13(x,x); - return ADD32(K1, MULT16_16_P13(x2, ADD32(K2, MULT16_16_P13(x2, ADD32(K3, MULT16_16_P13(K4, x2)))))); - } else { - x = SUB16(25736,x); - x2 = MULT16_16_P13(x,x); - return SUB32(-K1, MULT16_16_P13(x2, ADD32(K2, MULT16_16_P13(x2, ADD32(K3, MULT16_16_P13(K4, x2)))))); - } -} - -#define L1 32767 -#define L2 -7651 -#define L3 8277 -#define L4 -626 - -static inline spx_word16_t _spx_cos_pi_2(spx_word16_t x) -{ - spx_word16_t x2; - - x2 = MULT16_16_P15(x,x); - return ADD16(1,MIN16(32766,ADD32(SUB16(L1,x2), MULT16_16_P15(x2, ADD32(L2, MULT16_16_P15(x2, ADD32(L3, MULT16_16_P15(L4, x2)))))))); -} - -static inline spx_word16_t spx_cos_norm(spx_word32_t x) -{ - x = x&0x0001ffff; - if (x>SHL32(EXTEND32(1), 16)) - x = SUB32(SHL32(EXTEND32(1), 17),x); - if (x&0x00007fff) - { - if (x<SHL32(EXTEND32(1), 15)) - { - return _spx_cos_pi_2(EXTRACT16(x)); - } else { - return NEG32(_spx_cos_pi_2(EXTRACT16(65536-x))); - } - } else { - if (x&0x0000ffff) - return 0; - else if (x&0x0001ffff) - return -32767; - else - return 32767; - } -} - -/* - K0 = 1 - K1 = log(2) - K2 = 3-4*log(2) - K3 = 3*log(2) - 2 -*/ -#define D0 16384 -#define D1 11356 -#define D2 3726 -#define D3 1301 -/* Input in Q11 format, output in Q16 */ -static inline spx_word32_t spx_exp2(spx_word16_t x) -{ - int integer; - spx_word16_t frac; - integer = SHR16(x,11); - if (integer>14) - return 0x7fffffff; - else if (integer < -15) - return 0; - frac = SHL16(x-SHL16(integer,11),3); - frac = ADD16(D0, MULT16_16_Q14(frac, ADD16(D1, MULT16_16_Q14(frac, ADD16(D2 , MULT16_16_Q14(D3,frac)))))); - return VSHR32(EXTEND32(frac), -integer-2); -} - -/* Input in Q11 format, output in Q16 */ -static inline spx_word32_t spx_exp(spx_word16_t x) -{ - if (x>21290) - return 0x7fffffff; - else if (x<-21290) - return 0; - else - return spx_exp2(MULT16_16_P14(23637,x)); -} -#define M1 32767 -#define M2 -21 -#define M3 -11943 -#define M4 4936 - -static inline spx_word16_t spx_atan01(spx_word16_t x) -{ - return MULT16_16_P15(x, ADD32(M1, MULT16_16_P15(x, ADD32(M2, MULT16_16_P15(x, ADD32(M3, MULT16_16_P15(M4, x))))))); -} - -#undef M1 -#undef M2 -#undef M3 -#undef M4 - -/* Input in Q15, output in Q14 */ -static inline spx_word16_t spx_atan(spx_word32_t x) -{ - if (x <= 32767) - { - return SHR16(spx_atan01(x),1); - } else { - int e = spx_ilog2(x); - if (e>=29) - return 25736; - x = DIV32_16(SHL32(EXTEND32(32767),29-e), EXTRACT16(SHR32(x, e-14))); - return SUB16(25736, SHR16(spx_atan01(x),1)); - } -} -#else - -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif - -#define C1 0.9999932946f -#define C2 -0.4999124376f -#define C3 0.0414877472f -#define C4 -0.0012712095f - - -#define SPX_PI_2 1.5707963268 -static inline spx_word16_t spx_cos(spx_word16_t x) -{ - if (x<SPX_PI_2) - { - x *= x; - return C1 + x*(C2+x*(C3+C4*x)); - } else { - x = M_PI-x; - x *= x; - return NEG16(C1 + x*(C2+x*(C3+C4*x))); - } -} - -#endif - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/mdf.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/mdf.c deleted file mode 100755 index 456ab84..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/mdf.c +++ /dev/null @@ -1,1285 +0,0 @@ -/* Copyright (C) 2003-2008 Jean-Marc Valin - - File: mdf.c - Echo canceller based on the MDF algorithm (see below) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - The echo canceller is based on the MDF algorithm described in: - - J. S. Soo, K. K. Pang Multidelay block frequency adaptive filter, - IEEE Trans. Acoust. Speech Signal Process., Vol. ASSP-38, No. 2, - February 1990. - - We use the Alternatively Updated MDF (AUMDF) variant. Robustness to - double-talk is achieved using a variable learning rate as described in: - - Valin, J.-M., On Adjusting the Learning Rate in Frequency Domain Echo - Cancellation With Double-Talk. IEEE Transactions on Audio, - Speech and Language Processing, Vol. 15, No. 3, pp. 1030-1034, 2007. - http://people.xiph.org/~jm/papers/valin_taslp2006.pdf - - There is no explicit double-talk detection, but a continuous variation - in the learning rate based on residual echo, double-talk and background - noise. - - About the fixed-point version: - All the signals are represented with 16-bit words. The filter weights - are represented with 32-bit words, but only the top 16 bits are used - in most cases. The lower 16 bits are completely unreliable (due to the - fact that the update is done only on the top bits), but help in the - adaptation -- probably by removing a "threshold effect" due to - quantization (rounding going to zero) when the gradient is small. - - Another kludge that seems to work good: when performing the weight - update, we only move half the way toward the "goal" this seems to - reduce the effect of quantization noise in the update phase. This - can be seen as applying a gradient descent on a "soft constraint" - instead of having a hard constraint. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "arch.h" -#include "speex/speex_echo.h" -#include "fftwrap.h" -#include "pseudofloat.h" -#include "math_approx.h" -#include "os_support.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifdef FIXED_POINT -#define WEIGHT_SHIFT 11 -#define NORMALIZE_SCALEDOWN 5 -#define NORMALIZE_SCALEUP 3 -#else -#define WEIGHT_SHIFT 0 -#endif - -#ifdef FIXED_POINT -#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) -#else -#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) -#endif - -/* If enabled, the AEC will use a foreground filter and a background filter to be more robust to double-talk - and difficult signals in general. The cost is an extra FFT and a matrix-vector multiply */ -#define TWO_PATH - -#ifdef FIXED_POINT -static const spx_float_t MIN_LEAK = {20972, -22}; - -/* Constants for the two-path filter */ -static const spx_float_t VAR1_SMOOTH = {23593, -16}; -static const spx_float_t VAR2_SMOOTH = {23675, -15}; -static const spx_float_t VAR1_UPDATE = {16384, -15}; -static const spx_float_t VAR2_UPDATE = {16384, -16}; -static const spx_float_t VAR_BACKTRACK = {16384, -12}; -#define TOP16(x) ((x)>>16) - -#else - -static const spx_float_t MIN_LEAK = .005f; - -/* Constants for the two-path filter */ -static const spx_float_t VAR1_SMOOTH = .36f; -static const spx_float_t VAR2_SMOOTH = .7225f; -static const spx_float_t VAR1_UPDATE = .5f; -static const spx_float_t VAR2_UPDATE = .25f; -static const spx_float_t VAR_BACKTRACK = 4.f; -#define TOP16(x) (x) -#endif - - -#define PLAYBACK_DELAY 2 - -void speex_echo_get_residual(SpeexEchoState *st, spx_word32_t *Yout, int len); - - -/** Speex echo cancellation state. */ -struct SpeexEchoState_ { - int frame_size; /**< Number of samples processed each time */ - int window_size; - int M; - int cancel_count; - int adapted; - int saturated; - int screwed_up; - int C; /** Number of input channels (microphones) */ - int K; /** Number of output channels (loudspeakers) */ - spx_int32_t sampling_rate; - spx_word16_t spec_average; - spx_word16_t beta0; - spx_word16_t beta_max; - spx_word32_t sum_adapt; - spx_word16_t leak_estimate; - - spx_word16_t *e; /* scratch */ - spx_word16_t *x; /* Far-end input buffer (2N) */ - spx_word16_t *X; /* Far-end buffer (M+1 frames) in frequency domain */ - spx_word16_t *input; /* scratch */ - spx_word16_t *y; /* scratch */ - spx_word16_t *last_y; - spx_word16_t *Y; /* scratch */ - spx_word16_t *E; - spx_word32_t *PHI; /* scratch */ - spx_word32_t *W; /* (Background) filter weights */ -#ifdef TWO_PATH - spx_word16_t *foreground; /* Foreground filter weights */ - spx_word32_t Davg1; /* 1st recursive average of the residual power difference */ - spx_word32_t Davg2; /* 2nd recursive average of the residual power difference */ - spx_float_t Dvar1; /* Estimated variance of 1st estimator */ - spx_float_t Dvar2; /* Estimated variance of 2nd estimator */ -#endif - spx_word32_t *power; /* Power of the far-end signal */ - spx_float_t *power_1;/* Inverse power of far-end */ - spx_word16_t *wtmp; /* scratch */ -#ifdef FIXED_POINT - spx_word16_t *wtmp2; /* scratch */ -#endif - spx_word32_t *Rf; /* scratch */ - spx_word32_t *Yf; /* scratch */ - spx_word32_t *Xf; /* scratch */ - spx_word32_t *Eh; - spx_word32_t *Yh; - spx_float_t Pey; - spx_float_t Pyy; - spx_word16_t *window; - spx_word16_t *prop; - void *fft_table; - spx_word16_t *memX, *memD, *memE; - spx_word16_t preemph; - spx_word16_t notch_radius; - spx_mem_t *notch_mem; - - /* NOTE: If you only use speex_echo_cancel() and want to save some memory, remove this */ - spx_int16_t *play_buf; - int play_buf_pos; - int play_buf_started; -}; - -static inline void filter_dc_notch16(const spx_int16_t *in, spx_word16_t radius, spx_word16_t *out, int len, spx_mem_t *mem, int stride) -{ - int i; - spx_word16_t den2; -#ifdef FIXED_POINT - den2 = MULT16_16_Q15(radius,radius) + MULT16_16_Q15(QCONST16(.7,15),MULT16_16_Q15(32767-radius,32767-radius)); -#else - den2 = radius*radius + .7*(1-radius)*(1-radius); -#endif - /*printf ("%d %d %d %d %d %d\n", num[0], num[1], num[2], den[0], den[1], den[2]);*/ - for (i=0;i<len;i++) - { - spx_word16_t vin = in[i*stride]; - spx_word32_t vout = mem[0] + SHL32(EXTEND32(vin),15); -#ifdef FIXED_POINT - mem[0] = mem[1] + SHL32(SHL32(-EXTEND32(vin),15) + MULT16_32_Q15(radius,vout),1); -#else - mem[0] = mem[1] + 2*(-vin + radius*vout); -#endif - mem[1] = SHL32(EXTEND32(vin),15) - MULT16_32_Q15(den2,vout); - out[i] = SATURATE32(PSHR32(MULT16_32_Q15(radius,vout),15),32767); - } -} - -/* This inner product is slightly different from the codec version because of fixed-point */ -static inline spx_word32_t mdf_inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) -{ - spx_word32_t sum=0; - len >>= 1; - while(len--) - { - spx_word32_t part=0; - part = MAC16_16(part,*x++,*y++); - part = MAC16_16(part,*x++,*y++); - /* HINT: If you had a 40-bit accumulator, you could shift only at the end */ - sum = ADD32(sum,SHR32(part,6)); - } - return sum; -} - -/** Compute power spectrum of a half-complex (packed) vector */ -static inline void power_spectrum(const spx_word16_t *X, spx_word32_t *ps, int N) -{ - int i, j; - ps[0]=MULT16_16(X[0],X[0]); - for (i=1,j=1;i<N-1;i+=2,j++) - { - ps[j] = MULT16_16(X[i],X[i]) + MULT16_16(X[i+1],X[i+1]); - } - ps[j]=MULT16_16(X[i],X[i]); -} - -/** Compute power spectrum of a half-complex (packed) vector and accumulate */ -static inline void power_spectrum_accum(const spx_word16_t *X, spx_word32_t *ps, int N) -{ - int i, j; - ps[0]+=MULT16_16(X[0],X[0]); - for (i=1,j=1;i<N-1;i+=2,j++) - { - ps[j] += MULT16_16(X[i],X[i]) + MULT16_16(X[i+1],X[i+1]); - } - ps[j]+=MULT16_16(X[i],X[i]); -} - -/** Compute cross-power spectrum of a half-complex (packed) vectors and add to acc */ -#ifdef FIXED_POINT -static inline void spectral_mul_accum(const spx_word16_t *X, const spx_word32_t *Y, spx_word16_t *acc, int N, int M) -{ - int i,j; - spx_word32_t tmp1=0,tmp2=0; - for (j=0;j<M;j++) - { - tmp1 = MAC16_16(tmp1, X[j*N],TOP16(Y[j*N])); - } - acc[0] = PSHR32(tmp1,WEIGHT_SHIFT); - for (i=1;i<N-1;i+=2) - { - tmp1 = tmp2 = 0; - for (j=0;j<M;j++) - { - tmp1 = SUB32(MAC16_16(tmp1, X[j*N+i],TOP16(Y[j*N+i])), MULT16_16(X[j*N+i+1],TOP16(Y[j*N+i+1]))); - tmp2 = MAC16_16(MAC16_16(tmp2, X[j*N+i+1],TOP16(Y[j*N+i])), X[j*N+i], TOP16(Y[j*N+i+1])); - } - acc[i] = PSHR32(tmp1,WEIGHT_SHIFT); - acc[i+1] = PSHR32(tmp2,WEIGHT_SHIFT); - } - tmp1 = tmp2 = 0; - for (j=0;j<M;j++) - { - tmp1 = MAC16_16(tmp1, X[(j+1)*N-1],TOP16(Y[(j+1)*N-1])); - } - acc[N-1] = PSHR32(tmp1,WEIGHT_SHIFT); -} -static inline void spectral_mul_accum16(const spx_word16_t *X, const spx_word16_t *Y, spx_word16_t *acc, int N, int M) -{ - int i,j; - spx_word32_t tmp1=0,tmp2=0; - for (j=0;j<M;j++) - { - tmp1 = MAC16_16(tmp1, X[j*N],Y[j*N]); - } - acc[0] = PSHR32(tmp1,WEIGHT_SHIFT); - for (i=1;i<N-1;i+=2) - { - tmp1 = tmp2 = 0; - for (j=0;j<M;j++) - { - tmp1 = SUB32(MAC16_16(tmp1, X[j*N+i],Y[j*N+i]), MULT16_16(X[j*N+i+1],Y[j*N+i+1])); - tmp2 = MAC16_16(MAC16_16(tmp2, X[j*N+i+1],Y[j*N+i]), X[j*N+i], Y[j*N+i+1]); - } - acc[i] = PSHR32(tmp1,WEIGHT_SHIFT); - acc[i+1] = PSHR32(tmp2,WEIGHT_SHIFT); - } - tmp1 = tmp2 = 0; - for (j=0;j<M;j++) - { - tmp1 = MAC16_16(tmp1, X[(j+1)*N-1],Y[(j+1)*N-1]); - } - acc[N-1] = PSHR32(tmp1,WEIGHT_SHIFT); -} - -#else -static inline void spectral_mul_accum(const spx_word16_t *X, const spx_word32_t *Y, spx_word16_t *acc, int N, int M) -{ - int i,j; - for (i=0;i<N;i++) - acc[i] = 0; - for (j=0;j<M;j++) - { - acc[0] += X[0]*Y[0]; - for (i=1;i<N-1;i+=2) - { - acc[i] += (X[i]*Y[i] - X[i+1]*Y[i+1]); - acc[i+1] += (X[i+1]*Y[i] + X[i]*Y[i+1]); - } - acc[i] += X[i]*Y[i]; - X += N; - Y += N; - } -} -#define spectral_mul_accum16 spectral_mul_accum -#endif - -/** Compute weighted cross-power spectrum of a half-complex (packed) vector with conjugate */ -static inline void weighted_spectral_mul_conj(const spx_float_t *w, const spx_float_t p, const spx_word16_t *X, const spx_word16_t *Y, spx_word32_t *prod, int N) -{ - int i, j; - spx_float_t W; - W = FLOAT_AMULT(p, w[0]); - prod[0] = FLOAT_MUL32(W,MULT16_16(X[0],Y[0])); - for (i=1,j=1;i<N-1;i+=2,j++) - { - W = FLOAT_AMULT(p, w[j]); - prod[i] = FLOAT_MUL32(W,MAC16_16(MULT16_16(X[i],Y[i]), X[i+1],Y[i+1])); - prod[i+1] = FLOAT_MUL32(W,MAC16_16(MULT16_16(-X[i+1],Y[i]), X[i],Y[i+1])); - } - W = FLOAT_AMULT(p, w[j]); - prod[i] = FLOAT_MUL32(W,MULT16_16(X[i],Y[i])); -} - -static inline void mdf_adjust_prop(const spx_word32_t *W, int N, int M, int P, spx_word16_t *prop) -{ - int i, j, p; - spx_word16_t max_sum = 1; - spx_word32_t prop_sum = 1; - for (i=0;i<M;i++) - { - spx_word32_t tmp = 1; - for (p=0;p<P;p++) - for (j=0;j<N;j++) - tmp += MULT16_16(EXTRACT16(SHR32(W[p*N*M + i*N+j],18)), EXTRACT16(SHR32(W[p*N*M + i*N+j],18))); -#ifdef FIXED_POINT - /* Just a security in case an overflow were to occur */ - tmp = MIN32(ABS32(tmp), 536870912); -#endif - prop[i] = spx_sqrt(tmp); - if (prop[i] > max_sum) - max_sum = prop[i]; - } - for (i=0;i<M;i++) - { - prop[i] += MULT16_16_Q15(QCONST16(.1f,15),max_sum); - prop_sum += EXTEND32(prop[i]); - } - for (i=0;i<M;i++) - { - prop[i] = DIV32(MULT16_16(QCONST16(.99f,15), prop[i]),prop_sum); - /*printf ("%f ", prop[i]);*/ - } - /*printf ("\n");*/ -} - -#ifdef DUMP_ECHO_CANCEL_DATA -#include <stdio.h> -static FILE *rFile=NULL, *pFile=NULL, *oFile=NULL; - -static void dump_audio(const spx_int16_t *rec, const spx_int16_t *play, const spx_int16_t *out, int len) -{ - if (!(rFile && pFile && oFile)) - { - speex_fatal("Dump files not open"); - } - fwrite(rec, sizeof(spx_int16_t), len, rFile); - fwrite(play, sizeof(spx_int16_t), len, pFile); - fwrite(out, sizeof(spx_int16_t), len, oFile); -} -#endif - -/** Creates a new echo canceller state */ -EXPORT SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length) -{ - return speex_echo_state_init_mc(frame_size, filter_length, 1, 1); -} - -EXPORT SpeexEchoState *speex_echo_state_init_mc(int frame_size, int filter_length, int nb_mic, int nb_speakers) -{ - int i,N,M, C, K; - SpeexEchoState *st = (SpeexEchoState *)speex_alloc(sizeof(SpeexEchoState)); - - st->K = nb_speakers; - st->C = nb_mic; - C=st->C; - K=st->K; -#ifdef DUMP_ECHO_CANCEL_DATA - if (rFile || pFile || oFile) - speex_fatal("Opening dump files twice"); - rFile = fopen("aec_rec.sw", "wb"); - pFile = fopen("aec_play.sw", "wb"); - oFile = fopen("aec_out.sw", "wb"); -#endif - - st->frame_size = frame_size; - st->window_size = 2*frame_size; - N = st->window_size; - M = st->M = (filter_length+st->frame_size-1)/frame_size; - st->cancel_count=0; - st->sum_adapt = 0; - st->saturated = 0; - st->screwed_up = 0; - /* This is the default sampling rate */ - st->sampling_rate = 8000; - st->spec_average = DIV32_16(SHL32(EXTEND32(st->frame_size), 15), st->sampling_rate); -#ifdef FIXED_POINT - st->beta0 = DIV32_16(SHL32(EXTEND32(st->frame_size), 16), st->sampling_rate); - st->beta_max = DIV32_16(SHL32(EXTEND32(st->frame_size), 14), st->sampling_rate); -#else - st->beta0 = (2.0f*st->frame_size)/st->sampling_rate; - st->beta_max = (.5f*st->frame_size)/st->sampling_rate; -#endif - st->leak_estimate = 0; - - st->fft_table = spx_fft_init(N); - - st->e = (spx_word16_t*)speex_alloc(C*N*sizeof(spx_word16_t)); - st->x = (spx_word16_t*)speex_alloc(K*N*sizeof(spx_word16_t)); - st->input = (spx_word16_t*)speex_alloc(C*st->frame_size*sizeof(spx_word16_t)); - st->y = (spx_word16_t*)speex_alloc(C*N*sizeof(spx_word16_t)); - st->last_y = (spx_word16_t*)speex_alloc(C*N*sizeof(spx_word16_t)); - st->Yf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); - st->Rf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); - st->Xf = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); - st->Yh = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); - st->Eh = (spx_word32_t*)speex_alloc((st->frame_size+1)*sizeof(spx_word32_t)); - - st->X = (spx_word16_t*)speex_alloc(K*(M+1)*N*sizeof(spx_word16_t)); - st->Y = (spx_word16_t*)speex_alloc(C*N*sizeof(spx_word16_t)); - st->E = (spx_word16_t*)speex_alloc(C*N*sizeof(spx_word16_t)); - st->W = (spx_word32_t*)speex_alloc(C*K*M*N*sizeof(spx_word32_t)); -#ifdef TWO_PATH - st->foreground = (spx_word16_t*)speex_alloc(M*N*C*K*sizeof(spx_word16_t)); -#endif - st->PHI = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t)); - st->power = (spx_word32_t*)speex_alloc((frame_size+1)*sizeof(spx_word32_t)); - st->power_1 = (spx_float_t*)speex_alloc((frame_size+1)*sizeof(spx_float_t)); - st->window = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); - st->prop = (spx_word16_t*)speex_alloc(M*sizeof(spx_word16_t)); - st->wtmp = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); -#ifdef FIXED_POINT - st->wtmp2 = (spx_word16_t*)speex_alloc(N*sizeof(spx_word16_t)); - for (i=0;i<N>>1;i++) - { - st->window[i] = (16383-SHL16(spx_cos(DIV32_16(MULT16_16(25736,i<<1),N)),1)); - st->window[N-i-1] = st->window[i]; - } -#else - for (i=0;i<N;i++) - st->window[i] = .5-.5*cos(2*M_PI*i/N); -#endif - for (i=0;i<=st->frame_size;i++) - st->power_1[i] = FLOAT_ONE; - for (i=0;i<N*M*K*C;i++) - st->W[i] = 0; - { - spx_word32_t sum = 0; - /* Ratio of ~10 between adaptation rate of first and last block */ - spx_word16_t decay = SHR32(spx_exp(NEG16(DIV32_16(QCONST16(2.4,11),M))),1); - st->prop[0] = QCONST16(.7, 15); - sum = EXTEND32(st->prop[0]); - for (i=1;i<M;i++) - { - st->prop[i] = MULT16_16_Q15(st->prop[i-1], decay); - sum = ADD32(sum, EXTEND32(st->prop[i])); - } - for (i=M-1;i>=0;i--) - { - st->prop[i] = DIV32(MULT16_16(QCONST16(.8f,15), st->prop[i]),sum); - } - } - - st->memX = (spx_word16_t*)speex_alloc(K*sizeof(spx_word16_t)); - st->memD = (spx_word16_t*)speex_alloc(C*sizeof(spx_word16_t)); - st->memE = (spx_word16_t*)speex_alloc(C*sizeof(spx_word16_t)); - st->preemph = QCONST16(.9,15); - if (st->sampling_rate<12000) - st->notch_radius = QCONST16(.9, 15); - else if (st->sampling_rate<24000) - st->notch_radius = QCONST16(.982, 15); - else - st->notch_radius = QCONST16(.992, 15); - - st->notch_mem = (spx_mem_t*)speex_alloc(2*C*sizeof(spx_mem_t)); - st->adapted = 0; - st->Pey = st->Pyy = FLOAT_ONE; - -#ifdef TWO_PATH - st->Davg1 = st->Davg2 = 0; - st->Dvar1 = st->Dvar2 = FLOAT_ZERO; -#endif - - st->play_buf = (spx_int16_t*)speex_alloc(K*(PLAYBACK_DELAY+1)*st->frame_size*sizeof(spx_int16_t)); - st->play_buf_pos = PLAYBACK_DELAY*st->frame_size; - st->play_buf_started = 0; - - return st; -} - -/** Resets echo canceller state */ -EXPORT void speex_echo_state_reset(SpeexEchoState *st) -{ - int i, M, N, C, K; - st->cancel_count=0; - st->screwed_up = 0; - N = st->window_size; - M = st->M; - C=st->C; - K=st->K; - for (i=0;i<N*M;i++) - st->W[i] = 0; -#ifdef TWO_PATH - for (i=0;i<N*M;i++) - st->foreground[i] = 0; -#endif - for (i=0;i<N*(M+1);i++) - st->X[i] = 0; - for (i=0;i<=st->frame_size;i++) - { - st->power[i] = 0; - st->power_1[i] = FLOAT_ONE; - st->Eh[i] = 0; - st->Yh[i] = 0; - } - for (i=0;i<st->frame_size;i++) - { - st->last_y[i] = 0; - } - for (i=0;i<N*C;i++) - { - st->E[i] = 0; - } - for (i=0;i<N*K;i++) - { - st->x[i] = 0; - } - for (i=0;i<2*C;i++) - st->notch_mem[i] = 0; - for (i=0;i<C;i++) - st->memD[i]=st->memE[i]=0; - for (i=0;i<K;i++) - st->memX[i]=0; - - st->saturated = 0; - st->adapted = 0; - st->sum_adapt = 0; - st->Pey = st->Pyy = FLOAT_ONE; -#ifdef TWO_PATH - st->Davg1 = st->Davg2 = 0; - st->Dvar1 = st->Dvar2 = FLOAT_ZERO; -#endif - for (i=0;i<3*st->frame_size;i++) - st->play_buf[i] = 0; - st->play_buf_pos = PLAYBACK_DELAY*st->frame_size; - st->play_buf_started = 0; - -} - -/** Destroys an echo canceller state */ -EXPORT void speex_echo_state_destroy(SpeexEchoState *st) -{ - spx_fft_destroy(st->fft_table); - - speex_free(st->e); - speex_free(st->x); - speex_free(st->input); - speex_free(st->y); - speex_free(st->last_y); - speex_free(st->Yf); - speex_free(st->Rf); - speex_free(st->Xf); - speex_free(st->Yh); - speex_free(st->Eh); - - speex_free(st->X); - speex_free(st->Y); - speex_free(st->E); - speex_free(st->W); -#ifdef TWO_PATH - speex_free(st->foreground); -#endif - speex_free(st->PHI); - speex_free(st->power); - speex_free(st->power_1); - speex_free(st->window); - speex_free(st->prop); - speex_free(st->wtmp); -#ifdef FIXED_POINT - speex_free(st->wtmp2); -#endif - speex_free(st->memX); - speex_free(st->memD); - speex_free(st->memE); - speex_free(st->notch_mem); - - speex_free(st->play_buf); - speex_free(st); - -#ifdef DUMP_ECHO_CANCEL_DATA - fclose(rFile); - fclose(pFile); - fclose(oFile); - rFile = pFile = oFile = NULL; -#endif -} - -EXPORT void speex_echo_capture(SpeexEchoState *st, const spx_int16_t *rec, spx_int16_t *out) -{ - int i; - /*speex_warning_int("capture with fill level ", st->play_buf_pos/st->frame_size);*/ - st->play_buf_started = 1; - if (st->play_buf_pos>=st->frame_size) - { - speex_echo_cancellation(st, rec, st->play_buf, out); - st->play_buf_pos -= st->frame_size; - for (i=0;i<st->play_buf_pos;i++) - st->play_buf[i] = st->play_buf[i+st->frame_size]; - } else { - speex_warning("No playback frame available (your application is buggy and/or got xruns)"); - if (st->play_buf_pos!=0) - { - speex_warning("internal playback buffer corruption?"); - st->play_buf_pos = 0; - } - for (i=0;i<st->frame_size;i++) - out[i] = rec[i]; - } -} - -EXPORT void speex_echo_playback(SpeexEchoState *st, const spx_int16_t *play) -{ - /*speex_warning_int("playback with fill level ", st->play_buf_pos/st->frame_size);*/ - if (!st->play_buf_started) - { - speex_warning("discarded first playback frame"); - return; - } - if (st->play_buf_pos<=PLAYBACK_DELAY*st->frame_size) - { - int i; - for (i=0;i<st->frame_size;i++) - st->play_buf[st->play_buf_pos+i] = play[i]; - st->play_buf_pos += st->frame_size; - if (st->play_buf_pos <= (PLAYBACK_DELAY-1)*st->frame_size) - { - speex_warning("Auto-filling the buffer (your application is buggy and/or got xruns)"); - for (i=0;i<st->frame_size;i++) - st->play_buf[st->play_buf_pos+i] = play[i]; - st->play_buf_pos += st->frame_size; - } - } else { - speex_warning("Had to discard a playback frame (your application is buggy and/or got xruns)"); - } -} - -/** Performs echo cancellation on a frame (deprecated, last arg now ignored) */ -EXPORT void speex_echo_cancel(SpeexEchoState *st, const spx_int16_t *in, const spx_int16_t *far_end, spx_int16_t *out, spx_int32_t *Yout) -{ - speex_echo_cancellation(st, in, far_end, out); -} - -/** Performs echo cancellation on a frame */ -EXPORT void speex_echo_cancellation(SpeexEchoState *st, const spx_int16_t *in, const spx_int16_t *far_end, spx_int16_t *out) -{ - int i,j, chan, speak; - int N,M, C, K; - spx_word32_t Syy,See,Sxx,Sdd, Sff; -#ifdef TWO_PATH - spx_word32_t Dbf; - int update_foreground; -#endif - spx_word32_t Sey; - spx_word16_t ss, ss_1; - spx_float_t Pey = FLOAT_ONE, Pyy=FLOAT_ONE; - spx_float_t alpha, alpha_1; - spx_word16_t RER; - spx_word32_t tmp32; - - N = st->window_size; - M = st->M; - C = st->C; - K = st->K; - - st->cancel_count++; -#ifdef FIXED_POINT - ss=DIV32_16(11469,M); - ss_1 = SUB16(32767,ss); -#else - ss=.35/M; - ss_1 = 1-ss; -#endif - - for (chan = 0; chan < C; chan++) - { - /* Apply a notch filter to make sure DC doesn't end up causing problems */ - filter_dc_notch16(in+chan, st->notch_radius, st->input+chan*st->frame_size, st->frame_size, st->notch_mem+2*chan, C); - /* Copy input data to buffer and apply pre-emphasis */ - /* Copy input data to buffer */ - for (i=0;i<st->frame_size;i++) - { - spx_word32_t tmp32; - /* FIXME: This core has changed a bit, need to merge properly */ - tmp32 = SUB32(EXTEND32(st->input[chan*st->frame_size+i]), EXTEND32(MULT16_16_P15(st->preemph, st->memD[chan]))); -#ifdef FIXED_POINT - if (tmp32 > 32767) - { - tmp32 = 32767; - if (st->saturated == 0) - st->saturated = 1; - } - if (tmp32 < -32767) - { - tmp32 = -32767; - if (st->saturated == 0) - st->saturated = 1; - } -#endif - st->memD[chan] = st->input[chan*st->frame_size+i]; - st->input[chan*st->frame_size+i] = EXTRACT16(tmp32); - } - } - - for (speak = 0; speak < K; speak++) - { - for (i=0;i<st->frame_size;i++) - { - spx_word32_t tmp32; - st->x[speak*N+i] = st->x[speak*N+i+st->frame_size]; - tmp32 = SUB32(EXTEND32(far_end[i*K+speak]), EXTEND32(MULT16_16_P15(st->preemph, st->memX[speak]))); -#ifdef FIXED_POINT - /*FIXME: If saturation occurs here, we need to freeze adaptation for M frames (not just one) */ - if (tmp32 > 32767) - { - tmp32 = 32767; - st->saturated = M+1; - } - if (tmp32 < -32767) - { - tmp32 = -32767; - st->saturated = M+1; - } -#endif - st->x[speak*N+i+st->frame_size] = EXTRACT16(tmp32); - st->memX[speak] = far_end[i*K+speak]; - } - } - - for (speak = 0; speak < K; speak++) - { - /* Shift memory: this could be optimized eventually*/ - for (j=M-1;j>=0;j--) - { - for (i=0;i<N;i++) - st->X[(j+1)*N*K+speak*N+i] = st->X[j*N*K+speak*N+i]; - } - /* Convert x (echo input) to frequency domain */ - spx_fft(st->fft_table, st->x+speak*N, &st->X[speak*N]); - } - - Sxx = 0; - for (speak = 0; speak < K; speak++) - { - Sxx += mdf_inner_prod(st->x+speak*N+st->frame_size, st->x+speak*N+st->frame_size, st->frame_size); - power_spectrum_accum(st->X+speak*N, st->Xf, N); - } - - Sff = 0; - for (chan = 0; chan < C; chan++) - { -#ifdef TWO_PATH - /* Compute foreground filter */ - spectral_mul_accum16(st->X, st->foreground+chan*N*K*M, st->Y+chan*N, N, M*K); - spx_ifft(st->fft_table, st->Y+chan*N, st->e+chan*N); - for (i=0;i<st->frame_size;i++) - st->e[chan*N+i] = SUB16(st->input[chan*st->frame_size+i], st->e[chan*N+i+st->frame_size]); - Sff += mdf_inner_prod(st->e+chan*N, st->e+chan*N, st->frame_size); -#endif - } - - /* Adjust proportional adaption rate */ - /* FIXME: Adjust that for C, K*/ - if (st->adapted) - mdf_adjust_prop (st->W, N, M, C*K, st->prop); - /* Compute weight gradient */ - if (st->saturated == 0) - { - for (chan = 0; chan < C; chan++) - { - for (speak = 0; speak < K; speak++) - { - for (j=M-1;j>=0;j--) - { - weighted_spectral_mul_conj(st->power_1, FLOAT_SHL(PSEUDOFLOAT(st->prop[j]),-15), &st->X[(j+1)*N*K+speak*N], st->E+chan*N, st->PHI, N); - for (i=0;i<N;i++) - st->W[chan*N*K*M + j*N*K + speak*N + i] += st->PHI[i]; - } - } - } - } else { - st->saturated--; - } - - /* FIXME: MC conversion required */ - /* Update weight to prevent circular convolution (MDF / AUMDF) */ - for (chan = 0; chan < C; chan++) - { - for (speak = 0; speak < K; speak++) - { - for (j=0;j<M;j++) - { - /* This is a variant of the Alternatively Updated MDF (AUMDF) */ - /* Remove the "if" to make this an MDF filter */ - if (j==0 || st->cancel_count%(M-1) == j-1) - { -#ifdef FIXED_POINT - for (i=0;i<N;i++) - st->wtmp2[i] = EXTRACT16(PSHR32(st->W[chan*N*K*M + j*N*K + speak*N + i],NORMALIZE_SCALEDOWN+16)); - spx_ifft(st->fft_table, st->wtmp2, st->wtmp); - for (i=0;i<st->frame_size;i++) - { - st->wtmp[i]=0; - } - for (i=st->frame_size;i<N;i++) - { - st->wtmp[i]=SHL16(st->wtmp[i],NORMALIZE_SCALEUP); - } - spx_fft(st->fft_table, st->wtmp, st->wtmp2); - /* The "-1" in the shift is a sort of kludge that trades less efficient update speed for decrease noise */ - for (i=0;i<N;i++) - st->W[chan*N*K*M + j*N*K + speak*N + i] -= SHL32(EXTEND32(st->wtmp2[i]),16+NORMALIZE_SCALEDOWN-NORMALIZE_SCALEUP-1); -#else - spx_ifft(st->fft_table, &st->W[chan*N*K*M + j*N*K + speak*N], st->wtmp); - for (i=st->frame_size;i<N;i++) - { - st->wtmp[i]=0; - } - spx_fft(st->fft_table, st->wtmp, &st->W[chan*N*K*M + j*N*K + speak*N]); -#endif - } - } - } - } - - /* So we can use power_spectrum_accum */ - for (i=0;i<=st->frame_size;i++) - st->Rf[i] = st->Yf[i] = st->Xf[i] = 0; - - Dbf = 0; - See = 0; -#ifdef TWO_PATH - /* Difference in response, this is used to estimate the variance of our residual power estimate */ - for (chan = 0; chan < C; chan++) - { - spectral_mul_accum(st->X, st->W+chan*N*K*M, st->Y+chan*N, N, M*K); - spx_ifft(st->fft_table, st->Y+chan*N, st->y+chan*N); - for (i=0;i<st->frame_size;i++) - st->e[chan*N+i] = SUB16(st->e[chan*N+i+st->frame_size], st->y[chan*N+i+st->frame_size]); - Dbf += 10+mdf_inner_prod(st->e+chan*N, st->e+chan*N, st->frame_size); - for (i=0;i<st->frame_size;i++) - st->e[chan*N+i] = SUB16(st->input[chan*st->frame_size+i], st->y[chan*N+i+st->frame_size]); - See += mdf_inner_prod(st->e+chan*N, st->e+chan*N, st->frame_size); - } -#endif - -#ifndef TWO_PATH - Sff = See; -#endif - -#ifdef TWO_PATH - /* Logic for updating the foreground filter */ - - /* For two time windows, compute the mean of the energy difference, as well as the variance */ - st->Davg1 = ADD32(MULT16_32_Q15(QCONST16(.6f,15),st->Davg1), MULT16_32_Q15(QCONST16(.4f,15),SUB32(Sff,See))); - st->Davg2 = ADD32(MULT16_32_Q15(QCONST16(.85f,15),st->Davg2), MULT16_32_Q15(QCONST16(.15f,15),SUB32(Sff,See))); - st->Dvar1 = FLOAT_ADD(FLOAT_MULT(VAR1_SMOOTH, st->Dvar1), FLOAT_MUL32U(MULT16_32_Q15(QCONST16(.4f,15),Sff), MULT16_32_Q15(QCONST16(.4f,15),Dbf))); - st->Dvar2 = FLOAT_ADD(FLOAT_MULT(VAR2_SMOOTH, st->Dvar2), FLOAT_MUL32U(MULT16_32_Q15(QCONST16(.15f,15),Sff), MULT16_32_Q15(QCONST16(.15f,15),Dbf))); - - /* Equivalent float code: - st->Davg1 = .6*st->Davg1 + .4*(Sff-See); - st->Davg2 = .85*st->Davg2 + .15*(Sff-See); - st->Dvar1 = .36*st->Dvar1 + .16*Sff*Dbf; - st->Dvar2 = .7225*st->Dvar2 + .0225*Sff*Dbf; - */ - - update_foreground = 0; - /* Check if we have a statistically significant reduction in the residual echo */ - /* Note that this is *not* Gaussian, so we need to be careful about the longer tail */ - if (FLOAT_GT(FLOAT_MUL32U(SUB32(Sff,See),ABS32(SUB32(Sff,See))), FLOAT_MUL32U(Sff,Dbf))) - update_foreground = 1; - else if (FLOAT_GT(FLOAT_MUL32U(st->Davg1, ABS32(st->Davg1)), FLOAT_MULT(VAR1_UPDATE,(st->Dvar1)))) - update_foreground = 1; - else if (FLOAT_GT(FLOAT_MUL32U(st->Davg2, ABS32(st->Davg2)), FLOAT_MULT(VAR2_UPDATE,(st->Dvar2)))) - update_foreground = 1; - - /* Do we update? */ - if (update_foreground) - { - st->Davg1 = st->Davg2 = 0; - st->Dvar1 = st->Dvar2 = FLOAT_ZERO; - /* Copy background filter to foreground filter */ - for (i=0;i<N*M*C*K;i++) - st->foreground[i] = EXTRACT16(PSHR32(st->W[i],16)); - /* Apply a smooth transition so as to not introduce blocking artifacts */ - for (chan = 0; chan < C; chan++) - for (i=0;i<st->frame_size;i++) - st->e[chan*N+i+st->frame_size] = MULT16_16_Q15(st->window[i+st->frame_size],st->e[chan*N+i+st->frame_size]) + MULT16_16_Q15(st->window[i],st->y[chan*N+i+st->frame_size]); - } else { - int reset_background=0; - /* Otherwise, check if the background filter is significantly worse */ - if (FLOAT_GT(FLOAT_MUL32U(NEG32(SUB32(Sff,See)),ABS32(SUB32(Sff,See))), FLOAT_MULT(VAR_BACKTRACK,FLOAT_MUL32U(Sff,Dbf)))) - reset_background = 1; - if (FLOAT_GT(FLOAT_MUL32U(NEG32(st->Davg1), ABS32(st->Davg1)), FLOAT_MULT(VAR_BACKTRACK,st->Dvar1))) - reset_background = 1; - if (FLOAT_GT(FLOAT_MUL32U(NEG32(st->Davg2), ABS32(st->Davg2)), FLOAT_MULT(VAR_BACKTRACK,st->Dvar2))) - reset_background = 1; - if (reset_background) - { - /* Copy foreground filter to background filter */ - for (i=0;i<N*M*C*K;i++) - st->W[i] = SHL32(EXTEND32(st->foreground[i]),16); - /* We also need to copy the output so as to get correct adaptation */ - for (chan = 0; chan < C; chan++) - { - for (i=0;i<st->frame_size;i++) - st->y[chan*N+i+st->frame_size] = st->e[chan*N+i+st->frame_size]; - for (i=0;i<st->frame_size;i++) - st->e[chan*N+i] = SUB16(st->input[chan*st->frame_size+i], st->y[chan*N+i+st->frame_size]); - } - See = Sff; - st->Davg1 = st->Davg2 = 0; - st->Dvar1 = st->Dvar2 = FLOAT_ZERO; - } - } -#endif - - Sey = Syy = Sdd = 0; - for (chan = 0; chan < C; chan++) - { - /* Compute error signal (for the output with de-emphasis) */ - for (i=0;i<st->frame_size;i++) - { - spx_word32_t tmp_out; -#ifdef TWO_PATH - tmp_out = SUB32(EXTEND32(st->input[chan*st->frame_size+i]), EXTEND32(st->e[chan*N+i+st->frame_size])); -#else - tmp_out = SUB32(EXTEND32(st->input[chan*st->frame_size+i]), EXTEND32(st->y[chan*N+i+st->frame_size])); -#endif - tmp_out = ADD32(tmp_out, EXTEND32(MULT16_16_P15(st->preemph, st->memE[chan]))); - /* This is an arbitrary test for saturation in the microphone signal */ - if (in[i*C+chan] <= -32000 || in[i*C+chan] >= 32000) - { - if (st->saturated == 0) - st->saturated = 1; - } - out[i*C+chan] = WORD2INT(tmp_out); - st->memE[chan] = tmp_out; - } - -#ifdef DUMP_ECHO_CANCEL_DATA - dump_audio(in, far_end, out, st->frame_size); -#endif - - /* Compute error signal (filter update version) */ - for (i=0;i<st->frame_size;i++) - { - st->e[chan*N+i+st->frame_size] = st->e[chan*N+i]; - st->e[chan*N+i] = 0; - } - - /* Compute a bunch of correlations */ - /* FIXME: bad merge */ - Sey += mdf_inner_prod(st->e+chan*N+st->frame_size, st->y+chan*N+st->frame_size, st->frame_size); - Syy += mdf_inner_prod(st->y+chan*N+st->frame_size, st->y+chan*N+st->frame_size, st->frame_size); - Sdd += mdf_inner_prod(st->input+chan*st->frame_size, st->input+chan*st->frame_size, st->frame_size); - - /* Convert error to frequency domain */ - spx_fft(st->fft_table, st->e+chan*N, st->E+chan*N); - for (i=0;i<st->frame_size;i++) - st->y[i+chan*N] = 0; - spx_fft(st->fft_table, st->y+chan*N, st->Y+chan*N); - - /* Compute power spectrum of echo (X), error (E) and filter response (Y) */ - power_spectrum_accum(st->E+chan*N, st->Rf, N); - power_spectrum_accum(st->Y+chan*N, st->Yf, N); - - } - - /*printf ("%f %f %f %f\n", Sff, See, Syy, Sdd, st->update_cond);*/ - - /* Do some sanity check */ - if (!(Syy>=0 && Sxx>=0 && See >= 0) -#ifndef FIXED_POINT - || !(Sff < N*1e9 && Syy < N*1e9 && Sxx < N*1e9) -#endif - ) - { - /* Things have gone really bad */ - st->screwed_up += 50; - for (i=0;i<st->frame_size*C;i++) - out[i] = 0; - } else if (SHR32(Sff, 2) > ADD32(Sdd, SHR32(MULT16_16(N, 10000),6))) - { - /* AEC seems to add lots of echo instead of removing it, let's see if it will improve */ - st->screwed_up++; - } else { - /* Everything's fine */ - st->screwed_up=0; - } - if (st->screwed_up>=50) - { - speex_warning("The echo canceller started acting funny and got slapped (reset). It swears it will behave now."); - speex_echo_state_reset(st); - return; - } - - /* Add a small noise floor to make sure not to have problems when dividing */ - See = MAX32(See, SHR32(MULT16_16(N, 100),6)); - - for (speak = 0; speak < K; speak++) - { - Sxx += mdf_inner_prod(st->x+speak*N+st->frame_size, st->x+speak*N+st->frame_size, st->frame_size); - power_spectrum_accum(st->X+speak*N, st->Xf, N); - } - - - /* Smooth far end energy estimate over time */ - for (j=0;j<=st->frame_size;j++) - st->power[j] = MULT16_32_Q15(ss_1,st->power[j]) + 1 + MULT16_32_Q15(ss,st->Xf[j]); - - /* Compute filtered spectra and (cross-)correlations */ - for (j=st->frame_size;j>=0;j--) - { - spx_float_t Eh, Yh; - Eh = PSEUDOFLOAT(st->Rf[j] - st->Eh[j]); - Yh = PSEUDOFLOAT(st->Yf[j] - st->Yh[j]); - Pey = FLOAT_ADD(Pey,FLOAT_MULT(Eh,Yh)); - Pyy = FLOAT_ADD(Pyy,FLOAT_MULT(Yh,Yh)); -#ifdef FIXED_POINT - st->Eh[j] = MAC16_32_Q15(MULT16_32_Q15(SUB16(32767,st->spec_average),st->Eh[j]), st->spec_average, st->Rf[j]); - st->Yh[j] = MAC16_32_Q15(MULT16_32_Q15(SUB16(32767,st->spec_average),st->Yh[j]), st->spec_average, st->Yf[j]); -#else - st->Eh[j] = (1-st->spec_average)*st->Eh[j] + st->spec_average*st->Rf[j]; - st->Yh[j] = (1-st->spec_average)*st->Yh[j] + st->spec_average*st->Yf[j]; -#endif - } - - Pyy = FLOAT_SQRT(Pyy); - Pey = FLOAT_DIVU(Pey,Pyy); - - /* Compute correlation updatete rate */ - tmp32 = MULT16_32_Q15(st->beta0,Syy); - if (tmp32 > MULT16_32_Q15(st->beta_max,See)) - tmp32 = MULT16_32_Q15(st->beta_max,See); - alpha = FLOAT_DIV32(tmp32, See); - alpha_1 = FLOAT_SUB(FLOAT_ONE, alpha); - /* Update correlations (recursive average) */ - st->Pey = FLOAT_ADD(FLOAT_MULT(alpha_1,st->Pey) , FLOAT_MULT(alpha,Pey)); - st->Pyy = FLOAT_ADD(FLOAT_MULT(alpha_1,st->Pyy) , FLOAT_MULT(alpha,Pyy)); - if (FLOAT_LT(st->Pyy, FLOAT_ONE)) - st->Pyy = FLOAT_ONE; - /* We don't really hope to get better than 33 dB (MIN_LEAK-3dB) attenuation anyway */ - if (FLOAT_LT(st->Pey, FLOAT_MULT(MIN_LEAK,st->Pyy))) - st->Pey = FLOAT_MULT(MIN_LEAK,st->Pyy); - if (FLOAT_GT(st->Pey, st->Pyy)) - st->Pey = st->Pyy; - /* leak_estimate is the linear regression result */ - st->leak_estimate = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIVU(st->Pey, st->Pyy),14)); - /* This looks like a stupid bug, but it's right (because we convert from Q14 to Q15) */ - if (st->leak_estimate > 16383) - st->leak_estimate = 32767; - else - st->leak_estimate = SHL16(st->leak_estimate,1); - /*printf ("%f\n", st->leak_estimate);*/ - - /* Compute Residual to Error Ratio */ -#ifdef FIXED_POINT - tmp32 = MULT16_32_Q15(st->leak_estimate,Syy); - tmp32 = ADD32(SHR32(Sxx,13), ADD32(tmp32, SHL32(tmp32,1))); - /* Check for y in e (lower bound on RER) */ - { - spx_float_t bound = PSEUDOFLOAT(Sey); - bound = FLOAT_DIVU(FLOAT_MULT(bound, bound), PSEUDOFLOAT(ADD32(1,Syy))); - if (FLOAT_GT(bound, PSEUDOFLOAT(See))) - tmp32 = See; - else if (tmp32 < FLOAT_EXTRACT32(bound)) - tmp32 = FLOAT_EXTRACT32(bound); - } - if (tmp32 > SHR32(See,1)) - tmp32 = SHR32(See,1); - RER = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIV32(tmp32,See),15)); -#else - RER = (.0001*Sxx + 3.*MULT16_32_Q15(st->leak_estimate,Syy)) / See; - /* Check for y in e (lower bound on RER) */ - if (RER < Sey*Sey/(1+See*Syy)) - RER = Sey*Sey/(1+See*Syy); - if (RER > .5) - RER = .5; -#endif - - /* We consider that the filter has had minimal adaptation if the following is true*/ - if (!st->adapted && st->sum_adapt > SHL32(EXTEND32(M),15) && MULT16_32_Q15(st->leak_estimate,Syy) > MULT16_32_Q15(QCONST16(.03f,15),Syy)) - { - st->adapted = 1; - } - - if (st->adapted) - { - /* Normal learning rate calculation once we're past the minimal adaptation phase */ - for (i=0;i<=st->frame_size;i++) - { - spx_word32_t r, e; - /* Compute frequency-domain adaptation mask */ - r = MULT16_32_Q15(st->leak_estimate,SHL32(st->Yf[i],3)); - e = SHL32(st->Rf[i],3)+1; -#ifdef FIXED_POINT - if (r>SHR32(e,1)) - r = SHR32(e,1); -#else - if (r>.5*e) - r = .5*e; -#endif - r = MULT16_32_Q15(QCONST16(.7,15),r) + MULT16_32_Q15(QCONST16(.3,15),(spx_word32_t)(MULT16_32_Q15(RER,e))); - /*st->power_1[i] = adapt_rate*r/(e*(1+st->power[i]));*/ - st->power_1[i] = FLOAT_SHL(FLOAT_DIV32_FLOAT(r,FLOAT_MUL32U(e,st->power[i]+10)),WEIGHT_SHIFT+16); - } - } else { - /* Temporary adaption rate if filter is not yet adapted enough */ - spx_word16_t adapt_rate=0; - - if (Sxx > SHR32(MULT16_16(N, 1000),6)) - { - tmp32 = MULT16_32_Q15(QCONST16(.25f, 15), Sxx); -#ifdef FIXED_POINT - if (tmp32 > SHR32(See,2)) - tmp32 = SHR32(See,2); -#else - if (tmp32 > .25*See) - tmp32 = .25*See; -#endif - adapt_rate = FLOAT_EXTRACT16(FLOAT_SHL(FLOAT_DIV32(tmp32, See),15)); - } - for (i=0;i<=st->frame_size;i++) - st->power_1[i] = FLOAT_SHL(FLOAT_DIV32(EXTEND32(adapt_rate),ADD32(st->power[i],10)),WEIGHT_SHIFT+1); - - - /* How much have we adapted so far? */ - st->sum_adapt = ADD32(st->sum_adapt,adapt_rate); - } - - /* FIXME: MC conversion required */ - for (i=0;i<st->frame_size;i++) - st->last_y[i] = st->last_y[st->frame_size+i]; - if (st->adapted) - { - /* If the filter is adapted, take the filtered echo */ - for (i=0;i<st->frame_size;i++) - st->last_y[st->frame_size+i] = in[i]-out[i]; - } else { - /* If filter isn't adapted yet, all we can do is take the far end signal directly */ - /* moved earlier: for (i=0;i<N;i++) - st->last_y[i] = st->x[i];*/ - } - -} - -/* Compute spectrum of estimated echo for use in an echo post-filter */ -void speex_echo_get_residual(SpeexEchoState *st, spx_word32_t *residual_echo, int len) -{ - int i; - spx_word16_t leak2; - int N; - - N = st->window_size; - - /* Apply hanning window (should pre-compute it)*/ - for (i=0;i<N;i++) - st->y[i] = MULT16_16_Q15(st->window[i],st->last_y[i]); - - /* Compute power spectrum of the echo */ - spx_fft(st->fft_table, st->y, st->Y); - power_spectrum(st->Y, residual_echo, N); - -#ifdef FIXED_POINT - if (st->leak_estimate > 16383) - leak2 = 32767; - else - leak2 = SHL16(st->leak_estimate, 1); -#else - if (st->leak_estimate>.5) - leak2 = 1; - else - leak2 = 2*st->leak_estimate; -#endif - /* Estimate residual echo */ - for (i=0;i<=st->frame_size;i++) - residual_echo[i] = (spx_int32_t)MULT16_32_Q15(leak2,residual_echo[i]); - -} - -EXPORT int speex_echo_ctl(SpeexEchoState *st, int request, void *ptr) -{ - switch(request) - { - - case SPEEX_ECHO_GET_FRAME_SIZE: - (*(int*)ptr) = st->frame_size; - break; - case SPEEX_ECHO_SET_SAMPLING_RATE: - st->sampling_rate = (*(int*)ptr); - st->spec_average = DIV32_16(SHL32(EXTEND32(st->frame_size), 15), st->sampling_rate); -#ifdef FIXED_POINT - st->beta0 = DIV32_16(SHL32(EXTEND32(st->frame_size), 16), st->sampling_rate); - st->beta_max = DIV32_16(SHL32(EXTEND32(st->frame_size), 14), st->sampling_rate); -#else - st->beta0 = (2.0f*st->frame_size)/st->sampling_rate; - st->beta_max = (.5f*st->frame_size)/st->sampling_rate; -#endif - if (st->sampling_rate<12000) - st->notch_radius = QCONST16(.9, 15); - else if (st->sampling_rate<24000) - st->notch_radius = QCONST16(.982, 15); - else - st->notch_radius = QCONST16(.992, 15); - break; - case SPEEX_ECHO_GET_SAMPLING_RATE: - (*(int*)ptr) = st->sampling_rate; - break; - case SPEEX_ECHO_GET_IMPULSE_RESPONSE_SIZE: - /*FIXME: Implement this for multiple channels */ - *((spx_int32_t *)ptr) = st->M * st->frame_size; - break; - case SPEEX_ECHO_GET_IMPULSE_RESPONSE: - { - int M = st->M, N = st->window_size, n = st->frame_size, i, j; - spx_int32_t *filt = (spx_int32_t *) ptr; - for(j=0;j<M;j++) - { - /*FIXME: Implement this for multiple channels */ -#ifdef FIXED_POINT - for (i=0;i<N;i++) - st->wtmp2[i] = EXTRACT16(PSHR32(st->W[j*N+i],16+NORMALIZE_SCALEDOWN)); - spx_ifft(st->fft_table, st->wtmp2, st->wtmp); -#else - spx_ifft(st->fft_table, &st->W[j*N], st->wtmp); -#endif - for(i=0;i<n;i++) - filt[j*n+i] = PSHR32(MULT16_16(32767,st->wtmp[i]), WEIGHT_SHIFT-NORMALIZE_SCALEDOWN); - } - } - break; - default: - speex_warning_int("Unknown speex_echo_ctl request: ", request); - return -1; - } - return 0; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/misc_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/misc_bfin.h deleted file mode 100755 index 77b082c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/misc_bfin.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @file misc_bfin.h - @author Jean-Marc Valin - @brief Various compatibility routines for Speex (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_SPEEX_MOVE -void *speex_move (void *dest, void *src, int n) -{ - __asm__ __volatile__ - ( - "L0 = 0;\n\t" - "I0 = %0;\n\t" - "R0 = [I0++];\n\t" - "LOOP move%= LC0 = %2;\n\t" - "LOOP_BEGIN move%=;\n\t" - "[%1++] = R0 || R0 = [I0++];\n\t" - "LOOP_END move%=;\n\t" - "[%1++] = R0;\n\t" - : "=a" (src), "=a" (dest) - : "a" ((n>>2)-1), "0" (src), "1" (dest) - : "R0", "I0", "L0", "memory" - ); - return dest; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.c deleted file mode 100755 index e10a32e..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.c +++ /dev/null @@ -1,366 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: modes.c - - Describes the different modes of the codec - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "modes.h" -#include "ltp.h" -#include "quant_lsp.h" -#include "cb_search.h" -#include "sb_celp.h" -#include "nb_celp.h" -#include "vbr.h" -#include "arch.h" -#include <math.h> - -#ifndef NULL -#define NULL 0 -#endif - - -/* Extern declarations for all codebooks we use here */ -extern const signed char gain_cdbk_nb[]; -extern const signed char gain_cdbk_lbr[]; -extern const signed char exc_5_256_table[]; -extern const signed char exc_5_64_table[]; -extern const signed char exc_8_128_table[]; -extern const signed char exc_10_32_table[]; -extern const signed char exc_10_16_table[]; -extern const signed char exc_20_32_table[]; - - -/* Parameters for Long-Term Prediction (LTP)*/ -static const ltp_params ltp_params_nb = { - gain_cdbk_nb, - 7, - 7 -}; - -/* Parameters for Long-Term Prediction (LTP)*/ -static const ltp_params ltp_params_vlbr = { - gain_cdbk_lbr, - 5, - 0 -}; - -/* Parameters for Long-Term Prediction (LTP)*/ -static const ltp_params ltp_params_lbr = { - gain_cdbk_lbr, - 5, - 7 -}; - -/* Parameters for Long-Term Prediction (LTP)*/ -static const ltp_params ltp_params_med = { - gain_cdbk_lbr, - 5, - 7 -}; - -/* Split-VQ innovation parameters for very low bit-rate narrowband */ -static const split_cb_params split_cb_nb_vlbr = { - 10, /*subvect_size*/ - 4, /*nb_subvect*/ - exc_10_16_table, /*shape_cb*/ - 4, /*shape_bits*/ - 0, -}; - -/* Split-VQ innovation parameters for very low bit-rate narrowband */ -static const split_cb_params split_cb_nb_ulbr = { - 20, /*subvect_size*/ - 2, /*nb_subvect*/ - exc_20_32_table, /*shape_cb*/ - 5, /*shape_bits*/ - 0, -}; - -/* Split-VQ innovation parameters for low bit-rate narrowband */ -static const split_cb_params split_cb_nb_lbr = { - 10, /*subvect_size*/ - 4, /*nb_subvect*/ - exc_10_32_table, /*shape_cb*/ - 5, /*shape_bits*/ - 0, -}; - - -/* Split-VQ innovation parameters narrowband */ -static const split_cb_params split_cb_nb = { - 5, /*subvect_size*/ - 8, /*nb_subvect*/ - exc_5_64_table, /*shape_cb*/ - 6, /*shape_bits*/ - 0, -}; - -/* Split-VQ innovation parameters narrowband */ -static const split_cb_params split_cb_nb_med = { - 8, /*subvect_size*/ - 5, /*nb_subvect*/ - exc_8_128_table, /*shape_cb*/ - 7, /*shape_bits*/ - 0, -}; - -/* Split-VQ innovation for low-band wideband */ -static const split_cb_params split_cb_sb = { - 5, /*subvect_size*/ - 8, /*nb_subvect*/ - exc_5_256_table, /*shape_cb*/ - 8, /*shape_bits*/ - 0, -}; - - - -/* 2150 bps "vocoder-like" mode for comfort noise */ -static const SpeexSubmode nb_submode1 = { - 0, - 1, - 0, - 0, - /* LSP quantization */ - lsp_quant_lbr, - lsp_unquant_lbr, - /* No pitch quantization */ - forced_pitch_quant, - forced_pitch_unquant, - NULL, - /* No innovation quantization (noise only) */ - noise_codebook_quant, - noise_codebook_unquant, - NULL, - -1, - 43 -}; - -/* 3.95 kbps very low bit-rate mode */ -static const SpeexSubmode nb_submode8 = { - 0, - 1, - 0, - 0, - /*LSP quantization*/ - lsp_quant_lbr, - lsp_unquant_lbr, - /*No pitch quantization*/ - forced_pitch_quant, - forced_pitch_unquant, - NULL, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb_ulbr, - QCONST16(.5,15), - 79 -}; - -/* 5.95 kbps very low bit-rate mode */ -static const SpeexSubmode nb_submode2 = { - 0, - 0, - 0, - 0, - /*LSP quantization*/ - lsp_quant_lbr, - lsp_unquant_lbr, - /*No pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_vlbr, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb_vlbr, - QCONST16(.6,15), - 119 -}; - -/* 8 kbps low bit-rate mode */ -static const SpeexSubmode nb_submode3 = { - -1, - 0, - 1, - 0, - /*LSP quantization*/ - lsp_quant_lbr, - lsp_unquant_lbr, - /*Pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_lbr, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb_lbr, - QCONST16(.55,15), - 160 -}; - -/* 11 kbps medium bit-rate mode */ -static const SpeexSubmode nb_submode4 = { - -1, - 0, - 1, - 0, - /*LSP quantization*/ - lsp_quant_lbr, - lsp_unquant_lbr, - /*Pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_med, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb_med, - QCONST16(.45,15), - 220 -}; - -/* 15 kbps high bit-rate mode */ -static const SpeexSubmode nb_submode5 = { - -1, - 0, - 3, - 0, - /*LSP quantization*/ - lsp_quant_nb, - lsp_unquant_nb, - /*Pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_nb, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb, - QCONST16(.3,15), - 300 -}; - -/* 18.2 high bit-rate mode */ -static const SpeexSubmode nb_submode6 = { - -1, - 0, - 3, - 0, - /*LSP quantization*/ - lsp_quant_nb, - lsp_unquant_nb, - /*Pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_nb, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_sb, - QCONST16(.2,15), - 364 -}; - -/* 24.6 kbps high bit-rate mode */ -static const SpeexSubmode nb_submode7 = { - -1, - 0, - 3, - 1, - /*LSP quantization*/ - lsp_quant_nb, - lsp_unquant_nb, - /*Pitch quantization*/ - pitch_search_3tap, - pitch_unquant_3tap, - &ltp_params_nb, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, - &split_cb_nb, - QCONST16(.1,15), - 492 -}; - - -/* Default mode for narrowband */ -static const SpeexNBMode nb_mode = { - 160, /*frameSize*/ - 40, /*subframeSize*/ - 10, /*lpcSize*/ - 17, /*pitchStart*/ - 144, /*pitchEnd*/ -#ifdef FIXED_POINT - 29491, 19661, /* gamma1, gamma2 */ -#else - 0.9, 0.6, /* gamma1, gamma2 */ -#endif - QCONST16(.0002,15), /*lpc_floor*/ - {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7, - &nb_submode8, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - 5, - {1, 8, 2, 3, 3, 4, 4, 5, 5, 6, 7} -}; - - -/* Default mode for narrowband */ -EXPORT const SpeexMode speex_nb_mode = { - &nb_mode, - nb_mode_query, - "narrowband", - 0, - 4, - &nb_encoder_init, - &nb_encoder_destroy, - &nb_encode, - &nb_decoder_init, - &nb_decoder_destroy, - &nb_decode, - &nb_encoder_ctl, - &nb_decoder_ctl, -}; - - - -EXPORT int speex_mode_query(const SpeexMode *mode, int request, void *ptr) -{ - return mode->query(mode->mode, request, ptr); -} - -#ifdef FIXED_DEBUG -long long spx_mips=0; -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.h deleted file mode 100755 index 0fa1c34..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin */ -/** - @file modes.h - @brief Describes the different modes of the codec -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef MODES_H -#define MODES_H - -#include "speex/speex.h" -#include "speex/speex_bits.h" -#include "arch.h" - -#define NB_SUBMODES 16 -#define NB_SUBMODE_BITS 4 - -#define SB_SUBMODES 8 -#define SB_SUBMODE_BITS 3 - -/* Used internally, NOT TO BE USED in applications */ -/** Used internally*/ -#define SPEEX_GET_PI_GAIN 100 -/** Used internally*/ -#define SPEEX_GET_EXC 101 -/** Used internally*/ -#define SPEEX_GET_INNOV 102 -/** Used internally*/ -#define SPEEX_GET_DTX_STATUS 103 -/** Used internally*/ -#define SPEEX_SET_INNOVATION_SAVE 104 -/** Used internally*/ -#define SPEEX_SET_WIDEBAND 105 - -/** Used internally*/ -#define SPEEX_GET_STACK 106 - - -/** Quantizes LSPs */ -typedef void (*lsp_quant_func)(spx_lsp_t *, spx_lsp_t *, int, SpeexBits *); - -/** Decodes quantized LSPs */ -typedef void (*lsp_unquant_func)(spx_lsp_t *, int, SpeexBits *); - - -/** Long-term predictor quantization */ -typedef int (*ltp_quant_func)(spx_word16_t *, spx_word16_t *, spx_coef_t *, spx_coef_t *, - spx_coef_t *, spx_sig_t *, const void *, int, int, spx_word16_t, - int, int, SpeexBits*, char *, spx_word16_t *, spx_word16_t *, int, int, int, spx_word32_t *); - -/** Long-term un-quantize */ -typedef void (*ltp_unquant_func)(spx_word16_t *, spx_word32_t *, int, int, spx_word16_t, const void *, int, int *, - spx_word16_t *, SpeexBits*, char*, int, int, spx_word16_t, int); - - -/** Innovation quantization function */ -typedef void (*innovation_quant_func)(spx_word16_t *, spx_coef_t *, spx_coef_t *, spx_coef_t *, const void *, int, int, - spx_sig_t *, spx_word16_t *, SpeexBits *, char *, int, int); - -/** Innovation unquantization function */ -typedef void (*innovation_unquant_func)(spx_sig_t *, const void *, int, SpeexBits*, char *, spx_int32_t *); - -/** Description of a Speex sub-mode (wither narrowband or wideband */ -typedef struct SpeexSubmode { - int lbr_pitch; /**< Set to -1 for "normal" modes, otherwise encode pitch using a global pitch and allowing a +- lbr_pitch variation (for low not-rates)*/ - int forced_pitch_gain; /**< Use the same (forced) pitch gain for all sub-frames */ - int have_subframe_gain; /**< Number of bits to use as sub-frame innovation gain */ - int double_codebook; /**< Apply innovation quantization twice for higher quality (and higher bit-rate)*/ - /*LSP functions*/ - lsp_quant_func lsp_quant; /**< LSP quantization function */ - lsp_unquant_func lsp_unquant; /**< LSP unquantization function */ - - /*Long-term predictor functions*/ - ltp_quant_func ltp_quant; /**< Long-term predictor (pitch) quantizer */ - ltp_unquant_func ltp_unquant; /**< Long-term predictor (pitch) un-quantizer */ - const void *ltp_params; /**< Pitch parameters (options) */ - - /*Quantization of innovation*/ - innovation_quant_func innovation_quant; /**< Innovation quantization */ - innovation_unquant_func innovation_unquant; /**< Innovation un-quantization */ - const void *innovation_params; /**< Innovation quantization parameters*/ - - spx_word16_t comb_gain; /**< Gain of enhancer comb filter */ - - int bits_per_frame; /**< Number of bits per frame after encoding*/ -} SpeexSubmode; - -/** Struct defining the encoding/decoding mode*/ -typedef struct SpeexNBMode { - int frameSize; /**< Size of frames used for encoding */ - int subframeSize; /**< Size of sub-frames used for encoding */ - int lpcSize; /**< Order of LPC filter */ - int pitchStart; /**< Smallest pitch value allowed */ - int pitchEnd; /**< Largest pitch value allowed */ - - spx_word16_t gamma1; /**< Perceptual filter parameter #1 */ - spx_word16_t gamma2; /**< Perceptual filter parameter #2 */ - spx_word16_t lpc_floor; /**< Noise floor for LPC analysis */ - - const SpeexSubmode *submodes[NB_SUBMODES]; /**< Sub-mode data for the mode */ - int defaultSubmode; /**< Default sub-mode to use when encoding */ - int quality_map[11]; /**< Mode corresponding to each quality setting */ -} SpeexNBMode; - - -/** Struct defining the encoding/decoding mode for SB-CELP (wideband) */ -typedef struct SpeexSBMode { - const SpeexMode *nb_mode; /**< Embedded narrowband mode */ - int frameSize; /**< Size of frames used for encoding */ - int subframeSize; /**< Size of sub-frames used for encoding */ - int lpcSize; /**< Order of LPC filter */ - spx_word16_t gamma1; /**< Perceptual filter parameter #1 */ - spx_word16_t gamma2; /**< Perceptual filter parameter #1 */ - spx_word16_t lpc_floor; /**< Noise floor for LPC analysis */ - spx_word16_t folding_gain; - - const SpeexSubmode *submodes[SB_SUBMODES]; /**< Sub-mode data for the mode */ - int defaultSubmode; /**< Default sub-mode to use when encoding */ - int low_quality_map[11]; /**< Mode corresponding to each quality setting */ - int quality_map[11]; /**< Mode corresponding to each quality setting */ -#ifndef DISABLE_VBR - const float (*vbr_thresh)[11]; -#endif - int nb_modes; -} SpeexSBMode; - -int speex_encode_native(void *state, spx_word16_t *in, SpeexBits *bits); -int speex_decode_native(void *state, SpeexBits *bits, spx_word16_t *out); - -int nb_mode_query(const void *mode, int request, void *ptr); -int wb_mode_query(const void *mode, int request, void *ptr); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes_wb.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes_wb.c deleted file mode 100755 index e3b4842..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/modes_wb.c +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright (C) 2002-2007 Jean-Marc Valin - File: modes.c - - Describes the wideband modes of the codec - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "modes.h" -#include "ltp.h" -#include "quant_lsp.h" -#include "cb_search.h" -#include "sb_celp.h" -#include "nb_celp.h" -#include "vbr.h" -#include "arch.h" -#include <math.h> -#include "os_support.h" - - -#ifndef NULL -#define NULL 0 -#endif - -EXPORT const SpeexMode * const speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode, &speex_uwb_mode}; - -extern const signed char hexc_table[]; -extern const signed char hexc_10_32_table[]; - -#ifndef DISABLE_WIDEBAND - -/* Split-VQ innovation for high-band wideband */ -static const split_cb_params split_cb_high = { - 8, /*subvect_size*/ - 5, /*nb_subvect*/ - hexc_table, /*shape_cb*/ - 7, /*shape_bits*/ - 1, -}; - - -/* Split-VQ innovation for high-band wideband */ -static const split_cb_params split_cb_high_lbr = { - 10, /*subvect_size*/ - 4, /*nb_subvect*/ - hexc_10_32_table, /*shape_cb*/ - 5, /*shape_bits*/ - 0, -}; - -#endif - - -static const SpeexSubmode wb_submode1 = { - 0, - 0, - 1, - 0, - /*LSP quantization*/ - lsp_quant_high, - lsp_unquant_high, - /*Pitch quantization*/ - NULL, - NULL, - NULL, - /*No innovation quantization*/ - NULL, - NULL, - NULL, - -1, - 36 -}; - - -static const SpeexSubmode wb_submode2 = { - 0, - 0, - 1, - 0, - /*LSP quantization*/ - lsp_quant_high, - lsp_unquant_high, - /*Pitch quantization*/ - NULL, - NULL, - NULL, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, -#ifdef DISABLE_WIDEBAND - NULL, -#else - &split_cb_high_lbr, -#endif - -1, - 112 -}; - - -static const SpeexSubmode wb_submode3 = { - 0, - 0, - 1, - 0, - /*LSP quantization*/ - lsp_quant_high, - lsp_unquant_high, - /*Pitch quantization*/ - NULL, - NULL, - NULL, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, -#ifdef DISABLE_WIDEBAND - NULL, -#else - &split_cb_high, -#endif - -1, - 192 -}; - -static const SpeexSubmode wb_submode4 = { - 0, - 0, - 1, - 1, - /*LSP quantization*/ - lsp_quant_high, - lsp_unquant_high, - /*Pitch quantization*/ - NULL, - NULL, - NULL, - /*Innovation quantization*/ - split_cb_search_shape_sign, - split_cb_shape_sign_unquant, -#ifdef DISABLE_WIDEBAND - NULL, -#else - &split_cb_high, -#endif - -1, - 352 -}; - - -/* Split-band wideband CELP mode*/ -static const SpeexSBMode sb_wb_mode = { - &speex_nb_mode, - 160, /*frameSize*/ - 40, /*subframeSize*/ - 8, /*lpcSize*/ -#ifdef FIXED_POINT - 29491, 19661, /* gamma1, gamma2 */ -#else - 0.9, 0.6, /* gamma1, gamma2 */ -#endif - QCONST16(.0002,15), /*lpc_floor*/ - QCONST16(0.9f,15), - {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL}, - 3, - {1, 8, 2, 3, 4, 5, 5, 6, 6, 7, 7}, - {1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4}, -#ifndef DISABLE_VBR - vbr_hb_thresh, -#endif - 5 -}; - - -EXPORT const SpeexMode speex_wb_mode = { - &sb_wb_mode, - wb_mode_query, - "wideband (sub-band CELP)", - 1, - 4, - &sb_encoder_init, - &sb_encoder_destroy, - &sb_encode, - &sb_decoder_init, - &sb_decoder_destroy, - &sb_decode, - &sb_encoder_ctl, - &sb_decoder_ctl, -}; - - - -/* "Ultra-wideband" mode stuff */ - - - -/* Split-band "ultra-wideband" (32 kbps) CELP mode*/ -static const SpeexSBMode sb_uwb_mode = { - &speex_wb_mode, - 320, /*frameSize*/ - 80, /*subframeSize*/ - 8, /*lpcSize*/ -#ifdef FIXED_POINT - 29491, 19661, /* gamma1, gamma2 */ -#else - 0.9, 0.6, /* gamma1, gamma2 */ -#endif - QCONST16(.0002,15), /*lpc_floor*/ - QCONST16(0.7f,15), - {NULL, &wb_submode1, NULL, NULL, NULL, NULL, NULL, NULL}, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, - {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, -#ifndef DISABLE_VBR - vbr_uhb_thresh, -#endif - 2 -}; - -int wb_mode_query(const void *mode, int request, void *ptr) -{ - const SpeexSBMode *m = (const SpeexSBMode*)mode; - - switch (request) - { - case SPEEX_MODE_FRAME_SIZE: - *((int*)ptr)=2*m->frameSize; - break; - case SPEEX_SUBMODE_BITS_PER_FRAME: - if (*((int*)ptr)==0) - *((int*)ptr) = SB_SUBMODE_BITS+1; - else if (m->submodes[*((int*)ptr)]==NULL) - *((int*)ptr) = -1; - else - *((int*)ptr) = m->submodes[*((int*)ptr)]->bits_per_frame; - break; - default: - speex_warning_int("Unknown wb_mode_query request: ", request); - return -1; - } - return 0; -} - - -EXPORT const SpeexMode speex_uwb_mode = { - &sb_uwb_mode, - wb_mode_query, - "ultra-wideband (sub-band CELP)", - 2, - 4, - &sb_encoder_init, - &sb_encoder_destroy, - &sb_encode, - &sb_decoder_init, - &sb_decoder_destroy, - &sb_decode, - &sb_encoder_ctl, - &sb_decoder_ctl, -}; - -/* We have defined speex_lib_get_mode() as a macro in speex.h */ -#undef speex_lib_get_mode - -EXPORT const SpeexMode * speex_lib_get_mode (int mode) -{ - if (mode < 0 || mode >= SPEEX_NB_MODES) return NULL; - - return speex_mode_list[mode]; -} - - - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.c deleted file mode 100755 index 14d06f1..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.c +++ /dev/null @@ -1,1903 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: nb_celp.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "nb_celp.h" -#include "lpc.h" -#include "lsp.h" -#include "ltp.h" -#include "quant_lsp.h" -#include "cb_search.h" -#include "filters.h" -#include "stack_alloc.h" -#include "vq.h" -#include "speex/speex_bits.h" -#include "vbr.h" -#include "arch.h" -#include "math_approx.h" -#include "os_support.h" -#include "speex/speex_callbacks.h" - -#ifdef VORBIS_PSYCHO -#include "vorbis_psy.h" -#endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#define SUBMODE(x) st->submodes[st->submodeID]->x - -/* Default size for the encoder and decoder stack (can be changed at compile time). - This does not apply when using variable-size arrays or alloca. */ -#ifndef NB_ENC_STACK -#define NB_ENC_STACK (8000*sizeof(spx_sig_t)) -#endif - -#ifndef NB_DEC_STACK -#define NB_DEC_STACK (4000*sizeof(spx_sig_t)) -#endif - - -#ifdef FIXED_POINT -const spx_word32_t ol_gain_table[32]={18900, 25150, 33468, 44536, 59265, 78865, 104946, 139653, 185838, 247297, 329081, 437913, 582736, 775454, 1031906, 1373169, 1827293, 2431601, 3235761, 4305867, 5729870, 7624808, 10146425, 13501971, 17967238, 23909222, 31816294, 42338330, 56340132, 74972501, 99766822, 132760927}; -const spx_word16_t exc_gain_quant_scal3_bound[7]={1841, 3883, 6051, 8062, 10444, 13580, 18560}; -const spx_word16_t exc_gain_quant_scal3[8]={1002, 2680, 5086, 7016, 9108, 11781, 15380, 21740}; -const spx_word16_t exc_gain_quant_scal1_bound[1]={14385}; -const spx_word16_t exc_gain_quant_scal1[2]={11546, 17224}; - -#define LSP_MARGIN 16 -#define LSP_DELTA1 6553 -#define LSP_DELTA2 1638 - -#else - -const float exc_gain_quant_scal3_bound[7]={0.112338f, 0.236980f, 0.369316f, 0.492054f, 0.637471f, 0.828874f, 1.132784f}; -const float exc_gain_quant_scal3[8]={0.061130f, 0.163546f, 0.310413f, 0.428220f, 0.555887f, 0.719055f, 0.938694f, 1.326874f}; -const float exc_gain_quant_scal1_bound[1]={0.87798f}; -const float exc_gain_quant_scal1[2]={0.70469f, 1.05127f}; - -#define LSP_MARGIN .002f -#define LSP_DELTA1 .2f -#define LSP_DELTA2 .05f - -#endif - -#ifdef VORBIS_PSYCHO -#define EXTRA_BUFFER 100 -#else -#define EXTRA_BUFFER 0 -#endif - - -#define sqr(x) ((x)*(x)) - -extern const spx_word16_t lag_window[]; -extern const spx_word16_t lpc_window[]; - -void *nb_encoder_init(const SpeexMode *m) -{ - EncState *st; - const SpeexNBMode *mode; - int i; - - mode=(const SpeexNBMode *)m->mode; - st = (EncState*)speex_alloc(sizeof(EncState)); - if (!st) - return NULL; -#if defined(VAR_ARRAYS) || defined (USE_ALLOCA) - st->stack = NULL; -#else - st->stack = (char*)speex_alloc_scratch(NB_ENC_STACK); -#endif - - st->mode=m; - - st->frameSize = mode->frameSize; - st->nbSubframes=mode->frameSize/mode->subframeSize; - st->subframeSize=mode->subframeSize; - st->windowSize = st->frameSize+st->subframeSize; - st->lpcSize = mode->lpcSize; - st->gamma1=mode->gamma1; - st->gamma2=mode->gamma2; - st->min_pitch=mode->pitchStart; - st->max_pitch=mode->pitchEnd; - st->lpc_floor = mode->lpc_floor; - - st->submodes=mode->submodes; - st->submodeID=st->submodeSelect=mode->defaultSubmode; - st->bounded_pitch = 1; - - st->encode_submode = 1; - -#ifdef VORBIS_PSYCHO - st->psy = vorbis_psy_init(8000, 256); - st->curve = (float*)speex_alloc(128*sizeof(float)); - st->old_curve = (float*)speex_alloc(128*sizeof(float)); - st->psy_window = (float*)speex_alloc(256*sizeof(float)); -#endif - - st->cumul_gain = 1024; - - /* Allocating input buffer */ - st->winBuf = (spx_word16_t*)speex_alloc((st->windowSize-st->frameSize)*sizeof(spx_word16_t)); - /* Allocating excitation buffer */ - st->excBuf = (spx_word16_t*)speex_alloc((mode->frameSize+mode->pitchEnd+2)*sizeof(spx_word16_t)); - st->exc = st->excBuf + mode->pitchEnd + 2; - st->swBuf = (spx_word16_t*)speex_alloc((mode->frameSize+mode->pitchEnd+2)*sizeof(spx_word16_t)); - st->sw = st->swBuf + mode->pitchEnd + 2; - - st->window= lpc_window; - - /* Create the window for autocorrelation (lag-windowing) */ - st->lagWindow = lag_window; - - st->old_lsp = (spx_lsp_t*)speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); - st->old_qlsp = (spx_lsp_t*)speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); - st->first = 1; - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), st->lpcSize+1); - - st->mem_sp = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_sw = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_sw_whole = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_exc = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_exc2 = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - - st->pi_gain = (spx_word32_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); - st->innov_rms_save = NULL; - - st->pitch = (int*)speex_alloc((st->nbSubframes)*sizeof(int)); - -#ifndef DISABLE_VBR - st->vbr = (VBRState*)speex_alloc(sizeof(VBRState)); - vbr_init(st->vbr); - st->vbr_quality = 8; - st->vbr_enabled = 0; - st->vbr_max = 0; - st->vad_enabled = 0; - st->dtx_enabled = 0; - st->dtx_count=0; - st->abr_enabled = 0; - st->abr_drift = 0; - st->abr_drift2 = 0; -#endif /* #ifndef DISABLE_VBR */ - - st->plc_tuning = 2; - st->complexity=2; - st->sampling_rate=8000; - st->isWideband = 0; - st->highpass_enabled = 1; - -#ifdef ENABLE_VALGRIND - VALGRIND_MAKE_READABLE(st, NB_ENC_STACK); -#endif - return st; -} - -void nb_encoder_destroy(void *state) -{ - EncState *st=(EncState *)state; - /* Free all allocated memory */ -#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) - speex_free_scratch(st->stack); -#endif - - speex_free (st->winBuf); - speex_free (st->excBuf); - speex_free (st->old_qlsp); - speex_free (st->swBuf); - - speex_free (st->old_lsp); - speex_free (st->mem_sp); - speex_free (st->mem_sw); - speex_free (st->mem_sw_whole); - speex_free (st->mem_exc); - speex_free (st->mem_exc2); - speex_free (st->pi_gain); - speex_free (st->pitch); - -#ifndef DISABLE_VBR - vbr_destroy(st->vbr); - speex_free (st->vbr); -#endif /* #ifndef DISABLE_VBR */ - -#ifdef VORBIS_PSYCHO - vorbis_psy_destroy(st->psy); - speex_free (st->curve); - speex_free (st->old_curve); - speex_free (st->psy_window); -#endif - - /*Free state memory... should be last*/ - speex_free(st); -} - -int nb_encode(void *state, void *vin, SpeexBits *bits) -{ - EncState *st; - int i, sub, roots; - int ol_pitch; - spx_word16_t ol_pitch_coef; - spx_word32_t ol_gain; - VARDECL(spx_word16_t *ringing); - VARDECL(spx_word16_t *target); - VARDECL(spx_sig_t *innov); - VARDECL(spx_word32_t *exc32); - VARDECL(spx_mem_t *mem); - VARDECL(spx_coef_t *bw_lpc1); - VARDECL(spx_coef_t *bw_lpc2); - VARDECL(spx_coef_t *lpc); - VARDECL(spx_lsp_t *lsp); - VARDECL(spx_lsp_t *qlsp); - VARDECL(spx_lsp_t *interp_lsp); - VARDECL(spx_lsp_t *interp_qlsp); - VARDECL(spx_coef_t *interp_lpc); - VARDECL(spx_coef_t *interp_qlpc); - char *stack; - VARDECL(spx_word16_t *syn_resp); - VARDECL(spx_word16_t *real_exc); - - spx_word32_t ener=0; - spx_word16_t fine_gain; - spx_word16_t *in = (spx_word16_t*)vin; - - st=(EncState *)state; - stack=st->stack; - - ALLOC(lpc, st->lpcSize, spx_coef_t); - ALLOC(bw_lpc1, st->lpcSize, spx_coef_t); - ALLOC(bw_lpc2, st->lpcSize, spx_coef_t); - ALLOC(lsp, st->lpcSize, spx_lsp_t); - ALLOC(qlsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_lsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_qlsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_lpc, st->lpcSize, spx_coef_t); - ALLOC(interp_qlpc, st->lpcSize, spx_coef_t); - - /* Move signals 1 frame towards the past */ - SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, st->max_pitch+2); - SPEEX_MOVE(st->swBuf, st->swBuf+st->frameSize, st->max_pitch+2); - - if (st->highpass_enabled) - highpass(in, in, st->frameSize, (st->isWideband?HIGHPASS_WIDEBAND:HIGHPASS_NARROWBAND)|HIGHPASS_INPUT, st->mem_hp); - - { - VARDECL(spx_word16_t *w_sig); - VARDECL(spx_word16_t *autocorr); - ALLOC(w_sig, st->windowSize, spx_word16_t); - ALLOC(autocorr, st->lpcSize+1, spx_word16_t); - /* Window for analysis */ - for (i=0;i<st->windowSize-st->frameSize;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(st->winBuf[i],st->window[i]),SIG_SHIFT)); - for (;i<st->windowSize;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(in[i-st->windowSize+st->frameSize],st->window[i]),SIG_SHIFT)); - /* Compute auto-correlation */ - _spx_autocorr(w_sig, autocorr, st->lpcSize+1, st->windowSize); - autocorr[0] = ADD16(autocorr[0],MULT16_16_Q15(autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */ - - /* Lag windowing: equivalent to filtering in the power-spectrum domain */ - for (i=0;i<st->lpcSize+1;i++) - autocorr[i] = MULT16_16_Q14(autocorr[i],st->lagWindow[i]); - - /* Levinson-Durbin */ - _spx_lpc(lpc, autocorr, st->lpcSize); - /* LPC to LSPs (x-domain) transform */ - roots=lpc_to_lsp (lpc, st->lpcSize, lsp, 10, LSP_DELTA1, stack); - /* Check if we found all the roots */ - if (roots!=st->lpcSize) - { - /*If we can't find all LSP's, do some damage control and use previous filter*/ - for (i=0;i<st->lpcSize;i++) - { - lsp[i]=st->old_lsp[i]; - } - } - } - - - - - /* Whole frame analysis (open-loop estimation of pitch and excitation gain) */ - { - int diff = st->windowSize-st->frameSize; - if (st->first) - for (i=0;i<st->lpcSize;i++) - interp_lsp[i] = lsp[i]; - else - lsp_interpolate(st->old_lsp, lsp, interp_lsp, st->lpcSize, st->nbSubframes, st->nbSubframes<<1); - - lsp_enforce_margin(interp_lsp, st->lpcSize, LSP_MARGIN); - - /* Compute interpolated LPCs (unquantized) for whole frame*/ - lsp_to_lpc(interp_lsp, interp_lpc, st->lpcSize,stack); - - - /*Open-loop pitch*/ - if (!st->submodes[st->submodeID] || (st->complexity>2 && SUBMODE(have_subframe_gain)<3) || SUBMODE(forced_pitch_gain) || SUBMODE(lbr_pitch) != -1 -#ifndef DISABLE_VBR - || st->vbr_enabled || st->vad_enabled -#endif - ) - { - int nol_pitch[6]; - spx_word16_t nol_pitch_coef[6]; - - bw_lpc(st->gamma1, interp_lpc, bw_lpc1, st->lpcSize); - bw_lpc(st->gamma2, interp_lpc, bw_lpc2, st->lpcSize); - - SPEEX_COPY(st->sw, st->winBuf, diff); - SPEEX_COPY(st->sw+diff, in, st->frameSize-diff); - filter_mem16(st->sw, bw_lpc1, bw_lpc2, st->sw, st->frameSize, st->lpcSize, st->mem_sw_whole, stack); - - open_loop_nbest_pitch(st->sw, st->min_pitch, st->max_pitch, st->frameSize, - nol_pitch, nol_pitch_coef, 6, stack); - ol_pitch=nol_pitch[0]; - ol_pitch_coef = nol_pitch_coef[0]; - /*Try to remove pitch multiples*/ - for (i=1;i<6;i++) - { -#ifdef FIXED_POINT - if ((nol_pitch_coef[i]>MULT16_16_Q15(nol_pitch_coef[0],27853)) && -#else - if ((nol_pitch_coef[i]>.85*nol_pitch_coef[0]) && -#endif - (ABS(2*nol_pitch[i]-ol_pitch)<=2 || ABS(3*nol_pitch[i]-ol_pitch)<=3 || - ABS(4*nol_pitch[i]-ol_pitch)<=4 || ABS(5*nol_pitch[i]-ol_pitch)<=5)) - { - /*ol_pitch_coef=nol_pitch_coef[i];*/ - ol_pitch = nol_pitch[i]; - } - } - /*if (ol_pitch>50) - ol_pitch/=2;*/ - /*ol_pitch_coef = sqrt(ol_pitch_coef);*/ - - } else { - ol_pitch=0; - ol_pitch_coef=0; - } - - /*Compute "real" excitation*/ - SPEEX_COPY(st->exc, st->winBuf, diff); - SPEEX_COPY(st->exc+diff, in, st->frameSize-diff); - fir_mem16(st->exc, interp_lpc, st->exc, st->frameSize, st->lpcSize, st->mem_exc, stack); - - /* Compute open-loop excitation gain */ - { - spx_word16_t g = compute_rms16(st->exc, st->frameSize); - if (st->submodeID!=1 && ol_pitch>0) - ol_gain = MULT16_16(g, MULT16_16_Q14(QCONST16(1.1,14), - spx_sqrt(QCONST32(1.,28)-MULT16_32_Q15(QCONST16(.8,15),SHL32(MULT16_16(ol_pitch_coef,ol_pitch_coef),16))))); - else - ol_gain = SHL32(EXTEND32(g),SIG_SHIFT); - } - } - -#ifdef VORBIS_PSYCHO - SPEEX_MOVE(st->psy_window, st->psy_window+st->frameSize, 256-st->frameSize); - SPEEX_COPY(&st->psy_window[256-st->frameSize], in, st->frameSize); - compute_curve(st->psy, st->psy_window, st->curve); - /*print_vec(st->curve, 128, "curve");*/ - if (st->first) - SPEEX_COPY(st->old_curve, st->curve, 128); -#endif - - /*VBR stuff*/ -#ifndef DISABLE_VBR - if (st->vbr && (st->vbr_enabled||st->vad_enabled)) - { - float lsp_dist=0; - for (i=0;i<st->lpcSize;i++) - lsp_dist += (st->old_lsp[i] - lsp[i])*(st->old_lsp[i] - lsp[i]); - lsp_dist /= LSP_SCALING*LSP_SCALING; - - if (st->abr_enabled) - { - float qual_change=0; - if (st->abr_drift2 * st->abr_drift > 0) - { - /* Only adapt if long-term and short-term drift are the same sign */ - qual_change = -.00001*st->abr_drift/(1+st->abr_count); - if (qual_change>.05) - qual_change=.05; - if (qual_change<-.05) - qual_change=-.05; - } - st->vbr_quality += qual_change; - if (st->vbr_quality>10) - st->vbr_quality=10; - if (st->vbr_quality<0) - st->vbr_quality=0; - } - - st->relative_quality = vbr_analysis(st->vbr, in, st->frameSize, ol_pitch, GAIN_SCALING_1*ol_pitch_coef); - /*if (delta_qual<0)*/ - /* delta_qual*=.1*(3+st->vbr_quality);*/ - if (st->vbr_enabled) - { - spx_int32_t mode; - int choice=0; - float min_diff=100; - mode = 8; - while (mode) - { - int v1; - float thresh; - v1=(int)floor(st->vbr_quality); - if (v1==10) - thresh = vbr_nb_thresh[mode][v1]; - else - thresh = (st->vbr_quality-v1)*vbr_nb_thresh[mode][v1+1] + (1+v1-st->vbr_quality)*vbr_nb_thresh[mode][v1]; - if (st->relative_quality > thresh && - st->relative_quality-thresh<min_diff) - { - choice = mode; - min_diff = st->relative_quality-thresh; - } - mode--; - } - mode=choice; - if (mode==0) - { - if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20) - { - mode=1; - st->dtx_count=1; - } else { - mode=0; - st->dtx_count++; - } - } else { - st->dtx_count=0; - } - - speex_encoder_ctl(state, SPEEX_SET_MODE, &mode); - if (st->vbr_max>0) - { - spx_int32_t rate; - speex_encoder_ctl(state, SPEEX_GET_BITRATE, &rate); - if (rate > st->vbr_max) - { - rate = st->vbr_max; - speex_encoder_ctl(state, SPEEX_SET_BITRATE, &rate); - } - } - - if (st->abr_enabled) - { - spx_int32_t bitrate; - speex_encoder_ctl(state, SPEEX_GET_BITRATE, &bitrate); - st->abr_drift+=(bitrate-st->abr_enabled); - st->abr_drift2 = .95*st->abr_drift2 + .05*(bitrate-st->abr_enabled); - st->abr_count += 1.0; - } - - } else { - /*VAD only case*/ - int mode; - if (st->relative_quality<2) - { - if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20) - { - st->dtx_count=1; - mode=1; - } else { - mode=0; - st->dtx_count++; - } - } else { - st->dtx_count = 0; - mode=st->submodeSelect; - } - /*speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);*/ - st->submodeID=mode; - } - } else { - st->relative_quality = -1; - } -#endif /* #ifndef DISABLE_VBR */ - - if (st->encode_submode) - { - /* First, transmit a zero for narrowband */ - speex_bits_pack(bits, 0, 1); - - /* Transmit the sub-mode we use for this frame */ - speex_bits_pack(bits, st->submodeID, NB_SUBMODE_BITS); - - } - - /* If null mode (no transmission), just set a couple things to zero*/ - if (st->submodes[st->submodeID] == NULL) - { - for (i=0;i<st->frameSize;i++) - st->exc[i]=st->sw[i]=VERY_SMALL; - - for (i=0;i<st->lpcSize;i++) - st->mem_sw[i]=0; - st->first=1; - st->bounded_pitch = 1; - - SPEEX_COPY(st->winBuf, in+2*st->frameSize-st->windowSize, st->windowSize-st->frameSize); - - /* Clear memory (no need to really compute it) */ - for (i=0;i<st->lpcSize;i++) - st->mem_sp[i] = 0; - return 0; - - } - - /* LSP Quantization */ - if (st->first) - { - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i] = lsp[i]; - } - - - /*Quantize LSPs*/ -#if 1 /*0 for unquantized*/ - SUBMODE(lsp_quant)(lsp, qlsp, st->lpcSize, bits); -#else - for (i=0;i<st->lpcSize;i++) - qlsp[i]=lsp[i]; -#endif - - /*If we use low bit-rate pitch mode, transmit open-loop pitch*/ - if (SUBMODE(lbr_pitch)!=-1) - { - speex_bits_pack(bits, ol_pitch-st->min_pitch, 7); - } - - if (SUBMODE(forced_pitch_gain)) - { - int quant; - /* This just damps the pitch a bit, because it tends to be too aggressive when forced */ - ol_pitch_coef = MULT16_16_Q15(QCONST16(.9,15), ol_pitch_coef); -#ifdef FIXED_POINT - quant = PSHR16(MULT16_16_16(15, ol_pitch_coef),GAIN_SHIFT); -#else - quant = (int)floor(.5+15*ol_pitch_coef*GAIN_SCALING_1); -#endif - if (quant>15) - quant=15; - if (quant<0) - quant=0; - speex_bits_pack(bits, quant, 4); - ol_pitch_coef=MULT16_16_P15(QCONST16(0.066667,15),SHL16(quant,GAIN_SHIFT)); - } - - - /*Quantize and transmit open-loop excitation gain*/ -#ifdef FIXED_POINT - { - int qe = scal_quant32(ol_gain, ol_gain_table, 32); - /*ol_gain = exp(qe/3.5)*SIG_SCALING;*/ - ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]); - speex_bits_pack(bits, qe, 5); - } -#else - { - int qe = (int)(floor(.5+3.5*log(ol_gain*1.0/SIG_SCALING))); - if (qe<0) - qe=0; - if (qe>31) - qe=31; - ol_gain = exp(qe/3.5)*SIG_SCALING; - speex_bits_pack(bits, qe, 5); - } -#endif - - - - /* Special case for first frame */ - if (st->first) - { - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - } - - /* Target signal */ - ALLOC(target, st->subframeSize, spx_word16_t); - ALLOC(innov, st->subframeSize, spx_sig_t); - ALLOC(exc32, st->subframeSize, spx_word32_t); - ALLOC(ringing, st->subframeSize, spx_word16_t); - ALLOC(syn_resp, st->subframeSize, spx_word16_t); - ALLOC(real_exc, st->subframeSize, spx_word16_t); - ALLOC(mem, st->lpcSize, spx_mem_t); - - /* Loop on sub-frames */ - for (sub=0;sub<st->nbSubframes;sub++) - { - int offset; - spx_word16_t *sw; - spx_word16_t *exc; - int pitch; - int response_bound = st->subframeSize; - - /* Offset relative to start of frame */ - offset = st->subframeSize*sub; - /* Excitation */ - exc=st->exc+offset; - /* Weighted signal */ - sw=st->sw+offset; - - /* LSP interpolation (quantized and unquantized) */ - lsp_interpolate(st->old_lsp, lsp, interp_lsp, st->lpcSize, sub, st->nbSubframes); - lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, st->lpcSize, sub, st->nbSubframes); - - /* Make sure the filters are stable */ - lsp_enforce_margin(interp_lsp, st->lpcSize, LSP_MARGIN); - lsp_enforce_margin(interp_qlsp, st->lpcSize, LSP_MARGIN); - - /* Compute interpolated LPCs (quantized and unquantized) */ - lsp_to_lpc(interp_lsp, interp_lpc, st->lpcSize,stack); - - lsp_to_lpc(interp_qlsp, interp_qlpc, st->lpcSize, stack); - - /* Compute analysis filter gain at w=pi (for use in SB-CELP) */ - { - spx_word32_t pi_g=LPC_SCALING; - for (i=0;i<st->lpcSize;i+=2) - { - /*pi_g += -st->interp_qlpc[i] + st->interp_qlpc[i+1];*/ - pi_g = ADD32(pi_g, SUB32(EXTEND32(interp_qlpc[i+1]),EXTEND32(interp_qlpc[i]))); - } - st->pi_gain[sub] = pi_g; - } - -#ifdef VORBIS_PSYCHO - { - float curr_curve[128]; - float fact = ((float)sub+1.0f)/st->nbSubframes; - for (i=0;i<128;i++) - curr_curve[i] = (1.0f-fact)*st->old_curve[i] + fact*st->curve[i]; - curve_to_lpc(st->psy, curr_curve, bw_lpc1, bw_lpc2, 10); - } -#else - /* Compute bandwidth-expanded (unquantized) LPCs for perceptual weighting */ - bw_lpc(st->gamma1, interp_lpc, bw_lpc1, st->lpcSize); - if (st->gamma2>=0) - bw_lpc(st->gamma2, interp_lpc, bw_lpc2, st->lpcSize); - else - { - for (i=0;i<st->lpcSize;i++) - bw_lpc2[i]=0; - } - /*print_vec(st->bw_lpc1, 10, "bw_lpc");*/ -#endif - - /*FIXME: This will break if we change the window size */ - speex_assert(st->windowSize-st->frameSize == st->subframeSize); - if (sub==0) - { - for (i=0;i<st->subframeSize;i++) - real_exc[i] = sw[i] = st->winBuf[i]; - } else { - for (i=0;i<st->subframeSize;i++) - real_exc[i] = sw[i] = in[i+((sub-1)*st->subframeSize)]; - } - fir_mem16(real_exc, interp_qlpc, real_exc, st->subframeSize, st->lpcSize, st->mem_exc2, stack); - - if (st->complexity==0) - response_bound >>= 1; - compute_impulse_response(interp_qlpc, bw_lpc1, bw_lpc2, syn_resp, response_bound, st->lpcSize, stack); - for (i=response_bound;i<st->subframeSize;i++) - syn_resp[i]=VERY_SMALL; - - /* Compute zero response of A(z/g1) / ( A(z/g2) * A(z) ) */ - for (i=0;i<st->lpcSize;i++) - mem[i]=SHL32(st->mem_sp[i],1); - for (i=0;i<st->subframeSize;i++) - ringing[i] = VERY_SMALL; -#ifdef SHORTCUTS2 - iir_mem16(ringing, interp_qlpc, ringing, response_bound, st->lpcSize, mem, stack); - for (i=0;i<st->lpcSize;i++) - mem[i]=SHL32(st->mem_sw[i],1); - filter_mem16(ringing, st->bw_lpc1, st->bw_lpc2, ringing, response_bound, st->lpcSize, mem, stack); - SPEEX_MEMSET(&ringing[response_bound], 0, st->subframeSize-response_bound); -#else - iir_mem16(ringing, interp_qlpc, ringing, st->subframeSize, st->lpcSize, mem, stack); - for (i=0;i<st->lpcSize;i++) - mem[i]=SHL32(st->mem_sw[i],1); - filter_mem16(ringing, bw_lpc1, bw_lpc2, ringing, st->subframeSize, st->lpcSize, mem, stack); -#endif - - /* Compute weighted signal */ - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sw[i]; - filter_mem16(sw, bw_lpc1, bw_lpc2, sw, st->subframeSize, st->lpcSize, mem, stack); - - if (st->complexity==0) - for (i=0;i<st->lpcSize;i++) - st->mem_sw[i]=mem[i]; - - /* Compute target signal (saturation prevents overflows on clipped input speech) */ - for (i=0;i<st->subframeSize;i++) - target[i]=EXTRACT16(SATURATE(SUB32(sw[i],PSHR32(ringing[i],1)),32767)); - - /* Reset excitation */ - SPEEX_MEMSET(exc, 0, st->subframeSize); - - /* If we have a long-term predictor (otherwise, something's wrong) */ - speex_assert (SUBMODE(ltp_quant)); - { - int pit_min, pit_max; - /* Long-term prediction */ - if (SUBMODE(lbr_pitch) != -1) - { - /* Low bit-rate pitch handling */ - int margin; - margin = SUBMODE(lbr_pitch); - if (margin) - { - if (ol_pitch < st->min_pitch+margin-1) - ol_pitch=st->min_pitch+margin-1; - if (ol_pitch > st->max_pitch-margin) - ol_pitch=st->max_pitch-margin; - pit_min = ol_pitch-margin+1; - pit_max = ol_pitch+margin; - } else { - pit_min=pit_max=ol_pitch; - } - } else { - pit_min = st->min_pitch; - pit_max = st->max_pitch; - } - - /* Force pitch to use only the current frame if needed */ - if (st->bounded_pitch && pit_max>offset) - pit_max=offset; - - /* Perform pitch search */ - pitch = SUBMODE(ltp_quant)(target, sw, interp_qlpc, bw_lpc1, bw_lpc2, - exc32, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef, - st->lpcSize, st->subframeSize, bits, stack, - exc, syn_resp, st->complexity, 0, st->plc_tuning, &st->cumul_gain); - - st->pitch[sub]=pitch; - } - /* Quantization of innovation */ - SPEEX_MEMSET(innov, 0, st->subframeSize); - - /* FIXME: Make sure this is save from overflows (so far so good) */ - for (i=0;i<st->subframeSize;i++) - real_exc[i] = EXTRACT16(SUB32(EXTEND32(real_exc[i]), PSHR32(exc32[i],SIG_SHIFT-1))); - - ener = SHL32(EXTEND32(compute_rms16(real_exc, st->subframeSize)),SIG_SHIFT); - - /*FIXME: Should use DIV32_16 and make sure result fits in 16 bits */ -#ifdef FIXED_POINT - { - spx_word32_t f = PDIV32(ener,PSHR32(ol_gain,SIG_SHIFT)); - if (f<=32767) - fine_gain = f; - else - fine_gain = 32767; - } -#else - fine_gain = PDIV32_16(ener,PSHR32(ol_gain,SIG_SHIFT)); -#endif - /* Calculate gain correction for the sub-frame (if any) */ - if (SUBMODE(have_subframe_gain)) - { - int qe; - if (SUBMODE(have_subframe_gain)==3) - { - qe = scal_quant(fine_gain, exc_gain_quant_scal3_bound, 8); - speex_bits_pack(bits, qe, 3); - ener=MULT16_32_Q14(exc_gain_quant_scal3[qe],ol_gain); - } else { - qe = scal_quant(fine_gain, exc_gain_quant_scal1_bound, 2); - speex_bits_pack(bits, qe, 1); - ener=MULT16_32_Q14(exc_gain_quant_scal1[qe],ol_gain); - } - } else { - ener=ol_gain; - } - - /*printf ("%f %f\n", ener, ol_gain);*/ - - /* Normalize innovation */ - signal_div(target, target, ener, st->subframeSize); - - /* Quantize innovation */ - speex_assert (SUBMODE(innovation_quant)); - { - /* Codebook search */ - SUBMODE(innovation_quant)(target, interp_qlpc, bw_lpc1, bw_lpc2, - SUBMODE(innovation_params), st->lpcSize, st->subframeSize, - innov, syn_resp, bits, stack, st->complexity, SUBMODE(double_codebook)); - - /* De-normalize innovation and update excitation */ - signal_mul(innov, innov, ener, st->subframeSize); - - for (i=0;i<st->subframeSize;i++) - exc[i] = EXTRACT16(SATURATE32(PSHR32(ADD32(SHL32(exc32[i],1),innov[i]),SIG_SHIFT),32767)); - - /* In some (rare) modes, we do a second search (more bits) to reduce noise even more */ - if (SUBMODE(double_codebook)) { - char *tmp_stack=stack; - VARDECL(spx_sig_t *innov2); - ALLOC(innov2, st->subframeSize, spx_sig_t); - SPEEX_MEMSET(innov2, 0, st->subframeSize); - for (i=0;i<st->subframeSize;i++) - target[i]=MULT16_16_P13(QCONST16(2.2f,13), target[i]); - SUBMODE(innovation_quant)(target, interp_qlpc, bw_lpc1, bw_lpc2, - SUBMODE(innovation_params), st->lpcSize, st->subframeSize, - innov2, syn_resp, bits, stack, st->complexity, 0); - signal_mul(innov2, innov2, MULT16_32_Q15(QCONST16(0.454545f,15),ener), st->subframeSize); - for (i=0;i<st->subframeSize;i++) - innov[i] = ADD32(innov[i],innov2[i]); - stack = tmp_stack; - } - for (i=0;i<st->subframeSize;i++) - exc[i] = EXTRACT16(SATURATE32(PSHR32(ADD32(SHL32(exc32[i],1),innov[i]),SIG_SHIFT),32767)); - if (st->innov_rms_save) - { - st->innov_rms_save[sub] = compute_rms(innov, st->subframeSize); - } - } - - /* Final signal synthesis from excitation */ - iir_mem16(exc, interp_qlpc, sw, st->subframeSize, st->lpcSize, st->mem_sp, stack); - - /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */ - if (st->complexity!=0) - filter_mem16(sw, bw_lpc1, bw_lpc2, sw, st->subframeSize, st->lpcSize, st->mem_sw, stack); - - } - - /* Store the LSPs for interpolation in the next frame */ - if (st->submodeID>=1) - { - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i] = lsp[i]; - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - } - -#ifdef VORBIS_PSYCHO - if (st->submodeID>=1) - SPEEX_COPY(st->old_curve, st->curve, 128); -#endif - - if (st->submodeID==1) - { -#ifndef DISABLE_VBR - if (st->dtx_count) - speex_bits_pack(bits, 15, 4); - else -#endif - speex_bits_pack(bits, 0, 4); - } - - /* The next frame will not be the first (Duh!) */ - st->first = 0; - SPEEX_COPY(st->winBuf, in+2*st->frameSize-st->windowSize, st->windowSize-st->frameSize); - - if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0) - st->bounded_pitch = 1; - else - st->bounded_pitch = 0; - - return 1; -} - -void *nb_decoder_init(const SpeexMode *m) -{ - DecState *st; - const SpeexNBMode *mode; - int i; - - mode=(const SpeexNBMode*)m->mode; - st = (DecState *)speex_alloc(sizeof(DecState)); - if (!st) - return NULL; -#if defined(VAR_ARRAYS) || defined (USE_ALLOCA) - st->stack = NULL; -#else - st->stack = (char*)speex_alloc_scratch(NB_DEC_STACK); -#endif - - st->mode=m; - - - st->encode_submode = 1; - - st->first=1; - /* Codec parameters, should eventually have several "modes"*/ - st->frameSize = mode->frameSize; - st->nbSubframes=mode->frameSize/mode->subframeSize; - st->subframeSize=mode->subframeSize; - st->lpcSize = mode->lpcSize; - st->min_pitch=mode->pitchStart; - st->max_pitch=mode->pitchEnd; - - st->submodes=mode->submodes; - st->submodeID=mode->defaultSubmode; - - st->lpc_enh_enabled=1; - - st->excBuf = (spx_word16_t*)speex_alloc((st->frameSize + 2*st->max_pitch + st->subframeSize + 12)*sizeof(spx_word16_t)); - st->exc = st->excBuf + 2*st->max_pitch + st->subframeSize + 6; - SPEEX_MEMSET(st->excBuf, 0, st->frameSize + st->max_pitch); - - st->interp_qlpc = (spx_coef_t*)speex_alloc(st->lpcSize*sizeof(spx_coef_t)); - st->old_qlsp = (spx_lsp_t*)speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); - st->mem_sp = (spx_mem_t*)speex_alloc(st->lpcSize*sizeof(spx_mem_t)); - st->pi_gain = (spx_word32_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); - st->last_pitch = 40; - st->count_lost=0; - st->pitch_gain_buf[0] = st->pitch_gain_buf[1] = st->pitch_gain_buf[2] = 0; - st->pitch_gain_buf_idx = 0; - st->seed = 1000; - - st->sampling_rate=8000; - st->last_ol_gain = 0; - - st->user_callback.func = &speex_default_user_handler; - st->user_callback.data = NULL; - for (i=0;i<16;i++) - st->speex_callbacks[i].func = NULL; - - st->voc_m1=st->voc_m2=st->voc_mean=0; - st->voc_offset=0; - st->dtx_enabled=0; - st->isWideband = 0; - st->highpass_enabled = 1; - -#ifdef ENABLE_VALGRIND - VALGRIND_MAKE_READABLE(st, NB_DEC_STACK); -#endif - return st; -} - -void nb_decoder_destroy(void *state) -{ - DecState *st; - st=(DecState*)state; - -#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) - speex_free_scratch(st->stack); -#endif - - speex_free (st->excBuf); - speex_free (st->interp_qlpc); - speex_free (st->old_qlsp); - speex_free (st->mem_sp); - speex_free (st->pi_gain); - - speex_free(state); -} - -#define median3(a, b, c) ((a) < (b) ? ((b) < (c) ? (b) : ((a) < (c) ? (c) : (a))) : ((c) < (b) ? (b) : ((c) < (a) ? (c) : (a)))) - -#ifdef FIXED_POINT -const spx_word16_t attenuation[10] = {32767, 31483, 27923, 22861, 17278, 12055, 7764, 4616, 2533, 1283}; -#else -const spx_word16_t attenuation[10] = {1., 0.961, 0.852, 0.698, 0.527, 0.368, 0.237, 0.141, 0.077, 0.039}; - -#endif - -static void nb_decode_lost(DecState *st, spx_word16_t *out, char *stack) -{ - int i; - int pitch_val; - spx_word16_t pitch_gain; - spx_word16_t fact; - spx_word16_t gain_med; - spx_word16_t innov_gain; - spx_word16_t noise_gain; - - if (st->count_lost<10) - fact = attenuation[st->count_lost]; - else - fact = 0; - - gain_med = median3(st->pitch_gain_buf[0], st->pitch_gain_buf[1], st->pitch_gain_buf[2]); - if (gain_med < st->last_pitch_gain) - st->last_pitch_gain = gain_med; - -#ifdef FIXED_POINT - pitch_gain = st->last_pitch_gain; - if (pitch_gain>54) - pitch_gain = 54; - pitch_gain = SHL16(pitch_gain, 9); -#else - pitch_gain = GAIN_SCALING_1*st->last_pitch_gain; - if (pitch_gain>.85) - pitch_gain=.85; -#endif - pitch_gain = MULT16_16_Q15(fact,pitch_gain) + VERY_SMALL; - /* FIXME: This was rms of innovation (not exc) */ - innov_gain = compute_rms16(st->exc, st->frameSize); - noise_gain = MULT16_16_Q15(innov_gain, MULT16_16_Q15(fact, SUB16(Q15ONE,MULT16_16_Q15(pitch_gain,pitch_gain)))); - /* Shift all buffers by one frame */ - SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, 2*st->max_pitch + st->subframeSize + 12); - - - pitch_val = st->last_pitch + SHR32((spx_int32_t)speex_rand(1+st->count_lost, &st->seed),SIG_SHIFT); - if (pitch_val > st->max_pitch) - pitch_val = st->max_pitch; - if (pitch_val < st->min_pitch) - pitch_val = st->min_pitch; - for (i=0;i<st->frameSize;i++) - { - st->exc[i]= MULT16_16_Q15(pitch_gain, (st->exc[i-pitch_val]+VERY_SMALL)) + - speex_rand(noise_gain, &st->seed); - } - - bw_lpc(QCONST16(.98,15), st->interp_qlpc, st->interp_qlpc, st->lpcSize); - iir_mem16(&st->exc[-st->subframeSize], st->interp_qlpc, out, st->frameSize, - st->lpcSize, st->mem_sp, stack); - highpass(out, out, st->frameSize, HIGHPASS_NARROWBAND|HIGHPASS_OUTPUT, st->mem_hp); - - st->first = 0; - st->count_lost++; - st->pitch_gain_buf[st->pitch_gain_buf_idx++] = PSHR16(pitch_gain,9); - if (st->pitch_gain_buf_idx > 2) /* rollover */ - st->pitch_gain_buf_idx = 0; -} - -/* Just so we don't need to carry the complete wideband mode information */ -static const int wb_skip_table[8] = {0, 36, 112, 192, 352, 0, 0, 0}; - -int nb_decode(void *state, SpeexBits *bits, void *vout) -{ - DecState *st; - int i, sub; - int pitch; - spx_word16_t pitch_gain[3]; - spx_word32_t ol_gain=0; - int ol_pitch=0; - spx_word16_t ol_pitch_coef=0; - int best_pitch=40; - spx_word16_t best_pitch_gain=0; - int wideband; - int m; - char *stack; - VARDECL(spx_sig_t *innov); - VARDECL(spx_word32_t *exc32); - VARDECL(spx_coef_t *ak); - VARDECL(spx_lsp_t *qlsp); - spx_word16_t pitch_average=0; - - spx_word16_t *out = (spx_word16_t*)vout; - VARDECL(spx_lsp_t *interp_qlsp); - - st=(DecState*)state; - stack=st->stack; - - /* Check if we're in DTX mode*/ - if (!bits && st->dtx_enabled) - { - st->submodeID=0; - } else - { - /* If bits is NULL, consider the packet to be lost (what could we do anyway) */ - if (!bits) - { - nb_decode_lost(st, out, stack); - return 0; - } - - if (st->encode_submode) - { - - /* Search for next narrowband block (handle requests, skip wideband blocks) */ - do { - if (speex_bits_remaining(bits)<5) - return -1; - wideband = speex_bits_unpack_unsigned(bits, 1); - if (wideband) /* Skip wideband block (for compatibility) */ - { - int submode; - int advance; - advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); - /*speex_mode_query(&speex_wb_mode, SPEEX_SUBMODE_BITS_PER_FRAME, &advance);*/ - advance = wb_skip_table[submode]; - if (advance < 0) - { - speex_notify("Invalid mode encountered. The stream is corrupted."); - return -2; - } - advance -= (SB_SUBMODE_BITS+1); - speex_bits_advance(bits, advance); - - if (speex_bits_remaining(bits)<5) - return -1; - wideband = speex_bits_unpack_unsigned(bits, 1); - if (wideband) - { - advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); - /*speex_mode_query(&speex_wb_mode, SPEEX_SUBMODE_BITS_PER_FRAME, &advance);*/ - advance = wb_skip_table[submode]; - if (advance < 0) - { - speex_notify("Invalid mode encountered. The stream is corrupted."); - return -2; - } - advance -= (SB_SUBMODE_BITS+1); - speex_bits_advance(bits, advance); - wideband = speex_bits_unpack_unsigned(bits, 1); - if (wideband) - { - speex_notify("More than two wideband layers found. The stream is corrupted."); - return -2; - } - - } - } - if (speex_bits_remaining(bits)<4) - return -1; - /* FIXME: Check for overflow */ - m = speex_bits_unpack_unsigned(bits, 4); - if (m==15) /* We found a terminator */ - { - return -1; - } else if (m==14) /* Speex in-band request */ - { - int ret = speex_inband_handler(bits, st->speex_callbacks, state); - if (ret) - return ret; - } else if (m==13) /* User in-band request */ - { - int ret = st->user_callback.func(bits, state, st->user_callback.data); - if (ret) - return ret; - } else if (m>8) /* Invalid mode */ - { - speex_notify("Invalid mode encountered. The stream is corrupted."); - return -2; - } - - } while (m>8); - - /* Get the sub-mode that was used */ - st->submodeID = m; - } - - } - - /* Shift all buffers by one frame */ - SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, 2*st->max_pitch + st->subframeSize + 12); - - /* If null mode (no transmission), just set a couple things to zero*/ - if (st->submodes[st->submodeID] == NULL) - { - VARDECL(spx_coef_t *lpc); - ALLOC(lpc, st->lpcSize, spx_coef_t); - bw_lpc(QCONST16(0.93f,15), st->interp_qlpc, lpc, st->lpcSize); - { - spx_word16_t innov_gain=0; - /* FIXME: This was innov, not exc */ - innov_gain = compute_rms16(st->exc, st->frameSize); - for (i=0;i<st->frameSize;i++) - st->exc[i]=speex_rand(innov_gain, &st->seed); - } - - - st->first=1; - - /* Final signal synthesis from excitation */ - iir_mem16(st->exc, lpc, out, st->frameSize, st->lpcSize, st->mem_sp, stack); - - st->count_lost=0; - return 0; - } - - ALLOC(qlsp, st->lpcSize, spx_lsp_t); - - /* Unquantize LSPs */ - SUBMODE(lsp_unquant)(qlsp, st->lpcSize, bits); - - /*Damp memory if a frame was lost and the LSP changed too much*/ - if (st->count_lost) - { - spx_word16_t fact; - spx_word32_t lsp_dist=0; - for (i=0;i<st->lpcSize;i++) - lsp_dist = ADD32(lsp_dist, EXTEND32(ABS(st->old_qlsp[i] - qlsp[i]))); -#ifdef FIXED_POINT - fact = SHR16(19661,SHR32(lsp_dist,LSP_SHIFT+2)); -#else - fact = .6*exp(-.2*lsp_dist); -#endif - for (i=0;i<st->lpcSize;i++) - st->mem_sp[i] = MULT16_32_Q15(fact,st->mem_sp[i]); - } - - - /* Handle first frame and lost-packet case */ - if (st->first || st->count_lost) - { - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - } - - /* Get open-loop pitch estimation for low bit-rate pitch coding */ - if (SUBMODE(lbr_pitch)!=-1) - { - ol_pitch = st->min_pitch+speex_bits_unpack_unsigned(bits, 7); - } - - if (SUBMODE(forced_pitch_gain)) - { - int quant; - quant = speex_bits_unpack_unsigned(bits, 4); - ol_pitch_coef=MULT16_16_P15(QCONST16(0.066667,15),SHL16(quant,GAIN_SHIFT)); - } - - /* Get global excitation gain */ - { - int qe; - qe = speex_bits_unpack_unsigned(bits, 5); -#ifdef FIXED_POINT - /* FIXME: Perhaps we could slightly lower the gain here when the output is going to saturate? */ - ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]); -#else - ol_gain = SIG_SCALING*exp(qe/3.5); -#endif - } - - ALLOC(ak, st->lpcSize, spx_coef_t); - ALLOC(innov, st->subframeSize, spx_sig_t); - ALLOC(exc32, st->subframeSize, spx_word32_t); - - if (st->submodeID==1) - { - int extra; - extra = speex_bits_unpack_unsigned(bits, 4); - - if (extra==15) - st->dtx_enabled=1; - else - st->dtx_enabled=0; - } - if (st->submodeID>1) - st->dtx_enabled=0; - - /*Loop on subframes */ - for (sub=0;sub<st->nbSubframes;sub++) - { - int offset; - spx_word16_t *exc; - spx_word16_t *sp; - spx_word16_t *innov_save = NULL; - spx_word16_t tmp; - - /* Offset relative to start of frame */ - offset = st->subframeSize*sub; - /* Excitation */ - exc=st->exc+offset; - /* Original signal */ - sp=out+offset; - if (st->innov_save) - innov_save = st->innov_save+offset; - - - /* Reset excitation */ - SPEEX_MEMSET(exc, 0, st->subframeSize); - - /*Adaptive codebook contribution*/ - speex_assert (SUBMODE(ltp_unquant)); - { - int pit_min, pit_max; - /* Handle pitch constraints if any */ - if (SUBMODE(lbr_pitch) != -1) - { - int margin; - margin = SUBMODE(lbr_pitch); - if (margin) - { -/* GT - need optimization? - if (ol_pitch < st->min_pitch+margin-1) - ol_pitch=st->min_pitch+margin-1; - if (ol_pitch > st->max_pitch-margin) - ol_pitch=st->max_pitch-margin; - pit_min = ol_pitch-margin+1; - pit_max = ol_pitch+margin; -*/ - pit_min = ol_pitch-margin+1; - if (pit_min < st->min_pitch) - pit_min = st->min_pitch; - pit_max = ol_pitch+margin; - if (pit_max > st->max_pitch) - pit_max = st->max_pitch; - } else { - pit_min = pit_max = ol_pitch; - } - } else { - pit_min = st->min_pitch; - pit_max = st->max_pitch; - } - - - - SUBMODE(ltp_unquant)(exc, exc32, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), - st->subframeSize, &pitch, &pitch_gain[0], bits, stack, - st->count_lost, offset, st->last_pitch_gain, 0); - - /* Ensuring that things aren't blowing up as would happen if e.g. an encoder is - crafting packets to make us produce NaNs and slow down the decoder (vague DoS threat). - We can probably be even more aggressive and limit to 15000 or so. */ - sanitize_values32(exc32, NEG32(QCONST32(32000,SIG_SHIFT-1)), QCONST32(32000,SIG_SHIFT-1), st->subframeSize); - - tmp = gain_3tap_to_1tap(pitch_gain); - - pitch_average += tmp; - if ((tmp>best_pitch_gain&&ABS(2*best_pitch-pitch)>=3&&ABS(3*best_pitch-pitch)>=4&&ABS(4*best_pitch-pitch)>=5) - || (tmp>MULT16_16_Q15(QCONST16(.6,15),best_pitch_gain)&&(ABS(best_pitch-2*pitch)<3||ABS(best_pitch-3*pitch)<4||ABS(best_pitch-4*pitch)<5)) - || (MULT16_16_Q15(QCONST16(.67,15),tmp)>best_pitch_gain&&(ABS(2*best_pitch-pitch)<3||ABS(3*best_pitch-pitch)<4||ABS(4*best_pitch-pitch)<5)) ) - { - best_pitch = pitch; - if (tmp > best_pitch_gain) - best_pitch_gain = tmp; - } - } - - /* Unquantize the innovation */ - { - int q_energy; - spx_word32_t ener; - - SPEEX_MEMSET(innov, 0, st->subframeSize); - - /* Decode sub-frame gain correction */ - if (SUBMODE(have_subframe_gain)==3) - { - q_energy = speex_bits_unpack_unsigned(bits, 3); - ener = MULT16_32_Q14(exc_gain_quant_scal3[q_energy],ol_gain); - } else if (SUBMODE(have_subframe_gain)==1) - { - q_energy = speex_bits_unpack_unsigned(bits, 1); - ener = MULT16_32_Q14(exc_gain_quant_scal1[q_energy],ol_gain); - } else { - ener = ol_gain; - } - - speex_assert (SUBMODE(innovation_unquant)); - { - /*Fixed codebook contribution*/ - SUBMODE(innovation_unquant)(innov, SUBMODE(innovation_params), st->subframeSize, bits, stack, &st->seed); - /* De-normalize innovation and update excitation */ - - signal_mul(innov, innov, ener, st->subframeSize); - - /* Decode second codebook (only for some modes) */ - if (SUBMODE(double_codebook)) - { - char *tmp_stack=stack; - VARDECL(spx_sig_t *innov2); - ALLOC(innov2, st->subframeSize, spx_sig_t); - SPEEX_MEMSET(innov2, 0, st->subframeSize); - SUBMODE(innovation_unquant)(innov2, SUBMODE(innovation_params), st->subframeSize, bits, stack, &st->seed); - signal_mul(innov2, innov2, MULT16_32_Q15(QCONST16(0.454545f,15),ener), st->subframeSize); - for (i=0;i<st->subframeSize;i++) - innov[i] = ADD32(innov[i], innov2[i]); - stack = tmp_stack; - } - for (i=0;i<st->subframeSize;i++) - exc[i]=EXTRACT16(SATURATE32(PSHR32(ADD32(SHL32(exc32[i],1),innov[i]),SIG_SHIFT),32767)); - /*print_vec(exc, 40, "innov");*/ - if (innov_save) - { - for (i=0;i<st->subframeSize;i++) - innov_save[i] = EXTRACT16(PSHR32(innov[i], SIG_SHIFT)); - } - } - - /*Vocoder mode*/ - if (st->submodeID==1) - { - spx_word16_t g=ol_pitch_coef; - g=MULT16_16_P14(QCONST16(1.5f,14),(g-QCONST16(.2f,6))); - if (g<0) - g=0; - if (g>GAIN_SCALING) - g=GAIN_SCALING; - - SPEEX_MEMSET(exc, 0, st->subframeSize); - while (st->voc_offset<st->subframeSize) - { - /* exc[st->voc_offset]= g*sqrt(2*ol_pitch)*ol_gain; - Not quite sure why we need the factor of two in the sqrt */ - if (st->voc_offset>=0) - exc[st->voc_offset]=MULT16_16(spx_sqrt(MULT16_16_16(2,ol_pitch)),EXTRACT16(PSHR32(MULT16_16(g,PSHR32(ol_gain,SIG_SHIFT)),6))); - st->voc_offset+=ol_pitch; - } - st->voc_offset -= st->subframeSize; - - for (i=0;i<st->subframeSize;i++) - { - spx_word16_t exci=exc[i]; - exc[i]= ADD16(ADD16(MULT16_16_Q15(QCONST16(.7f,15),exc[i]) , MULT16_16_Q15(QCONST16(.3f,15),st->voc_m1)), - SUB16(MULT16_16_Q15(Q15_ONE-MULT16_16_16(QCONST16(.85f,9),g),EXTRACT16(PSHR32(innov[i],SIG_SHIFT))), - MULT16_16_Q15(MULT16_16_16(QCONST16(.15f,9),g),EXTRACT16(PSHR32(st->voc_m2,SIG_SHIFT))) - )); - st->voc_m1 = exci; - st->voc_m2=innov[i]; - st->voc_mean = EXTRACT16(PSHR32(ADD32(MULT16_16(QCONST16(.8f,15),st->voc_mean), MULT16_16(QCONST16(.2f,15),exc[i])), 15)); - exc[i]-=st->voc_mean; - } - } - - } - } - - ALLOC(interp_qlsp, st->lpcSize, spx_lsp_t); - - if (st->lpc_enh_enabled && SUBMODE(comb_gain)>0 && !st->count_lost) - { - multicomb(st->exc-st->subframeSize, out, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack); - multicomb(st->exc+st->subframeSize, out+2*st->subframeSize, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack); - } else { - SPEEX_COPY(out, &st->exc[-st->subframeSize], st->frameSize); - } - - /* If the last packet was lost, re-scale the excitation to obtain the same energy as encoded in ol_gain */ - if (st->count_lost) - { - spx_word16_t exc_ener; - spx_word32_t gain32; - spx_word16_t gain; - exc_ener = compute_rms16 (st->exc, st->frameSize); - gain32 = PDIV32(ol_gain, ADD16(exc_ener,1)); -#ifdef FIXED_POINT - if (gain32 > 32767) - gain32 = 32767; - gain = EXTRACT16(gain32); -#else - if (gain32 > 2) - gain32=2; - gain = gain32; -#endif - for (i=0;i<st->frameSize;i++) - { - st->exc[i] = MULT16_16_Q14(gain, st->exc[i]); - out[i]=st->exc[i-st->subframeSize]; - } - } - - /*Loop on subframes */ - for (sub=0;sub<st->nbSubframes;sub++) - { - int offset; - spx_word16_t *sp; - spx_word16_t *exc; - /* Offset relative to start of frame */ - offset = st->subframeSize*sub; - /* Original signal */ - sp=out+offset; - /* Excitation */ - exc=st->exc+offset; - - /* LSP interpolation (quantized and unquantized) */ - lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, st->lpcSize, sub, st->nbSubframes); - - /* Make sure the LSP's are stable */ - lsp_enforce_margin(interp_qlsp, st->lpcSize, LSP_MARGIN); - - /* Compute interpolated LPCs (unquantized) */ - lsp_to_lpc(interp_qlsp, ak, st->lpcSize, stack); - - /* Compute analysis filter at w=pi */ - { - spx_word32_t pi_g=LPC_SCALING; - for (i=0;i<st->lpcSize;i+=2) - { - /*pi_g += -st->interp_qlpc[i] + st->interp_qlpc[i+1];*/ - pi_g = ADD32(pi_g, SUB32(EXTEND32(ak[i+1]),EXTEND32(ak[i]))); - } - st->pi_gain[sub] = pi_g; - } - - iir_mem16(sp, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, - st->mem_sp, stack); - - for (i=0;i<st->lpcSize;i++) - st->interp_qlpc[i] = ak[i]; - - } - - if (st->highpass_enabled) - highpass(out, out, st->frameSize, (st->isWideband?HIGHPASS_WIDEBAND:HIGHPASS_NARROWBAND)|HIGHPASS_OUTPUT, st->mem_hp); - /*for (i=0;i<st->frameSize;i++) - printf ("%d\n", (int)st->frame[i]);*/ - - /* Tracking output level */ - st->level = 1+PSHR32(ol_gain,SIG_SHIFT); - st->max_level = MAX16(MULT16_16_Q15(QCONST16(.99f,15), st->max_level), st->level); - st->min_level = MIN16(ADD16(1,MULT16_16_Q14(QCONST16(1.01f,14), st->min_level)), st->level); - if (st->max_level < st->min_level+1) - st->max_level = st->min_level+1; - /*printf ("%f %f %f %d\n", og, st->min_level, st->max_level, update);*/ - - /* Store the LSPs for interpolation in the next frame */ - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - - /* The next frame will not be the first (Duh!) */ - st->first = 0; - st->count_lost=0; - st->last_pitch = best_pitch; -#ifdef FIXED_POINT - st->last_pitch_gain = PSHR16(pitch_average,2); -#else - st->last_pitch_gain = .25*pitch_average; -#endif - st->pitch_gain_buf[st->pitch_gain_buf_idx++] = st->last_pitch_gain; - if (st->pitch_gain_buf_idx > 2) /* rollover */ - st->pitch_gain_buf_idx = 0; - - st->last_ol_gain = ol_gain; - - return 0; -} - -int nb_encoder_ctl(void *state, int request, void *ptr) -{ - EncState *st; - st=(EncState*)state; - switch(request) - { - case SPEEX_GET_FRAME_SIZE: - (*(spx_int32_t*)ptr) = st->frameSize; - break; - case SPEEX_SET_LOW_MODE: - case SPEEX_SET_MODE: - st->submodeSelect = st->submodeID = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_LOW_MODE: - case SPEEX_GET_MODE: - (*(spx_int32_t*)ptr) = st->submodeID; - break; -#ifndef DISABLE_VBR - case SPEEX_SET_VBR: - st->vbr_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_VBR: - (*(spx_int32_t*)ptr) = st->vbr_enabled; - break; - case SPEEX_SET_VAD: - st->vad_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_VAD: - (*(spx_int32_t*)ptr) = st->vad_enabled; - break; - case SPEEX_SET_DTX: - st->dtx_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_DTX: - (*(spx_int32_t*)ptr) = st->dtx_enabled; - break; - case SPEEX_SET_ABR: - st->abr_enabled = (*(spx_int32_t*)ptr); - st->vbr_enabled = st->abr_enabled!=0; - if (st->vbr_enabled) - { - spx_int32_t i=10; - spx_int32_t rate, target; - float vbr_qual; - target = (*(spx_int32_t*)ptr); - while (i>=0) - { - speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); - speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); - if (rate <= target) - break; - i--; - } - vbr_qual=i; - if (vbr_qual<0) - vbr_qual=0; - speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual); - st->abr_count=0; - st->abr_drift=0; - st->abr_drift2=0; - } - - break; - case SPEEX_GET_ABR: - (*(spx_int32_t*)ptr) = st->abr_enabled; - break; -#endif /* #ifndef DISABLE_VBR */ -#if !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API) - case SPEEX_SET_VBR_QUALITY: - st->vbr_quality = (*(float*)ptr); - break; - case SPEEX_GET_VBR_QUALITY: - (*(float*)ptr) = st->vbr_quality; - break; -#endif /* !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API) */ - case SPEEX_SET_QUALITY: - { - int quality = (*(spx_int32_t*)ptr); - if (quality < 0) - quality = 0; - if (quality > 10) - quality = 10; - st->submodeSelect = st->submodeID = ((const SpeexNBMode*)(st->mode->mode))->quality_map[quality]; - } - break; - case SPEEX_SET_COMPLEXITY: - st->complexity = (*(spx_int32_t*)ptr); - if (st->complexity<0) - st->complexity=0; - break; - case SPEEX_GET_COMPLEXITY: - (*(spx_int32_t*)ptr) = st->complexity; - break; - case SPEEX_SET_BITRATE: - { - spx_int32_t i=10; - spx_int32_t rate, target; - target = (*(spx_int32_t*)ptr); - while (i>=0) - { - speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); - speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); - if (rate <= target) - break; - i--; - } - } - break; - case SPEEX_GET_BITRATE: - if (st->submodes[st->submodeID]) - (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize; - else - (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize; - break; - case SPEEX_SET_SAMPLING_RATE: - st->sampling_rate = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_SAMPLING_RATE: - (*(spx_int32_t*)ptr)=st->sampling_rate; - break; - case SPEEX_RESET_STATE: - { - int i; - st->bounded_pitch = 1; - st->first = 1; - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), st->lpcSize+1); - for (i=0;i<st->lpcSize;i++) - st->mem_sw[i]=st->mem_sw_whole[i]=st->mem_sp[i]=st->mem_exc[i]=0; - for (i=0;i<st->frameSize+st->max_pitch+1;i++) - st->excBuf[i]=st->swBuf[i]=0; - for (i=0;i<st->windowSize-st->frameSize;i++) - st->winBuf[i]=0; - } - break; - case SPEEX_SET_SUBMODE_ENCODING: - st->encode_submode = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_SUBMODE_ENCODING: - (*(spx_int32_t*)ptr) = st->encode_submode; - break; - case SPEEX_GET_LOOKAHEAD: - (*(spx_int32_t*)ptr)=(st->windowSize-st->frameSize); - break; - case SPEEX_SET_PLC_TUNING: - st->plc_tuning = (*(spx_int32_t*)ptr); - if (st->plc_tuning>100) - st->plc_tuning=100; - break; - case SPEEX_GET_PLC_TUNING: - (*(spx_int32_t*)ptr)=(st->plc_tuning); - break; -#ifndef DISABLE_VBR - case SPEEX_SET_VBR_MAX_BITRATE: - st->vbr_max = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_VBR_MAX_BITRATE: - (*(spx_int32_t*)ptr) = st->vbr_max; - break; -#endif /* #ifndef DISABLE_VBR */ - case SPEEX_SET_HIGHPASS: - st->highpass_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_HIGHPASS: - (*(spx_int32_t*)ptr) = st->highpass_enabled; - break; - - /* This is all internal stuff past this point */ - case SPEEX_GET_PI_GAIN: - { - int i; - spx_word32_t *g = (spx_word32_t*)ptr; - for (i=0;i<st->nbSubframes;i++) - g[i]=st->pi_gain[i]; - } - break; - case SPEEX_GET_EXC: - { - int i; - for (i=0;i<st->nbSubframes;i++) - ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*st->subframeSize, st->subframeSize); - } - break; -#ifndef DISABLE_VBR - case SPEEX_GET_RELATIVE_QUALITY: - (*(float*)ptr)=st->relative_quality; - break; -#endif /* #ifndef DISABLE_VBR */ - case SPEEX_SET_INNOVATION_SAVE: - st->innov_rms_save = (spx_word16_t*)ptr; - break; - case SPEEX_SET_WIDEBAND: - st->isWideband = *((spx_int32_t*)ptr); - break; - case SPEEX_GET_STACK: - *((char**)ptr) = st->stack; - break; - default: - speex_warning_int("Unknown nb_ctl request: ", request); - return -1; - } - return 0; -} - -int nb_decoder_ctl(void *state, int request, void *ptr) -{ - DecState *st; - st=(DecState*)state; - switch(request) - { - case SPEEX_SET_LOW_MODE: - case SPEEX_SET_MODE: - st->submodeID = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_LOW_MODE: - case SPEEX_GET_MODE: - (*(spx_int32_t*)ptr) = st->submodeID; - break; - case SPEEX_SET_ENH: - st->lpc_enh_enabled = *((spx_int32_t*)ptr); - break; - case SPEEX_GET_ENH: - *((spx_int32_t*)ptr) = st->lpc_enh_enabled; - break; - case SPEEX_GET_FRAME_SIZE: - (*(spx_int32_t*)ptr) = st->frameSize; - break; - case SPEEX_GET_BITRATE: - if (st->submodes[st->submodeID]) - (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize; - else - (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize; - break; - case SPEEX_SET_SAMPLING_RATE: - st->sampling_rate = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_SAMPLING_RATE: - (*(spx_int32_t*)ptr)=st->sampling_rate; - break; - case SPEEX_SET_HANDLER: - { - SpeexCallback *c = (SpeexCallback*)ptr; - st->speex_callbacks[c->callback_id].func=c->func; - st->speex_callbacks[c->callback_id].data=c->data; - st->speex_callbacks[c->callback_id].callback_id=c->callback_id; - } - break; - case SPEEX_SET_USER_HANDLER: - { - SpeexCallback *c = (SpeexCallback*)ptr; - st->user_callback.func=c->func; - st->user_callback.data=c->data; - st->user_callback.callback_id=c->callback_id; - } - break; - case SPEEX_RESET_STATE: - { - int i; - for (i=0;i<st->lpcSize;i++) - st->mem_sp[i]=0; - for (i=0;i<st->frameSize + st->max_pitch + 1;i++) - st->excBuf[i]=0; - } - break; - case SPEEX_SET_SUBMODE_ENCODING: - st->encode_submode = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_SUBMODE_ENCODING: - (*(spx_int32_t*)ptr) = st->encode_submode; - break; - case SPEEX_GET_LOOKAHEAD: - (*(spx_int32_t*)ptr)=st->subframeSize; - break; - case SPEEX_SET_HIGHPASS: - st->highpass_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_GET_HIGHPASS: - (*(spx_int32_t*)ptr) = st->highpass_enabled; - break; - /* FIXME: Convert to fixed-point and re-enable even when float API is disabled */ -#ifndef DISABLE_FLOAT_API - case SPEEX_GET_ACTIVITY: - { - float ret; - ret = log(st->level/st->min_level)/log(st->max_level/st->min_level); - if (ret>1) - ret = 1; - /* Done in a strange way to catch NaNs as well */ - if (!(ret > 0)) - ret = 0; - /*printf ("%f %f %f %f\n", st->level, st->min_level, st->max_level, ret);*/ - (*(spx_int32_t*)ptr) = (int)(100*ret); - } - break; -#endif - case SPEEX_GET_PI_GAIN: - { - int i; - spx_word32_t *g = (spx_word32_t*)ptr; - for (i=0;i<st->nbSubframes;i++) - g[i]=st->pi_gain[i]; - } - break; - case SPEEX_GET_EXC: - { - int i; - for (i=0;i<st->nbSubframes;i++) - ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*st->subframeSize, st->subframeSize); - } - break; - case SPEEX_GET_DTX_STATUS: - *((spx_int32_t*)ptr) = st->dtx_enabled; - break; - case SPEEX_SET_INNOVATION_SAVE: - st->innov_save = (spx_word16_t*)ptr; - break; - case SPEEX_SET_WIDEBAND: - st->isWideband = *((spx_int32_t*)ptr); - break; - case SPEEX_GET_STACK: - *((char**)ptr) = st->stack; - break; - default: - speex_warning_int("Unknown nb_ctl request: ", request); - return -1; - } - return 0; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.h deleted file mode 100755 index a18b869..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/nb_celp.h +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin */ -/** - @file nb_celp.h - @brief Narrowband CELP encoder/decoder -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef NB_CELP_H -#define NB_CELP_H - -#include "modes.h" -#include "speex/speex_bits.h" -#include "speex/speex_callbacks.h" -#include "vbr.h" -#include "filters.h" - -#ifdef VORBIS_PSYCHO -#include "vorbis_psy.h" -#endif - -/**Structure representing the full state of the narrowband encoder*/ -typedef struct EncState { - const SpeexMode *mode; /**< Mode corresponding to the state */ - int first; /**< Is this the first frame? */ - int frameSize; /**< Size of frames */ - int subframeSize; /**< Size of sub-frames */ - int nbSubframes; /**< Number of sub-frames */ - int windowSize; /**< Analysis (LPC) window length */ - int lpcSize; /**< LPC order */ - int min_pitch; /**< Minimum pitch value allowed */ - int max_pitch; /**< Maximum pitch value allowed */ - - spx_word32_t cumul_gain; /**< Product of previously used pitch gains (Q10) */ - int bounded_pitch; /**< Next frame should not rely on previous frames for pitch */ - int ol_pitch; /**< Open-loop pitch */ - int ol_voiced; /**< Open-loop voiced/non-voiced decision */ - int *pitch; - -#ifdef VORBIS_PSYCHO - VorbisPsy *psy; - float *psy_window; - float *curve; - float *old_curve; -#endif - - spx_word16_t gamma1; /**< Perceptual filter: A(z/gamma1) */ - spx_word16_t gamma2; /**< Perceptual filter: A(z/gamma2) */ - spx_word16_t lpc_floor; /**< Noise floor multiplier for A[0] in LPC analysis*/ - char *stack; /**< Pseudo-stack allocation for temporary memory */ - spx_word16_t *winBuf; /**< Input buffer (original signal) */ - spx_word16_t *excBuf; /**< Excitation buffer */ - spx_word16_t *exc; /**< Start of excitation frame */ - spx_word16_t *swBuf; /**< Weighted signal buffer */ - spx_word16_t *sw; /**< Start of weighted signal frame */ - const spx_word16_t *window; /**< Temporary (Hanning) window */ - const spx_word16_t *lagWindow; /**< Window applied to auto-correlation */ - spx_lsp_t *old_lsp; /**< LSPs for previous frame */ - spx_lsp_t *old_qlsp; /**< Quantized LSPs for previous frame */ - spx_mem_t *mem_sp; /**< Filter memory for signal synthesis */ - spx_mem_t *mem_sw; /**< Filter memory for perceptually-weighted signal */ - spx_mem_t *mem_sw_whole; /**< Filter memory for perceptually-weighted signal (whole frame)*/ - spx_mem_t *mem_exc; /**< Filter memory for excitation (whole frame) */ - spx_mem_t *mem_exc2; /**< Filter memory for excitation (whole frame) */ - spx_mem_t mem_hp[2]; /**< High-pass filter memory */ - spx_word32_t *pi_gain; /**< Gain of LPC filter at theta=pi (fe/2) */ - spx_word16_t *innov_rms_save; /**< If non-NULL, innovation RMS is copied here */ - -#ifndef DISABLE_VBR - VBRState *vbr; /**< State of the VBR data */ - float vbr_quality; /**< Quality setting for VBR encoding */ - float relative_quality; /**< Relative quality that will be needed by VBR */ - spx_int32_t vbr_enabled; /**< 1 for enabling VBR, 0 otherwise */ - spx_int32_t vbr_max; /**< Max bit-rate allowed in VBR mode */ - int vad_enabled; /**< 1 for enabling VAD, 0 otherwise */ - int dtx_enabled; /**< 1 for enabling DTX, 0 otherwise */ - int dtx_count; /**< Number of consecutive DTX frames */ - spx_int32_t abr_enabled; /**< ABR setting (in bps), 0 if off */ - float abr_drift; - float abr_drift2; - float abr_count; -#endif /* #ifndef DISABLE_VBR */ - - int complexity; /**< Complexity setting (0-10 from least complex to most complex) */ - spx_int32_t sampling_rate; - int plc_tuning; - int encode_submode; - const SpeexSubmode * const *submodes; /**< Sub-mode data */ - int submodeID; /**< Activated sub-mode */ - int submodeSelect; /**< Mode chosen by the user (may differ from submodeID if VAD is on) */ - int isWideband; /**< Is this used as part of the embedded wideband codec */ - int highpass_enabled; /**< Is the input filter enabled */ -} EncState; - -/**Structure representing the full state of the narrowband decoder*/ -typedef struct DecState { - const SpeexMode *mode; /**< Mode corresponding to the state */ - int first; /**< Is this the first frame? */ - int count_lost; /**< Was the last frame lost? */ - int frameSize; /**< Size of frames */ - int subframeSize; /**< Size of sub-frames */ - int nbSubframes; /**< Number of sub-frames */ - int lpcSize; /**< LPC order */ - int min_pitch; /**< Minimum pitch value allowed */ - int max_pitch; /**< Maximum pitch value allowed */ - spx_int32_t sampling_rate; - - spx_word16_t last_ol_gain; /**< Open-loop gain for previous frame */ - - char *stack; /**< Pseudo-stack allocation for temporary memory */ - spx_word16_t *excBuf; /**< Excitation buffer */ - spx_word16_t *exc; /**< Start of excitation frame */ - spx_lsp_t *old_qlsp; /**< Quantized LSPs for previous frame */ - spx_coef_t *interp_qlpc; /**< Interpolated quantized LPCs */ - spx_mem_t *mem_sp; /**< Filter memory for synthesis signal */ - spx_mem_t mem_hp[2]; /**< High-pass filter memory */ - spx_word32_t *pi_gain; /**< Gain of LPC filter at theta=pi (fe/2) */ - spx_word16_t *innov_save; /** If non-NULL, innovation is copied here */ - - spx_word16_t level; - spx_word16_t max_level; - spx_word16_t min_level; - - /* This is used in packet loss concealment */ - int last_pitch; /**< Pitch of last correctly decoded frame */ - spx_word16_t last_pitch_gain; /**< Pitch gain of last correctly decoded frame */ - spx_word16_t pitch_gain_buf[3]; /**< Pitch gain of last decoded frames */ - int pitch_gain_buf_idx; /**< Tail of the buffer */ - spx_int32_t seed; /** Seed used for random number generation */ - - int encode_submode; - const SpeexSubmode * const *submodes; /**< Sub-mode data */ - int submodeID; /**< Activated sub-mode */ - int lpc_enh_enabled; /**< 1 when LPC enhancer is on, 0 otherwise */ - SpeexCallback speex_callbacks[SPEEX_MAX_CALLBACKS]; - - SpeexCallback user_callback; - - /*Vocoder data*/ - spx_word16_t voc_m1; - spx_word32_t voc_m2; - spx_word16_t voc_mean; - int voc_offset; - - int dtx_enabled; - int isWideband; /**< Is this used as part of the embedded wideband codec */ - int highpass_enabled; /**< Is the input filter enabled */ -} DecState; - -/** Initializes encoder state*/ -void *nb_encoder_init(const SpeexMode *m); - -/** De-allocates encoder state resources*/ -void nb_encoder_destroy(void *state); - -/** Encodes one frame*/ -int nb_encode(void *state, void *in, SpeexBits *bits); - - -/** Initializes decoder state*/ -void *nb_decoder_init(const SpeexMode *m); - -/** De-allocates decoder state resources*/ -void nb_decoder_destroy(void *state); - -/** Decodes one frame*/ -int nb_decode(void *state, SpeexBits *bits, void *out); - -/** ioctl-like function for controlling a narrowband encoder */ -int nb_encoder_ctl(void *state, int request, void *ptr); - -/** ioctl-like function for controlling a narrowband decoder */ -int nb_decoder_ctl(void *state, int request, void *ptr); - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/os_support.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/os_support.h deleted file mode 100755 index 6b74b0c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/os_support.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2007 Jean-Marc Valin - - File: os_support.h - This is the (tiny) OS abstraction layer. Aside from math.h, this is the - only place where system headers are allowed. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef OS_SUPPORT_H -#define OS_SUPPORT_H - -#include <string.h> -#include <stdio.h> -#include <stdlib.h> - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef OS_SUPPORT_CUSTOM -#include "os_support_custom.h" -#endif - -/** Speex wrapper for calloc. To do your own dynamic allocation, all you need to do is replace this function, speex_realloc and speex_free - NOTE: speex_alloc needs to CLEAR THE MEMORY */ -#ifndef OVERRIDE_SPEEX_ALLOC -static inline void *speex_alloc (int size) -{ - /* WARNING: this is not equivalent to malloc(). If you want to use malloc() - or your own allocator, YOU NEED TO CLEAR THE MEMORY ALLOCATED. Otherwise - you will experience strange bugs */ - return calloc(size,1); -} -#endif - -/** Same as speex_alloc, except that the area is only needed inside a Speex call (might cause problem with wideband though) */ -#ifndef OVERRIDE_SPEEX_ALLOC_SCRATCH -static inline void *speex_alloc_scratch (int size) -{ - /* Scratch space doesn't need to be cleared */ - return calloc(size,1); -} -#endif - -/** Speex wrapper for realloc. To do your own dynamic allocation, all you need to do is replace this function, speex_alloc and speex_free */ -#ifndef OVERRIDE_SPEEX_REALLOC -static inline void *speex_realloc (void *ptr, int size) -{ - return realloc(ptr, size); -} -#endif - -/** Speex wrapper for calloc. To do your own dynamic allocation, all you need to do is replace this function, speex_realloc and speex_alloc */ -#ifndef OVERRIDE_SPEEX_FREE -static inline void speex_free (void *ptr) -{ - free(ptr); -} -#endif - -/** Same as speex_free, except that the area is only needed inside a Speex call (might cause problem with wideband though) */ -#ifndef OVERRIDE_SPEEX_FREE_SCRATCH -static inline void speex_free_scratch (void *ptr) -{ - free(ptr); -} -#endif - -/** Copy n bytes of memory from src to dst. The 0* term provides compile-time type checking */ -#ifndef OVERRIDE_SPEEX_COPY -#define SPEEX_COPY(dst, src, n) (memcpy((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) -#endif - -/** Copy n bytes of memory from src to dst, allowing overlapping regions. The 0* term - provides compile-time type checking */ -#ifndef OVERRIDE_SPEEX_MOVE -#define SPEEX_MOVE(dst, src, n) (memmove((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) -#endif - -/** Set n bytes of memory to value of c, starting at address s */ -#ifndef OVERRIDE_SPEEX_MEMSET -#define SPEEX_MEMSET(dst, c, n) (memset((dst), (c), (n)*sizeof(*(dst)))) -#endif - - -#ifndef OVERRIDE_SPEEX_FATAL -static inline void _speex_fatal(const char *str, const char *file, int line) -{ - fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str); - exit(1); -} -#endif - -#ifndef OVERRIDE_SPEEX_WARNING -static inline void speex_warning(const char *str) -{ -#ifndef DISABLE_WARNINGS - fprintf (stderr, "warning: %s\n", str); -#endif -} -#endif - -#ifndef OVERRIDE_SPEEX_WARNING_INT -static inline void speex_warning_int(const char *str, int val) -{ -#ifndef DISABLE_WARNINGS - fprintf (stderr, "warning: %s %d\n", str, val); -#endif -} -#endif - -#ifndef OVERRIDE_SPEEX_NOTIFY -static inline void speex_notify(const char *str) -{ -#ifndef DISABLE_NOTIFICATIONS - fprintf (stderr, "notification: %s\n", str); -#endif -} -#endif - -#ifndef OVERRIDE_SPEEX_PUTC -/** Speex wrapper for putc */ -static inline void _speex_putc(int ch, void *file) -{ - FILE *f = (FILE *)file; - fprintf(f, "%c", ch); -} -#endif - -#define speex_fatal(str) _speex_fatal(str, __FILE__, __LINE__); -#define speex_assert(cond) {if (!(cond)) {speex_fatal("assertion failed: " #cond);}} - -#ifndef RELEASE -static inline void print_vec(float *vec, int len, char *name) -{ - int i; - printf ("%s ", name); - for (i=0;i<len;i++) - printf (" %f", vec[i]); - printf ("\n"); -} -#endif - -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/preprocess.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/preprocess.c deleted file mode 100755 index 1309adf..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/preprocess.c +++ /dev/null @@ -1,1219 +0,0 @@ -/* Copyright (C) 2003 Epic Games (written by Jean-Marc Valin) - Copyright (C) 2004-2006 Epic Games - - File: preprocess.c - Preprocessor with denoising based on the algorithm by Ephraim and Malah - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - - -/* - Recommended papers: - - Y. Ephraim and D. Malah, "Speech enhancement using minimum mean-square error - short-time spectral amplitude estimator". IEEE Transactions on Acoustics, - Speech and Signal Processing, vol. ASSP-32, no. 6, pp. 1109-1121, 1984. - - Y. Ephraim and D. Malah, "Speech enhancement using minimum mean-square error - log-spectral amplitude estimator". IEEE Transactions on Acoustics, Speech and - Signal Processing, vol. ASSP-33, no. 2, pp. 443-445, 1985. - - I. Cohen and B. Berdugo, "Speech enhancement for non-stationary noise environments". - Signal Processing, vol. 81, no. 2, pp. 2403-2418, 2001. - - Stefan Gustafsson, Rainer Martin, Peter Jax, and Peter Vary. "A psychoacoustic - approach to combined acoustic echo cancellation and noise reduction". IEEE - Transactions on Speech and Audio Processing, 2002. - - J.-M. Valin, J. Rouat, and F. Michaud, "Microphone array post-filter for separation - of simultaneous non-stationary sources". In Proceedings IEEE International - Conference on Acoustics, Speech, and Signal Processing, 2004. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "speex/speex_preprocess.h" -#include "speex/speex_echo.h" -#include "arch.h" -#include "fftwrap.h" -#include "filterbank.h" -#include "math_approx.h" -#include "os_support.h" - -#ifndef M_PI -#define M_PI 3.14159263 -#endif - -#define LOUDNESS_EXP 5.f -#define AMP_SCALE .001f -#define AMP_SCALE_1 1000.f - -#define NB_BANDS 24 - -#define SPEECH_PROB_START_DEFAULT QCONST16(0.35f,15) -#define SPEECH_PROB_CONTINUE_DEFAULT QCONST16(0.20f,15) -#define NOISE_SUPPRESS_DEFAULT -15 -#define ECHO_SUPPRESS_DEFAULT -40 -#define ECHO_SUPPRESS_ACTIVE_DEFAULT -15 - -#ifndef NULL -#define NULL 0 -#endif - -#define SQR(x) ((x)*(x)) -#define SQR16(x) (MULT16_16((x),(x))) -#define SQR16_Q15(x) (MULT16_16_Q15((x),(x))) - -#ifdef FIXED_POINT -static inline spx_word16_t DIV32_16_Q8(spx_word32_t a, spx_word32_t b) -{ - if (SHR32(a,7) >= b) - { - return 32767; - } else { - if (b>=QCONST32(1,23)) - { - a = SHR32(a,8); - b = SHR32(b,8); - } - if (b>=QCONST32(1,19)) - { - a = SHR32(a,4); - b = SHR32(b,4); - } - if (b>=QCONST32(1,15)) - { - a = SHR32(a,4); - b = SHR32(b,4); - } - a = SHL32(a,8); - return PDIV32_16(a,b); - } - -} -static inline spx_word16_t DIV32_16_Q15(spx_word32_t a, spx_word32_t b) -{ - if (SHR32(a,15) >= b) - { - return 32767; - } else { - if (b>=QCONST32(1,23)) - { - a = SHR32(a,8); - b = SHR32(b,8); - } - if (b>=QCONST32(1,19)) - { - a = SHR32(a,4); - b = SHR32(b,4); - } - if (b>=QCONST32(1,15)) - { - a = SHR32(a,4); - b = SHR32(b,4); - } - a = SHL32(a,15)-a; - return DIV32_16(a,b); - } -} -#define SNR_SCALING 256.f -#define SNR_SCALING_1 0.0039062f -#define SNR_SHIFT 8 - -#define FRAC_SCALING 32767.f -#define FRAC_SCALING_1 3.0518e-05 -#define FRAC_SHIFT 1 - -#define EXPIN_SCALING 2048.f -#define EXPIN_SCALING_1 0.00048828f -#define EXPIN_SHIFT 11 -#define EXPOUT_SCALING_1 1.5259e-05 - -#define NOISE_SHIFT 7 - -#else - -#define DIV32_16_Q8(a,b) ((a)/(b)) -#define DIV32_16_Q15(a,b) ((a)/(b)) -#define SNR_SCALING 1.f -#define SNR_SCALING_1 1.f -#define SNR_SHIFT 0 -#define FRAC_SCALING 1.f -#define FRAC_SCALING_1 1.f -#define FRAC_SHIFT 0 -#define NOISE_SHIFT 0 - -#define EXPIN_SCALING 1.f -#define EXPIN_SCALING_1 1.f -#define EXPOUT_SCALING_1 1.f - -#endif - -/** Speex pre-processor state. */ -struct SpeexPreprocessState_ { - /* Basic info */ - int frame_size; /**< Number of samples processed each time */ - int ps_size; /**< Number of points in the power spectrum */ - int sampling_rate; /**< Sampling rate of the input/output */ - int nbands; - FilterBank *bank; - - /* Parameters */ - int denoise_enabled; - int vad_enabled; - int dereverb_enabled; - spx_word16_t reverb_decay; - spx_word16_t reverb_level; - spx_word16_t speech_prob_start; - spx_word16_t speech_prob_continue; - int noise_suppress; - int echo_suppress; - int echo_suppress_active; - SpeexEchoState *echo_state; - - spx_word16_t speech_prob; /**< Probability last frame was speech */ - - /* DSP-related arrays */ - spx_word16_t *frame; /**< Processing frame (2*ps_size) */ - spx_word16_t *ft; /**< Processing frame in freq domain (2*ps_size) */ - spx_word32_t *ps; /**< Current power spectrum */ - spx_word16_t *gain2; /**< Adjusted gains */ - spx_word16_t *gain_floor; /**< Minimum gain allowed */ - spx_word16_t *window; /**< Analysis/Synthesis window */ - spx_word32_t *noise; /**< Noise estimate */ - spx_word32_t *reverb_estimate; /**< Estimate of reverb energy */ - spx_word32_t *old_ps; /**< Power spectrum for last frame */ - spx_word16_t *gain; /**< Ephraim Malah gain */ - spx_word16_t *prior; /**< A-priori SNR */ - spx_word16_t *post; /**< A-posteriori SNR */ - - spx_word32_t *S; /**< Smoothed power spectrum */ - spx_word32_t *Smin; /**< See Cohen paper */ - spx_word32_t *Stmp; /**< See Cohen paper */ - int *update_prob; /**< Probability of speech presence for noise update */ - - spx_word16_t *zeta; /**< Smoothed a priori SNR */ - spx_word32_t *echo_noise; - spx_word32_t *residual_echo; - - /* Misc */ - spx_word16_t *inbuf; /**< Input buffer (overlapped analysis) */ - spx_word16_t *outbuf; /**< Output buffer (for overlap and add) */ - - /* AGC stuff, only for floating point for now */ -#ifndef FIXED_POINT - int agc_enabled; - float agc_level; - float loudness_accum; - float *loudness_weight; /**< Perceptual loudness curve */ - float loudness; /**< Loudness estimate */ - float agc_gain; /**< Current AGC gain */ - float max_gain; /**< Maximum gain allowed */ - float max_increase_step; /**< Maximum increase in gain from one frame to another */ - float max_decrease_step; /**< Maximum decrease in gain from one frame to another */ - float prev_loudness; /**< Loudness of previous frame */ - float init_max; /**< Current gain limit during initialisation */ -#endif - int nb_adapt; /**< Number of frames used for adaptation so far */ - int was_speech; - int min_count; /**< Number of frames processed so far */ - void *fft_lookup; /**< Lookup table for the FFT */ -#ifdef FIXED_POINT - int frame_shift; -#endif -}; - - -static void conj_window(spx_word16_t *w, int len) -{ - int i; - for (i=0;i<len;i++) - { - spx_word16_t tmp; -#ifdef FIXED_POINT - spx_word16_t x = DIV32_16(MULT16_16(32767,i),len); -#else - spx_word16_t x = DIV32_16(MULT16_16(QCONST16(4.f,13),i),len); -#endif - int inv=0; - if (x<QCONST16(1.f,13)) - { - } else if (x<QCONST16(2.f,13)) - { - x=QCONST16(2.f,13)-x; - inv=1; - } else if (x<QCONST16(3.f,13)) - { - x=x-QCONST16(2.f,13); - inv=1; - } else { - x=QCONST16(2.f,13)-x+QCONST16(2.f,13); /* 4 - x */ - } - x = MULT16_16_Q14(QCONST16(1.271903f,14), x); - tmp = SQR16_Q15(QCONST16(.5f,15)-MULT16_16_P15(QCONST16(.5f,15),spx_cos_norm(SHL32(EXTEND32(x),2)))); - if (inv) - tmp=SUB16(Q15_ONE,tmp); - w[i]=spx_sqrt(SHL32(EXTEND32(tmp),15)); - } -} - - -#ifdef FIXED_POINT -/* This function approximates the gain function - y = gamma(1.25)^2 * M(-.25;1;-x) / sqrt(x) - which multiplied by xi/(1+xi) is the optimal gain - in the loudness domain ( sqrt[amplitude] ) - Input in Q11 format, output in Q15 -*/ -static inline spx_word32_t hypergeom_gain(spx_word32_t xx) -{ - int ind; - spx_word16_t frac; - /* Q13 table */ - static const spx_word16_t table[21] = { - 6730, 8357, 9868, 11267, 12563, 13770, 14898, - 15959, 16961, 17911, 18816, 19682, 20512, 21311, - 22082, 22827, 23549, 24250, 24931, 25594, 26241}; - ind = SHR32(xx,10); - if (ind<0) - return Q15_ONE; - if (ind>19) - return ADD32(EXTEND32(Q15_ONE),EXTEND32(DIV32_16(QCONST32(.1296,23), SHR32(xx,EXPIN_SHIFT-SNR_SHIFT)))); - frac = SHL32(xx-SHL32(ind,10),5); - return SHL32(DIV32_16(PSHR32(MULT16_16(Q15_ONE-frac,table[ind]) + MULT16_16(frac,table[ind+1]),7),(spx_sqrt(SHL32(xx,15)+6711))),7); -} - -static inline spx_word16_t qcurve(spx_word16_t x) -{ - x = MAX16(x, 1); - return DIV32_16(SHL32(EXTEND32(32767),9),ADD16(512,MULT16_16_Q15(QCONST16(.60f,15),DIV32_16(32767,x)))); -} - -/* Compute the gain floor based on different floors for the background noise and residual echo */ -static void compute_gain_floor(int noise_suppress, int effective_echo_suppress, spx_word32_t *noise, spx_word32_t *echo, spx_word16_t *gain_floor, int len) -{ - int i; - - if (noise_suppress > effective_echo_suppress) - { - spx_word16_t noise_gain, gain_ratio; - noise_gain = EXTRACT16(MIN32(Q15_ONE,SHR32(spx_exp(MULT16_16(QCONST16(0.11513,11),noise_suppress)),1))); - gain_ratio = EXTRACT16(MIN32(Q15_ONE,SHR32(spx_exp(MULT16_16(QCONST16(.2302585f,11),effective_echo_suppress-noise_suppress)),1))); - - /* gain_floor = sqrt [ (noise*noise_floor + echo*echo_floor) / (noise+echo) ] */ - for (i=0;i<len;i++) - gain_floor[i] = MULT16_16_Q15(noise_gain, - spx_sqrt(SHL32(EXTEND32(DIV32_16_Q15(PSHR32(noise[i],NOISE_SHIFT) + MULT16_32_Q15(gain_ratio,echo[i]), - (1+PSHR32(noise[i],NOISE_SHIFT) + echo[i]) )),15))); - } else { - spx_word16_t echo_gain, gain_ratio; - echo_gain = EXTRACT16(MIN32(Q15_ONE,SHR32(spx_exp(MULT16_16(QCONST16(0.11513,11),effective_echo_suppress)),1))); - gain_ratio = EXTRACT16(MIN32(Q15_ONE,SHR32(spx_exp(MULT16_16(QCONST16(.2302585f,11),noise_suppress-effective_echo_suppress)),1))); - - /* gain_floor = sqrt [ (noise*noise_floor + echo*echo_floor) / (noise+echo) ] */ - for (i=0;i<len;i++) - gain_floor[i] = MULT16_16_Q15(echo_gain, - spx_sqrt(SHL32(EXTEND32(DIV32_16_Q15(MULT16_32_Q15(gain_ratio,PSHR32(noise[i],NOISE_SHIFT)) + echo[i], - (1+PSHR32(noise[i],NOISE_SHIFT) + echo[i]) )),15))); - } -} - -#else -/* This function approximates the gain function - y = gamma(1.25)^2 * M(-.25;1;-x) / sqrt(x) - which multiplied by xi/(1+xi) is the optimal gain - in the loudness domain ( sqrt[amplitude] ) -*/ -static inline spx_word32_t hypergeom_gain(spx_word32_t xx) -{ - int ind; - float integer, frac; - float x; - static const float table[21] = { - 0.82157f, 1.02017f, 1.20461f, 1.37534f, 1.53363f, 1.68092f, 1.81865f, - 1.94811f, 2.07038f, 2.18638f, 2.29688f, 2.40255f, 2.50391f, 2.60144f, - 2.69551f, 2.78647f, 2.87458f, 2.96015f, 3.04333f, 3.12431f, 3.20326f}; - x = EXPIN_SCALING_1*xx; - integer = floor(2*x); - ind = (int)integer; - if (ind<0) - return FRAC_SCALING; - if (ind>19) - return FRAC_SCALING*(1+.1296/x); - frac = 2*x-integer; - return FRAC_SCALING*((1-frac)*table[ind] + frac*table[ind+1])/sqrt(x+.0001f); -} - -static inline spx_word16_t qcurve(spx_word16_t x) -{ - return 1.f/(1.f+.15f/(SNR_SCALING_1*x)); -} - -static void compute_gain_floor(int noise_suppress, int effective_echo_suppress, spx_word32_t *noise, spx_word32_t *echo, spx_word16_t *gain_floor, int len) -{ - int i; - float echo_floor; - float noise_floor; - - noise_floor = exp(.2302585f*noise_suppress); - echo_floor = exp(.2302585f*effective_echo_suppress); - - /* Compute the gain floor based on different floors for the background noise and residual echo */ - for (i=0;i<len;i++) - gain_floor[i] = FRAC_SCALING*sqrt(noise_floor*PSHR32(noise[i],NOISE_SHIFT) + echo_floor*echo[i])/sqrt(1+PSHR32(noise[i],NOISE_SHIFT) + echo[i]); -} - -#endif -EXPORT SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate) -{ - int i; - int N, N3, N4, M; - - SpeexPreprocessState *st = (SpeexPreprocessState *)speex_alloc(sizeof(SpeexPreprocessState)); - st->frame_size = frame_size; - - /* Round ps_size down to the nearest power of two */ -#if 0 - i=1; - st->ps_size = st->frame_size; - while(1) - { - if (st->ps_size & ~i) - { - st->ps_size &= ~i; - i<<=1; - } else { - break; - } - } - - - if (st->ps_size < 3*st->frame_size/4) - st->ps_size = st->ps_size * 3 / 2; -#else - st->ps_size = st->frame_size; -#endif - - N = st->ps_size; - N3 = 2*N - st->frame_size; - N4 = st->frame_size - N3; - - st->sampling_rate = sampling_rate; - st->denoise_enabled = 1; - st->vad_enabled = 0; - st->dereverb_enabled = 0; - st->reverb_decay = 0; - st->reverb_level = 0; - st->noise_suppress = NOISE_SUPPRESS_DEFAULT; - st->echo_suppress = ECHO_SUPPRESS_DEFAULT; - st->echo_suppress_active = ECHO_SUPPRESS_ACTIVE_DEFAULT; - - st->speech_prob_start = SPEECH_PROB_START_DEFAULT; - st->speech_prob_continue = SPEECH_PROB_CONTINUE_DEFAULT; - - st->echo_state = NULL; - - st->nbands = NB_BANDS; - M = st->nbands; - st->bank = filterbank_new(M, sampling_rate, N, 1); - - st->frame = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t)); - st->window = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t)); - st->ft = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t)); - - st->ps = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->noise = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->echo_noise = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->residual_echo = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->reverb_estimate = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->old_ps = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t)); - st->prior = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - st->post = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - st->gain = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - st->gain2 = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - st->gain_floor = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - st->zeta = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t)); - - st->S = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t)); - st->Smin = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t)); - st->Stmp = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t)); - st->update_prob = (int*)speex_alloc(N*sizeof(int)); - - st->inbuf = (spx_word16_t*)speex_alloc(N3*sizeof(spx_word16_t)); - st->outbuf = (spx_word16_t*)speex_alloc(N3*sizeof(spx_word16_t)); - - conj_window(st->window, 2*N3); - for (i=2*N3;i<2*st->ps_size;i++) - st->window[i]=Q15_ONE; - - if (N4>0) - { - for (i=N3-1;i>=0;i--) - { - st->window[i+N3+N4]=st->window[i+N3]; - st->window[i+N3]=1; - } - } - for (i=0;i<N+M;i++) - { - st->noise[i]=QCONST32(1.f,NOISE_SHIFT); - st->reverb_estimate[i]=0; - st->old_ps[i]=1; - st->gain[i]=Q15_ONE; - st->post[i]=SHL16(1, SNR_SHIFT); - st->prior[i]=SHL16(1, SNR_SHIFT); - } - - for (i=0;i<N;i++) - st->update_prob[i] = 1; - for (i=0;i<N3;i++) - { - st->inbuf[i]=0; - st->outbuf[i]=0; - } -#ifndef FIXED_POINT - st->agc_enabled = 0; - st->agc_level = 8000; - st->loudness_weight = (float*)speex_alloc(N*sizeof(float)); - for (i=0;i<N;i++) - { - float ff=((float)i)*.5*sampling_rate/((float)N); - /*st->loudness_weight[i] = .5f*(1.f/(1.f+ff/8000.f))+1.f*exp(-.5f*(ff-3800.f)*(ff-3800.f)/9e5f);*/ - st->loudness_weight[i] = .35f-.35f*ff/16000.f+.73f*exp(-.5f*(ff-3800)*(ff-3800)/9e5f); - if (st->loudness_weight[i]<.01f) - st->loudness_weight[i]=.01f; - st->loudness_weight[i] *= st->loudness_weight[i]; - } - /*st->loudness = pow(AMP_SCALE*st->agc_level,LOUDNESS_EXP);*/ - st->loudness = 1e-15; - st->agc_gain = 1; - st->max_gain = 30; - st->max_increase_step = exp(0.11513f * 12.*st->frame_size / st->sampling_rate); - st->max_decrease_step = exp(-0.11513f * 40.*st->frame_size / st->sampling_rate); - st->prev_loudness = 1; - st->init_max = 1; -#endif - st->was_speech = 0; - - st->fft_lookup = spx_fft_init(2*N); - - st->nb_adapt=0; - st->min_count=0; - return st; -} - -EXPORT void speex_preprocess_state_destroy(SpeexPreprocessState *st) -{ - speex_free(st->frame); - speex_free(st->ft); - speex_free(st->ps); - speex_free(st->gain2); - speex_free(st->gain_floor); - speex_free(st->window); - speex_free(st->noise); - speex_free(st->reverb_estimate); - speex_free(st->old_ps); - speex_free(st->gain); - speex_free(st->prior); - speex_free(st->post); -#ifndef FIXED_POINT - speex_free(st->loudness_weight); -#endif - speex_free(st->echo_noise); - speex_free(st->residual_echo); - - speex_free(st->S); - speex_free(st->Smin); - speex_free(st->Stmp); - speex_free(st->update_prob); - speex_free(st->zeta); - - speex_free(st->inbuf); - speex_free(st->outbuf); - - spx_fft_destroy(st->fft_lookup); - filterbank_destroy(st->bank); - speex_free(st); -} - -/* FIXME: The AGC doesn't work yet with fixed-point*/ -#ifndef FIXED_POINT -static void speex_compute_agc(SpeexPreprocessState *st, spx_word16_t Pframe, spx_word16_t *ft) -{ - int i; - int N = st->ps_size; - float target_gain; - float loudness=1.f; - float rate; - - for (i=2;i<N;i++) - { - loudness += 2.f*N*st->ps[i]* st->loudness_weight[i]; - } - loudness=sqrt(loudness); - /*if (loudness < 2*pow(st->loudness, 1.0/LOUDNESS_EXP) && - loudness*2 > pow(st->loudness, 1.0/LOUDNESS_EXP))*/ - if (Pframe>.3f) - { - /*rate=2.0f*Pframe*Pframe/(1+st->nb_loudness_adapt);*/ - rate = .03*Pframe*Pframe; - st->loudness = (1-rate)*st->loudness + (rate)*pow(AMP_SCALE*loudness, LOUDNESS_EXP); - st->loudness_accum = (1-rate)*st->loudness_accum + rate; - if (st->init_max < st->max_gain && st->nb_adapt > 20) - st->init_max *= 1.f + .1f*Pframe*Pframe; - } - /*printf ("%f %f %f %f\n", Pframe, loudness, pow(st->loudness, 1.0f/LOUDNESS_EXP), st->loudness2);*/ - - target_gain = AMP_SCALE*st->agc_level*pow(st->loudness/(1e-4+st->loudness_accum), -1.0f/LOUDNESS_EXP); - - if ((Pframe>.5 && st->nb_adapt > 20) || target_gain < st->agc_gain) - { - if (target_gain > st->max_increase_step*st->agc_gain) - target_gain = st->max_increase_step*st->agc_gain; - if (target_gain < st->max_decrease_step*st->agc_gain && loudness < 10*st->prev_loudness) - target_gain = st->max_decrease_step*st->agc_gain; - if (target_gain > st->max_gain) - target_gain = st->max_gain; - if (target_gain > st->init_max) - target_gain = st->init_max; - - st->agc_gain = target_gain; - } - /*fprintf (stderr, "%f %f %f\n", loudness, (float)AMP_SCALE_1*pow(st->loudness, 1.0f/LOUDNESS_EXP), st->agc_gain);*/ - - for (i=0;i<2*N;i++) - ft[i] *= st->agc_gain; - st->prev_loudness = loudness; -} -#endif - -static void preprocess_analysis(SpeexPreprocessState *st, spx_int16_t *x) -{ - int i; - int N = st->ps_size; - int N3 = 2*N - st->frame_size; - int N4 = st->frame_size - N3; - spx_word32_t *ps=st->ps; - - /* 'Build' input frame */ - for (i=0;i<N3;i++) - st->frame[i]=st->inbuf[i]; - for (i=0;i<st->frame_size;i++) - st->frame[N3+i]=x[i]; - - /* Update inbuf */ - for (i=0;i<N3;i++) - st->inbuf[i]=x[N4+i]; - - /* Windowing */ - for (i=0;i<2*N;i++) - st->frame[i] = MULT16_16_Q15(st->frame[i], st->window[i]); - -#ifdef FIXED_POINT - { - spx_word16_t max_val=0; - for (i=0;i<2*N;i++) - max_val = MAX16(max_val, ABS16(st->frame[i])); - st->frame_shift = 14-spx_ilog2(EXTEND32(max_val)); - for (i=0;i<2*N;i++) - st->frame[i] = SHL16(st->frame[i], st->frame_shift); - } -#endif - - /* Perform FFT */ - spx_fft(st->fft_lookup, st->frame, st->ft); - - /* Power spectrum */ - ps[0]=MULT16_16(st->ft[0],st->ft[0]); - for (i=1;i<N;i++) - ps[i]=MULT16_16(st->ft[2*i-1],st->ft[2*i-1]) + MULT16_16(st->ft[2*i],st->ft[2*i]); - for (i=0;i<N;i++) - st->ps[i] = PSHR32(st->ps[i], 2*st->frame_shift); - - filterbank_compute_bank32(st->bank, ps, ps+N); -} - -static void update_noise_prob(SpeexPreprocessState *st) -{ - int i; - int min_range; - int N = st->ps_size; - - for (i=1;i<N-1;i++) - st->S[i] = MULT16_32_Q15(QCONST16(.8f,15),st->S[i]) + MULT16_32_Q15(QCONST16(.05f,15),st->ps[i-1]) - + MULT16_32_Q15(QCONST16(.1f,15),st->ps[i]) + MULT16_32_Q15(QCONST16(.05f,15),st->ps[i+1]); - st->S[0] = MULT16_32_Q15(QCONST16(.8f,15),st->S[0]) + MULT16_32_Q15(QCONST16(.2f,15),st->ps[0]); - st->S[N-1] = MULT16_32_Q15(QCONST16(.8f,15),st->S[N-1]) + MULT16_32_Q15(QCONST16(.2f,15),st->ps[N-1]); - - if (st->nb_adapt==1) - { - for (i=0;i<N;i++) - st->Smin[i] = st->Stmp[i] = 0; - } - - if (st->nb_adapt < 100) - min_range = 15; - else if (st->nb_adapt < 1000) - min_range = 50; - else if (st->nb_adapt < 10000) - min_range = 150; - else - min_range = 300; - if (st->min_count > min_range) - { - st->min_count = 0; - for (i=0;i<N;i++) - { - st->Smin[i] = MIN32(st->Stmp[i], st->S[i]); - st->Stmp[i] = st->S[i]; - } - } else { - for (i=0;i<N;i++) - { - st->Smin[i] = MIN32(st->Smin[i], st->S[i]); - st->Stmp[i] = MIN32(st->Stmp[i], st->S[i]); - } - } - for (i=0;i<N;i++) - { - if (MULT16_32_Q15(QCONST16(.4f,15),st->S[i]) > st->Smin[i]) - st->update_prob[i] = 1; - else - st->update_prob[i] = 0; - /*fprintf (stderr, "%f ", st->S[i]/st->Smin[i]);*/ - /*fprintf (stderr, "%f ", st->update_prob[i]);*/ - } - -} - -#define NOISE_OVERCOMPENS 1. - -void speex_echo_get_residual(SpeexEchoState *st, spx_word32_t *Yout, int len); - -EXPORT int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo) -{ - return speex_preprocess_run(st, x); -} - -EXPORT int speex_preprocess_run(SpeexPreprocessState *st, spx_int16_t *x) -{ - int i; - int M; - int N = st->ps_size; - int N3 = 2*N - st->frame_size; - int N4 = st->frame_size - N3; - spx_word32_t *ps=st->ps; - spx_word32_t Zframe; - spx_word16_t Pframe; - spx_word16_t beta, beta_1; - spx_word16_t effective_echo_suppress; - - st->nb_adapt++; - if (st->nb_adapt>20000) - st->nb_adapt = 20000; - st->min_count++; - - beta = MAX16(QCONST16(.03,15),DIV32_16(Q15_ONE,st->nb_adapt)); - beta_1 = Q15_ONE-beta; - M = st->nbands; - /* Deal with residual echo if provided */ - if (st->echo_state) - { - speex_echo_get_residual(st->echo_state, st->residual_echo, N); -#ifndef FIXED_POINT - /* If there are NaNs or ridiculous values, it'll show up in the DC and we just reset everything to zero */ - if (!(st->residual_echo[0] >=0 && st->residual_echo[0]<N*1e9f)) - { - for (i=0;i<N;i++) - st->residual_echo[i] = 0; - } -#endif - for (i=0;i<N;i++) - st->echo_noise[i] = MAX32(MULT16_32_Q15(QCONST16(.6f,15),st->echo_noise[i]), st->residual_echo[i]); - filterbank_compute_bank32(st->bank, st->echo_noise, st->echo_noise+N); - } else { - for (i=0;i<N+M;i++) - st->echo_noise[i] = 0; - } - preprocess_analysis(st, x); - - update_noise_prob(st); - - /* Noise estimation always updated for the 10 first frames */ - /*if (st->nb_adapt<10) - { - for (i=1;i<N-1;i++) - st->update_prob[i] = 0; - } - */ - - /* Update the noise estimate for the frequencies where it can be */ - for (i=0;i<N;i++) - { - if (!st->update_prob[i] || st->ps[i] < PSHR32(st->noise[i], NOISE_SHIFT)) - st->noise[i] = MAX32(EXTEND32(0),MULT16_32_Q15(beta_1,st->noise[i]) + MULT16_32_Q15(beta,SHL32(st->ps[i],NOISE_SHIFT))); - } - filterbank_compute_bank32(st->bank, st->noise, st->noise+N); - - /* Special case for first frame */ - if (st->nb_adapt==1) - for (i=0;i<N+M;i++) - st->old_ps[i] = ps[i]; - - /* Compute a posteriori SNR */ - for (i=0;i<N+M;i++) - { - spx_word16_t gamma; - - /* Total noise estimate including residual echo and reverberation */ - spx_word32_t tot_noise = ADD32(ADD32(ADD32(EXTEND32(1), PSHR32(st->noise[i],NOISE_SHIFT)) , st->echo_noise[i]) , st->reverb_estimate[i]); - - /* A posteriori SNR = ps/noise - 1*/ - st->post[i] = SUB16(DIV32_16_Q8(ps[i],tot_noise), QCONST16(1.f,SNR_SHIFT)); - st->post[i]=MIN16(st->post[i], QCONST16(100.f,SNR_SHIFT)); - - /* Computing update gamma = .1 + .9*(old/(old+noise))^2 */ - gamma = QCONST16(.1f,15)+MULT16_16_Q15(QCONST16(.89f,15),SQR16_Q15(DIV32_16_Q15(st->old_ps[i],ADD32(st->old_ps[i],tot_noise)))); - - /* A priori SNR update = gamma*max(0,post) + (1-gamma)*old/noise */ - st->prior[i] = EXTRACT16(PSHR32(ADD32(MULT16_16(gamma,MAX16(0,st->post[i])), MULT16_16(Q15_ONE-gamma,DIV32_16_Q8(st->old_ps[i],tot_noise))), 15)); - st->prior[i]=MIN16(st->prior[i], QCONST16(100.f,SNR_SHIFT)); - } - - /*print_vec(st->post, N+M, "");*/ - - /* Recursive average of the a priori SNR. A bit smoothed for the psd components */ - st->zeta[0] = PSHR32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[0]), MULT16_16(QCONST16(.3f,15),st->prior[0])),15); - for (i=1;i<N-1;i++) - st->zeta[i] = PSHR32(ADD32(ADD32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[i]), MULT16_16(QCONST16(.15f,15),st->prior[i])), - MULT16_16(QCONST16(.075f,15),st->prior[i-1])), MULT16_16(QCONST16(.075f,15),st->prior[i+1])),15); - for (i=N-1;i<N+M;i++) - st->zeta[i] = PSHR32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[i]), MULT16_16(QCONST16(.3f,15),st->prior[i])),15); - - /* Speech probability of presence for the entire frame is based on the average filterbank a priori SNR */ - Zframe = 0; - for (i=N;i<N+M;i++) - Zframe = ADD32(Zframe, EXTEND32(st->zeta[i])); - Pframe = QCONST16(.1f,15)+MULT16_16_Q15(QCONST16(.899f,15),qcurve(DIV32_16(Zframe,st->nbands))); - - effective_echo_suppress = EXTRACT16(PSHR32(ADD32(MULT16_16(SUB16(Q15_ONE,Pframe), st->echo_suppress), MULT16_16(Pframe, st->echo_suppress_active)),15)); - - compute_gain_floor(st->noise_suppress, effective_echo_suppress, st->noise+N, st->echo_noise+N, st->gain_floor+N, M); - - /* Compute Ephraim & Malah gain speech probability of presence for each critical band (Bark scale) - Technically this is actually wrong because the EM gaim assumes a slightly different probability - distribution */ - for (i=N;i<N+M;i++) - { - /* See EM and Cohen papers*/ - spx_word32_t theta; - /* Gain from hypergeometric function */ - spx_word32_t MM; - /* Weiner filter gain */ - spx_word16_t prior_ratio; - /* a priority probability of speech presence based on Bark sub-band alone */ - spx_word16_t P1; - /* Speech absence a priori probability (considering sub-band and frame) */ - spx_word16_t q; -#ifdef FIXED_POINT - spx_word16_t tmp; -#endif - - prior_ratio = PDIV32_16(SHL32(EXTEND32(st->prior[i]), 15), ADD16(st->prior[i], SHL32(1,SNR_SHIFT))); - theta = MULT16_32_P15(prior_ratio, QCONST32(1.f,EXPIN_SHIFT)+SHL32(EXTEND32(st->post[i]),EXPIN_SHIFT-SNR_SHIFT)); - - MM = hypergeom_gain(theta); - /* Gain with bound */ - st->gain[i] = EXTRACT16(MIN32(Q15_ONE, MULT16_32_Q15(prior_ratio, MM))); - /* Save old Bark power spectrum */ - st->old_ps[i] = MULT16_32_P15(QCONST16(.2f,15),st->old_ps[i]) + MULT16_32_P15(MULT16_16_P15(QCONST16(.8f,15),SQR16_Q15(st->gain[i])),ps[i]); - - P1 = QCONST16(.199f,15)+MULT16_16_Q15(QCONST16(.8f,15),qcurve (st->zeta[i])); - q = Q15_ONE-MULT16_16_Q15(Pframe,P1); -#ifdef FIXED_POINT - theta = MIN32(theta, EXTEND32(32767)); -/*Q8*/tmp = MULT16_16_Q15((SHL32(1,SNR_SHIFT)+st->prior[i]),EXTRACT16(MIN32(Q15ONE,SHR32(spx_exp(-EXTRACT16(theta)),1)))); - tmp = MIN16(QCONST16(3.,SNR_SHIFT), tmp); /* Prevent overflows in the next line*/ -/*Q8*/tmp = EXTRACT16(PSHR32(MULT16_16(PDIV32_16(SHL32(EXTEND32(q),8),(Q15_ONE-q)),tmp),8)); - st->gain2[i]=DIV32_16(SHL32(EXTEND32(32767),SNR_SHIFT), ADD16(256,tmp)); -#else - st->gain2[i]=1/(1.f + (q/(1.f-q))*(1+st->prior[i])*exp(-theta)); -#endif - } - /* Convert the EM gains and speech prob to linear frequency */ - filterbank_compute_psd16(st->bank,st->gain2+N, st->gain2); - filterbank_compute_psd16(st->bank,st->gain+N, st->gain); - - /* Use 1 for linear gain resolution (best) or 0 for Bark gain resolution (faster) */ - if (1) - { - filterbank_compute_psd16(st->bank,st->gain_floor+N, st->gain_floor); - - /* Compute gain according to the Ephraim-Malah algorithm -- linear frequency */ - for (i=0;i<N;i++) - { - spx_word32_t MM; - spx_word32_t theta; - spx_word16_t prior_ratio; - spx_word16_t tmp; - spx_word16_t p; - spx_word16_t g; - - /* Wiener filter gain */ - prior_ratio = PDIV32_16(SHL32(EXTEND32(st->prior[i]), 15), ADD16(st->prior[i], SHL32(1,SNR_SHIFT))); - theta = MULT16_32_P15(prior_ratio, QCONST32(1.f,EXPIN_SHIFT)+SHL32(EXTEND32(st->post[i]),EXPIN_SHIFT-SNR_SHIFT)); - - /* Optimal estimator for loudness domain */ - MM = hypergeom_gain(theta); - /* EM gain with bound */ - g = EXTRACT16(MIN32(Q15_ONE, MULT16_32_Q15(prior_ratio, MM))); - /* Interpolated speech probability of presence */ - p = st->gain2[i]; - - /* Constrain the gain to be close to the Bark scale gain */ - if (MULT16_16_Q15(QCONST16(.333f,15),g) > st->gain[i]) - g = MULT16_16(3,st->gain[i]); - st->gain[i] = g; - - /* Save old power spectrum */ - st->old_ps[i] = MULT16_32_P15(QCONST16(.2f,15),st->old_ps[i]) + MULT16_32_P15(MULT16_16_P15(QCONST16(.8f,15),SQR16_Q15(st->gain[i])),ps[i]); - - /* Apply gain floor */ - if (st->gain[i] < st->gain_floor[i]) - st->gain[i] = st->gain_floor[i]; - - /* Exponential decay model for reverberation (unused) */ - /*st->reverb_estimate[i] = st->reverb_decay*st->reverb_estimate[i] + st->reverb_decay*st->reverb_level*st->gain[i]*st->gain[i]*st->ps[i];*/ - - /* Take into account speech probability of presence (loudness domain MMSE estimator) */ - /* gain2 = [p*sqrt(gain)+(1-p)*sqrt(gain _floor) ]^2 */ - tmp = MULT16_16_P15(p,spx_sqrt(SHL32(EXTEND32(st->gain[i]),15))) + MULT16_16_P15(SUB16(Q15_ONE,p),spx_sqrt(SHL32(EXTEND32(st->gain_floor[i]),15))); - st->gain2[i]=SQR16_Q15(tmp); - - /* Use this if you want a log-domain MMSE estimator instead */ - /*st->gain2[i] = pow(st->gain[i], p) * pow(st->gain_floor[i],1.f-p);*/ - } - } else { - for (i=N;i<N+M;i++) - { - spx_word16_t tmp; - spx_word16_t p = st->gain2[i]; - st->gain[i] = MAX16(st->gain[i], st->gain_floor[i]); - tmp = MULT16_16_P15(p,spx_sqrt(SHL32(EXTEND32(st->gain[i]),15))) + MULT16_16_P15(SUB16(Q15_ONE,p),spx_sqrt(SHL32(EXTEND32(st->gain_floor[i]),15))); - st->gain2[i]=SQR16_Q15(tmp); - } - filterbank_compute_psd16(st->bank,st->gain2+N, st->gain2); - } - - /* If noise suppression is off, don't apply the gain (but then why call this in the first place!) */ - if (!st->denoise_enabled) - { - for (i=0;i<N+M;i++) - st->gain2[i]=Q15_ONE; - } - - /* Apply computed gain */ - for (i=1;i<N;i++) - { - st->ft[2*i-1] = MULT16_16_P15(st->gain2[i],st->ft[2*i-1]); - st->ft[2*i] = MULT16_16_P15(st->gain2[i],st->ft[2*i]); - } - st->ft[0] = MULT16_16_P15(st->gain2[0],st->ft[0]); - st->ft[2*N-1] = MULT16_16_P15(st->gain2[N-1],st->ft[2*N-1]); - - /*FIXME: This *will* not work for fixed-point */ -#ifndef FIXED_POINT - if (st->agc_enabled) - speex_compute_agc(st, Pframe, st->ft); -#endif - - /* Inverse FFT with 1/N scaling */ - spx_ifft(st->fft_lookup, st->ft, st->frame); - /* Scale back to original (lower) amplitude */ - for (i=0;i<2*N;i++) - st->frame[i] = PSHR16(st->frame[i], st->frame_shift); - - /*FIXME: This *will* not work for fixed-point */ -#ifndef FIXED_POINT - if (st->agc_enabled) - { - float max_sample=0; - for (i=0;i<2*N;i++) - if (fabs(st->frame[i])>max_sample) - max_sample = fabs(st->frame[i]); - if (max_sample>28000.f) - { - float damp = 28000.f/max_sample; - for (i=0;i<2*N;i++) - st->frame[i] *= damp; - } - } -#endif - - /* Synthesis window (for WOLA) */ - for (i=0;i<2*N;i++) - st->frame[i] = MULT16_16_Q15(st->frame[i], st->window[i]); - - /* Perform overlap and add */ - for (i=0;i<N3;i++) - x[i] = st->outbuf[i] + st->frame[i]; - for (i=0;i<N4;i++) - x[N3+i] = st->frame[N3+i]; - - /* Update outbuf */ - for (i=0;i<N3;i++) - st->outbuf[i] = st->frame[st->frame_size+i]; - - /* FIXME: This VAD is a kludge */ - st->speech_prob = Pframe; - if (st->vad_enabled) - { - if (st->speech_prob > st->speech_prob_start || (st->was_speech && st->speech_prob > st->speech_prob_continue)) - { - st->was_speech=1; - return 1; - } else - { - st->was_speech=0; - return 0; - } - } else { - return 1; - } -} - -EXPORT void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x) -{ - int i; - int N = st->ps_size; - int N3 = 2*N - st->frame_size; - int M; - spx_word32_t *ps=st->ps; - - M = st->nbands; - st->min_count++; - - preprocess_analysis(st, x); - - update_noise_prob(st); - - for (i=1;i<N-1;i++) - { - if (!st->update_prob[i] || st->ps[i] < PSHR32(st->noise[i],NOISE_SHIFT)) - { - st->noise[i] = MULT16_32_Q15(QCONST16(.95f,15),st->noise[i]) + MULT16_32_Q15(QCONST16(.05f,15),SHL32(st->ps[i],NOISE_SHIFT)); - } - } - - for (i=0;i<N3;i++) - st->outbuf[i] = MULT16_16_Q15(x[st->frame_size-N3+i],st->window[st->frame_size+i]); - - /* Save old power spectrum */ - for (i=0;i<N+M;i++) - st->old_ps[i] = ps[i]; - - for (i=0;i<N;i++) - st->reverb_estimate[i] = MULT16_32_Q15(st->reverb_decay, st->reverb_estimate[i]); -} - - -EXPORT int speex_preprocess_ctl(SpeexPreprocessState *state, int request, void *ptr) -{ - int i; - SpeexPreprocessState *st; - st=(SpeexPreprocessState*)state; - switch(request) - { - case SPEEX_PREPROCESS_SET_DENOISE: - st->denoise_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_DENOISE: - (*(spx_int32_t*)ptr) = st->denoise_enabled; - break; -#ifndef FIXED_POINT - case SPEEX_PREPROCESS_SET_AGC: - st->agc_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_AGC: - (*(spx_int32_t*)ptr) = st->agc_enabled; - break; -#ifndef DISABLE_FLOAT_API - case SPEEX_PREPROCESS_SET_AGC_LEVEL: - st->agc_level = (*(float*)ptr); - if (st->agc_level<1) - st->agc_level=1; - if (st->agc_level>32768) - st->agc_level=32768; - break; - case SPEEX_PREPROCESS_GET_AGC_LEVEL: - (*(float*)ptr) = st->agc_level; - break; -#endif /* #ifndef DISABLE_FLOAT_API */ - case SPEEX_PREPROCESS_SET_AGC_INCREMENT: - st->max_increase_step = exp(0.11513f * (*(spx_int32_t*)ptr)*st->frame_size / st->sampling_rate); - break; - case SPEEX_PREPROCESS_GET_AGC_INCREMENT: - (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_increase_step)*st->sampling_rate/st->frame_size); - break; - case SPEEX_PREPROCESS_SET_AGC_DECREMENT: - st->max_decrease_step = exp(0.11513f * (*(spx_int32_t*)ptr)*st->frame_size / st->sampling_rate); - break; - case SPEEX_PREPROCESS_GET_AGC_DECREMENT: - (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_decrease_step)*st->sampling_rate/st->frame_size); - break; - case SPEEX_PREPROCESS_SET_AGC_MAX_GAIN: - st->max_gain = exp(0.11513f * (*(spx_int32_t*)ptr)); - break; - case SPEEX_PREPROCESS_GET_AGC_MAX_GAIN: - (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_gain)); - break; -#endif - case SPEEX_PREPROCESS_SET_VAD: - speex_warning("The VAD has been replaced by a hack pending a complete rewrite"); - st->vad_enabled = (*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_VAD: - (*(spx_int32_t*)ptr) = st->vad_enabled; - break; - - case SPEEX_PREPROCESS_SET_DEREVERB: - st->dereverb_enabled = (*(spx_int32_t*)ptr); - for (i=0;i<st->ps_size;i++) - st->reverb_estimate[i]=0; - break; - case SPEEX_PREPROCESS_GET_DEREVERB: - (*(spx_int32_t*)ptr) = st->dereverb_enabled; - break; - - case SPEEX_PREPROCESS_SET_DEREVERB_LEVEL: - /* FIXME: Re-enable when de-reverberation is actually enabled again */ - /*st->reverb_level = (*(float*)ptr);*/ - break; - case SPEEX_PREPROCESS_GET_DEREVERB_LEVEL: - /* FIXME: Re-enable when de-reverberation is actually enabled again */ - /*(*(float*)ptr) = st->reverb_level;*/ - break; - - case SPEEX_PREPROCESS_SET_DEREVERB_DECAY: - /* FIXME: Re-enable when de-reverberation is actually enabled again */ - /*st->reverb_decay = (*(float*)ptr);*/ - break; - case SPEEX_PREPROCESS_GET_DEREVERB_DECAY: - /* FIXME: Re-enable when de-reverberation is actually enabled again */ - /*(*(float*)ptr) = st->reverb_decay;*/ - break; - - case SPEEX_PREPROCESS_SET_PROB_START: - *(spx_int32_t*)ptr = MIN32(100,MAX32(0, *(spx_int32_t*)ptr)); - st->speech_prob_start = DIV32_16(MULT16_16(Q15ONE,*(spx_int32_t*)ptr), 100); - break; - case SPEEX_PREPROCESS_GET_PROB_START: - (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob_start, 100); - break; - - case SPEEX_PREPROCESS_SET_PROB_CONTINUE: - *(spx_int32_t*)ptr = MIN32(100,MAX32(0, *(spx_int32_t*)ptr)); - st->speech_prob_continue = DIV32_16(MULT16_16(Q15ONE,*(spx_int32_t*)ptr), 100); - break; - case SPEEX_PREPROCESS_GET_PROB_CONTINUE: - (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob_continue, 100); - break; - - case SPEEX_PREPROCESS_SET_NOISE_SUPPRESS: - st->noise_suppress = -ABS(*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_NOISE_SUPPRESS: - (*(spx_int32_t*)ptr) = st->noise_suppress; - break; - case SPEEX_PREPROCESS_SET_ECHO_SUPPRESS: - st->echo_suppress = -ABS(*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_ECHO_SUPPRESS: - (*(spx_int32_t*)ptr) = st->echo_suppress; - break; - case SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE: - st->echo_suppress_active = -ABS(*(spx_int32_t*)ptr); - break; - case SPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE: - (*(spx_int32_t*)ptr) = st->echo_suppress_active; - break; - case SPEEX_PREPROCESS_SET_ECHO_STATE: - st->echo_state = (SpeexEchoState*)ptr; - break; - case SPEEX_PREPROCESS_GET_ECHO_STATE: - (*(SpeexEchoState**)ptr) = (SpeexEchoState*)st->echo_state; - break; -#ifndef FIXED_POINT - case SPEEX_PREPROCESS_GET_AGC_LOUDNESS: - (*(spx_int32_t*)ptr) = pow(st->loudness, 1.0/LOUDNESS_EXP); - break; - case SPEEX_PREPROCESS_GET_AGC_GAIN: - (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->agc_gain)); - break; -#endif - case SPEEX_PREPROCESS_GET_PSD_SIZE: - case SPEEX_PREPROCESS_GET_NOISE_PSD_SIZE: - (*(spx_int32_t*)ptr) = st->ps_size; - break; - case SPEEX_PREPROCESS_GET_PSD: - for(i=0;i<st->ps_size;i++) - ((spx_int32_t *)ptr)[i] = (spx_int32_t) st->ps[i]; - break; - case SPEEX_PREPROCESS_GET_NOISE_PSD: - for(i=0;i<st->ps_size;i++) - ((spx_int32_t *)ptr)[i] = (spx_int32_t) PSHR32(st->noise[i], NOISE_SHIFT); - break; - case SPEEX_PREPROCESS_GET_PROB: - (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob, 100); - break; -#ifndef FIXED_POINT - case SPEEX_PREPROCESS_SET_AGC_TARGET: - st->agc_level = (*(spx_int32_t*)ptr); - if (st->agc_level<1) - st->agc_level=1; - if (st->agc_level>32768) - st->agc_level=32768; - break; - case SPEEX_PREPROCESS_GET_AGC_TARGET: - (*(spx_int32_t*)ptr) = st->agc_level; - break; -#endif - default: - speex_warning_int("Unknown speex_preprocess_ctl request: ", request); - return -1; - } - return 0; -} - -#ifdef FIXED_DEBUG -long long spx_mips=0; -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/pseudofloat.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/pseudofloat.h deleted file mode 100755 index fa841a0..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/pseudofloat.h +++ /dev/null @@ -1,379 +0,0 @@ -/* Copyright (C) 2005 Jean-Marc Valin */ -/** - @file pseudofloat.h - @brief Pseudo-floating point - * This header file provides a lightweight floating point type for - * use on fixed-point platforms when a large dynamic range is - * required. The new type is not compatible with the 32-bit IEEE format, - * it is not even remotely as accurate as 32-bit floats, and is not - * even guaranteed to produce even remotely correct results for code - * other than Speex. It makes all kinds of shortcuts that are acceptable - * for Speex, but may not be acceptable for your application. You're - * quite welcome to reuse this code and improve it, but don't assume - * it works out of the box. Most likely, it doesn't. - */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef PSEUDOFLOAT_H -#define PSEUDOFLOAT_H - -#include "arch.h" -#include "os_support.h" -#include "math_approx.h" -#include <math.h> - -#ifdef FIXED_POINT - -typedef struct { - spx_int16_t m; - spx_int16_t e; -} spx_float_t; - -static const spx_float_t FLOAT_ZERO = {0,0}; -static const spx_float_t FLOAT_ONE = {16384,-14}; -static const spx_float_t FLOAT_HALF = {16384,-15}; - -#define MIN(a,b) ((a)<(b)?(a):(b)) -static inline spx_float_t PSEUDOFLOAT(spx_int32_t x) -{ - int e=0; - int sign=0; - if (x<0) - { - sign = 1; - x = -x; - } - if (x==0) - { - spx_float_t r = {0,0}; - return r; - } - e = spx_ilog2(ABS32(x))-14; - x = VSHR32(x, e); - if (sign) - { - spx_float_t r; - r.m = -x; - r.e = e; - return r; - } - else - { - spx_float_t r; - r.m = x; - r.e = e; - return r; - } -} - - -static inline spx_float_t FLOAT_ADD(spx_float_t a, spx_float_t b) -{ - spx_float_t r; - if (a.m==0) - return b; - else if (b.m==0) - return a; - if ((a).e > (b).e) - { - r.m = ((a).m>>1) + ((b).m>>MIN(15,(a).e-(b).e+1)); - r.e = (a).e+1; - } - else - { - r.m = ((b).m>>1) + ((a).m>>MIN(15,(b).e-(a).e+1)); - r.e = (b).e+1; - } - if (r.m>0) - { - if (r.m<16384) - { - r.m<<=1; - r.e-=1; - } - } else { - if (r.m>-16384) - { - r.m<<=1; - r.e-=1; - } - } - /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ - return r; -} - -static inline spx_float_t FLOAT_SUB(spx_float_t a, spx_float_t b) -{ - spx_float_t r; - if (a.m==0) - return b; - else if (b.m==0) - return a; - if ((a).e > (b).e) - { - r.m = ((a).m>>1) - ((b).m>>MIN(15,(a).e-(b).e+1)); - r.e = (a).e+1; - } - else - { - r.m = ((a).m>>MIN(15,(b).e-(a).e+1)) - ((b).m>>1); - r.e = (b).e+1; - } - if (r.m>0) - { - if (r.m<16384) - { - r.m<<=1; - r.e-=1; - } - } else { - if (r.m>-16384) - { - r.m<<=1; - r.e-=1; - } - } - /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ - return r; -} - -static inline int FLOAT_LT(spx_float_t a, spx_float_t b) -{ - if (a.m==0) - return b.m>0; - else if (b.m==0) - return a.m<0; - if ((a).e > (b).e) - return ((a).m>>1) < ((b).m>>MIN(15,(a).e-(b).e+1)); - else - return ((b).m>>1) > ((a).m>>MIN(15,(b).e-(a).e+1)); - -} - -static inline int FLOAT_GT(spx_float_t a, spx_float_t b) -{ - return FLOAT_LT(b,a); -} - -static inline spx_float_t FLOAT_MULT(spx_float_t a, spx_float_t b) -{ - spx_float_t r; - r.m = (spx_int16_t)((spx_int32_t)(a).m*(b).m>>15); - r.e = (a).e+(b).e+15; - if (r.m>0) - { - if (r.m<16384) - { - r.m<<=1; - r.e-=1; - } - } else { - if (r.m>-16384) - { - r.m<<=1; - r.e-=1; - } - } - /*printf ("%f * %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/ - return r; -} - -static inline spx_float_t FLOAT_AMULT(spx_float_t a, spx_float_t b) -{ - spx_float_t r; - r.m = (spx_int16_t)((spx_int32_t)(a).m*(b).m>>15); - r.e = (a).e+(b).e+15; - return r; -} - - -static inline spx_float_t FLOAT_SHL(spx_float_t a, int b) -{ - spx_float_t r; - r.m = a.m; - r.e = a.e+b; - return r; -} - -static inline spx_int16_t FLOAT_EXTRACT16(spx_float_t a) -{ - if (a.e<0) - return EXTRACT16((EXTEND32(a.m)+(EXTEND32(1)<<(-a.e-1)))>>-a.e); - else - return a.m<<a.e; -} - -static inline spx_int32_t FLOAT_EXTRACT32(spx_float_t a) -{ - if (a.e<0) - return (EXTEND32(a.m)+(EXTEND32(1)<<(-a.e-1)))>>-a.e; - else - return EXTEND32(a.m)<<a.e; -} - -static inline spx_int32_t FLOAT_MUL32(spx_float_t a, spx_word32_t b) -{ - return VSHR32(MULT16_32_Q15(a.m, b),-a.e-15); -} - -static inline spx_float_t FLOAT_MUL32U(spx_word32_t a, spx_word32_t b) -{ - int e1, e2; - spx_float_t r; - if (a==0 || b==0) - { - return FLOAT_ZERO; - } - e1 = spx_ilog2(ABS32(a)); - a = VSHR32(a, e1-14); - e2 = spx_ilog2(ABS32(b)); - b = VSHR32(b, e2-14); - r.m = MULT16_16_Q15(a,b); - r.e = e1+e2-13; - return r; -} - -/* Do NOT attempt to divide by a negative number */ -static inline spx_float_t FLOAT_DIV32_FLOAT(spx_word32_t a, spx_float_t b) -{ - int e=0; - spx_float_t r; - if (a==0) - { - return FLOAT_ZERO; - } - e = spx_ilog2(ABS32(a))-spx_ilog2(b.m-1)-15; - a = VSHR32(a, e); - if (ABS32(a)>=SHL32(EXTEND32(b.m-1),15)) - { - a >>= 1; - e++; - } - r.m = DIV32_16(a,b.m); - r.e = e-b.e; - return r; -} - - -/* Do NOT attempt to divide by a negative number */ -static inline spx_float_t FLOAT_DIV32(spx_word32_t a, spx_word32_t b) -{ - int e0=0,e=0; - spx_float_t r; - if (a==0) - { - return FLOAT_ZERO; - } - if (b>32767) - { - e0 = spx_ilog2(b)-14; - b = VSHR32(b, e0); - e0 = -e0; - } - e = spx_ilog2(ABS32(a))-spx_ilog2(b-1)-15; - a = VSHR32(a, e); - if (ABS32(a)>=SHL32(EXTEND32(b-1),15)) - { - a >>= 1; - e++; - } - e += e0; - r.m = DIV32_16(a,b); - r.e = e; - return r; -} - -/* Do NOT attempt to divide by a negative number */ -static inline spx_float_t FLOAT_DIVU(spx_float_t a, spx_float_t b) -{ - int e=0; - spx_int32_t num; - spx_float_t r; - if (b.m<=0) - { - speex_warning_int("Attempted to divide by", b.m); - return FLOAT_ONE; - } - num = a.m; - a.m = ABS16(a.m); - while (a.m >= b.m) - { - e++; - a.m >>= 1; - } - num = num << (15-e); - r.m = DIV32_16(num,b.m); - r.e = a.e-b.e-15+e; - return r; -} - -static inline spx_float_t FLOAT_SQRT(spx_float_t a) -{ - spx_float_t r; - spx_int32_t m; - m = SHL32(EXTEND32(a.m), 14); - r.e = a.e - 14; - if (r.e & 1) - { - r.e -= 1; - m <<= 1; - } - r.e >>= 1; - r.m = spx_sqrt(m); - return r; -} - -#else - -#define spx_float_t float -#define FLOAT_ZERO 0.f -#define FLOAT_ONE 1.f -#define FLOAT_HALF 0.5f -#define PSEUDOFLOAT(x) (x) -#define FLOAT_MULT(a,b) ((a)*(b)) -#define FLOAT_AMULT(a,b) ((a)*(b)) -#define FLOAT_MUL32(a,b) ((a)*(b)) -#define FLOAT_DIV32(a,b) ((a)/(b)) -#define FLOAT_EXTRACT16(a) (a) -#define FLOAT_EXTRACT32(a) (a) -#define FLOAT_ADD(a,b) ((a)+(b)) -#define FLOAT_SUB(a,b) ((a)-(b)) -#define REALFLOAT(x) (x) -#define FLOAT_DIV32_FLOAT(a,b) ((a)/(b)) -#define FLOAT_MUL32U(a,b) ((a)*(b)) -#define FLOAT_SHL(a,b) (a) -#define FLOAT_LT(a,b) ((a)<(b)) -#define FLOAT_GT(a,b) ((a)>(b)) -#define FLOAT_DIVU(a,b) ((a)/(b)) -#define FLOAT_SQRT(a) (spx_sqrt(a)) - -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.c deleted file mode 100755 index e624d1a..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.c +++ /dev/null @@ -1,385 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: quant_lsp.c - LSP vector quantization - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "quant_lsp.h" -#include "os_support.h" -#include <math.h> -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#include "arch.h" - -#ifdef BFIN_ASM -#include "quant_lsp_bfin.h" -#endif - -#ifdef FIXED_POINT - -#define LSP_LINEAR(i) (SHL16(i+1,11)) -#define LSP_LINEAR_HIGH(i) (ADD16(MULT16_16_16(i,2560),6144)) -#define LSP_DIV_256(x) (SHL16((spx_word16_t)x, 5)) -#define LSP_DIV_512(x) (SHL16((spx_word16_t)x, 4)) -#define LSP_DIV_1024(x) (SHL16((spx_word16_t)x, 3)) -#define LSP_PI 25736 - -#else - -#define LSP_LINEAR(i) (.25*(i)+.25) -#define LSP_LINEAR_HIGH(i) (.3125*(i)+.75) -#define LSP_SCALE 256. -#define LSP_DIV_256(x) (0.0039062*(x)) -#define LSP_DIV_512(x) (0.0019531*(x)) -#define LSP_DIV_1024(x) (0.00097656*(x)) -#define LSP_PI M_PI - -#endif - -static void compute_quant_weights(spx_lsp_t *qlsp, spx_word16_t *quant_weight, int order) -{ - int i; - spx_word16_t tmp1, tmp2; - for (i=0;i<order;i++) - { - if (i==0) - tmp1 = qlsp[i]; - else - tmp1 = qlsp[i]-qlsp[i-1]; - if (i==order-1) - tmp2 = LSP_PI-qlsp[i]; - else - tmp2 = qlsp[i+1]-qlsp[i]; - if (tmp2<tmp1) - tmp1 = tmp2; -#ifdef FIXED_POINT - quant_weight[i] = DIV32_16(81920,ADD16(300,tmp1)); -#else - quant_weight[i] = 10/(.04+tmp1); -#endif - } - -} - -/* Note: x is modified*/ -#ifndef OVERRIDE_LSP_QUANT -static int lsp_quant(spx_word16_t *x, const signed char *cdbk, int nbVec, int nbDim) -{ - int i,j; - spx_word32_t dist; - spx_word16_t tmp; - spx_word32_t best_dist=VERY_LARGE32; - int best_id=0; - const signed char *ptr=cdbk; - for (i=0;i<nbVec;i++) - { - dist=0; - for (j=0;j<nbDim;j++) - { - tmp=SUB16(x[j],SHL16((spx_word16_t)*ptr++,5)); - dist=MAC16_16(dist,tmp,tmp); - } - if (dist<best_dist) - { - best_dist=dist; - best_id=i; - } - } - - for (j=0;j<nbDim;j++) - x[j] = SUB16(x[j],SHL16((spx_word16_t)cdbk[best_id*nbDim+j],5)); - - return best_id; -} -#endif - -/* Note: x is modified*/ -#ifndef OVERRIDE_LSP_WEIGHT_QUANT -static int lsp_weight_quant(spx_word16_t *x, spx_word16_t *weight, const signed char *cdbk, int nbVec, int nbDim) -{ - int i,j; - spx_word32_t dist; - spx_word16_t tmp; - spx_word32_t best_dist=VERY_LARGE32; - int best_id=0; - const signed char *ptr=cdbk; - for (i=0;i<nbVec;i++) - { - dist=0; - for (j=0;j<nbDim;j++) - { - tmp=SUB16(x[j],SHL16((spx_word16_t)*ptr++,5)); - dist=MAC16_32_Q15(dist,weight[j],MULT16_16(tmp,tmp)); - } - if (dist<best_dist) - { - best_dist=dist; - best_id=i; - } - } - - for (j=0;j<nbDim;j++) - x[j] = SUB16(x[j],SHL16((spx_word16_t)cdbk[best_id*nbDim+j],5)); - return best_id; -} -#endif - -void lsp_quant_nb(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits) -{ - int i; - int id; - spx_word16_t quant_weight[10]; - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]; - - compute_quant_weights(qlsp, quant_weight, order); - - for (i=0;i<order;i++) - qlsp[i]=SUB16(qlsp[i],LSP_LINEAR(i)); - -#ifndef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i] = LSP_SCALE*qlsp[i]; -#endif - id = lsp_quant(qlsp, cdbk_nb, NB_CDBK_SIZE, order); - speex_bits_pack(bits, id, 6); - - for (i=0;i<order;i++) - qlsp[i]*=2; - - id = lsp_weight_quant(qlsp, quant_weight, cdbk_nb_low1, NB_CDBK_SIZE_LOW1, 5); - speex_bits_pack(bits, id, 6); - - for (i=0;i<5;i++) - qlsp[i]*=2; - - id = lsp_weight_quant(qlsp, quant_weight, cdbk_nb_low2, NB_CDBK_SIZE_LOW2, 5); - speex_bits_pack(bits, id, 6); - - id = lsp_weight_quant(qlsp+5, quant_weight+5, cdbk_nb_high1, NB_CDBK_SIZE_HIGH1, 5); - speex_bits_pack(bits, id, 6); - - for (i=5;i<10;i++) - qlsp[i]*=2; - - id = lsp_weight_quant(qlsp+5, quant_weight+5, cdbk_nb_high2, NB_CDBK_SIZE_HIGH2, 5); - speex_bits_pack(bits, id, 6); - -#ifdef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i]=PSHR16(qlsp[i],2); -#else - for (i=0;i<order;i++) - qlsp[i]=qlsp[i] * .00097656; -#endif - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]-qlsp[i]; -} - -void lsp_unquant_nb(spx_lsp_t *lsp, int order, SpeexBits *bits) -{ - int i, id; - for (i=0;i<order;i++) - lsp[i]=LSP_LINEAR(i); - - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<10;i++) - lsp[i] = ADD32(lsp[i], LSP_DIV_256(cdbk_nb[id*10+i])); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i] = ADD16(lsp[i], LSP_DIV_512(cdbk_nb_low1[id*5+i])); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i] = ADD32(lsp[i], LSP_DIV_1024(cdbk_nb_low2[id*5+i])); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i+5] = ADD32(lsp[i+5], LSP_DIV_512(cdbk_nb_high1[id*5+i])); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i+5] = ADD32(lsp[i+5], LSP_DIV_1024(cdbk_nb_high2[id*5+i])); -} - - -void lsp_quant_lbr(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits) -{ - int i; - int id; - spx_word16_t quant_weight[10]; - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]; - - compute_quant_weights(qlsp, quant_weight, order); - - for (i=0;i<order;i++) - qlsp[i]=SUB16(qlsp[i],LSP_LINEAR(i)); -#ifndef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i]=qlsp[i]*LSP_SCALE; -#endif - id = lsp_quant(qlsp, cdbk_nb, NB_CDBK_SIZE, order); - speex_bits_pack(bits, id, 6); - - for (i=0;i<order;i++) - qlsp[i]*=2; - - id = lsp_weight_quant(qlsp, quant_weight, cdbk_nb_low1, NB_CDBK_SIZE_LOW1, 5); - speex_bits_pack(bits, id, 6); - - id = lsp_weight_quant(qlsp+5, quant_weight+5, cdbk_nb_high1, NB_CDBK_SIZE_HIGH1, 5); - speex_bits_pack(bits, id, 6); - -#ifdef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i] = PSHR16(qlsp[i],1); -#else - for (i=0;i<order;i++) - qlsp[i] = qlsp[i]*0.0019531; -#endif - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]-qlsp[i]; -} - -void lsp_unquant_lbr(spx_lsp_t *lsp, int order, SpeexBits *bits) -{ - int i, id; - for (i=0;i<order;i++) - lsp[i]=LSP_LINEAR(i); - - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<10;i++) - lsp[i] += LSP_DIV_256(cdbk_nb[id*10+i]); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i] += LSP_DIV_512(cdbk_nb_low1[id*5+i]); - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<5;i++) - lsp[i+5] += LSP_DIV_512(cdbk_nb_high1[id*5+i]); - -} - - -#ifdef DISABLE_WIDEBAND -void lsp_quant_high(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); -} -void lsp_unquant_high(spx_lsp_t *lsp, int order, SpeexBits *bits) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); -} -#else -extern const signed char high_lsp_cdbk[]; -extern const signed char high_lsp_cdbk2[]; - - -void lsp_quant_high(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits) -{ - int i; - int id; - spx_word16_t quant_weight[10]; - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]; - - compute_quant_weights(qlsp, quant_weight, order); - - /* quant_weight[0] = 10/(qlsp[1]-qlsp[0]); - quant_weight[order-1] = 10/(qlsp[order-1]-qlsp[order-2]); - for (i=1;i<order-1;i++) - { - tmp1 = 10/(qlsp[i]-qlsp[i-1]); - tmp2 = 10/(qlsp[i+1]-qlsp[i]); - quant_weight[i] = tmp1 > tmp2 ? tmp1 : tmp2; - }*/ - - for (i=0;i<order;i++) - qlsp[i]=SUB16(qlsp[i],LSP_LINEAR_HIGH(i)); -#ifndef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i] = qlsp[i]*LSP_SCALE; -#endif - id = lsp_quant(qlsp, high_lsp_cdbk, 64, order); - speex_bits_pack(bits, id, 6); - - for (i=0;i<order;i++) - qlsp[i]*=2; - - id = lsp_weight_quant(qlsp, quant_weight, high_lsp_cdbk2, 64, order); - speex_bits_pack(bits, id, 6); - -#ifdef FIXED_POINT - for (i=0;i<order;i++) - qlsp[i] = PSHR16(qlsp[i],1); -#else - for (i=0;i<order;i++) - qlsp[i] = qlsp[i]*0.0019531; -#endif - - for (i=0;i<order;i++) - qlsp[i]=lsp[i]-qlsp[i]; -} - -void lsp_unquant_high(spx_lsp_t *lsp, int order, SpeexBits *bits) -{ - - int i, id; - for (i=0;i<order;i++) - lsp[i]=LSP_LINEAR_HIGH(i); - - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<order;i++) - lsp[i] += LSP_DIV_256(high_lsp_cdbk[id*order+i]); - - - id=speex_bits_unpack_unsigned(bits, 6); - for (i=0;i<order;i++) - lsp[i] += LSP_DIV_512(high_lsp_cdbk2[id*order+i]); -} - -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.h deleted file mode 100755 index 0fc206b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file quant_lsp.h - @brief LSP vector quantization -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef QUANT_LSP_H -#define QUANT_LSP_H - -#include "speex/speex_bits.h" -#include "arch.h" - -#define MAX_LSP_SIZE 20 - -#define NB_CDBK_SIZE 64 -#define NB_CDBK_SIZE_LOW1 64 -#define NB_CDBK_SIZE_LOW2 64 -#define NB_CDBK_SIZE_HIGH1 64 -#define NB_CDBK_SIZE_HIGH2 64 - -/*Narrowband codebooks*/ -extern const signed char cdbk_nb[]; -extern const signed char cdbk_nb_low1[]; -extern const signed char cdbk_nb_low2[]; -extern const signed char cdbk_nb_high1[]; -extern const signed char cdbk_nb_high2[]; - -/* Quantizes narrowband LSPs with 30 bits */ -void lsp_quant_nb(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits); - -/* Decodes quantized narrowband LSPs */ -void lsp_unquant_nb(spx_lsp_t *lsp, int order, SpeexBits *bits); - -/* Quantizes low bit-rate narrowband LSPs with 18 bits */ -void lsp_quant_lbr(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits); - -/* Decodes quantized low bit-rate narrowband LSPs */ -void lsp_unquant_lbr(spx_lsp_t *lsp, int order, SpeexBits *bits); - -/* Quantizes high-band LSPs with 12 bits */ -void lsp_quant_high(spx_lsp_t *lsp, spx_lsp_t *qlsp, int order, SpeexBits *bits); - -/* Decodes high-band LSPs */ -void lsp_unquant_high(spx_lsp_t *lsp, int order, SpeexBits *bits); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp_bfin.h deleted file mode 100755 index 087b466..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/quant_lsp_bfin.h +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2006 David Rowe */ -/** - @file quant_lsp_bfin.h - @author David Rowe - @brief Various compatibility routines for Speex (Blackfin version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_LSP_QUANT -#ifdef OVERRIDE_LSP_QUANT - -/* - Note http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html - well tell you all the magic resgister constraints used below - for gcc in-line asm. -*/ - -static int lsp_quant( - spx_word16_t *x, - const signed char *cdbk, - int nbVec, - int nbDim -) -{ - int j; - spx_word32_t best_dist=1<<30; - int best_id=0; - - __asm__ __volatile__ - ( -" %0 = 1 (X);\n\t" /* %0: best_dist */ -" %0 <<= 30;\n\t" -" %1 = 0 (X);\n\t" /* %1: best_i */ -" P2 = %3\n\t" /* P2: ptr to cdbk */ -" R5 = 0;\n\t" /* R5: best cb entry */ - -" R0 = %5;\n\t" /* set up circ addr */ -" R0 <<= 1;\n\t" -" L0 = R0;\n\t" -" I0 = %2;\n\t" /* %2: &x[0] */ -" B0 = %2;\n\t" - -" R2.L = W [I0++];\n\t" -" LSETUP (1f, 2f) LC0 = %4;\n\t" -"1: R3 = 0;\n\t" /* R3: dist */ -" LSETUP (3f, 4f) LC1 = %5;\n\t" -"3: R1 = B [P2++] (X);\n\t" -" R1 <<= 5;\n\t" -" R0.L = R2.L - R1.L || R2.L = W [I0++];\n\t" -" R0 = R0.L*R0.L;\n\t" -"4: R3 = R3 + R0;\n\t" - -" cc =R3<%0;\n\t" -" if cc %0=R3;\n\t" -" if cc %1=R5;\n\t" -"2: R5 += 1;\n\t" -" L0 = 0;\n\t" - : "=&d" (best_dist), "=&d" (best_id) - : "a" (x), "b" (cdbk), "a" (nbVec), "a" (nbDim) - : "I0", "P2", "R0", "R1", "R2", "R3", "R5", "L0", "B0", "A0" - ); - - for (j=0;j<nbDim;j++) { - x[j] = SUB16(x[j],SHL16((spx_word16_t)cdbk[best_id*nbDim+j],5)); - } - return best_id; -} -#endif - -#define OVERRIDE_LSP_WEIGHT_QUANT -#ifdef OVERRIDE_LSP_WEIGHT_QUANT - -/* - Note http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html - well tell you all the magic resgister constraints used below - for gcc in-line asm. -*/ - -static int lsp_weight_quant( - spx_word16_t *x, - spx_word16_t *weight, - const signed char *cdbk, - int nbVec, - int nbDim -) -{ - int j; - spx_word32_t best_dist=1<<30; - int best_id=0; - - __asm__ __volatile__ - ( -" %0 = 1 (X);\n\t" /* %0: best_dist */ -" %0 <<= 30;\n\t" -" %1 = 0 (X);\n\t" /* %1: best_i */ -" P2 = %4\n\t" /* P2: ptr to cdbk */ -" R5 = 0;\n\t" /* R5: best cb entry */ - -" R0 = %6;\n\t" /* set up circ addr */ -" R0 <<= 1;\n\t" -" L0 = R0;\n\t" -" L1 = R0;\n\t" -" I0 = %2;\n\t" /* %2: &x[0] */ -" I1 = %3;\n\t" /* %3: &weight[0] */ -" B0 = %2;\n\t" -" B1 = %3;\n\t" - -" LSETUP (1f, 2f) LC0 = %5;\n\t" -"1: R3 = 0 (X);\n\t" /* R3: dist */ -" LSETUP (3f, 4f) LC1 = %6;\n\t" -"3: R0.L = W [I0++] || R2.L = W [I1++];\n\t" -" R1 = B [P2++] (X);\n\t" -" R1 <<= 5;\n\t" -" R0.L = R0.L - R1.L;\n\t" -" R0 = R0.L*R0.L;\n\t" -" A1 = R2.L*R0.L (M,IS);\n\t" -" A1 = A1 >>> 16;\n\t" -" R1 = (A1 += R2.L*R0.H) (IS);\n\t" -"4: R3 = R3 + R1;\n\t" - -" cc =R3<%0;\n\t" -" if cc %0=R3;\n\t" -" if cc %1=R5;\n\t" -"2: R5 += 1;\n\t" -" L0 = 0;\n\t" -" L1 = 0;\n\t" - : "=&d" (best_dist), "=&d" (best_id) - : "a" (x), "a" (weight), "b" (cdbk), "a" (nbVec), "a" (nbDim) - : "I0", "I1", "P2", "R0", "R1", "R2", "R3", "R5", "A1", - "L0", "L1", "B0", "B1" - ); - - for (j=0;j<nbDim;j++) { - x[j] = SUB16(x[j],SHL16((spx_word16_t)cdbk[best_id*nbDim+j],5)); - } - return best_id; -} -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample.c deleted file mode 100755 index bebd1a8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample.c +++ /dev/null @@ -1,1131 +0,0 @@ -/* Copyright (C) 2007-2008 Jean-Marc Valin - Copyright (C) 2008 Thorvald Natvig - - File: resample.c - Arbitrary resampling code - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - The design goals of this code are: - - Very fast algorithm - - SIMD-friendly algorithm - - Low memory requirement - - Good *perceptual* quality (and not best SNR) - - Warning: This resampler is relatively new. Although I think I got rid of - all the major bugs and I don't expect the API to change anymore, there - may be something I've missed. So use with caution. - - This algorithm is based on this original resampling algorithm: - Smith, Julius O. Digital Audio Resampling Home Page - Center for Computer Research in Music and Acoustics (CCRMA), - Stanford University, 2007. - Web published at http://www-ccrma.stanford.edu/~jos/resample/. - - There is one main difference, though. This resampler uses cubic - interpolation instead of linear interpolation in the above paper. This - makes the table much smaller and makes it possible to compute that table - on a per-stream basis. In turn, being able to tweak the table for each - stream makes it possible to both reduce complexity on simple ratios - (e.g. 2/3), and get rid of the rounding operations in the inner loop. - The latter both reduces CPU time and makes the algorithm more SIMD-friendly. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef OUTSIDE_SPEEX -#include <stdlib.h> -static void *speex_alloc (int size) {return calloc(size,1);} -static void *speex_realloc (void *ptr, int size) {return realloc(ptr, size);} -static void speex_free (void *ptr) {free(ptr);} -#include "speex_resampler.h" -#include "arch.h" -#else /* OUTSIDE_SPEEX */ - -#include "speex/speex_resampler.h" -#include "arch.h" -#include "os_support.h" -#endif /* OUTSIDE_SPEEX */ - -#include "stack_alloc.h" -#include <math.h> - -#ifndef M_PI -#define M_PI 3.14159263 -#endif - -#ifdef FIXED_POINT -#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) -#else -#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) -#endif - -#define IMAX(a,b) ((a) > (b) ? (a) : (b)) -#define IMIN(a,b) ((a) < (b) ? (a) : (b)) - -#ifndef NULL -#define NULL 0 -#endif - -#ifdef _USE_SSE -#include "resample_sse.h" -#endif - -/* Numer of elements to allocate on the stack */ -#ifdef VAR_ARRAYS -#define FIXED_STACK_ALLOC 8192 -#else -#define FIXED_STACK_ALLOC 1024 -#endif - -typedef int (*resampler_basic_func)(SpeexResamplerState *, spx_uint32_t , const spx_word16_t *, spx_uint32_t *, spx_word16_t *, spx_uint32_t *); - -struct SpeexResamplerState_ { - spx_uint32_t in_rate; - spx_uint32_t out_rate; - spx_uint32_t num_rate; - spx_uint32_t den_rate; - - int quality; - spx_uint32_t nb_channels; - spx_uint32_t filt_len; - spx_uint32_t mem_alloc_size; - spx_uint32_t buffer_size; - int int_advance; - int frac_advance; - float cutoff; - spx_uint32_t oversample; - int initialised; - int started; - - /* These are per-channel */ - spx_int32_t *last_sample; - spx_uint32_t *samp_frac_num; - spx_uint32_t *magic_samples; - - spx_word16_t *mem; - spx_word16_t *sinc_table; - spx_uint32_t sinc_table_length; - resampler_basic_func resampler_ptr; - - int in_stride; - int out_stride; -} ; - -static double kaiser12_table[68] = { - 0.99859849, 1.00000000, 0.99859849, 0.99440475, 0.98745105, 0.97779076, - 0.96549770, 0.95066529, 0.93340547, 0.91384741, 0.89213598, 0.86843014, - 0.84290116, 0.81573067, 0.78710866, 0.75723148, 0.72629970, 0.69451601, - 0.66208321, 0.62920216, 0.59606986, 0.56287762, 0.52980938, 0.49704014, - 0.46473455, 0.43304576, 0.40211431, 0.37206735, 0.34301800, 0.31506490, - 0.28829195, 0.26276832, 0.23854851, 0.21567274, 0.19416736, 0.17404546, - 0.15530766, 0.13794294, 0.12192957, 0.10723616, 0.09382272, 0.08164178, - 0.07063950, 0.06075685, 0.05193064, 0.04409466, 0.03718069, 0.03111947, - 0.02584161, 0.02127838, 0.01736250, 0.01402878, 0.01121463, 0.00886058, - 0.00691064, 0.00531256, 0.00401805, 0.00298291, 0.00216702, 0.00153438, - 0.00105297, 0.00069463, 0.00043489, 0.00025272, 0.00013031, 0.0000527734, - 0.00001000, 0.00000000}; -/* -static double kaiser12_table[36] = { - 0.99440475, 1.00000000, 0.99440475, 0.97779076, 0.95066529, 0.91384741, - 0.86843014, 0.81573067, 0.75723148, 0.69451601, 0.62920216, 0.56287762, - 0.49704014, 0.43304576, 0.37206735, 0.31506490, 0.26276832, 0.21567274, - 0.17404546, 0.13794294, 0.10723616, 0.08164178, 0.06075685, 0.04409466, - 0.03111947, 0.02127838, 0.01402878, 0.00886058, 0.00531256, 0.00298291, - 0.00153438, 0.00069463, 0.00025272, 0.0000527734, 0.00000500, 0.00000000}; -*/ -static double kaiser10_table[36] = { - 0.99537781, 1.00000000, 0.99537781, 0.98162644, 0.95908712, 0.92831446, - 0.89005583, 0.84522401, 0.79486424, 0.74011713, 0.68217934, 0.62226347, - 0.56155915, 0.50119680, 0.44221549, 0.38553619, 0.33194107, 0.28205962, - 0.23636152, 0.19515633, 0.15859932, 0.12670280, 0.09935205, 0.07632451, - 0.05731132, 0.04193980, 0.02979584, 0.02044510, 0.01345224, 0.00839739, - 0.00488951, 0.00257636, 0.00115101, 0.00035515, 0.00000000, 0.00000000}; - -static double kaiser8_table[36] = { - 0.99635258, 1.00000000, 0.99635258, 0.98548012, 0.96759014, 0.94302200, - 0.91223751, 0.87580811, 0.83439927, 0.78875245, 0.73966538, 0.68797126, - 0.63451750, 0.58014482, 0.52566725, 0.47185369, 0.41941150, 0.36897272, - 0.32108304, 0.27619388, 0.23465776, 0.19672670, 0.16255380, 0.13219758, - 0.10562887, 0.08273982, 0.06335451, 0.04724088, 0.03412321, 0.02369490, - 0.01563093, 0.00959968, 0.00527363, 0.00233883, 0.00050000, 0.00000000}; - -static double kaiser6_table[36] = { - 0.99733006, 1.00000000, 0.99733006, 0.98935595, 0.97618418, 0.95799003, - 0.93501423, 0.90755855, 0.87598009, 0.84068475, 0.80211977, 0.76076565, - 0.71712752, 0.67172623, 0.62508937, 0.57774224, 0.53019925, 0.48295561, - 0.43647969, 0.39120616, 0.34752997, 0.30580127, 0.26632152, 0.22934058, - 0.19505503, 0.16360756, 0.13508755, 0.10953262, 0.08693120, 0.06722600, - 0.05031820, 0.03607231, 0.02432151, 0.01487334, 0.00752000, 0.00000000}; - -struct FuncDef { - double *table; - int oversample; -}; - -static struct FuncDef _KAISER12 = {kaiser12_table, 64}; -#define KAISER12 (&_KAISER12) -/*static struct FuncDef _KAISER12 = {kaiser12_table, 32}; -#define KAISER12 (&_KAISER12)*/ -static struct FuncDef _KAISER10 = {kaiser10_table, 32}; -#define KAISER10 (&_KAISER10) -static struct FuncDef _KAISER8 = {kaiser8_table, 32}; -#define KAISER8 (&_KAISER8) -static struct FuncDef _KAISER6 = {kaiser6_table, 32}; -#define KAISER6 (&_KAISER6) - -struct QualityMapping { - int base_length; - int oversample; - float downsample_bandwidth; - float upsample_bandwidth; - struct FuncDef *window_func; -}; - - -/* This table maps conversion quality to internal parameters. There are two - reasons that explain why the up-sampling bandwidth is larger than the - down-sampling bandwidth: - 1) When up-sampling, we can assume that the spectrum is already attenuated - close to the Nyquist rate (from an A/D or a previous resampling filter) - 2) Any aliasing that occurs very close to the Nyquist rate will be masked - by the sinusoids/noise just below the Nyquist rate (guaranteed only for - up-sampling). -*/ -static const struct QualityMapping quality_map[11] = { - { 8, 4, 0.830f, 0.860f, KAISER6 }, /* Q0 */ - { 16, 4, 0.850f, 0.880f, KAISER6 }, /* Q1 */ - { 32, 4, 0.882f, 0.910f, KAISER6 }, /* Q2 */ /* 82.3% cutoff ( ~60 dB stop) 6 */ - { 48, 8, 0.895f, 0.917f, KAISER8 }, /* Q3 */ /* 84.9% cutoff ( ~80 dB stop) 8 */ - { 64, 8, 0.921f, 0.940f, KAISER8 }, /* Q4 */ /* 88.7% cutoff ( ~80 dB stop) 8 */ - { 80, 16, 0.922f, 0.940f, KAISER10}, /* Q5 */ /* 89.1% cutoff (~100 dB stop) 10 */ - { 96, 16, 0.940f, 0.945f, KAISER10}, /* Q6 */ /* 91.5% cutoff (~100 dB stop) 10 */ - {128, 16, 0.950f, 0.950f, KAISER10}, /* Q7 */ /* 93.1% cutoff (~100 dB stop) 10 */ - {160, 16, 0.960f, 0.960f, KAISER10}, /* Q8 */ /* 94.5% cutoff (~100 dB stop) 10 */ - {192, 32, 0.968f, 0.968f, KAISER12}, /* Q9 */ /* 95.5% cutoff (~100 dB stop) 10 */ - {256, 32, 0.975f, 0.975f, KAISER12}, /* Q10 */ /* 96.6% cutoff (~100 dB stop) 10 */ -}; -/*8,24,40,56,80,104,128,160,200,256,320*/ -static double compute_func(float x, struct FuncDef *func) -{ - float y, frac; - double interp[4]; - int ind; - y = x*func->oversample; - ind = (int)floor(y); - frac = (y-ind); - /* CSE with handle the repeated powers */ - interp[3] = -0.1666666667*frac + 0.1666666667*(frac*frac*frac); - interp[2] = frac + 0.5*(frac*frac) - 0.5*(frac*frac*frac); - /*interp[2] = 1.f - 0.5f*frac - frac*frac + 0.5f*frac*frac*frac;*/ - interp[0] = -0.3333333333*frac + 0.5*(frac*frac) - 0.1666666667*(frac*frac*frac); - /* Just to make sure we don't have rounding problems */ - interp[1] = 1.f-interp[3]-interp[2]-interp[0]; - - /*sum = frac*accum[1] + (1-frac)*accum[2];*/ - return interp[0]*func->table[ind] + interp[1]*func->table[ind+1] + interp[2]*func->table[ind+2] + interp[3]*func->table[ind+3]; -} - -#if 0 -#include <stdio.h> -int main(int argc, char **argv) -{ - int i; - for (i=0;i<256;i++) - { - printf ("%f\n", compute_func(i/256., KAISER12)); - } - return 0; -} -#endif - -#ifdef FIXED_POINT -/* The slow way of computing a sinc for the table. Should improve that some day */ -static spx_word16_t sinc(float cutoff, float x, int N, struct FuncDef *window_func) -{ - /*fprintf (stderr, "%f ", x);*/ - float xx = x * cutoff; - if (fabs(x)<1e-6f) - return WORD2INT(32768.*cutoff); - else if (fabs(x) > .5f*N) - return 0; - /*FIXME: Can it really be any slower than this? */ - return WORD2INT(32768.*cutoff*sin(M_PI*xx)/(M_PI*xx) * compute_func(fabs(2.*x/N), window_func)); -} -#else -/* The slow way of computing a sinc for the table. Should improve that some day */ -static spx_word16_t sinc(float cutoff, float x, int N, struct FuncDef *window_func) -{ - /*fprintf (stderr, "%f ", x);*/ - float xx = x * cutoff; - if (fabs(x)<1e-6) - return cutoff; - else if (fabs(x) > .5*N) - return 0; - /*FIXME: Can it really be any slower than this? */ - return cutoff*sin(M_PI*xx)/(M_PI*xx) * compute_func(fabs(2.*x/N), window_func); -} -#endif - -#ifdef FIXED_POINT -static void cubic_coef(spx_word16_t x, spx_word16_t interp[4]) -{ - /* Compute interpolation coefficients. I'm not sure whether this corresponds to cubic interpolation - but I know it's MMSE-optimal on a sinc */ - spx_word16_t x2, x3; - x2 = MULT16_16_P15(x, x); - x3 = MULT16_16_P15(x, x2); - interp[0] = PSHR32(MULT16_16(QCONST16(-0.16667f, 15),x) + MULT16_16(QCONST16(0.16667f, 15),x3),15); - interp[1] = EXTRACT16(EXTEND32(x) + SHR32(SUB32(EXTEND32(x2),EXTEND32(x3)),1)); - interp[3] = PSHR32(MULT16_16(QCONST16(-0.33333f, 15),x) + MULT16_16(QCONST16(.5f,15),x2) - MULT16_16(QCONST16(0.16667f, 15),x3),15); - /* Just to make sure we don't have rounding problems */ - interp[2] = Q15_ONE-interp[0]-interp[1]-interp[3]; - if (interp[2]<32767) - interp[2]+=1; -} -#else -static void cubic_coef(spx_word16_t frac, spx_word16_t interp[4]) -{ - /* Compute interpolation coefficients. I'm not sure whether this corresponds to cubic interpolation - but I know it's MMSE-optimal on a sinc */ - interp[0] = -0.16667f*frac + 0.16667f*frac*frac*frac; - interp[1] = frac + 0.5f*frac*frac - 0.5f*frac*frac*frac; - /*interp[2] = 1.f - 0.5f*frac - frac*frac + 0.5f*frac*frac*frac;*/ - interp[3] = -0.33333f*frac + 0.5f*frac*frac - 0.16667f*frac*frac*frac; - /* Just to make sure we don't have rounding problems */ - interp[2] = 1.-interp[0]-interp[1]-interp[3]; -} -#endif - -static int resampler_basic_direct_single(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) -{ - const int N = st->filt_len; - int out_sample = 0; - int last_sample = st->last_sample[channel_index]; - spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index]; - const spx_word16_t *sinc_table = st->sinc_table; - const int out_stride = st->out_stride; - const int int_advance = st->int_advance; - const int frac_advance = st->frac_advance; - const spx_uint32_t den_rate = st->den_rate; - spx_word32_t sum; - int j; - - while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) - { - const spx_word16_t *sinc = & sinc_table[samp_frac_num*N]; - const spx_word16_t *iptr = & in[last_sample]; - -#ifndef OVERRIDE_INNER_PRODUCT_SINGLE - float accum[4] = {0,0,0,0}; - - for(j=0;j<N;j+=4) { - accum[0] += sinc[j]*iptr[j]; - accum[1] += sinc[j+1]*iptr[j+1]; - accum[2] += sinc[j+2]*iptr[j+2]; - accum[3] += sinc[j+3]*iptr[j+3]; - } - sum = accum[0] + accum[1] + accum[2] + accum[3]; -#else - sum = inner_product_single(sinc, iptr, N); -#endif - - out[out_stride * out_sample++] = PSHR32(sum, 15); - last_sample += int_advance; - samp_frac_num += frac_advance; - if (samp_frac_num >= den_rate) - { - samp_frac_num -= den_rate; - last_sample++; - } - } - - st->last_sample[channel_index] = last_sample; - st->samp_frac_num[channel_index] = samp_frac_num; - return out_sample; -} - -#ifdef FIXED_POINT -#else -/* This is the same as the previous function, except with a double-precision accumulator */ -static int resampler_basic_direct_double(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) -{ - const int N = st->filt_len; - int out_sample = 0; - int last_sample = st->last_sample[channel_index]; - spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index]; - const spx_word16_t *sinc_table = st->sinc_table; - const int out_stride = st->out_stride; - const int int_advance = st->int_advance; - const int frac_advance = st->frac_advance; - const spx_uint32_t den_rate = st->den_rate; - double sum; - int j; - - while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) - { - const spx_word16_t *sinc = & sinc_table[samp_frac_num*N]; - const spx_word16_t *iptr = & in[last_sample]; - -#ifndef OVERRIDE_INNER_PRODUCT_DOUBLE - double accum[4] = {0,0,0,0}; - - for(j=0;j<N;j+=4) { - accum[0] += sinc[j]*iptr[j]; - accum[1] += sinc[j+1]*iptr[j+1]; - accum[2] += sinc[j+2]*iptr[j+2]; - accum[3] += sinc[j+3]*iptr[j+3]; - } - sum = accum[0] + accum[1] + accum[2] + accum[3]; -#else - sum = inner_product_double(sinc, iptr, N); -#endif - - out[out_stride * out_sample++] = PSHR32(sum, 15); - last_sample += int_advance; - samp_frac_num += frac_advance; - if (samp_frac_num >= den_rate) - { - samp_frac_num -= den_rate; - last_sample++; - } - } - - st->last_sample[channel_index] = last_sample; - st->samp_frac_num[channel_index] = samp_frac_num; - return out_sample; -} -#endif - -static int resampler_basic_interpolate_single(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) -{ - const int N = st->filt_len; - int out_sample = 0; - int last_sample = st->last_sample[channel_index]; - spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index]; - const int out_stride = st->out_stride; - const int int_advance = st->int_advance; - const int frac_advance = st->frac_advance; - const spx_uint32_t den_rate = st->den_rate; - int j; - spx_word32_t sum; - - while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) - { - const spx_word16_t *iptr = & in[last_sample]; - - const int offset = samp_frac_num*st->oversample/st->den_rate; -#ifdef FIXED_POINT - const spx_word16_t frac = PDIV32(SHL32((samp_frac_num*st->oversample) % st->den_rate,15),st->den_rate); -#else - const spx_word16_t frac = ((float)((samp_frac_num*st->oversample) % st->den_rate))/st->den_rate; -#endif - spx_word16_t interp[4]; - - -#ifndef OVERRIDE_INTERPOLATE_PRODUCT_SINGLE - spx_word32_t accum[4] = {0,0,0,0}; - - for(j=0;j<N;j++) { - const spx_word16_t curr_in=iptr[j]; - accum[0] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-2]); - accum[1] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-1]); - accum[2] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset]); - accum[3] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset+1]); - } - - cubic_coef(frac, interp); - sum = MULT16_32_Q15(interp[0],accum[0]) + MULT16_32_Q15(interp[1],accum[1]) + MULT16_32_Q15(interp[2],accum[2]) + MULT16_32_Q15(interp[3],accum[3]); -#else - cubic_coef(frac, interp); - sum = interpolate_product_single(iptr, st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample, interp); -#endif - - out[out_stride * out_sample++] = PSHR32(sum,15); - last_sample += int_advance; - samp_frac_num += frac_advance; - if (samp_frac_num >= den_rate) - { - samp_frac_num -= den_rate; - last_sample++; - } - } - - st->last_sample[channel_index] = last_sample; - st->samp_frac_num[channel_index] = samp_frac_num; - return out_sample; -} - -#ifdef FIXED_POINT -#else -/* This is the same as the previous function, except with a double-precision accumulator */ -static int resampler_basic_interpolate_double(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) -{ - const int N = st->filt_len; - int out_sample = 0; - int last_sample = st->last_sample[channel_index]; - spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index]; - const int out_stride = st->out_stride; - const int int_advance = st->int_advance; - const int frac_advance = st->frac_advance; - const spx_uint32_t den_rate = st->den_rate; - int j; - spx_word32_t sum; - - while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) - { - const spx_word16_t *iptr = & in[last_sample]; - - const int offset = samp_frac_num*st->oversample/st->den_rate; -#ifdef FIXED_POINT - const spx_word16_t frac = PDIV32(SHL32((samp_frac_num*st->oversample) % st->den_rate,15),st->den_rate); -#else - const spx_word16_t frac = ((float)((samp_frac_num*st->oversample) % st->den_rate))/st->den_rate; -#endif - spx_word16_t interp[4]; - - -#ifndef OVERRIDE_INTERPOLATE_PRODUCT_DOUBLE - double accum[4] = {0,0,0,0}; - - for(j=0;j<N;j++) { - const double curr_in=iptr[j]; - accum[0] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-2]); - accum[1] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-1]); - accum[2] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset]); - accum[3] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset+1]); - } - - cubic_coef(frac, interp); - sum = MULT16_32_Q15(interp[0],accum[0]) + MULT16_32_Q15(interp[1],accum[1]) + MULT16_32_Q15(interp[2],accum[2]) + MULT16_32_Q15(interp[3],accum[3]); -#else - cubic_coef(frac, interp); - sum = interpolate_product_double(iptr, st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample, interp); -#endif - - out[out_stride * out_sample++] = PSHR32(sum,15); - last_sample += int_advance; - samp_frac_num += frac_advance; - if (samp_frac_num >= den_rate) - { - samp_frac_num -= den_rate; - last_sample++; - } - } - - st->last_sample[channel_index] = last_sample; - st->samp_frac_num[channel_index] = samp_frac_num; - return out_sample; -} -#endif - -static void update_filter(SpeexResamplerState *st) -{ - spx_uint32_t old_length; - - old_length = st->filt_len; - st->oversample = quality_map[st->quality].oversample; - st->filt_len = quality_map[st->quality].base_length; - - if (st->num_rate > st->den_rate) - { - /* down-sampling */ - st->cutoff = quality_map[st->quality].downsample_bandwidth * st->den_rate / st->num_rate; - /* FIXME: divide the numerator and denominator by a certain amount if they're too large */ - st->filt_len = st->filt_len*st->num_rate / st->den_rate; - /* Round down to make sure we have a multiple of 4 */ - st->filt_len &= (~0x3); - if (2*st->den_rate < st->num_rate) - st->oversample >>= 1; - if (4*st->den_rate < st->num_rate) - st->oversample >>= 1; - if (8*st->den_rate < st->num_rate) - st->oversample >>= 1; - if (16*st->den_rate < st->num_rate) - st->oversample >>= 1; - if (st->oversample < 1) - st->oversample = 1; - } else { - /* up-sampling */ - st->cutoff = quality_map[st->quality].upsample_bandwidth; - } - - /* Choose the resampling type that requires the least amount of memory */ - if (st->den_rate <= st->oversample) - { - spx_uint32_t i; - if (!st->sinc_table) - st->sinc_table = (spx_word16_t *)speex_alloc(st->filt_len*st->den_rate*sizeof(spx_word16_t)); - else if (st->sinc_table_length < st->filt_len*st->den_rate) - { - st->sinc_table = (spx_word16_t *)speex_realloc(st->sinc_table,st->filt_len*st->den_rate*sizeof(spx_word16_t)); - st->sinc_table_length = st->filt_len*st->den_rate; - } - for (i=0;i<st->den_rate;i++) - { - spx_int32_t j; - for (j=0;j<st->filt_len;j++) - { - st->sinc_table[i*st->filt_len+j] = sinc(st->cutoff,((j-(spx_int32_t)st->filt_len/2+1)-((float)i)/st->den_rate), st->filt_len, quality_map[st->quality].window_func); - } - } -#ifdef FIXED_POINT - st->resampler_ptr = resampler_basic_direct_single; -#else - if (st->quality>8) - st->resampler_ptr = resampler_basic_direct_double; - else - st->resampler_ptr = resampler_basic_direct_single; -#endif - /*fprintf (stderr, "resampler uses direct sinc table and normalised cutoff %f\n", cutoff);*/ - } else { - spx_int32_t i; - if (!st->sinc_table) - st->sinc_table = (spx_word16_t *)speex_alloc((st->filt_len*st->oversample+8)*sizeof(spx_word16_t)); - else if (st->sinc_table_length < st->filt_len*st->oversample+8) - { - st->sinc_table = (spx_word16_t *)speex_realloc(st->sinc_table,(st->filt_len*st->oversample+8)*sizeof(spx_word16_t)); - st->sinc_table_length = st->filt_len*st->oversample+8; - } - for (i=-4;i<(spx_int32_t)(st->oversample*st->filt_len+4);i++) - st->sinc_table[i+4] = sinc(st->cutoff,(i/(float)st->oversample - st->filt_len/2), st->filt_len, quality_map[st->quality].window_func); -#ifdef FIXED_POINT - st->resampler_ptr = resampler_basic_interpolate_single; -#else - if (st->quality>8) - st->resampler_ptr = resampler_basic_interpolate_double; - else - st->resampler_ptr = resampler_basic_interpolate_single; -#endif - /*fprintf (stderr, "resampler uses interpolated sinc table and normalised cutoff %f\n", cutoff);*/ - } - st->int_advance = st->num_rate/st->den_rate; - st->frac_advance = st->num_rate%st->den_rate; - - - /* Here's the place where we update the filter memory to take into account - the change in filter length. It's probably the messiest part of the code - due to handling of lots of corner cases. */ - if (!st->mem) - { - spx_uint32_t i; - st->mem_alloc_size = st->filt_len-1 + st->buffer_size; - st->mem = (spx_word16_t*)speex_alloc(st->nb_channels*st->mem_alloc_size * sizeof(spx_word16_t)); - for (i=0;i<st->nb_channels*st->mem_alloc_size;i++) - st->mem[i] = 0; - /*speex_warning("init filter");*/ - } else if (!st->started) - { - spx_uint32_t i; - st->mem_alloc_size = st->filt_len-1 + st->buffer_size; - st->mem = (spx_word16_t*)speex_realloc(st->mem, st->nb_channels*st->mem_alloc_size * sizeof(spx_word16_t)); - for (i=0;i<st->nb_channels*st->mem_alloc_size;i++) - st->mem[i] = 0; - /*speex_warning("reinit filter");*/ - } else if (st->filt_len > old_length) - { - spx_int32_t i; - /* Increase the filter length */ - /*speex_warning("increase filter size");*/ - int old_alloc_size = st->mem_alloc_size; - if ((st->filt_len-1 + st->buffer_size) > st->mem_alloc_size) - { - st->mem_alloc_size = st->filt_len-1 + st->buffer_size; - st->mem = (spx_word16_t*)speex_realloc(st->mem, st->nb_channels*st->mem_alloc_size * sizeof(spx_word16_t)); - } - for (i=st->nb_channels-1;i>=0;i--) - { - spx_int32_t j; - spx_uint32_t olen = old_length; - /*if (st->magic_samples[i])*/ - { - /* Try and remove the magic samples as if nothing had happened */ - - /* FIXME: This is wrong but for now we need it to avoid going over the array bounds */ - olen = old_length + 2*st->magic_samples[i]; - for (j=old_length-2+st->magic_samples[i];j>=0;j--) - st->mem[i*st->mem_alloc_size+j+st->magic_samples[i]] = st->mem[i*old_alloc_size+j]; - for (j=0;j<st->magic_samples[i];j++) - st->mem[i*st->mem_alloc_size+j] = 0; - st->magic_samples[i] = 0; - } - if (st->filt_len > olen) - { - /* If the new filter length is still bigger than the "augmented" length */ - /* Copy data going backward */ - for (j=0;j<olen-1;j++) - st->mem[i*st->mem_alloc_size+(st->filt_len-2-j)] = st->mem[i*st->mem_alloc_size+(olen-2-j)]; - /* Then put zeros for lack of anything better */ - for (;j<st->filt_len-1;j++) - st->mem[i*st->mem_alloc_size+(st->filt_len-2-j)] = 0; - /* Adjust last_sample */ - st->last_sample[i] += (st->filt_len - olen)/2; - } else { - /* Put back some of the magic! */ - st->magic_samples[i] = (olen - st->filt_len)/2; - for (j=0;j<st->filt_len-1+st->magic_samples[i];j++) - st->mem[i*st->mem_alloc_size+j] = st->mem[i*st->mem_alloc_size+j+st->magic_samples[i]]; - } - } - } else if (st->filt_len < old_length) - { - spx_uint32_t i; - /* Reduce filter length, this a bit tricky. We need to store some of the memory as "magic" - samples so they can be used directly as input the next time(s) */ - for (i=0;i<st->nb_channels;i++) - { - spx_uint32_t j; - spx_uint32_t old_magic = st->magic_samples[i]; - st->magic_samples[i] = (old_length - st->filt_len)/2; - /* We must copy some of the memory that's no longer used */ - /* Copy data going backward */ - for (j=0;j<st->filt_len-1+st->magic_samples[i]+old_magic;j++) - st->mem[i*st->mem_alloc_size+j] = st->mem[i*st->mem_alloc_size+j+st->magic_samples[i]]; - st->magic_samples[i] += old_magic; - } - } - -} - -EXPORT SpeexResamplerState *speex_resampler_init(spx_uint32_t nb_channels, spx_uint32_t in_rate, spx_uint32_t out_rate, int quality, int *err) -{ - return speex_resampler_init_frac(nb_channels, in_rate, out_rate, in_rate, out_rate, quality, err); -} - -EXPORT SpeexResamplerState *speex_resampler_init_frac(spx_uint32_t nb_channels, spx_uint32_t ratio_num, spx_uint32_t ratio_den, spx_uint32_t in_rate, spx_uint32_t out_rate, int quality, int *err) -{ - spx_uint32_t i; - SpeexResamplerState *st; - if (quality > 10 || quality < 0) - { - if (err) - *err = RESAMPLER_ERR_INVALID_ARG; - return NULL; - } - st = (SpeexResamplerState *)speex_alloc(sizeof(SpeexResamplerState)); - st->initialised = 0; - st->started = 0; - st->in_rate = 0; - st->out_rate = 0; - st->num_rate = 0; - st->den_rate = 0; - st->quality = -1; - st->sinc_table_length = 0; - st->mem_alloc_size = 0; - st->filt_len = 0; - st->mem = 0; - st->resampler_ptr = 0; - - st->cutoff = 1.f; - st->nb_channels = nb_channels; - st->in_stride = 1; - st->out_stride = 1; - -#ifdef FIXED_POINT - st->buffer_size = 160; -#else - st->buffer_size = 160; -#endif - - /* Per channel data */ - st->last_sample = (spx_int32_t*)speex_alloc(nb_channels*sizeof(int)); - st->magic_samples = (spx_uint32_t*)speex_alloc(nb_channels*sizeof(int)); - st->samp_frac_num = (spx_uint32_t*)speex_alloc(nb_channels*sizeof(int)); - for (i=0;i<nb_channels;i++) - { - st->last_sample[i] = 0; - st->magic_samples[i] = 0; - st->samp_frac_num[i] = 0; - } - - speex_resampler_set_quality(st, quality); - speex_resampler_set_rate_frac(st, ratio_num, ratio_den, in_rate, out_rate); - - - update_filter(st); - - st->initialised = 1; - if (err) - *err = RESAMPLER_ERR_SUCCESS; - - return st; -} - -EXPORT void speex_resampler_destroy(SpeexResamplerState *st) -{ - speex_free(st->mem); - speex_free(st->sinc_table); - speex_free(st->last_sample); - speex_free(st->magic_samples); - speex_free(st->samp_frac_num); - speex_free(st); -} - -static int speex_resampler_process_native(SpeexResamplerState *st, spx_uint32_t channel_index, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) -{ - int j=0; - const int N = st->filt_len; - int out_sample = 0; - spx_word16_t *mem = st->mem + channel_index * st->mem_alloc_size; - spx_uint32_t ilen; - - st->started = 1; - - /* Call the right resampler through the function ptr */ - out_sample = st->resampler_ptr(st, channel_index, mem, in_len, out, out_len); - - if (st->last_sample[channel_index] < (spx_int32_t)*in_len) - *in_len = st->last_sample[channel_index]; - *out_len = out_sample; - st->last_sample[channel_index] -= *in_len; - - ilen = *in_len; - - for(j=0;j<N-1;++j) - mem[j] = mem[j+ilen]; - - return RESAMPLER_ERR_SUCCESS; -} - -static int speex_resampler_magic(SpeexResamplerState *st, spx_uint32_t channel_index, spx_word16_t **out, spx_uint32_t out_len) { - spx_uint32_t tmp_in_len = st->magic_samples[channel_index]; - spx_word16_t *mem = st->mem + channel_index * st->mem_alloc_size; - const int N = st->filt_len; - - speex_resampler_process_native(st, channel_index, &tmp_in_len, *out, &out_len); - - st->magic_samples[channel_index] -= tmp_in_len; - - /* If we couldn't process all "magic" input samples, save the rest for next time */ - if (st->magic_samples[channel_index]) - { - spx_uint32_t i; - for (i=0;i<st->magic_samples[channel_index];i++) - mem[N-1+i]=mem[N-1+i+tmp_in_len]; - } - *out += out_len*st->out_stride; - return out_len; -} - -#ifdef FIXED_POINT -EXPORT int speex_resampler_process_int(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_int16_t *in, spx_uint32_t *in_len, spx_int16_t *out, spx_uint32_t *out_len) -#else -EXPORT int speex_resampler_process_float(SpeexResamplerState *st, spx_uint32_t channel_index, const float *in, spx_uint32_t *in_len, float *out, spx_uint32_t *out_len) -#endif -{ - int j; - spx_uint32_t ilen = *in_len; - spx_uint32_t olen = *out_len; - spx_word16_t *x = st->mem + channel_index * st->mem_alloc_size; - const int filt_offs = st->filt_len - 1; - const spx_uint32_t xlen = st->mem_alloc_size - filt_offs; - const int istride = st->in_stride; - - if (st->magic_samples[channel_index]) - olen -= speex_resampler_magic(st, channel_index, &out, olen); - if (! st->magic_samples[channel_index]) { - while (ilen && olen) { - spx_uint32_t ichunk = (ilen > xlen) ? xlen : ilen; - spx_uint32_t ochunk = olen; - - if (in) { - for(j=0;j<ichunk;++j) - x[j+filt_offs]=in[j*istride]; - } else { - for(j=0;j<ichunk;++j) - x[j+filt_offs]=0; - } - speex_resampler_process_native(st, channel_index, &ichunk, out, &ochunk); - ilen -= ichunk; - olen -= ochunk; - out += ochunk * st->out_stride; - if (in) - in += ichunk * istride; - } - } - *in_len -= ilen; - *out_len -= olen; - return RESAMPLER_ERR_SUCCESS; -} - -#ifdef FIXED_POINT -EXPORT int speex_resampler_process_float(SpeexResamplerState *st, spx_uint32_t channel_index, const float *in, spx_uint32_t *in_len, float *out, spx_uint32_t *out_len) -#else -EXPORT int speex_resampler_process_int(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_int16_t *in, spx_uint32_t *in_len, spx_int16_t *out, spx_uint32_t *out_len) -#endif -{ - int j; - const int istride_save = st->in_stride; - const int ostride_save = st->out_stride; - spx_uint32_t ilen = *in_len; - spx_uint32_t olen = *out_len; - spx_word16_t *x = st->mem + channel_index * st->mem_alloc_size; - const spx_uint32_t xlen = st->mem_alloc_size - (st->filt_len - 1); -#ifdef VAR_ARRAYS - const unsigned int ylen = (olen < FIXED_STACK_ALLOC) ? olen : FIXED_STACK_ALLOC; - VARDECL(spx_word16_t *ystack); - ALLOC(ystack, ylen, spx_word16_t); -#else - const unsigned int ylen = FIXED_STACK_ALLOC; - spx_word16_t ystack[FIXED_STACK_ALLOC]; -#endif - - st->out_stride = 1; - - while (ilen && olen) { - spx_word16_t *y = ystack; - spx_uint32_t ichunk = (ilen > xlen) ? xlen : ilen; - spx_uint32_t ochunk = (olen > ylen) ? ylen : olen; - spx_uint32_t omagic = 0; - - if (st->magic_samples[channel_index]) { - omagic = speex_resampler_magic(st, channel_index, &y, ochunk); - ochunk -= omagic; - olen -= omagic; - } - if (! st->magic_samples[channel_index]) { - if (in) { - for(j=0;j<ichunk;++j) -#ifdef FIXED_POINT - x[j+st->filt_len-1]=WORD2INT(in[j*istride_save]); -#else - x[j+st->filt_len-1]=in[j*istride_save]; -#endif - } else { - for(j=0;j<ichunk;++j) - x[j+st->filt_len-1]=0; - } - - speex_resampler_process_native(st, channel_index, &ichunk, y, &ochunk); - } else { - ichunk = 0; - ochunk = 0; - } - - for (j=0;j<ochunk+omagic;++j) -#ifdef FIXED_POINT - out[j*ostride_save] = ystack[j]; -#else - out[j*ostride_save] = WORD2INT(ystack[j]); -#endif - - ilen -= ichunk; - olen -= ochunk; - out += (ochunk+omagic) * ostride_save; - if (in) - in += ichunk * istride_save; - } - st->out_stride = ostride_save; - *in_len -= ilen; - *out_len -= olen; - - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT int speex_resampler_process_interleaved_float(SpeexResamplerState *st, const float *in, spx_uint32_t *in_len, float *out, spx_uint32_t *out_len) -{ - spx_uint32_t i; - int istride_save, ostride_save; - spx_uint32_t bak_len = *out_len; - istride_save = st->in_stride; - ostride_save = st->out_stride; - st->in_stride = st->out_stride = st->nb_channels; - for (i=0;i<st->nb_channels;i++) - { - *out_len = bak_len; - if (in != NULL) - speex_resampler_process_float(st, i, in+i, in_len, out+i, out_len); - else - speex_resampler_process_float(st, i, NULL, in_len, out+i, out_len); - } - st->in_stride = istride_save; - st->out_stride = ostride_save; - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT int speex_resampler_process_interleaved_int(SpeexResamplerState *st, const spx_int16_t *in, spx_uint32_t *in_len, spx_int16_t *out, spx_uint32_t *out_len) -{ - spx_uint32_t i; - int istride_save, ostride_save; - spx_uint32_t bak_len = *out_len; - istride_save = st->in_stride; - ostride_save = st->out_stride; - st->in_stride = st->out_stride = st->nb_channels; - for (i=0;i<st->nb_channels;i++) - { - *out_len = bak_len; - if (in != NULL) - speex_resampler_process_int(st, i, in+i, in_len, out+i, out_len); - else - speex_resampler_process_int(st, i, NULL, in_len, out+i, out_len); - } - st->in_stride = istride_save; - st->out_stride = ostride_save; - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT int speex_resampler_set_rate(SpeexResamplerState *st, spx_uint32_t in_rate, spx_uint32_t out_rate) -{ - return speex_resampler_set_rate_frac(st, in_rate, out_rate, in_rate, out_rate); -} - -EXPORT void speex_resampler_get_rate(SpeexResamplerState *st, spx_uint32_t *in_rate, spx_uint32_t *out_rate) -{ - *in_rate = st->in_rate; - *out_rate = st->out_rate; -} - -EXPORT int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_uint32_t ratio_num, spx_uint32_t ratio_den, spx_uint32_t in_rate, spx_uint32_t out_rate) -{ - spx_uint32_t fact; - spx_uint32_t old_den; - spx_uint32_t i; - if (st->in_rate == in_rate && st->out_rate == out_rate && st->num_rate == ratio_num && st->den_rate == ratio_den) - return RESAMPLER_ERR_SUCCESS; - - old_den = st->den_rate; - st->in_rate = in_rate; - st->out_rate = out_rate; - st->num_rate = ratio_num; - st->den_rate = ratio_den; - /* FIXME: This is terribly inefficient, but who cares (at least for now)? */ - for (fact=2;fact<=IMIN(st->num_rate, st->den_rate);fact++) - { - while ((st->num_rate % fact == 0) && (st->den_rate % fact == 0)) - { - st->num_rate /= fact; - st->den_rate /= fact; - } - } - - if (old_den > 0) - { - for (i=0;i<st->nb_channels;i++) - { - st->samp_frac_num[i]=st->samp_frac_num[i]*st->den_rate/old_den; - /* Safety net */ - if (st->samp_frac_num[i] >= st->den_rate) - st->samp_frac_num[i] = st->den_rate-1; - } - } - - if (st->initialised) - update_filter(st); - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT void speex_resampler_get_ratio(SpeexResamplerState *st, spx_uint32_t *ratio_num, spx_uint32_t *ratio_den) -{ - *ratio_num = st->num_rate; - *ratio_den = st->den_rate; -} - -EXPORT int speex_resampler_set_quality(SpeexResamplerState *st, int quality) -{ - if (quality > 10 || quality < 0) - return RESAMPLER_ERR_INVALID_ARG; - if (st->quality == quality) - return RESAMPLER_ERR_SUCCESS; - st->quality = quality; - if (st->initialised) - update_filter(st); - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT void speex_resampler_get_quality(SpeexResamplerState *st, int *quality) -{ - *quality = st->quality; -} - -EXPORT void speex_resampler_set_input_stride(SpeexResamplerState *st, spx_uint32_t stride) -{ - st->in_stride = stride; -} - -EXPORT void speex_resampler_get_input_stride(SpeexResamplerState *st, spx_uint32_t *stride) -{ - *stride = st->in_stride; -} - -EXPORT void speex_resampler_set_output_stride(SpeexResamplerState *st, spx_uint32_t stride) -{ - st->out_stride = stride; -} - -EXPORT void speex_resampler_get_output_stride(SpeexResamplerState *st, spx_uint32_t *stride) -{ - *stride = st->out_stride; -} - -EXPORT int speex_resampler_get_input_latency(SpeexResamplerState *st) -{ - return st->filt_len / 2; -} - -EXPORT int speex_resampler_get_output_latency(SpeexResamplerState *st) -{ - return ((st->filt_len / 2) * st->den_rate + (st->num_rate >> 1)) / st->num_rate; -} - -EXPORT int speex_resampler_skip_zeros(SpeexResamplerState *st) -{ - spx_uint32_t i; - for (i=0;i<st->nb_channels;i++) - st->last_sample[i] = st->filt_len/2; - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT int speex_resampler_reset_mem(SpeexResamplerState *st) -{ - spx_uint32_t i; - for (i=0;i<st->nb_channels*(st->filt_len-1);i++) - st->mem[i] = 0; - return RESAMPLER_ERR_SUCCESS; -} - -EXPORT const char *speex_resampler_strerror(int err) -{ - switch (err) - { - case RESAMPLER_ERR_SUCCESS: - return "Success."; - case RESAMPLER_ERR_ALLOC_FAILED: - return "Memory allocation failed."; - case RESAMPLER_ERR_BAD_STATE: - return "Bad resampler state."; - case RESAMPLER_ERR_INVALID_ARG: - return "Invalid argument."; - case RESAMPLER_ERR_PTR_OVERLAP: - return "Input and output buffers overlap."; - default: - return "Unknown error. Bad error code or strange version mismatch."; - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample_sse.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample_sse.h deleted file mode 100755 index 4bd35a2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/resample_sse.h +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2007-2008 Jean-Marc Valin - * Copyright (C) 2008 Thorvald Natvig - */ -/** - @file resample_sse.h - @brief Resampler functions (SSE version) -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <xmmintrin.h> - -#define OVERRIDE_INNER_PRODUCT_SINGLE -static inline float inner_product_single(const float *a, const float *b, unsigned int len) -{ - int i; - float ret; - __m128 sum = _mm_setzero_ps(); - for (i=0;i<len;i+=8) - { - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+i), _mm_loadu_ps(b+i))); - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+i+4), _mm_loadu_ps(b+i+4))); - } - sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum)); - sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55)); - _mm_store_ss(&ret, sum); - return ret; -} - -#define OVERRIDE_INTERPOLATE_PRODUCT_SINGLE -static inline float interpolate_product_single(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac) { - int i; - float ret; - __m128 sum = _mm_setzero_ps(); - __m128 f = _mm_loadu_ps(frac); - for(i=0;i<len;i+=2) - { - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_load1_ps(a+i), _mm_loadu_ps(b+i*oversample))); - sum = _mm_add_ps(sum, _mm_mul_ps(_mm_load1_ps(a+i+1), _mm_loadu_ps(b+(i+1)*oversample))); - } - sum = _mm_mul_ps(f, sum); - sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum)); - sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55)); - _mm_store_ss(&ret, sum); - return ret; -} - -#ifdef _USE_SSE2 -#include <emmintrin.h> -#define OVERRIDE_INNER_PRODUCT_DOUBLE - -static inline double inner_product_double(const float *a, const float *b, unsigned int len) -{ - int i; - double ret; - __m128d sum = _mm_setzero_pd(); - __m128 t; - for (i=0;i<len;i+=8) - { - t = _mm_mul_ps(_mm_loadu_ps(a+i), _mm_loadu_ps(b+i)); - sum = _mm_add_pd(sum, _mm_cvtps_pd(t)); - sum = _mm_add_pd(sum, _mm_cvtps_pd(_mm_movehl_ps(t, t))); - - t = _mm_mul_ps(_mm_loadu_ps(a+i+4), _mm_loadu_ps(b+i+4)); - sum = _mm_add_pd(sum, _mm_cvtps_pd(t)); - sum = _mm_add_pd(sum, _mm_cvtps_pd(_mm_movehl_ps(t, t))); - } - sum = _mm_add_sd(sum, (__m128d) _mm_movehl_ps((__m128) sum, (__m128) sum)); - _mm_store_sd(&ret, sum); - return ret; -} - -#define OVERRIDE_INTERPOLATE_PRODUCT_DOUBLE -static inline double interpolate_product_double(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac) { - int i; - double ret; - __m128d sum; - __m128d sum1 = _mm_setzero_pd(); - __m128d sum2 = _mm_setzero_pd(); - __m128 f = _mm_loadu_ps(frac); - __m128d f1 = _mm_cvtps_pd(f); - __m128d f2 = _mm_cvtps_pd(_mm_movehl_ps(f,f)); - __m128 t; - for(i=0;i<len;i+=2) - { - t = _mm_mul_ps(_mm_load1_ps(a+i), _mm_loadu_ps(b+i*oversample)); - sum1 = _mm_add_pd(sum1, _mm_cvtps_pd(t)); - sum2 = _mm_add_pd(sum2, _mm_cvtps_pd(_mm_movehl_ps(t, t))); - - t = _mm_mul_ps(_mm_load1_ps(a+i+1), _mm_loadu_ps(b+(i+1)*oversample)); - sum1 = _mm_add_pd(sum1, _mm_cvtps_pd(t)); - sum2 = _mm_add_pd(sum2, _mm_cvtps_pd(_mm_movehl_ps(t, t))); - } - sum1 = _mm_mul_pd(f1, sum1); - sum2 = _mm_mul_pd(f2, sum2); - sum = _mm_add_pd(sum1, sum2); - sum = _mm_add_sd(sum, (__m128d) _mm_movehl_ps((__m128) sum, (__m128) sum)); - _mm_store_sd(&ret, sum); - return ret; -} - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.c deleted file mode 100755 index 6c19ff8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.c +++ /dev/null @@ -1,1488 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin - File: sb_celp.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "sb_celp.h" -#include "filters.h" -#include "lpc.h" -#include "lsp.h" -#include "stack_alloc.h" -#include "cb_search.h" -#include "quant_lsp.h" -#include "vq.h" -#include "ltp.h" -#include "arch.h" -#include "math_approx.h" -#include "os_support.h" - -#ifndef NULL -#define NULL 0 -#endif - -/* Default size for the encoder and decoder stack (can be changed at compile time). - This does not apply when using variable-size arrays or alloca. */ -#ifndef SB_ENC_STACK -#define SB_ENC_STACK (10000*sizeof(spx_sig_t)) -#endif - -#ifndef SB_DEC_STACK -#define SB_DEC_STACK (6000*sizeof(spx_sig_t)) -#endif - - -#ifdef DISABLE_WIDEBAND -void *sb_encoder_init(const SpeexMode *m) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return NULL; -} -void sb_encoder_destroy(void *state) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); -} -int sb_encode(void *state, void *vin, SpeexBits *bits) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return -2; -} -void *sb_decoder_init(const SpeexMode *m) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return NULL; -} -void sb_decoder_destroy(void *state) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); -} -int sb_decode(void *state, SpeexBits *bits, void *vout) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return -2; -} -int sb_encoder_ctl(void *state, int request, void *ptr) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return -2; -} -int sb_decoder_ctl(void *state, int request, void *ptr) -{ - speex_fatal("Wideband and Ultra-wideband are disabled"); - return -2; -} -#else - - -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif - -#define sqr(x) ((x)*(x)) - -#define SUBMODE(x) st->submodes[st->submodeID]->x - -#ifdef FIXED_POINT -static const spx_word16_t gc_quant_bound[16] = {125, 164, 215, 282, 370, 484, 635, 832, 1090, 1428, 1871, 2452, 3213, 4210, 5516, 7228}; -static const spx_word16_t fold_quant_bound[32] = { - 39, 44, 50, 57, 64, 73, 83, 94, - 106, 120, 136, 154, 175, 198, 225, 255, - 288, 327, 370, 420, 476, 539, 611, 692, - 784, 889, 1007, 1141, 1293, 1465, 1660, 1881}; -#define LSP_MARGIN 410 -#define LSP_DELTA1 6553 -#define LSP_DELTA2 1638 - -#else - -static const spx_word16_t gc_quant_bound[16] = { - 0.97979, 1.28384, 1.68223, 2.20426, 2.88829, 3.78458, 4.95900, 6.49787, - 8.51428, 11.15642, 14.61846, 19.15484, 25.09895, 32.88761, 43.09325, 56.46588}; -static const spx_word16_t fold_quant_bound[32] = { - 0.30498, 0.34559, 0.39161, 0.44375, 0.50283, 0.56979, 0.64565, 0.73162, - 0.82903, 0.93942, 1.06450, 1.20624, 1.36685, 1.54884, 1.75506, 1.98875, - 2.25355, 2.55360, 2.89361, 3.27889, 3.71547, 4.21018, 4.77076, 5.40598, - 6.12577, 6.94141, 7.86565, 8.91295, 10.09969, 11.44445, 12.96826, 14.69497}; - -#define LSP_MARGIN .05 -#define LSP_DELTA1 .2 -#define LSP_DELTA2 .05 - -#endif - -#define QMF_ORDER 64 - -#ifdef FIXED_POINT -static const spx_word16_t h0[64] = {2, -7, -7, 18, 15, -39, -25, 75, 35, -130, -41, 212, 38, -327, -17, 483, -32, -689, 124, 956, -283, -1307, 543, 1780, -973, -2467, 1733, 3633, -3339, -6409, 9059, 30153, 30153, 9059, -6409, -3339, 3633, 1733, -2467, -973, 1780, 543, -1307, -283, 956, 124, -689, -32, 483, -17, -327, 38, 212, -41, -130, 35, 75, -25, -39, 15, 18, -7, -7, 2}; - -#else -static const float h0[64] = { - 3.596189e-05f, -0.0001123515f, - -0.0001104587f, 0.0002790277f, - 0.0002298438f, -0.0005953563f, - -0.0003823631f, 0.00113826f, - 0.0005308539f, -0.001986177f, - -0.0006243724f, 0.003235877f, - 0.0005743159f, -0.004989147f, - -0.0002584767f, 0.007367171f, - -0.0004857935f, -0.01050689f, - 0.001894714f, 0.01459396f, - -0.004313674f, -0.01994365f, - 0.00828756f, 0.02716055f, - -0.01485397f, -0.03764973f, - 0.026447f, 0.05543245f, - -0.05095487f, -0.09779096f, - 0.1382363f, 0.4600981f, - 0.4600981f, 0.1382363f, - -0.09779096f, -0.05095487f, - 0.05543245f, 0.026447f, - -0.03764973f, -0.01485397f, - 0.02716055f, 0.00828756f, - -0.01994365f, -0.004313674f, - 0.01459396f, 0.001894714f, - -0.01050689f, -0.0004857935f, - 0.007367171f, -0.0002584767f, - -0.004989147f, 0.0005743159f, - 0.003235877f, -0.0006243724f, - -0.001986177f, 0.0005308539f, - 0.00113826f, -0.0003823631f, - -0.0005953563f, 0.0002298438f, - 0.0002790277f, -0.0001104587f, - -0.0001123515f, 3.596189e-05f -}; - -#endif - -extern const spx_word16_t lag_window[]; -extern const spx_word16_t lpc_window[]; - - -void *sb_encoder_init(const SpeexMode *m) -{ - int i; - spx_int32_t tmp; - SBEncState *st; - const SpeexSBMode *mode; - - st = (SBEncState*)speex_alloc(sizeof(SBEncState)); - if (!st) - return NULL; - st->mode = m; - mode = (const SpeexSBMode*)m->mode; - - - st->st_low = speex_encoder_init(mode->nb_mode); -#if defined(VAR_ARRAYS) || defined (USE_ALLOCA) - st->stack = NULL; -#else - /*st->stack = (char*)speex_alloc_scratch(SB_ENC_STACK);*/ - speex_encoder_ctl(st->st_low, SPEEX_GET_STACK, &st->stack); -#endif - - st->full_frame_size = 2*mode->frameSize; - st->frame_size = mode->frameSize; - st->subframeSize = mode->subframeSize; - st->nbSubframes = mode->frameSize/mode->subframeSize; - st->windowSize = st->frame_size+st->subframeSize; - st->lpcSize=mode->lpcSize; - - st->encode_submode = 1; - st->submodes=mode->submodes; - st->submodeSelect = st->submodeID=mode->defaultSubmode; - - tmp=9; - speex_encoder_ctl(st->st_low, SPEEX_SET_QUALITY, &tmp); - tmp=1; - speex_encoder_ctl(st->st_low, SPEEX_SET_WIDEBAND, &tmp); - - st->lpc_floor = mode->lpc_floor; - st->gamma1=mode->gamma1; - st->gamma2=mode->gamma2; - st->first=1; - - st->high=(spx_word16_t*)speex_alloc((st->windowSize-st->frame_size)*sizeof(spx_word16_t)); - - st->h0_mem=(spx_word16_t*)speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); - st->h1_mem=(spx_word16_t*)speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); - - st->window= lpc_window; - - st->lagWindow = lag_window; - - st->old_lsp = (spx_lsp_t*)speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); - st->old_qlsp = (spx_lsp_t*)speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); - st->interp_qlpc = (spx_coef_t*)speex_alloc(st->lpcSize*sizeof(spx_coef_t)); - st->pi_gain = (spx_word32_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); - st->exc_rms = (spx_word16_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word16_t)); - st->innov_rms_save = NULL; - - st->mem_sp = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_sp2 = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - st->mem_sw = (spx_mem_t*)speex_alloc((st->lpcSize)*sizeof(spx_mem_t)); - - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), st->lpcSize+1); - -#ifndef DISABLE_VBR - st->vbr_quality = 8; - st->vbr_enabled = 0; - st->vbr_max = 0; - st->vbr_max_high = 20000; /* We just need a big value here */ - st->vad_enabled = 0; - st->abr_enabled = 0; - st->relative_quality=0; -#endif /* #ifndef DISABLE_VBR */ - - st->complexity=2; - speex_encoder_ctl(st->st_low, SPEEX_GET_SAMPLING_RATE, &st->sampling_rate); - st->sampling_rate*=2; -#ifdef ENABLE_VALGRIND - VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); -#endif - return st; -} - -void sb_encoder_destroy(void *state) -{ - SBEncState *st=(SBEncState*)state; - - speex_encoder_destroy(st->st_low); -#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) - /*speex_free_scratch(st->stack);*/ -#endif - - speex_free(st->high); - - speex_free(st->h0_mem); - speex_free(st->h1_mem); - - speex_free(st->old_lsp); - speex_free(st->old_qlsp); - speex_free(st->interp_qlpc); - speex_free(st->pi_gain); - speex_free(st->exc_rms); - - speex_free(st->mem_sp); - speex_free(st->mem_sp2); - speex_free(st->mem_sw); - - - speex_free(st); -} - - -int sb_encode(void *state, void *vin, SpeexBits *bits) -{ - SBEncState *st; - int i, roots, sub; - char *stack; - VARDECL(spx_mem_t *mem); - VARDECL(spx_sig_t *innov); - VARDECL(spx_word16_t *target); - VARDECL(spx_word16_t *syn_resp); - VARDECL(spx_word32_t *low_pi_gain); - spx_word16_t *low; - spx_word16_t *high; - VARDECL(spx_word16_t *low_exc_rms); - VARDECL(spx_word16_t *low_innov_rms); - const SpeexSBMode *mode; - spx_int32_t dtx; - spx_word16_t *in = (spx_word16_t*)vin; - spx_word16_t e_low=0, e_high=0; - VARDECL(spx_coef_t *lpc); - VARDECL(spx_coef_t *interp_lpc); - VARDECL(spx_coef_t *bw_lpc1); - VARDECL(spx_coef_t *bw_lpc2); - VARDECL(spx_lsp_t *lsp); - VARDECL(spx_lsp_t *qlsp); - VARDECL(spx_lsp_t *interp_lsp); - VARDECL(spx_lsp_t *interp_qlsp); - - st = (SBEncState*)state; - stack=st->stack; - mode = (const SpeexSBMode*)(st->mode->mode); - low = in; - high = in+st->frame_size; - - /* High-band buffering / sync with low band */ - /* Compute the two sub-bands by filtering with QMF h0*/ - qmf_decomp(in, h0, low, high, st->full_frame_size, QMF_ORDER, st->h0_mem, stack); - -#ifndef DISABLE_VBR - if (st->vbr_enabled || st->vad_enabled) - { - /* Need to compute things here before the signal is trashed by the encoder */ - /*FIXME: Are the two signals (low, high) in sync? */ - e_low = compute_rms16(low, st->frame_size); - e_high = compute_rms16(high, st->frame_size); - } -#endif /* #ifndef DISABLE_VBR */ - - ALLOC(low_innov_rms, st->nbSubframes, spx_word16_t); - speex_encoder_ctl(st->st_low, SPEEX_SET_INNOVATION_SAVE, low_innov_rms); - /* Encode the narrowband part*/ - speex_encode_native(st->st_low, low, bits); - - high = high - (st->windowSize-st->frame_size); - SPEEX_COPY(high, st->high, st->windowSize-st->frame_size); - SPEEX_COPY(st->high, &high[st->frame_size], st->windowSize-st->frame_size); - - - ALLOC(low_pi_gain, st->nbSubframes, spx_word32_t); - ALLOC(low_exc_rms, st->nbSubframes, spx_word16_t); - speex_encoder_ctl(st->st_low, SPEEX_GET_PI_GAIN, low_pi_gain); - speex_encoder_ctl(st->st_low, SPEEX_GET_EXC, low_exc_rms); - - speex_encoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, &dtx); - - if (dtx==0) - dtx=1; - else - dtx=0; - - ALLOC(lpc, st->lpcSize, spx_coef_t); - ALLOC(interp_lpc, st->lpcSize, spx_coef_t); - ALLOC(bw_lpc1, st->lpcSize, spx_coef_t); - ALLOC(bw_lpc2, st->lpcSize, spx_coef_t); - - ALLOC(lsp, st->lpcSize, spx_lsp_t); - ALLOC(qlsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_lsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_qlsp, st->lpcSize, spx_lsp_t); - - { - VARDECL(spx_word16_t *autocorr); - VARDECL(spx_word16_t *w_sig); - ALLOC(autocorr, st->lpcSize+1, spx_word16_t); - ALLOC(w_sig, st->windowSize, spx_word16_t); - /* Window for analysis */ - /* FIXME: This is a kludge */ - if (st->subframeSize==80) - { - for (i=0;i<st->windowSize;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(high[i],st->window[i>>1]),SIG_SHIFT)); - } else { - for (i=0;i<st->windowSize;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(high[i],st->window[i]),SIG_SHIFT)); - } - /* Compute auto-correlation */ - _spx_autocorr(w_sig, autocorr, st->lpcSize+1, st->windowSize); - autocorr[0] = ADD16(autocorr[0],MULT16_16_Q15(autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */ - - /* Lag windowing: equivalent to filtering in the power-spectrum domain */ - for (i=0;i<st->lpcSize+1;i++) - autocorr[i] = MULT16_16_Q14(autocorr[i],st->lagWindow[i]); - - /* Levinson-Durbin */ - _spx_lpc(lpc, autocorr, st->lpcSize); - } - - /* LPC to LSPs (x-domain) transform */ - roots=lpc_to_lsp (lpc, st->lpcSize, lsp, 10, LSP_DELTA1, stack); - if (roots!=st->lpcSize) - { - roots = lpc_to_lsp (lpc, st->lpcSize, lsp, 10, LSP_DELTA2, stack); - if (roots!=st->lpcSize) { - /*If we can't find all LSP's, do some damage control and use a flat filter*/ - for (i=0;i<st->lpcSize;i++) - { - lsp[i]=st->old_lsp[i]; - } - } - } - -#ifndef DISABLE_VBR - /* VBR code */ - if ((st->vbr_enabled || st->vad_enabled) && !dtx) - { - float ratio; - if (st->abr_enabled) - { - float qual_change=0; - if (st->abr_drift2 * st->abr_drift > 0) - { - /* Only adapt if long-term and short-term drift are the same sign */ - qual_change = -.00001*st->abr_drift/(1+st->abr_count); - if (qual_change>.1) - qual_change=.1; - if (qual_change<-.1) - qual_change=-.1; - } - st->vbr_quality += qual_change; - if (st->vbr_quality>10) - st->vbr_quality=10; - if (st->vbr_quality<0) - st->vbr_quality=0; - } - - - ratio = 2*log((1.f+e_high)/(1.f+e_low)); - - speex_encoder_ctl(st->st_low, SPEEX_GET_RELATIVE_QUALITY, &st->relative_quality); - if (ratio<-4) - ratio=-4; - if (ratio>2) - ratio=2; - /*if (ratio>-2)*/ - if (st->vbr_enabled) - { - spx_int32_t modeid; - modeid = mode->nb_modes-1; - st->relative_quality+=1.0*(ratio+2); - if (st->relative_quality<-1) - st->relative_quality=-1; - while (modeid) - { - int v1; - float thresh; - v1=(int)floor(st->vbr_quality); - if (v1==10) - thresh = mode->vbr_thresh[modeid][v1]; - else - thresh = (st->vbr_quality-v1) * mode->vbr_thresh[modeid][v1+1] + - (1+v1-st->vbr_quality) * mode->vbr_thresh[modeid][v1]; - if (st->relative_quality >= thresh && st->sampling_rate*st->submodes[modeid]->bits_per_frame/st->full_frame_size <= st->vbr_max_high) - break; - modeid--; - } - speex_encoder_ctl(state, SPEEX_SET_HIGH_MODE, &modeid); - if (st->abr_enabled) - { - spx_int32_t bitrate; - speex_encoder_ctl(state, SPEEX_GET_BITRATE, &bitrate); - st->abr_drift+=(bitrate-st->abr_enabled); - st->abr_drift2 = .95*st->abr_drift2 + .05*(bitrate-st->abr_enabled); - st->abr_count += 1.0; - } - - } else { - /* VAD only */ - int modeid; - if (st->relative_quality<2.0) - modeid=1; - else - modeid=st->submodeSelect; - /*speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);*/ - st->submodeID=modeid; - - } - /*fprintf (stderr, "%f %f\n", ratio, low_qual);*/ - } -#endif /* #ifndef DISABLE_VBR */ - - if (st->encode_submode) - { - speex_bits_pack(bits, 1, 1); - if (dtx) - speex_bits_pack(bits, 0, SB_SUBMODE_BITS); - else - speex_bits_pack(bits, st->submodeID, SB_SUBMODE_BITS); - } - - /* If null mode (no transmission), just set a couple things to zero*/ - if (dtx || st->submodes[st->submodeID] == NULL) - { - for (i=0;i<st->frame_size;i++) - high[i]=VERY_SMALL; - - for (i=0;i<st->lpcSize;i++) - st->mem_sw[i]=0; - st->first=1; - - /* Final signal synthesis from excitation */ - iir_mem16(high, st->interp_qlpc, high, st->frame_size, st->lpcSize, st->mem_sp, stack); - - if (dtx) - return 0; - else - return 1; - } - - - /* LSP quantization */ - SUBMODE(lsp_quant)(lsp, qlsp, st->lpcSize, bits); - - if (st->first) - { - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i] = lsp[i]; - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - } - - ALLOC(mem, st->lpcSize, spx_mem_t); - ALLOC(syn_resp, st->subframeSize, spx_word16_t); - ALLOC(innov, st->subframeSize, spx_sig_t); - ALLOC(target, st->subframeSize, spx_word16_t); - - for (sub=0;sub<st->nbSubframes;sub++) - { - VARDECL(spx_word16_t *exc); - VARDECL(spx_word16_t *res); - VARDECL(spx_word16_t *sw); - spx_word16_t *sp; - spx_word16_t filter_ratio; /*Q7*/ - int offset; - spx_word32_t rl, rh; /*Q13*/ - spx_word16_t eh=0; - - offset = st->subframeSize*sub; - sp=high+offset; - ALLOC(exc, st->subframeSize, spx_word16_t); - ALLOC(res, st->subframeSize, spx_word16_t); - ALLOC(sw, st->subframeSize, spx_word16_t); - - /* LSP interpolation (quantized and unquantized) */ - lsp_interpolate(st->old_lsp, lsp, interp_lsp, st->lpcSize, sub, st->nbSubframes); - lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, st->lpcSize, sub, st->nbSubframes); - - lsp_enforce_margin(interp_lsp, st->lpcSize, LSP_MARGIN); - lsp_enforce_margin(interp_qlsp, st->lpcSize, LSP_MARGIN); - - lsp_to_lpc(interp_lsp, interp_lpc, st->lpcSize,stack); - lsp_to_lpc(interp_qlsp, st->interp_qlpc, st->lpcSize, stack); - - bw_lpc(st->gamma1, interp_lpc, bw_lpc1, st->lpcSize); - bw_lpc(st->gamma2, interp_lpc, bw_lpc2, st->lpcSize); - - /* Compute mid-band (4000 Hz for wideband) response of low-band and high-band - filters */ - st->pi_gain[sub]=LPC_SCALING; - rh = LPC_SCALING; - for (i=0;i<st->lpcSize;i+=2) - { - rh += st->interp_qlpc[i+1] - st->interp_qlpc[i]; - st->pi_gain[sub] += st->interp_qlpc[i] + st->interp_qlpc[i+1]; - } - - rl = low_pi_gain[sub]; -#ifdef FIXED_POINT - filter_ratio=EXTRACT16(SATURATE(PDIV32(SHL32(ADD32(rl,82),7),ADD32(82,rh)),32767)); -#else - filter_ratio=(rl+.01)/(rh+.01); -#endif - - /* Compute "real excitation" */ - fir_mem16(sp, st->interp_qlpc, exc, st->subframeSize, st->lpcSize, st->mem_sp2, stack); - /* Compute energy of low-band and high-band excitation */ - - eh = compute_rms16(exc, st->subframeSize); - - if (!SUBMODE(innovation_quant)) {/* 1 for spectral folding excitation, 0 for stochastic */ - spx_word32_t g; /*Q7*/ - spx_word16_t el; /*Q0*/ - el = low_innov_rms[sub]; - - /* Gain to use if we want to use the low-band excitation for high-band */ - g=PDIV32(MULT16_16(filter_ratio,eh),EXTEND32(ADD16(1,el))); - -#if 0 - { - char *tmp_stack=stack; - float *tmp_sig; - float g2; - ALLOC(tmp_sig, st->subframeSize, spx_sig_t); - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sp[i]; - iir_mem2(st->low_innov+offset, st->interp_qlpc, tmp_sig, st->subframeSize, st->lpcSize, mem); - g2 = compute_rms(sp, st->subframeSize)/(.01+compute_rms(tmp_sig, st->subframeSize)); - /*fprintf (stderr, "gains: %f %f\n", g, g2);*/ - g = g2; - stack = tmp_stack; - } -#endif - - /*print_vec(&g, 1, "gain factor");*/ - /* Gain quantization */ - { - int quant = scal_quant(g, fold_quant_bound, 32); - /*speex_warning_int("tata", quant);*/ - if (quant<0) - quant=0; - if (quant>31) - quant=31; - speex_bits_pack(bits, quant, 5); - } - if (st->innov_rms_save) - { - st->innov_rms_save[sub] = eh; - } - st->exc_rms[sub] = eh; - } else { - spx_word16_t gc; /*Q7*/ - spx_word32_t scale; /*Q14*/ - spx_word16_t el; /*Q0*/ - el = low_exc_rms[sub]; /*Q0*/ - - gc = PDIV32_16(MULT16_16(filter_ratio,1+eh),1+el); - - /* This is a kludge that cleans up a historical bug */ - if (st->subframeSize==80) - gc = MULT16_16_P15(QCONST16(0.70711f,15),gc); - /*printf ("%f %f %f %f\n", el, eh, filter_ratio, gc);*/ - { - int qgc = scal_quant(gc, gc_quant_bound, 16); - speex_bits_pack(bits, qgc, 4); - gc = MULT16_16_Q15(QCONST16(0.87360,15),gc_quant_bound[qgc]); - } - if (st->subframeSize==80) - gc = MULT16_16_P14(QCONST16(1.4142f,14), gc); - - scale = SHL32(MULT16_16(PDIV32_16(SHL32(EXTEND32(gc),SIG_SHIFT-6),filter_ratio),(1+el)),6); - - compute_impulse_response(st->interp_qlpc, bw_lpc1, bw_lpc2, syn_resp, st->subframeSize, st->lpcSize, stack); - - - /* Reset excitation */ - for (i=0;i<st->subframeSize;i++) - res[i]=VERY_SMALL; - - /* Compute zero response (ringing) of A(z/g1) / ( A(z/g2) * Aq(z) ) */ - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sp[i]; - iir_mem16(res, st->interp_qlpc, res, st->subframeSize, st->lpcSize, mem, stack); - - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sw[i]; - filter_mem16(res, bw_lpc1, bw_lpc2, res, st->subframeSize, st->lpcSize, mem, stack); - - /* Compute weighted signal */ - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sw[i]; - filter_mem16(sp, bw_lpc1, bw_lpc2, sw, st->subframeSize, st->lpcSize, mem, stack); - - /* Compute target signal */ - for (i=0;i<st->subframeSize;i++) - target[i]=SUB16(sw[i],res[i]); - - signal_div(target, target, scale, st->subframeSize); - - /* Reset excitation */ - SPEEX_MEMSET(innov, 0, st->subframeSize); - - /*print_vec(target, st->subframeSize, "\ntarget");*/ - SUBMODE(innovation_quant)(target, st->interp_qlpc, bw_lpc1, bw_lpc2, - SUBMODE(innovation_params), st->lpcSize, st->subframeSize, - innov, syn_resp, bits, stack, st->complexity, SUBMODE(double_codebook)); - /*print_vec(target, st->subframeSize, "after");*/ - - signal_mul(innov, innov, scale, st->subframeSize); - - if (SUBMODE(double_codebook)) { - char *tmp_stack=stack; - VARDECL(spx_sig_t *innov2); - ALLOC(innov2, st->subframeSize, spx_sig_t); - SPEEX_MEMSET(innov2, 0, st->subframeSize); - for (i=0;i<st->subframeSize;i++) - target[i]=MULT16_16_P13(QCONST16(2.5f,13), target[i]); - - SUBMODE(innovation_quant)(target, st->interp_qlpc, bw_lpc1, bw_lpc2, - SUBMODE(innovation_params), st->lpcSize, st->subframeSize, - innov2, syn_resp, bits, stack, st->complexity, 0); - signal_mul(innov2, innov2, MULT16_32_P15(QCONST16(0.4f,15),scale), st->subframeSize); - - for (i=0;i<st->subframeSize;i++) - innov[i] = ADD32(innov[i],innov2[i]); - stack = tmp_stack; - } - for (i=0;i<st->subframeSize;i++) - exc[i] = PSHR32(innov[i],SIG_SHIFT); - - if (st->innov_rms_save) - { - st->innov_rms_save[sub] = MULT16_16_Q15(QCONST16(.70711f, 15), compute_rms(innov, st->subframeSize)); - } - st->exc_rms[sub] = compute_rms16(exc, st->subframeSize); - - - } - - - /*Keep the previous memory*/ - for (i=0;i<st->lpcSize;i++) - mem[i]=st->mem_sp[i]; - /* Final signal synthesis from excitation */ - iir_mem16(exc, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp, stack); - - /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */ - filter_mem16(sp, bw_lpc1, bw_lpc2, sw, st->subframeSize, st->lpcSize, st->mem_sw, stack); - } - - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i] = lsp[i]; - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - - st->first=0; - - return 1; -} - - - - - -void *sb_decoder_init(const SpeexMode *m) -{ - spx_int32_t tmp; - SBDecState *st; - const SpeexSBMode *mode; - st = (SBDecState*)speex_alloc(sizeof(SBDecState)); - if (!st) - return NULL; - st->mode = m; - mode=(const SpeexSBMode*)m->mode; - st->encode_submode = 1; - - st->st_low = speex_decoder_init(mode->nb_mode); -#if defined(VAR_ARRAYS) || defined (USE_ALLOCA) - st->stack = NULL; -#else - /*st->stack = (char*)speex_alloc_scratch(SB_DEC_STACK);*/ - speex_decoder_ctl(st->st_low, SPEEX_GET_STACK, &st->stack); -#endif - - st->full_frame_size = 2*mode->frameSize; - st->frame_size = mode->frameSize; - st->subframeSize = mode->subframeSize; - st->nbSubframes = mode->frameSize/mode->subframeSize; - st->lpcSize=mode->lpcSize; - speex_decoder_ctl(st->st_low, SPEEX_GET_SAMPLING_RATE, &st->sampling_rate); - st->sampling_rate*=2; - tmp=1; - speex_decoder_ctl(st->st_low, SPEEX_SET_WIDEBAND, &tmp); - - st->submodes=mode->submodes; - st->submodeID=mode->defaultSubmode; - - st->first=1; - - st->g0_mem = (spx_word16_t*)speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); - st->g1_mem = (spx_word16_t*)speex_alloc((QMF_ORDER)*sizeof(spx_word16_t)); - - st->excBuf = (spx_word16_t*)speex_alloc((st->subframeSize)*sizeof(spx_word16_t)); - - st->old_qlsp = (spx_lsp_t*)speex_alloc((st->lpcSize)*sizeof(spx_lsp_t)); - st->interp_qlpc = (spx_coef_t*)speex_alloc(st->lpcSize*sizeof(spx_coef_t)); - - st->pi_gain = (spx_word32_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word32_t)); - st->exc_rms = (spx_word16_t*)speex_alloc((st->nbSubframes)*sizeof(spx_word16_t)); - st->mem_sp = (spx_mem_t*)speex_alloc((2*st->lpcSize)*sizeof(spx_mem_t)); - - st->innov_save = NULL; - - - st->lpc_enh_enabled=0; - st->seed = 1000; - -#ifdef ENABLE_VALGRIND - VALGRIND_MAKE_READABLE(st, (st->stack-(char*)st)); -#endif - return st; -} - -void sb_decoder_destroy(void *state) -{ - SBDecState *st; - st = (SBDecState*)state; - speex_decoder_destroy(st->st_low); -#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA)) - /*speex_free_scratch(st->stack);*/ -#endif - - speex_free(st->g0_mem); - speex_free(st->g1_mem); - speex_free(st->excBuf); - speex_free(st->old_qlsp); - speex_free(st->interp_qlpc); - speex_free(st->pi_gain); - speex_free(st->exc_rms); - speex_free(st->mem_sp); - - speex_free(state); -} - -static void sb_decode_lost(SBDecState *st, spx_word16_t *out, int dtx, char *stack) -{ - int i; - int saved_modeid=0; - - if (dtx) - { - saved_modeid=st->submodeID; - st->submodeID=1; - } else { - bw_lpc(QCONST16(0.99f,15), st->interp_qlpc, st->interp_qlpc, st->lpcSize); - } - - st->first=1; - - - /* Final signal synthesis from excitation */ - if (!dtx) - { - st->last_ener = MULT16_16_Q15(QCONST16(.9f,15),st->last_ener); - } - for (i=0;i<st->frame_size;i++) - out[i+st->frame_size] = speex_rand(st->last_ener, &st->seed); - - iir_mem16(out+st->frame_size, st->interp_qlpc, out+st->frame_size, st->frame_size, st->lpcSize, - st->mem_sp, stack); - - - /* Reconstruct the original */ - qmf_synth(out, out+st->frame_size, h0, out, st->full_frame_size, QMF_ORDER, st->g0_mem, st->g1_mem, stack); - if (dtx) - { - st->submodeID=saved_modeid; - } - - return; -} - -int sb_decode(void *state, SpeexBits *bits, void *vout) -{ - int i, sub; - SBDecState *st; - int wideband; - int ret; - char *stack; - VARDECL(spx_word32_t *low_pi_gain); - VARDECL(spx_word16_t *low_exc_rms); - VARDECL(spx_coef_t *ak); - VARDECL(spx_lsp_t *qlsp); - VARDECL(spx_lsp_t *interp_qlsp); - spx_int32_t dtx; - const SpeexSBMode *mode; - spx_word16_t *out = (spx_word16_t*)vout; - spx_word16_t *low_innov_alias; - spx_word32_t exc_ener_sum = 0; - - st = (SBDecState*)state; - stack=st->stack; - mode = (const SpeexSBMode*)(st->mode->mode); - - low_innov_alias = out+st->frame_size; - speex_decoder_ctl(st->st_low, SPEEX_SET_INNOVATION_SAVE, low_innov_alias); - /* Decode the low-band */ - ret = speex_decode_native(st->st_low, bits, out); - - speex_decoder_ctl(st->st_low, SPEEX_GET_DTX_STATUS, &dtx); - - /* If error decoding the narrowband part, propagate error */ - if (ret!=0) - { - return ret; - } - - if (!bits) - { - sb_decode_lost(st, out, dtx, stack); - return 0; - } - - if (st->encode_submode) - { - - /*Check "wideband bit"*/ - if (speex_bits_remaining(bits)>0) - wideband = speex_bits_peek(bits); - else - wideband = 0; - if (wideband) - { - /*Regular wideband frame, read the submode*/ - wideband = speex_bits_unpack_unsigned(bits, 1); - st->submodeID = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS); - } else - { - /*Was a narrowband frame, set "null submode"*/ - st->submodeID = 0; - } - if (st->submodeID != 0 && st->submodes[st->submodeID] == NULL) - { - speex_notify("Invalid mode encountered. The stream is corrupted."); - return -2; - } - } - - /* If null mode (no transmission), just set a couple things to zero*/ - if (st->submodes[st->submodeID] == NULL) - { - if (dtx) - { - sb_decode_lost(st, out, 1, stack); - return 0; - } - - for (i=0;i<st->frame_size;i++) - out[st->frame_size+i]=VERY_SMALL; - - st->first=1; - - /* Final signal synthesis from excitation */ - iir_mem16(out+st->frame_size, st->interp_qlpc, out+st->frame_size, st->frame_size, st->lpcSize, st->mem_sp, stack); - - qmf_synth(out, out+st->frame_size, h0, out, st->full_frame_size, QMF_ORDER, st->g0_mem, st->g1_mem, stack); - - return 0; - - } - - ALLOC(low_pi_gain, st->nbSubframes, spx_word32_t); - ALLOC(low_exc_rms, st->nbSubframes, spx_word16_t); - speex_decoder_ctl(st->st_low, SPEEX_GET_PI_GAIN, low_pi_gain); - speex_decoder_ctl(st->st_low, SPEEX_GET_EXC, low_exc_rms); - - ALLOC(qlsp, st->lpcSize, spx_lsp_t); - ALLOC(interp_qlsp, st->lpcSize, spx_lsp_t); - SUBMODE(lsp_unquant)(qlsp, st->lpcSize, bits); - - if (st->first) - { - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - } - - ALLOC(ak, st->lpcSize, spx_coef_t); - - for (sub=0;sub<st->nbSubframes;sub++) - { - VARDECL(spx_word32_t *exc); - spx_word16_t *innov_save=NULL; - spx_word16_t *sp; - spx_word16_t filter_ratio; - spx_word16_t el=0; - int offset; - spx_word32_t rl=0,rh=0; - - offset = st->subframeSize*sub; - sp=out+st->frame_size+offset; - ALLOC(exc, st->subframeSize, spx_word32_t); - /* Pointer for saving innovation */ - if (st->innov_save) - { - innov_save = st->innov_save+2*offset; - SPEEX_MEMSET(innov_save, 0, 2*st->subframeSize); - } - - /* LSP interpolation */ - lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, st->lpcSize, sub, st->nbSubframes); - - lsp_enforce_margin(interp_qlsp, st->lpcSize, LSP_MARGIN); - - /* LSP to LPC */ - lsp_to_lpc(interp_qlsp, ak, st->lpcSize, stack); - - /* Calculate reponse ratio between the low and high filter in the middle - of the band (4000 Hz) */ - - st->pi_gain[sub]=LPC_SCALING; - rh = LPC_SCALING; - for (i=0;i<st->lpcSize;i+=2) - { - rh += ak[i+1] - ak[i]; - st->pi_gain[sub] += ak[i] + ak[i+1]; - } - - rl = low_pi_gain[sub]; -#ifdef FIXED_POINT - filter_ratio=EXTRACT16(SATURATE(PDIV32(SHL32(ADD32(rl,82),7),ADD32(82,rh)),32767)); -#else - filter_ratio=(rl+.01)/(rh+.01); -#endif - - SPEEX_MEMSET(exc, 0, st->subframeSize); - if (!SUBMODE(innovation_unquant)) - { - spx_word32_t g; - int quant; - - quant = speex_bits_unpack_unsigned(bits, 5); - g= spx_exp(MULT16_16(QCONST16(.125f,11),(quant-10))); - - g = PDIV32(g, filter_ratio); - - for (i=0;i<st->subframeSize;i+=2) - { - exc[i]=SHL32(MULT16_32_P15(MULT16_16_Q15(mode->folding_gain,low_innov_alias[offset+i]),SHL32(g,6)),SIG_SHIFT); - exc[i+1]=NEG32(SHL32(MULT16_32_P15(MULT16_16_Q15(mode->folding_gain,low_innov_alias[offset+i+1]),SHL32(g,6)),SIG_SHIFT)); - } - - } else { - spx_word16_t gc; - spx_word32_t scale; - int qgc = speex_bits_unpack_unsigned(bits, 4); - - el = low_exc_rms[sub]; - gc = MULT16_16_Q15(QCONST16(0.87360,15),gc_quant_bound[qgc]); - - if (st->subframeSize==80) - gc = MULT16_16_P14(QCONST16(1.4142f,14),gc); - - scale = SHL32(PDIV32(SHL32(MULT16_16(gc, el),3), filter_ratio),SIG_SHIFT-3); - SUBMODE(innovation_unquant)(exc, SUBMODE(innovation_params), st->subframeSize, - bits, stack, &st->seed); - - signal_mul(exc,exc,scale,st->subframeSize); - - if (SUBMODE(double_codebook)) { - char *tmp_stack=stack; - VARDECL(spx_sig_t *innov2); - ALLOC(innov2, st->subframeSize, spx_sig_t); - SPEEX_MEMSET(innov2, 0, st->subframeSize); - SUBMODE(innovation_unquant)(innov2, SUBMODE(innovation_params), st->subframeSize, - bits, stack, &st->seed); - signal_mul(innov2, innov2, MULT16_32_P15(QCONST16(0.4f,15),scale), st->subframeSize); - for (i=0;i<st->subframeSize;i++) - exc[i] = ADD32(exc[i],innov2[i]); - stack = tmp_stack; - } - - } - - if (st->innov_save) - { - for (i=0;i<st->subframeSize;i++) - innov_save[2*i]=EXTRACT16(PSHR32(exc[i],SIG_SHIFT)); - } - - iir_mem16(st->excBuf, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, - st->mem_sp, stack); - for (i=0;i<st->subframeSize;i++) - st->excBuf[i]=EXTRACT16(PSHR32(exc[i],SIG_SHIFT)); - for (i=0;i<st->lpcSize;i++) - st->interp_qlpc[i] = ak[i]; - st->exc_rms[sub] = compute_rms16(st->excBuf, st->subframeSize); - exc_ener_sum = ADD32(exc_ener_sum, DIV32(MULT16_16(st->exc_rms[sub],st->exc_rms[sub]), st->nbSubframes)); - } - st->last_ener = spx_sqrt(exc_ener_sum); - - qmf_synth(out, out+st->frame_size, h0, out, st->full_frame_size, QMF_ORDER, st->g0_mem, st->g1_mem, stack); - for (i=0;i<st->lpcSize;i++) - st->old_qlsp[i] = qlsp[i]; - - st->first=0; - - return 0; -} - - -int sb_encoder_ctl(void *state, int request, void *ptr) -{ - SBEncState *st; - st=(SBEncState*)state; - switch(request) - { - case SPEEX_GET_FRAME_SIZE: - (*(spx_int32_t*)ptr) = st->full_frame_size; - break; - case SPEEX_SET_HIGH_MODE: - st->submodeSelect = st->submodeID = (*(spx_int32_t*)ptr); - break; - case SPEEX_SET_LOW_MODE: - speex_encoder_ctl(st->st_low, SPEEX_SET_LOW_MODE, ptr); - break; - case SPEEX_SET_DTX: - speex_encoder_ctl(st->st_low, SPEEX_SET_DTX, ptr); - break; - case SPEEX_GET_DTX: - speex_encoder_ctl(st->st_low, SPEEX_GET_DTX, ptr); - break; - case SPEEX_GET_LOW_MODE: - speex_encoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, ptr); - break; - case SPEEX_SET_MODE: - speex_encoder_ctl(st, SPEEX_SET_QUALITY, ptr); - break; -#ifndef DISABLE_VBR - case SPEEX_SET_VBR: - st->vbr_enabled = (*(spx_int32_t*)ptr); - speex_encoder_ctl(st->st_low, SPEEX_SET_VBR, ptr); - break; - case SPEEX_GET_VBR: - (*(spx_int32_t*)ptr) = st->vbr_enabled; - break; - case SPEEX_SET_VAD: - st->vad_enabled = (*(spx_int32_t*)ptr); - speex_encoder_ctl(st->st_low, SPEEX_SET_VAD, ptr); - break; - case SPEEX_GET_VAD: - (*(spx_int32_t*)ptr) = st->vad_enabled; - break; -#endif /* #ifndef DISABLE_VBR */ -#if !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API) - case SPEEX_SET_VBR_QUALITY: - { - spx_int32_t q; - float qual = (*(float*)ptr)+.6; - st->vbr_quality = (*(float*)ptr); - if (qual>10) - qual=10; - q=(int)floor(.5+*(float*)ptr); - if (q>10) - q=10; - speex_encoder_ctl(st->st_low, SPEEX_SET_VBR_QUALITY, &qual); - speex_encoder_ctl(state, SPEEX_SET_QUALITY, &q); - break; - } - case SPEEX_GET_VBR_QUALITY: - (*(float*)ptr) = st->vbr_quality; - break; -#endif /* #if !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API) */ -#ifndef DISABLE_VBR - case SPEEX_SET_ABR: - st->abr_enabled = (*(spx_int32_t*)ptr); - st->vbr_enabled = st->abr_enabled!=0; - speex_encoder_ctl(st->st_low, SPEEX_SET_VBR, &st->vbr_enabled); - if (st->vbr_enabled) - { - spx_int32_t i=10, rate, target; - float vbr_qual; - target = (*(spx_int32_t*)ptr); - while (i>=0) - { - speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); - speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); - if (rate <= target) - break; - i--; - } - vbr_qual=i; - if (vbr_qual<0) - vbr_qual=0; - speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual); - st->abr_count=0; - st->abr_drift=0; - st->abr_drift2=0; - } - - break; - case SPEEX_GET_ABR: - (*(spx_int32_t*)ptr) = st->abr_enabled; - break; -#endif /* #ifndef DISABLE_VBR */ - - case SPEEX_SET_QUALITY: - { - spx_int32_t nb_qual; - int quality = (*(spx_int32_t*)ptr); - if (quality < 0) - quality = 0; - if (quality > 10) - quality = 10; - st->submodeSelect = st->submodeID = ((const SpeexSBMode*)(st->mode->mode))->quality_map[quality]; - nb_qual = ((const SpeexSBMode*)(st->mode->mode))->low_quality_map[quality]; - speex_encoder_ctl(st->st_low, SPEEX_SET_MODE, &nb_qual); - } - break; - case SPEEX_SET_COMPLEXITY: - speex_encoder_ctl(st->st_low, SPEEX_SET_COMPLEXITY, ptr); - st->complexity = (*(spx_int32_t*)ptr); - if (st->complexity<1) - st->complexity=1; - break; - case SPEEX_GET_COMPLEXITY: - (*(spx_int32_t*)ptr) = st->complexity; - break; - case SPEEX_SET_BITRATE: - { - spx_int32_t i=10; - spx_int32_t rate, target; - target = (*(spx_int32_t*)ptr); - while (i>=0) - { - speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i); - speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate); - if (rate <= target) - break; - i--; - } - } - break; - case SPEEX_GET_BITRATE: - speex_encoder_ctl(st->st_low, request, ptr); - /*fprintf (stderr, "before: %d\n", (*(int*)ptr));*/ - if (st->submodes[st->submodeID]) - (*(spx_int32_t*)ptr) += st->sampling_rate*SUBMODE(bits_per_frame)/st->full_frame_size; - else - (*(spx_int32_t*)ptr) += st->sampling_rate*(SB_SUBMODE_BITS+1)/st->full_frame_size; - /*fprintf (stderr, "after: %d\n", (*(int*)ptr));*/ - break; - case SPEEX_SET_SAMPLING_RATE: - { - spx_int32_t tmp=(*(spx_int32_t*)ptr); - st->sampling_rate = tmp; - tmp>>=1; - speex_encoder_ctl(st->st_low, SPEEX_SET_SAMPLING_RATE, &tmp); - } - break; - case SPEEX_GET_SAMPLING_RATE: - (*(spx_int32_t*)ptr)=st->sampling_rate; - break; - case SPEEX_RESET_STATE: - { - int i; - st->first = 1; - for (i=0;i<st->lpcSize;i++) - st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), st->lpcSize+1); - for (i=0;i<st->lpcSize;i++) - st->mem_sw[i]=st->mem_sp[i]=st->mem_sp2[i]=0; - for (i=0;i<QMF_ORDER;i++) - st->h0_mem[i]=st->h1_mem[i]=0; - } - break; - case SPEEX_SET_SUBMODE_ENCODING: - st->encode_submode = (*(spx_int32_t*)ptr); - speex_encoder_ctl(st->st_low, SPEEX_SET_SUBMODE_ENCODING, ptr); - break; - case SPEEX_GET_SUBMODE_ENCODING: - (*(spx_int32_t*)ptr) = st->encode_submode; - break; - case SPEEX_GET_LOOKAHEAD: - speex_encoder_ctl(st->st_low, SPEEX_GET_LOOKAHEAD, ptr); - (*(spx_int32_t*)ptr) = 2*(*(spx_int32_t*)ptr) + QMF_ORDER - 1; - break; - case SPEEX_SET_PLC_TUNING: - speex_encoder_ctl(st->st_low, SPEEX_SET_PLC_TUNING, ptr); - break; - case SPEEX_GET_PLC_TUNING: - speex_encoder_ctl(st->st_low, SPEEX_GET_PLC_TUNING, ptr); - break; -#ifndef DISABLE_VBR - case SPEEX_SET_VBR_MAX_BITRATE: - { - st->vbr_max = (*(spx_int32_t*)ptr); - if (SPEEX_SET_VBR_MAX_BITRATE<1) - { - speex_encoder_ctl(st->st_low, SPEEX_SET_VBR_MAX_BITRATE, &st->vbr_max); - st->vbr_max_high = 17600; - } else { - spx_int32_t low_rate; - if (st->vbr_max >= 42200) - { - st->vbr_max_high = 17600; - } else if (st->vbr_max >= 27800) - { - st->vbr_max_high = 9600; - } else if (st->vbr_max > 20600) - { - st->vbr_max_high = 5600; - } else { - st->vbr_max_high = 1800; - } - if (st->subframeSize==80) - st->vbr_max_high = 1800; - low_rate = st->vbr_max - st->vbr_max_high; - speex_encoder_ctl(st->st_low, SPEEX_SET_VBR_MAX_BITRATE, &low_rate); - } - } - break; - case SPEEX_GET_VBR_MAX_BITRATE: - (*(spx_int32_t*)ptr) = st->vbr_max; - break; -#endif /* #ifndef DISABLE_VBR */ - case SPEEX_SET_HIGHPASS: - speex_encoder_ctl(st->st_low, SPEEX_SET_HIGHPASS, ptr); - break; - case SPEEX_GET_HIGHPASS: - speex_encoder_ctl(st->st_low, SPEEX_GET_HIGHPASS, ptr); - break; - - - /* This is all internal stuff past this point */ - case SPEEX_GET_PI_GAIN: - { - int i; - spx_word32_t *g = (spx_word32_t*)ptr; - for (i=0;i<st->nbSubframes;i++) - g[i]=st->pi_gain[i]; - } - break; - case SPEEX_GET_EXC: - { - int i; - for (i=0;i<st->nbSubframes;i++) - ((spx_word16_t*)ptr)[i] = st->exc_rms[i]; - } - break; -#ifndef DISABLE_VBR - case SPEEX_GET_RELATIVE_QUALITY: - (*(float*)ptr)=st->relative_quality; - break; -#endif /* #ifndef DISABLE_VBR */ - case SPEEX_SET_INNOVATION_SAVE: - st->innov_rms_save = (spx_word16_t*)ptr; - break; - case SPEEX_SET_WIDEBAND: - speex_encoder_ctl(st->st_low, SPEEX_SET_WIDEBAND, ptr); - break; - case SPEEX_GET_STACK: - *((char**)ptr) = st->stack; - break; - default: - speex_warning_int("Unknown nb_ctl request: ", request); - return -1; - } - return 0; -} - -int sb_decoder_ctl(void *state, int request, void *ptr) -{ - SBDecState *st; - st=(SBDecState*)state; - switch(request) - { - case SPEEX_SET_HIGH_MODE: - st->submodeID = (*(spx_int32_t*)ptr); - break; - case SPEEX_SET_LOW_MODE: - speex_decoder_ctl(st->st_low, SPEEX_SET_LOW_MODE, ptr); - break; - case SPEEX_GET_LOW_MODE: - speex_decoder_ctl(st->st_low, SPEEX_GET_LOW_MODE, ptr); - break; - case SPEEX_GET_FRAME_SIZE: - (*(spx_int32_t*)ptr) = st->full_frame_size; - break; - case SPEEX_SET_ENH: - speex_decoder_ctl(st->st_low, request, ptr); - st->lpc_enh_enabled = *((spx_int32_t*)ptr); - break; - case SPEEX_GET_ENH: - *((spx_int32_t*)ptr) = st->lpc_enh_enabled; - break; - case SPEEX_SET_MODE: - case SPEEX_SET_QUALITY: - { - spx_int32_t nb_qual; - int quality = (*(spx_int32_t*)ptr); - if (quality < 0) - quality = 0; - if (quality > 10) - quality = 10; - st->submodeID = ((const SpeexSBMode*)(st->mode->mode))->quality_map[quality]; - nb_qual = ((const SpeexSBMode*)(st->mode->mode))->low_quality_map[quality]; - speex_decoder_ctl(st->st_low, SPEEX_SET_MODE, &nb_qual); - } - break; - case SPEEX_GET_BITRATE: - speex_decoder_ctl(st->st_low, request, ptr); - if (st->submodes[st->submodeID]) - (*(spx_int32_t*)ptr) += st->sampling_rate*SUBMODE(bits_per_frame)/st->full_frame_size; - else - (*(spx_int32_t*)ptr) += st->sampling_rate*(SB_SUBMODE_BITS+1)/st->full_frame_size; - break; - case SPEEX_SET_SAMPLING_RATE: - { - spx_int32_t tmp=(*(spx_int32_t*)ptr); - st->sampling_rate = tmp; - tmp>>=1; - speex_decoder_ctl(st->st_low, SPEEX_SET_SAMPLING_RATE, &tmp); - } - break; - case SPEEX_GET_SAMPLING_RATE: - (*(spx_int32_t*)ptr)=st->sampling_rate; - break; - case SPEEX_SET_HANDLER: - speex_decoder_ctl(st->st_low, SPEEX_SET_HANDLER, ptr); - break; - case SPEEX_SET_USER_HANDLER: - speex_decoder_ctl(st->st_low, SPEEX_SET_USER_HANDLER, ptr); - break; - case SPEEX_RESET_STATE: - { - int i; - for (i=0;i<2*st->lpcSize;i++) - st->mem_sp[i]=0; - for (i=0;i<QMF_ORDER;i++) - st->g0_mem[i]=st->g1_mem[i]=0; - st->last_ener=0; - } - break; - case SPEEX_SET_SUBMODE_ENCODING: - st->encode_submode = (*(spx_int32_t*)ptr); - speex_decoder_ctl(st->st_low, SPEEX_SET_SUBMODE_ENCODING, ptr); - break; - case SPEEX_GET_SUBMODE_ENCODING: - (*(spx_int32_t*)ptr) = st->encode_submode; - break; - case SPEEX_GET_LOOKAHEAD: - speex_decoder_ctl(st->st_low, SPEEX_GET_LOOKAHEAD, ptr); - (*(spx_int32_t*)ptr) = 2*(*(spx_int32_t*)ptr); - break; - case SPEEX_SET_HIGHPASS: - speex_decoder_ctl(st->st_low, SPEEX_SET_HIGHPASS, ptr); - break; - case SPEEX_GET_HIGHPASS: - speex_decoder_ctl(st->st_low, SPEEX_GET_HIGHPASS, ptr); - break; - case SPEEX_GET_ACTIVITY: - speex_decoder_ctl(st->st_low, SPEEX_GET_ACTIVITY, ptr); - break; - case SPEEX_GET_PI_GAIN: - { - int i; - spx_word32_t *g = (spx_word32_t*)ptr; - for (i=0;i<st->nbSubframes;i++) - g[i]=st->pi_gain[i]; - } - break; - case SPEEX_GET_EXC: - { - int i; - for (i=0;i<st->nbSubframes;i++) - ((spx_word16_t*)ptr)[i] = st->exc_rms[i]; - } - break; - case SPEEX_GET_DTX_STATUS: - speex_decoder_ctl(st->st_low, SPEEX_GET_DTX_STATUS, ptr); - break; - case SPEEX_SET_INNOVATION_SAVE: - st->innov_save = (spx_word16_t*)ptr; - break; - case SPEEX_SET_WIDEBAND: - speex_decoder_ctl(st->st_low, SPEEX_SET_WIDEBAND, ptr); - break; - case SPEEX_GET_STACK: - *((char**)ptr) = st->stack; - break; - default: - speex_warning_int("Unknown nb_ctl request: ", request); - return -1; - } - return 0; -} - -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.h deleted file mode 100755 index cb98e26..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/sb_celp.h +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin */ -/** - @file sb_celp.h - @brief Sub-band CELP mode used for wideband encoding -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef SB_CELP_H -#define SB_CELP_H - -#include "modes.h" -#include "speex/speex_bits.h" -#include "nb_celp.h" - -/**Structure representing the full state of the sub-band encoder*/ -typedef struct SBEncState { - const SpeexMode *mode; /**< Pointer to the mode (containing for vtable info) */ - void *st_low; /**< State of the low-band (narrowband) encoder */ - int full_frame_size; /**< Length of full-band frames*/ - int frame_size; /**< Length of high-band frames*/ - int subframeSize; /**< Length of high-band sub-frames*/ - int nbSubframes; /**< Number of high-band sub-frames*/ - int windowSize; /**< Length of high-band LPC window*/ - int lpcSize; /**< Order of high-band LPC analysis */ - int first; /**< First frame? */ - spx_word16_t lpc_floor; /**< Controls LPC analysis noise floor */ - spx_word16_t gamma1; /**< Perceptual weighting coef 1 */ - spx_word16_t gamma2; /**< Perceptual weighting coef 2 */ - - char *stack; /**< Temporary allocation stack */ - spx_word16_t *high; /**< High-band signal (buffer) */ - spx_word16_t *h0_mem, *h1_mem; - - const spx_word16_t *window; /**< LPC analysis window */ - const spx_word16_t *lagWindow; /**< Auto-correlation window */ - spx_lsp_t *old_lsp; /**< LSPs of previous frame */ - spx_lsp_t *old_qlsp; /**< Quantized LSPs of previous frame */ - spx_coef_t *interp_qlpc; /**< Interpolated quantized LPCs for current sub-frame */ - - spx_mem_t *mem_sp; /**< Synthesis signal memory */ - spx_mem_t *mem_sp2; - spx_mem_t *mem_sw; /**< Perceptual signal memory */ - spx_word32_t *pi_gain; - spx_word16_t *exc_rms; - spx_word16_t *innov_rms_save; /**< If non-NULL, innovation is copied here */ - -#ifndef DISABLE_VBR - float vbr_quality; /**< Quality setting for VBR encoding */ - int vbr_enabled; /**< 1 for enabling VBR, 0 otherwise */ - spx_int32_t vbr_max; /**< Max bit-rate allowed in VBR mode (total) */ - spx_int32_t vbr_max_high; /**< Max bit-rate allowed in VBR mode for the high-band */ - spx_int32_t abr_enabled; /**< ABR setting (in bps), 0 if off */ - float abr_drift; - float abr_drift2; - float abr_count; - int vad_enabled; /**< 1 for enabling VAD, 0 otherwise */ - float relative_quality; -#endif /* #ifndef DISABLE_VBR */ - - int encode_submode; - const SpeexSubmode * const *submodes; - int submodeID; - int submodeSelect; - int complexity; - spx_int32_t sampling_rate; - -} SBEncState; - - -/**Structure representing the full state of the sub-band decoder*/ -typedef struct SBDecState { - const SpeexMode *mode; /**< Pointer to the mode (containing for vtable info) */ - void *st_low; /**< State of the low-band (narrowband) encoder */ - int full_frame_size; - int frame_size; - int subframeSize; - int nbSubframes; - int lpcSize; - int first; - spx_int32_t sampling_rate; - int lpc_enh_enabled; - - char *stack; - spx_word16_t *g0_mem, *g1_mem; - - spx_word16_t *excBuf; - spx_lsp_t *old_qlsp; - spx_coef_t *interp_qlpc; - - spx_mem_t *mem_sp; - spx_word32_t *pi_gain; - spx_word16_t *exc_rms; - spx_word16_t *innov_save; /** If non-NULL, innovation is copied here */ - - spx_word16_t last_ener; - spx_int32_t seed; - - int encode_submode; - const SpeexSubmode * const *submodes; - int submodeID; -} SBDecState; - - -/**Initializes encoder state*/ -void *sb_encoder_init(const SpeexMode *m); - -/**De-allocates encoder state resources*/ -void sb_encoder_destroy(void *state); - -/**Encodes one frame*/ -int sb_encode(void *state, void *in, SpeexBits *bits); - - -/**Initializes decoder state*/ -void *sb_decoder_init(const SpeexMode *m); - -/**De-allocates decoder state resources*/ -void sb_decoder_destroy(void *state); - -/**Decodes one frame*/ -int sb_decode(void *state, SpeexBits *bits, void *out); - -int sb_encoder_ctl(void *state, int request, void *ptr); - -int sb_decoder_ctl(void *state, int request, void *ptr); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/scal.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/scal.c deleted file mode 100755 index c6abfd2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/scal.c +++ /dev/null @@ -1,289 +0,0 @@ -/* Copyright (C) 2006-2008 CSIRO, Jean-Marc Valin, Xiph.Org Foundation - - File: scal.c - Shaped comb-allpass filter for channel decorrelation - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -The algorithm implemented here is described in: - -* J.-M. Valin, Perceptually-Motivated Nonlinear Channel Decorrelation For - Stereo Acoustic Echo Cancellation, Accepted for Joint Workshop on - Hands­free Speech Communication and Microphone Arrays (HSCMA), 2008. - http://people.xiph.org/~jm/papers/valin_hscma2008.pdf - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "speex/speex_echo.h" -#include "vorbis_psy.h" -#include "arch.h" -#include "os_support.h" -#include "smallft.h" -#include <math.h> -#include <stdlib.h> - -#define ALLPASS_ORDER 20 - -struct SpeexDecorrState_ { - int rate; - int channels; - int frame_size; -#ifdef VORBIS_PSYCHO - VorbisPsy *psy; - struct drft_lookup lookup; - float *wola_mem; - float *curve; -#endif - float *vorbis_win; - int seed; - float *y; - - /* Per-channel stuff */ - float *buff; - float (*ring)[ALLPASS_ORDER]; - int *ringID; - int *order; - float *alpha; -}; - - - -EXPORT SpeexDecorrState *speex_decorrelate_new(int rate, int channels, int frame_size) -{ - int i, ch; - SpeexDecorrState *st = speex_alloc(sizeof(SpeexDecorrState)); - st->rate = rate; - st->channels = channels; - st->frame_size = frame_size; -#ifdef VORBIS_PSYCHO - st->psy = vorbis_psy_init(rate, 2*frame_size); - spx_drft_init(&st->lookup, 2*frame_size); - st->wola_mem = speex_alloc(frame_size*sizeof(float)); - st->curve = speex_alloc(frame_size*sizeof(float)); -#endif - st->y = speex_alloc(frame_size*sizeof(float)); - - st->buff = speex_alloc(channels*2*frame_size*sizeof(float)); - st->ringID = speex_alloc(channels*sizeof(int)); - st->order = speex_alloc(channels*sizeof(int)); - st->alpha = speex_alloc(channels*sizeof(float)); - st->ring = speex_alloc(channels*ALLPASS_ORDER*sizeof(float)); - - /*FIXME: The +20 is there only as a kludge for ALL_PASS_OLA*/ - st->vorbis_win = speex_alloc((2*frame_size+20)*sizeof(float)); - for (i=0;i<2*frame_size;i++) - st->vorbis_win[i] = sin(.5*M_PI* sin(M_PI*i/(2*frame_size))*sin(M_PI*i/(2*frame_size)) ); - st->seed = rand(); - - for (ch=0;ch<channels;ch++) - { - for (i=0;i<ALLPASS_ORDER;i++) - st->ring[ch][i] = 0; - st->ringID[ch] = 0; - st->alpha[ch] = 0; - st->order[ch] = 10; - } - return st; -} - -static float uni_rand(int *seed) -{ - const unsigned int jflone = 0x3f800000; - const unsigned int jflmsk = 0x007fffff; - union {int i; float f;} ran; - *seed = 1664525 * *seed + 1013904223; - ran.i = jflone | (jflmsk & *seed); - ran.f -= 1.5; - return 2*ran.f; -} - -static unsigned int irand(int *seed) -{ - *seed = 1664525 * *seed + 1013904223; - return ((unsigned int)*seed)>>16; -} - - -EXPORT void speex_decorrelate(SpeexDecorrState *st, const spx_int16_t *in, spx_int16_t *out, int strength) -{ - int ch; - float amount; - - if (strength<0) - strength = 0; - if (strength>100) - strength = 100; - - amount = .01*strength; - for (ch=0;ch<st->channels;ch++) - { - int i; - int N=2*st->frame_size; - float beta, beta2; - float *x; - float max_alpha = 0; - - float *buff; - float *ring; - int ringID; - int order; - float alpha; - - buff = st->buff+ch*2*st->frame_size; - ring = st->ring[ch]; - ringID = st->ringID[ch]; - order = st->order[ch]; - alpha = st->alpha[ch]; - - for (i=0;i<st->frame_size;i++) - buff[i] = buff[i+st->frame_size]; - for (i=0;i<st->frame_size;i++) - buff[i+st->frame_size] = in[i*st->channels+ch]; - - x = buff+st->frame_size; - beta = 1.-.3*amount*amount; - if (amount>1) - beta = 1-sqrt(.4*amount); - else - beta = 1-0.63246*amount; - if (beta<0) - beta = 0; - - beta2 = beta; - for (i=0;i<st->frame_size;i++) - { - st->y[i] = alpha*(x[i-ALLPASS_ORDER+order]-beta*x[i-ALLPASS_ORDER+order-1])*st->vorbis_win[st->frame_size+i+order] - + x[i-ALLPASS_ORDER]*st->vorbis_win[st->frame_size+i] - - alpha*(ring[ringID] - - beta*ring[ringID+1>=order?0:ringID+1]); - ring[ringID++]=st->y[i]; - st->y[i] *= st->vorbis_win[st->frame_size+i]; - if (ringID>=order) - ringID=0; - } - order = order+(irand(&st->seed)%3)-1; - if (order < 5) - order = 5; - if (order > 10) - order = 10; - /*order = 5+(irand(&st->seed)%6);*/ - max_alpha = pow(.96+.04*(amount-1),order); - if (max_alpha > .98/(1.+beta2)) - max_alpha = .98/(1.+beta2); - - alpha = alpha + .4*uni_rand(&st->seed); - if (alpha > max_alpha) - alpha = max_alpha; - if (alpha < -max_alpha) - alpha = -max_alpha; - for (i=0;i<ALLPASS_ORDER;i++) - ring[i] = 0; - ringID = 0; - for (i=0;i<st->frame_size;i++) - { - float tmp = alpha*(x[i-ALLPASS_ORDER+order]-beta*x[i-ALLPASS_ORDER+order-1])*st->vorbis_win[i+order] - + x[i-ALLPASS_ORDER]*st->vorbis_win[i] - - alpha*(ring[ringID] - - beta*ring[ringID+1>=order?0:ringID+1]); - ring[ringID++]=tmp; - tmp *= st->vorbis_win[i]; - if (ringID>=order) - ringID=0; - st->y[i] += tmp; - } - -#ifdef VORBIS_PSYCHO - float frame[N]; - float scale = 1./N; - for (i=0;i<2*st->frame_size;i++) - frame[i] = buff[i]; - //float coef = .5*0.78130; - float coef = M_PI*0.075063 * 0.93763 * amount * .8 * 0.707; - compute_curve(st->psy, buff, st->curve); - for (i=1;i<st->frame_size;i++) - { - float x1,x2; - float gain; - do { - x1 = uni_rand(&st->seed); - x2 = uni_rand(&st->seed); - } while (x1*x1+x2*x2 > 1.); - gain = coef*sqrt(.1+st->curve[i]); - frame[2*i-1] = gain*x1; - frame[2*i] = gain*x2; - } - frame[0] = coef*uni_rand(&st->seed)*sqrt(.1+st->curve[0]); - frame[2*st->frame_size-1] = coef*uni_rand(&st->seed)*sqrt(.1+st->curve[st->frame_size-1]); - spx_drft_backward(&st->lookup,frame); - for (i=0;i<2*st->frame_size;i++) - frame[i] *= st->vorbis_win[i]; -#endif - - for (i=0;i<st->frame_size;i++) - { -#ifdef VORBIS_PSYCHO - float tmp = st->y[i] + frame[i] + st->wola_mem[i]; - st->wola_mem[i] = frame[i+st->frame_size]; -#else - float tmp = st->y[i]; -#endif - if (tmp>32767) - tmp = 32767; - if (tmp < -32767) - tmp = -32767; - out[i*st->channels+ch] = tmp; - } - - st->ringID[ch] = ringID; - st->order[ch] = order; - st->alpha[ch] = alpha; - - } -} - -EXPORT void speex_decorrelate_destroy(SpeexDecorrState *st) -{ -#ifdef VORBIS_PSYCHO - vorbis_psy_destroy(st->psy); - speex_free(st->wola_mem); - speex_free(st->curve); -#endif - speex_free(st->buff); - speex_free(st->ring); - speex_free(st->ringID); - speex_free(st->alpha); - speex_free(st->vorbis_win); - speex_free(st->order); - speex_free(st->y); - speex_free(st); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.c deleted file mode 100755 index 5c26d01..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.c +++ /dev/null @@ -1,1261 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: *unnormalized* fft transform - last mod: $Id: smallft.c,v 1.19 2003/10/08 05:12:37 jm Exp $ - - ********************************************************************/ - -/* FFT implementation from OggSquish, minus cosine transforms, - * minus all but radix 2/4 case. In Vorbis we only need this - * cut-down version. - * - * To do more than just power-of-two sized vectors, see the full - * version I wrote for NetLib. - * - * Note that the packing is a little strange; rather than the FFT r/i - * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, - * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the - * FORTRAN version - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include "smallft.h" -#include "arch.h" -#include "os_support.h" - -static void drfti1(int n, float *wa, int *ifac){ - static int ntryh[4] = { 4,2,3,5 }; - static float tpi = 6.28318530717958648f; - float arg,argh,argld,fi; - int ntry=0,i,j=-1; - int k1, l1, l2, ib; - int ld, ii, ip, is, nq, nr; - int ido, ipm, nfm1; - int nl=n; - int nf=0; - - L101: - j++; - if (j < 4) - ntry=ntryh[j]; - else - ntry+=2; - - L104: - nq=nl/ntry; - nr=nl-ntry*nq; - if (nr!=0) goto L101; - - nf++; - ifac[nf+1]=ntry; - nl=nq; - if(ntry!=2)goto L107; - if(nf==1)goto L107; - - for (i=1;i<nf;i++){ - ib=nf-i+1; - ifac[ib+1]=ifac[ib]; - } - ifac[2] = 2; - - L107: - if(nl!=1)goto L104; - ifac[0]=n; - ifac[1]=nf; - argh=tpi/n; - is=0; - nfm1=nf-1; - l1=1; - - if(nfm1==0)return; - - for (k1=0;k1<nfm1;k1++){ - ip=ifac[k1+2]; - ld=0; - l2=l1*ip; - ido=n/l2; - ipm=ip-1; - - for (j=0;j<ipm;j++){ - ld+=l1; - i=is; - argld=(float)ld*argh; - fi=0.f; - for (ii=2;ii<ido;ii+=2){ - fi+=1.f; - arg=fi*argld; - wa[i++]=cos(arg); - wa[i++]=sin(arg); - } - is+=ido; - } - l1=l2; - } -} - -static void fdrffti(int n, float *wsave, int *ifac){ - - if (n == 1) return; - drfti1(n, wsave+n, ifac); -} - -static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){ - int i,k; - float ti2,tr2; - int t0,t1,t2,t3,t4,t5,t6; - - t1=0; - t0=(t2=l1*ido); - t3=ido<<1; - for(k=0;k<l1;k++){ - ch[t1<<1]=cc[t1]+cc[t2]; - ch[(t1<<1)+t3-1]=cc[t1]-cc[t2]; - t1+=ido; - t2+=ido; - } - - if(ido<2)return; - if(ido==2)goto L105; - - t1=0; - t2=t0; - for(k=0;k<l1;k++){ - t3=t2; - t4=(t1<<1)+(ido<<1); - t5=t1; - t6=t1+t1; - for(i=2;i<ido;i+=2){ - t3+=2; - t4-=2; - t5+=2; - t6+=2; - tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3]; - ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1]; - ch[t6]=cc[t5]+ti2; - ch[t4]=ti2-cc[t5]; - ch[t6-1]=cc[t5-1]+tr2; - ch[t4-1]=cc[t5-1]-tr2; - } - t1+=ido; - t2+=ido; - } - - if(ido%2==1)return; - - L105: - t3=(t2=(t1=ido)-1); - t2+=t0; - for(k=0;k<l1;k++){ - ch[t1]=-cc[t2]; - ch[t1-1]=cc[t3]; - t1+=ido<<1; - t2+=ido; - t3+=ido; - } -} - -static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1, - float *wa2,float *wa3){ - static float hsqt2 = .70710678118654752f; - int i,k,t0,t1,t2,t3,t4,t5,t6; - float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4; - t0=l1*ido; - - t1=t0; - t4=t1<<1; - t2=t1+(t1<<1); - t3=0; - - for(k=0;k<l1;k++){ - tr1=cc[t1]+cc[t2]; - tr2=cc[t3]+cc[t4]; - - ch[t5=t3<<2]=tr1+tr2; - ch[(ido<<2)+t5-1]=tr2-tr1; - ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4]; - ch[t5]=cc[t2]-cc[t1]; - - t1+=ido; - t2+=ido; - t3+=ido; - t4+=ido; - } - - if(ido<2)return; - if(ido==2)goto L105; - - - t1=0; - for(k=0;k<l1;k++){ - t2=t1; - t4=t1<<2; - t5=(t6=ido<<1)+t4; - for(i=2;i<ido;i+=2){ - t3=(t2+=2); - t4+=2; - t5-=2; - - t3+=t0; - cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3]; - ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1]; - t3+=t0; - cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3]; - ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1]; - t3+=t0; - cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3]; - ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1]; - - tr1=cr2+cr4; - tr4=cr4-cr2; - ti1=ci2+ci4; - ti4=ci2-ci4; - - ti2=cc[t2]+ci3; - ti3=cc[t2]-ci3; - tr2=cc[t2-1]+cr3; - tr3=cc[t2-1]-cr3; - - ch[t4-1]=tr1+tr2; - ch[t4]=ti1+ti2; - - ch[t5-1]=tr3-ti4; - ch[t5]=tr4-ti3; - - ch[t4+t6-1]=ti4+tr3; - ch[t4+t6]=tr4+ti3; - - ch[t5+t6-1]=tr2-tr1; - ch[t5+t6]=ti1-ti2; - } - t1+=ido; - } - if(ido&1)return; - - L105: - - t2=(t1=t0+ido-1)+(t0<<1); - t3=ido<<2; - t4=ido; - t5=ido<<1; - t6=ido; - - for(k=0;k<l1;k++){ - ti1=-hsqt2*(cc[t1]+cc[t2]); - tr1=hsqt2*(cc[t1]-cc[t2]); - - ch[t4-1]=tr1+cc[t6-1]; - ch[t4+t5-1]=cc[t6-1]-tr1; - - ch[t4]=ti1-cc[t1+t0]; - ch[t4+t5]=ti1+cc[t1+t0]; - - t1+=ido; - t2+=ido; - t4+=t3; - t6+=ido; - } -} - -static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1, - float *c2,float *ch,float *ch2,float *wa){ - - static float tpi=6.283185307179586f; - int idij,ipph,i,j,k,l,ic,ik,is; - int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10; - float dc2,ai1,ai2,ar1,ar2,ds2; - int nbd; - float dcp,arg,dsp,ar1h,ar2h; - int idp2,ipp2; - - arg=tpi/(float)ip; - dcp=cos(arg); - dsp=sin(arg); - ipph=(ip+1)>>1; - ipp2=ip; - idp2=ido; - nbd=(ido-1)>>1; - t0=l1*ido; - t10=ip*ido; - - if(ido==1)goto L119; - for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik]; - - t1=0; - for(j=1;j<ip;j++){ - t1+=t0; - t2=t1; - for(k=0;k<l1;k++){ - ch[t2]=c1[t2]; - t2+=ido; - } - } - - is=-ido; - t1=0; - if(nbd>l1){ - for(j=1;j<ip;j++){ - t1+=t0; - is+=ido; - t2= -ido+t1; - for(k=0;k<l1;k++){ - idij=is-1; - t2+=ido; - t3=t2; - for(i=2;i<ido;i+=2){ - idij+=2; - t3+=2; - ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3]; - ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1]; - } - } - } - }else{ - - for(j=1;j<ip;j++){ - is+=ido; - idij=is-1; - t1+=t0; - t2=t1; - for(i=2;i<ido;i+=2){ - idij+=2; - t2+=2; - t3=t2; - for(k=0;k<l1;k++){ - ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3]; - ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1]; - t3+=ido; - } - } - } - } - - t1=0; - t2=ipp2*t0; - if(nbd<l1){ - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - for(i=2;i<ido;i+=2){ - t3+=2; - t4+=2; - t5=t3-ido; - t6=t4-ido; - for(k=0;k<l1;k++){ - t5+=ido; - t6+=ido; - c1[t5-1]=ch[t5-1]+ch[t6-1]; - c1[t6-1]=ch[t5]-ch[t6]; - c1[t5]=ch[t5]+ch[t6]; - c1[t6]=ch[t6-1]-ch[t5-1]; - } - } - } - }else{ - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - for(k=0;k<l1;k++){ - t5=t3; - t6=t4; - for(i=2;i<ido;i+=2){ - t5+=2; - t6+=2; - c1[t5-1]=ch[t5-1]+ch[t6-1]; - c1[t6-1]=ch[t5]-ch[t6]; - c1[t5]=ch[t5]+ch[t6]; - c1[t6]=ch[t6-1]-ch[t5-1]; - } - t3+=ido; - t4+=ido; - } - } - } - -L119: - for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik]; - - t1=0; - t2=ipp2*idl1; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1-ido; - t4=t2-ido; - for(k=0;k<l1;k++){ - t3+=ido; - t4+=ido; - c1[t3]=ch[t3]+ch[t4]; - c1[t4]=ch[t4]-ch[t3]; - } - } - - ar1=1.f; - ai1=0.f; - t1=0; - t2=ipp2*idl1; - t3=(ip-1)*idl1; - for(l=1;l<ipph;l++){ - t1+=idl1; - t2-=idl1; - ar1h=dcp*ar1-dsp*ai1; - ai1=dcp*ai1+dsp*ar1; - ar1=ar1h; - t4=t1; - t5=t2; - t6=t3; - t7=idl1; - - for(ik=0;ik<idl1;ik++){ - ch2[t4++]=c2[ik]+ar1*c2[t7++]; - ch2[t5++]=ai1*c2[t6++]; - } - - dc2=ar1; - ds2=ai1; - ar2=ar1; - ai2=ai1; - - t4=idl1; - t5=(ipp2-1)*idl1; - for(j=2;j<ipph;j++){ - t4+=idl1; - t5-=idl1; - - ar2h=dc2*ar2-ds2*ai2; - ai2=dc2*ai2+ds2*ar2; - ar2=ar2h; - - t6=t1; - t7=t2; - t8=t4; - t9=t5; - for(ik=0;ik<idl1;ik++){ - ch2[t6++]+=ar2*c2[t8++]; - ch2[t7++]+=ai2*c2[t9++]; - } - } - } - - t1=0; - for(j=1;j<ipph;j++){ - t1+=idl1; - t2=t1; - for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++]; - } - - if(ido<l1)goto L132; - - t1=0; - t2=0; - for(k=0;k<l1;k++){ - t3=t1; - t4=t2; - for(i=0;i<ido;i++)cc[t4++]=ch[t3++]; - t1+=ido; - t2+=t10; - } - - goto L135; - - L132: - for(i=0;i<ido;i++){ - t1=i; - t2=i; - for(k=0;k<l1;k++){ - cc[t2]=ch[t1]; - t1+=ido; - t2+=t10; - } - } - - L135: - t1=0; - t2=ido<<1; - t3=0; - t4=ipp2*t0; - for(j=1;j<ipph;j++){ - - t1+=t2; - t3+=t0; - t4-=t0; - - t5=t1; - t6=t3; - t7=t4; - - for(k=0;k<l1;k++){ - cc[t5-1]=ch[t6]; - cc[t5]=ch[t7]; - t5+=t10; - t6+=ido; - t7+=ido; - } - } - - if(ido==1)return; - if(nbd<l1)goto L141; - - t1=-ido; - t3=0; - t4=0; - t5=ipp2*t0; - for(j=1;j<ipph;j++){ - t1+=t2; - t3+=t2; - t4+=t0; - t5-=t0; - t6=t1; - t7=t3; - t8=t4; - t9=t5; - for(k=0;k<l1;k++){ - for(i=2;i<ido;i+=2){ - ic=idp2-i; - cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1]; - cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1]; - cc[i+t7]=ch[i+t8]+ch[i+t9]; - cc[ic+t6]=ch[i+t9]-ch[i+t8]; - } - t6+=t10; - t7+=t10; - t8+=ido; - t9+=ido; - } - } - return; - - L141: - - t1=-ido; - t3=0; - t4=0; - t5=ipp2*t0; - for(j=1;j<ipph;j++){ - t1+=t2; - t3+=t2; - t4+=t0; - t5-=t0; - for(i=2;i<ido;i+=2){ - t6=idp2+t1-i; - t7=i+t3; - t8=i+t4; - t9=i+t5; - for(k=0;k<l1;k++){ - cc[t7-1]=ch[t8-1]+ch[t9-1]; - cc[t6-1]=ch[t8-1]-ch[t9-1]; - cc[t7]=ch[t8]+ch[t9]; - cc[t6]=ch[t9]-ch[t8]; - t6+=t10; - t7+=t10; - t8+=ido; - t9+=ido; - } - } - } -} - -static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){ - int i,k1,l1,l2; - int na,kh,nf; - int ip,iw,ido,idl1,ix2,ix3; - - nf=ifac[1]; - na=1; - l2=n; - iw=n; - - for(k1=0;k1<nf;k1++){ - kh=nf-k1; - ip=ifac[kh+1]; - l1=l2/ip; - ido=n/l2; - idl1=ido*l1; - iw-=(ip-1)*ido; - na=1-na; - - if(ip!=4)goto L102; - - ix2=iw+ido; - ix3=ix2+ido; - if(na!=0) - dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1); - else - dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1); - goto L110; - - L102: - if(ip!=2)goto L104; - if(na!=0)goto L103; - - dradf2(ido,l1,c,ch,wa+iw-1); - goto L110; - - L103: - dradf2(ido,l1,ch,c,wa+iw-1); - goto L110; - - L104: - if(ido==1)na=1-na; - if(na!=0)goto L109; - - dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1); - na=1; - goto L110; - - L109: - dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1); - na=0; - - L110: - l2=l1; - } - - if(na==1)return; - - for(i=0;i<n;i++)c[i]=ch[i]; -} - -static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){ - int i,k,t0,t1,t2,t3,t4,t5,t6; - float ti2,tr2; - - t0=l1*ido; - - t1=0; - t2=0; - t3=(ido<<1)-1; - for(k=0;k<l1;k++){ - ch[t1]=cc[t2]+cc[t3+t2]; - ch[t1+t0]=cc[t2]-cc[t3+t2]; - t2=(t1+=ido)<<1; - } - - if(ido<2)return; - if(ido==2)goto L105; - - t1=0; - t2=0; - for(k=0;k<l1;k++){ - t3=t1; - t5=(t4=t2)+(ido<<1); - t6=t0+t1; - for(i=2;i<ido;i+=2){ - t3+=2; - t4+=2; - t5-=2; - t6+=2; - ch[t3-1]=cc[t4-1]+cc[t5-1]; - tr2=cc[t4-1]-cc[t5-1]; - ch[t3]=cc[t4]-cc[t5]; - ti2=cc[t4]+cc[t5]; - ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2; - ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2; - } - t2=(t1+=ido)<<1; - } - - if(ido%2==1)return; - -L105: - t1=ido-1; - t2=ido-1; - for(k=0;k<l1;k++){ - ch[t1]=cc[t2]+cc[t2]; - ch[t1+t0]=-(cc[t2+1]+cc[t2+1]); - t1+=ido; - t2+=ido<<1; - } -} - -static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1, - float *wa2){ - static float taur = -.5f; - static float taui = .8660254037844386f; - int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10; - float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2; - t0=l1*ido; - - t1=0; - t2=t0<<1; - t3=ido<<1; - t4=ido+(ido<<1); - t5=0; - for(k=0;k<l1;k++){ - tr2=cc[t3-1]+cc[t3-1]; - cr2=cc[t5]+(taur*tr2); - ch[t1]=cc[t5]+tr2; - ci3=taui*(cc[t3]+cc[t3]); - ch[t1+t0]=cr2-ci3; - ch[t1+t2]=cr2+ci3; - t1+=ido; - t3+=t4; - t5+=t4; - } - - if(ido==1)return; - - t1=0; - t3=ido<<1; - for(k=0;k<l1;k++){ - t7=t1+(t1<<1); - t6=(t5=t7+t3); - t8=t1; - t10=(t9=t1+t0)+t0; - - for(i=2;i<ido;i+=2){ - t5+=2; - t6-=2; - t7+=2; - t8+=2; - t9+=2; - t10+=2; - tr2=cc[t5-1]+cc[t6-1]; - cr2=cc[t7-1]+(taur*tr2); - ch[t8-1]=cc[t7-1]+tr2; - ti2=cc[t5]-cc[t6]; - ci2=cc[t7]+(taur*ti2); - ch[t8]=cc[t7]+ti2; - cr3=taui*(cc[t5-1]-cc[t6-1]); - ci3=taui*(cc[t5]+cc[t6]); - dr2=cr2-ci3; - dr3=cr2+ci3; - di2=ci2+cr3; - di3=ci2-cr3; - ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2; - ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2; - ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3; - ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3; - } - t1+=ido; - } -} - -static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1, - float *wa2,float *wa3){ - static float sqrt2=1.414213562373095f; - int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8; - float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4; - t0=l1*ido; - - t1=0; - t2=ido<<2; - t3=0; - t6=ido<<1; - for(k=0;k<l1;k++){ - t4=t3+t6; - t5=t1; - tr3=cc[t4-1]+cc[t4-1]; - tr4=cc[t4]+cc[t4]; - tr1=cc[t3]-cc[(t4+=t6)-1]; - tr2=cc[t3]+cc[t4-1]; - ch[t5]=tr2+tr3; - ch[t5+=t0]=tr1-tr4; - ch[t5+=t0]=tr2-tr3; - ch[t5+=t0]=tr1+tr4; - t1+=ido; - t3+=t2; - } - - if(ido<2)return; - if(ido==2)goto L105; - - t1=0; - for(k=0;k<l1;k++){ - t5=(t4=(t3=(t2=t1<<2)+t6))+t6; - t7=t1; - for(i=2;i<ido;i+=2){ - t2+=2; - t3+=2; - t4-=2; - t5-=2; - t7+=2; - ti1=cc[t2]+cc[t5]; - ti2=cc[t2]-cc[t5]; - ti3=cc[t3]-cc[t4]; - tr4=cc[t3]+cc[t4]; - tr1=cc[t2-1]-cc[t5-1]; - tr2=cc[t2-1]+cc[t5-1]; - ti4=cc[t3-1]-cc[t4-1]; - tr3=cc[t3-1]+cc[t4-1]; - ch[t7-1]=tr2+tr3; - cr3=tr2-tr3; - ch[t7]=ti2+ti3; - ci3=ti2-ti3; - cr2=tr1-tr4; - cr4=tr1+tr4; - ci2=ti1+ti4; - ci4=ti1-ti4; - - ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2; - ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2; - ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3; - ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3; - ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4; - ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4; - } - t1+=ido; - } - - if(ido%2 == 1)return; - - L105: - - t1=ido; - t2=ido<<2; - t3=ido-1; - t4=ido+(ido<<1); - for(k=0;k<l1;k++){ - t5=t3; - ti1=cc[t1]+cc[t4]; - ti2=cc[t4]-cc[t1]; - tr1=cc[t1-1]-cc[t4-1]; - tr2=cc[t1-1]+cc[t4-1]; - ch[t5]=tr2+tr2; - ch[t5+=t0]=sqrt2*(tr1-ti1); - ch[t5+=t0]=ti2+ti2; - ch[t5+=t0]=-sqrt2*(tr1+ti1); - - t3+=ido; - t1+=t2; - t4+=t2; - } -} - -static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1, - float *c2,float *ch,float *ch2,float *wa){ - static float tpi=6.283185307179586f; - int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10, - t11,t12; - float dc2,ai1,ai2,ar1,ar2,ds2; - int nbd; - float dcp,arg,dsp,ar1h,ar2h; - int ipp2; - - t10=ip*ido; - t0=l1*ido; - arg=tpi/(float)ip; - dcp=cos(arg); - dsp=sin(arg); - nbd=(ido-1)>>1; - ipp2=ip; - ipph=(ip+1)>>1; - if(ido<l1)goto L103; - - t1=0; - t2=0; - for(k=0;k<l1;k++){ - t3=t1; - t4=t2; - for(i=0;i<ido;i++){ - ch[t3]=cc[t4]; - t3++; - t4++; - } - t1+=ido; - t2+=t10; - } - goto L106; - - L103: - t1=0; - for(i=0;i<ido;i++){ - t2=t1; - t3=t1; - for(k=0;k<l1;k++){ - ch[t2]=cc[t3]; - t2+=ido; - t3+=t10; - } - t1++; - } - - L106: - t1=0; - t2=ipp2*t0; - t7=(t5=ido<<1); - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - t6=t5; - for(k=0;k<l1;k++){ - ch[t3]=cc[t6-1]+cc[t6-1]; - ch[t4]=cc[t6]+cc[t6]; - t3+=ido; - t4+=ido; - t6+=t10; - } - t5+=t7; - } - - if (ido == 1)goto L116; - if(nbd<l1)goto L112; - - t1=0; - t2=ipp2*t0; - t7=0; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - - t7+=(ido<<1); - t8=t7; - for(k=0;k<l1;k++){ - t5=t3; - t6=t4; - t9=t8; - t11=t8; - for(i=2;i<ido;i+=2){ - t5+=2; - t6+=2; - t9+=2; - t11-=2; - ch[t5-1]=cc[t9-1]+cc[t11-1]; - ch[t6-1]=cc[t9-1]-cc[t11-1]; - ch[t5]=cc[t9]-cc[t11]; - ch[t6]=cc[t9]+cc[t11]; - } - t3+=ido; - t4+=ido; - t8+=t10; - } - } - goto L116; - - L112: - t1=0; - t2=ipp2*t0; - t7=0; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - t7+=(ido<<1); - t8=t7; - t9=t7; - for(i=2;i<ido;i+=2){ - t3+=2; - t4+=2; - t8+=2; - t9-=2; - t5=t3; - t6=t4; - t11=t8; - t12=t9; - for(k=0;k<l1;k++){ - ch[t5-1]=cc[t11-1]+cc[t12-1]; - ch[t6-1]=cc[t11-1]-cc[t12-1]; - ch[t5]=cc[t11]-cc[t12]; - ch[t6]=cc[t11]+cc[t12]; - t5+=ido; - t6+=ido; - t11+=t10; - t12+=t10; - } - } - } - -L116: - ar1=1.f; - ai1=0.f; - t1=0; - t9=(t2=ipp2*idl1); - t3=(ip-1)*idl1; - for(l=1;l<ipph;l++){ - t1+=idl1; - t2-=idl1; - - ar1h=dcp*ar1-dsp*ai1; - ai1=dcp*ai1+dsp*ar1; - ar1=ar1h; - t4=t1; - t5=t2; - t6=0; - t7=idl1; - t8=t3; - for(ik=0;ik<idl1;ik++){ - c2[t4++]=ch2[t6++]+ar1*ch2[t7++]; - c2[t5++]=ai1*ch2[t8++]; - } - dc2=ar1; - ds2=ai1; - ar2=ar1; - ai2=ai1; - - t6=idl1; - t7=t9-idl1; - for(j=2;j<ipph;j++){ - t6+=idl1; - t7-=idl1; - ar2h=dc2*ar2-ds2*ai2; - ai2=dc2*ai2+ds2*ar2; - ar2=ar2h; - t4=t1; - t5=t2; - t11=t6; - t12=t7; - for(ik=0;ik<idl1;ik++){ - c2[t4++]+=ar2*ch2[t11++]; - c2[t5++]+=ai2*ch2[t12++]; - } - } - } - - t1=0; - for(j=1;j<ipph;j++){ - t1+=idl1; - t2=t1; - for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++]; - } - - t1=0; - t2=ipp2*t0; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - for(k=0;k<l1;k++){ - ch[t3]=c1[t3]-c1[t4]; - ch[t4]=c1[t3]+c1[t4]; - t3+=ido; - t4+=ido; - } - } - - if(ido==1)goto L132; - if(nbd<l1)goto L128; - - t1=0; - t2=ipp2*t0; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - for(k=0;k<l1;k++){ - t5=t3; - t6=t4; - for(i=2;i<ido;i+=2){ - t5+=2; - t6+=2; - ch[t5-1]=c1[t5-1]-c1[t6]; - ch[t6-1]=c1[t5-1]+c1[t6]; - ch[t5]=c1[t5]+c1[t6-1]; - ch[t6]=c1[t5]-c1[t6-1]; - } - t3+=ido; - t4+=ido; - } - } - goto L132; - - L128: - t1=0; - t2=ipp2*t0; - for(j=1;j<ipph;j++){ - t1+=t0; - t2-=t0; - t3=t1; - t4=t2; - for(i=2;i<ido;i+=2){ - t3+=2; - t4+=2; - t5=t3; - t6=t4; - for(k=0;k<l1;k++){ - ch[t5-1]=c1[t5-1]-c1[t6]; - ch[t6-1]=c1[t5-1]+c1[t6]; - ch[t5]=c1[t5]+c1[t6-1]; - ch[t6]=c1[t5]-c1[t6-1]; - t5+=ido; - t6+=ido; - } - } - } - -L132: - if(ido==1)return; - - for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik]; - - t1=0; - for(j=1;j<ip;j++){ - t2=(t1+=t0); - for(k=0;k<l1;k++){ - c1[t2]=ch[t2]; - t2+=ido; - } - } - - if(nbd>l1)goto L139; - - is= -ido-1; - t1=0; - for(j=1;j<ip;j++){ - is+=ido; - t1+=t0; - idij=is; - t2=t1; - for(i=2;i<ido;i+=2){ - t2+=2; - idij+=2; - t3=t2; - for(k=0;k<l1;k++){ - c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3]; - c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1]; - t3+=ido; - } - } - } - return; - - L139: - is= -ido-1; - t1=0; - for(j=1;j<ip;j++){ - is+=ido; - t1+=t0; - t2=t1; - for(k=0;k<l1;k++){ - idij=is; - t3=t2; - for(i=2;i<ido;i+=2){ - idij+=2; - t3+=2; - c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3]; - c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1]; - } - t2+=ido; - } - } -} - -static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){ - int i,k1,l1,l2; - int na; - int nf,ip,iw,ix2,ix3,ido,idl1; - - nf=ifac[1]; - na=0; - l1=1; - iw=1; - - for(k1=0;k1<nf;k1++){ - ip=ifac[k1 + 2]; - l2=ip*l1; - ido=n/l2; - idl1=ido*l1; - if(ip!=4)goto L103; - ix2=iw+ido; - ix3=ix2+ido; - - if(na!=0) - dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1); - else - dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1); - na=1-na; - goto L115; - - L103: - if(ip!=2)goto L106; - - if(na!=0) - dradb2(ido,l1,ch,c,wa+iw-1); - else - dradb2(ido,l1,c,ch,wa+iw-1); - na=1-na; - goto L115; - - L106: - if(ip!=3)goto L109; - - ix2=iw+ido; - if(na!=0) - dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1); - else - dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1); - na=1-na; - goto L115; - - L109: -/* The radix five case can be translated later..... */ -/* if(ip!=5)goto L112; - - ix2=iw+ido; - ix3=ix2+ido; - ix4=ix3+ido; - if(na!=0) - dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1); - else - dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1); - na=1-na; - goto L115; - - L112:*/ - if(na!=0) - dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1); - else - dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1); - if(ido==1)na=1-na; - - L115: - l1=l2; - iw+=(ip-1)*ido; - } - - if(na==0)return; - - for(i=0;i<n;i++)c[i]=ch[i]; -} - -void spx_drft_forward(struct drft_lookup *l,float *data){ - if(l->n==1)return; - drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void spx_drft_backward(struct drft_lookup *l,float *data){ - if (l->n==1)return; - drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void spx_drft_init(struct drft_lookup *l,int n) -{ - l->n=n; - l->trigcache=(float*)speex_alloc(3*n*sizeof(*l->trigcache)); - l->splitcache=(int*)speex_alloc(32*sizeof(*l->splitcache)); - fdrffti(n, l->trigcache, l->splitcache); -} - -void spx_drft_clear(struct drft_lookup *l) -{ - if(l) - { - if(l->trigcache) - speex_free(l->trigcache); - if(l->splitcache) - speex_free(l->splitcache); - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.h deleted file mode 100755 index 446e2f6..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/smallft.h +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: fft transform - last mod: $Id: smallft.h,v 1.3 2003/09/16 18:35:45 jm Exp $ - - ********************************************************************/ -/** - @file smallft.h - @brief Discrete Rotational Fourier Transform (DRFT) -*/ - -#ifndef _V_SMFT_H_ -#define _V_SMFT_H_ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** Discrete Rotational Fourier Transform lookup */ -struct drft_lookup{ - int n; - float *trigcache; - int *splitcache; -}; - -extern void spx_drft_forward(struct drft_lookup *l,float *data); -extern void spx_drft_backward(struct drft_lookup *l,float *data); -extern void spx_drft_init(struct drft_lookup *l,int n); -extern void spx_drft_clear(struct drft_lookup *l); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex.c deleted file mode 100755 index b425155..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex.c +++ /dev/null @@ -1,250 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: speex.c - - Basic Speex functions - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "modes.h" -#include <math.h> -#include "os_support.h" - -#ifndef NULL -#define NULL 0 -#endif - -#define MAX_IN_SAMPLES 640 - - - -EXPORT void *speex_encoder_init(const SpeexMode *mode) -{ - return mode->enc_init(mode); -} - -EXPORT void *speex_decoder_init(const SpeexMode *mode) -{ - return mode->dec_init(mode); -} - -EXPORT void speex_encoder_destroy(void *state) -{ - (*((SpeexMode**)state))->enc_destroy(state); -} - -EXPORT void speex_decoder_destroy(void *state) -{ - (*((SpeexMode**)state))->dec_destroy(state); -} - - - -int speex_encode_native(void *state, spx_word16_t *in, SpeexBits *bits) -{ - return (*((SpeexMode**)state))->enc(state, in, bits); -} - -int speex_decode_native(void *state, SpeexBits *bits, spx_word16_t *out) -{ - return (*((SpeexMode**)state))->dec(state, bits, out); -} - - - -#ifdef FIXED_POINT - -#ifndef DISABLE_FLOAT_API -EXPORT int speex_encode(void *state, float *in, SpeexBits *bits) -{ - int i; - spx_int32_t N; - spx_int16_t short_in[MAX_IN_SAMPLES]; - speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); - for (i=0;i<N;i++) - { - if (in[i]>32767.f) - short_in[i] = 32767; - else if (in[i]<-32768.f) - short_in[i] = -32768; - else - short_in[i] = (spx_int16_t)floor(.5+in[i]); - } - return (*((SpeexMode**)state))->enc(state, short_in, bits); -} -#endif /* #ifndef DISABLE_FLOAT_API */ - -EXPORT int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits) -{ - SpeexMode *mode; - mode = *(SpeexMode**)state; - return (mode)->enc(state, in, bits); -} - -#ifndef DISABLE_FLOAT_API -EXPORT int speex_decode(void *state, SpeexBits *bits, float *out) -{ - int i, ret; - spx_int32_t N; - spx_int16_t short_out[MAX_IN_SAMPLES]; - speex_decoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); - ret = (*((SpeexMode**)state))->dec(state, bits, short_out); - for (i=0;i<N;i++) - out[i] = short_out[i]; - return ret; -} -#endif /* #ifndef DISABLE_FLOAT_API */ - -EXPORT int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out) -{ - SpeexMode *mode = *(SpeexMode**)state; - return (mode)->dec(state, bits, out); -} - -#else - -EXPORT int speex_encode(void *state, float *in, SpeexBits *bits) -{ - return (*((SpeexMode**)state))->enc(state, in, bits); -} - -EXPORT int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits) -{ - int i; - spx_int32_t N; - float float_in[MAX_IN_SAMPLES]; - speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); - for (i=0;i<N;i++) - float_in[i] = in[i]; - return (*((SpeexMode**)state))->enc(state, float_in, bits); -} - -EXPORT int speex_decode(void *state, SpeexBits *bits, float *out) -{ - return (*((SpeexMode**)state))->dec(state, bits, out); -} - -EXPORT int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out) -{ - int i; - spx_int32_t N; - float float_out[MAX_IN_SAMPLES]; - int ret; - speex_decoder_ctl(state, SPEEX_GET_FRAME_SIZE, &N); - ret = (*((SpeexMode**)state))->dec(state, bits, float_out); - for (i=0;i<N;i++) - { - if (float_out[i]>32767.f) - out[i] = 32767; - else if (float_out[i]<-32768.f) - out[i] = -32768; - else - out[i] = (spx_int16_t)floor(.5+float_out[i]); - } - return ret; -} -#endif - - - -EXPORT int speex_encoder_ctl(void *state, int request, void *ptr) -{ - return (*((SpeexMode**)state))->enc_ctl(state, request, ptr); -} - -EXPORT int speex_decoder_ctl(void *state, int request, void *ptr) -{ - return (*((SpeexMode**)state))->dec_ctl(state, request, ptr); -} - - - -int nb_mode_query(const void *mode, int request, void *ptr) -{ - const SpeexNBMode *m = (const SpeexNBMode*)mode; - - switch (request) - { - case SPEEX_MODE_FRAME_SIZE: - *((int*)ptr)=m->frameSize; - break; - case SPEEX_SUBMODE_BITS_PER_FRAME: - if (*((int*)ptr)==0) - *((int*)ptr) = NB_SUBMODE_BITS+1; - else if (m->submodes[*((int*)ptr)]==NULL) - *((int*)ptr) = -1; - else - *((int*)ptr) = m->submodes[*((int*)ptr)]->bits_per_frame; - break; - default: - speex_warning_int("Unknown nb_mode_query request: ", request); - return -1; - } - return 0; -} - - - -EXPORT int speex_lib_ctl(int request, void *ptr) -{ - switch (request) - { - case SPEEX_LIB_GET_MAJOR_VERSION: - *((int*)ptr) = SPEEX_MAJOR_VERSION; - break; - case SPEEX_LIB_GET_MINOR_VERSION: - *((int*)ptr) = SPEEX_MINOR_VERSION; - break; - case SPEEX_LIB_GET_MICRO_VERSION: - *((int*)ptr) = SPEEX_MICRO_VERSION; - break; - case SPEEX_LIB_GET_EXTRA_VERSION: - *((const char**)ptr) = SPEEX_EXTRA_VERSION; - break; - case SPEEX_LIB_GET_VERSION_STRING: - *((const char**)ptr) = SPEEX_VERSION; - break; - /*case SPEEX_LIB_SET_ALLOC_FUNC: - break; - case SPEEX_LIB_GET_ALLOC_FUNC: - break; - case SPEEX_LIB_SET_FREE_FUNC: - break; - case SPEEX_LIB_GET_FREE_FUNC: - break;*/ - default: - speex_warning_int("Unknown wb_mode_query request: ", request); - return -1; - } - return 0; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex.h deleted file mode 100755 index ffb0714..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex.h +++ /dev/null @@ -1,424 +0,0 @@ -/* Copyright (C) 2002-2006 Jean-Marc Valin*/ -/** - @file speex.h - @brief Describes the different modes of the codec -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef SPEEX_H -#define SPEEX_H -/** @defgroup Codec Speex encoder and decoder - * This is the Speex codec itself. - * @{ - */ - -#include "speex_bits.h" -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Values allowed for *ctl() requests */ - -/** Set enhancement on/off (decoder only) */ -#define SPEEX_SET_ENH 0 -/** Get enhancement state (decoder only) */ -#define SPEEX_GET_ENH 1 - -/*Would be SPEEX_SET_FRAME_SIZE, but it's (currently) invalid*/ -/** Obtain frame size used by encoder/decoder */ -#define SPEEX_GET_FRAME_SIZE 3 - -/** Set quality value */ -#define SPEEX_SET_QUALITY 4 -/** Get current quality setting */ -/* #define SPEEX_GET_QUALITY 5 -- Doesn't make much sense, does it? */ - -/** Set sub-mode to use */ -#define SPEEX_SET_MODE 6 -/** Get current sub-mode in use */ -#define SPEEX_GET_MODE 7 - -/** Set low-band sub-mode to use (wideband only)*/ -#define SPEEX_SET_LOW_MODE 8 -/** Get current low-band mode in use (wideband only)*/ -#define SPEEX_GET_LOW_MODE 9 - -/** Set high-band sub-mode to use (wideband only)*/ -#define SPEEX_SET_HIGH_MODE 10 -/** Get current high-band mode in use (wideband only)*/ -#define SPEEX_GET_HIGH_MODE 11 - -/** Set VBR on (1) or off (0) */ -#define SPEEX_SET_VBR 12 -/** Get VBR status (1 for on, 0 for off) */ -#define SPEEX_GET_VBR 13 - -/** Set quality value for VBR encoding (0-10) */ -#define SPEEX_SET_VBR_QUALITY 14 -/** Get current quality value for VBR encoding (0-10) */ -#define SPEEX_GET_VBR_QUALITY 15 - -/** Set complexity of the encoder (0-10) */ -#define SPEEX_SET_COMPLEXITY 16 -/** Get current complexity of the encoder (0-10) */ -#define SPEEX_GET_COMPLEXITY 17 - -/** Set bit-rate used by the encoder (or lower) */ -#define SPEEX_SET_BITRATE 18 -/** Get current bit-rate used by the encoder or decoder */ -#define SPEEX_GET_BITRATE 19 - -/** Define a handler function for in-band Speex request*/ -#define SPEEX_SET_HANDLER 20 - -/** Define a handler function for in-band user-defined request*/ -#define SPEEX_SET_USER_HANDLER 22 - -/** Set sampling rate used in bit-rate computation */ -#define SPEEX_SET_SAMPLING_RATE 24 -/** Get sampling rate used in bit-rate computation */ -#define SPEEX_GET_SAMPLING_RATE 25 - -/** Reset the encoder/decoder memories to zero*/ -#define SPEEX_RESET_STATE 26 - -/** Get VBR info (mostly used internally) */ -#define SPEEX_GET_RELATIVE_QUALITY 29 - -/** Set VAD status (1 for on, 0 for off) */ -#define SPEEX_SET_VAD 30 - -/** Get VAD status (1 for on, 0 for off) */ -#define SPEEX_GET_VAD 31 - -/** Set Average Bit-Rate (ABR) to n bits per seconds */ -#define SPEEX_SET_ABR 32 -/** Get Average Bit-Rate (ABR) setting (in bps) */ -#define SPEEX_GET_ABR 33 - -/** Set DTX status (1 for on, 0 for off) */ -#define SPEEX_SET_DTX 34 -/** Get DTX status (1 for on, 0 for off) */ -#define SPEEX_GET_DTX 35 - -/** Set submode encoding in each frame (1 for yes, 0 for no, setting to no breaks the standard) */ -#define SPEEX_SET_SUBMODE_ENCODING 36 -/** Get submode encoding in each frame */ -#define SPEEX_GET_SUBMODE_ENCODING 37 - -/*#define SPEEX_SET_LOOKAHEAD 38*/ -/** Returns the lookahead used by Speex */ -#define SPEEX_GET_LOOKAHEAD 39 - -/** Sets tuning for packet-loss concealment (expected loss rate) */ -#define SPEEX_SET_PLC_TUNING 40 -/** Gets tuning for PLC */ -#define SPEEX_GET_PLC_TUNING 41 - -/** Sets the max bit-rate allowed in VBR mode */ -#define SPEEX_SET_VBR_MAX_BITRATE 42 -/** Gets the max bit-rate allowed in VBR mode */ -#define SPEEX_GET_VBR_MAX_BITRATE 43 - -/** Turn on/off input/output high-pass filtering */ -#define SPEEX_SET_HIGHPASS 44 -/** Get status of input/output high-pass filtering */ -#define SPEEX_GET_HIGHPASS 45 - -/** Get "activity level" of the last decoded frame, i.e. - how much damage we cause if we remove the frame */ -#define SPEEX_GET_ACTIVITY 47 - - -/* Preserving compatibility:*/ -/** Equivalent to SPEEX_SET_ENH */ -#define SPEEX_SET_PF 0 -/** Equivalent to SPEEX_GET_ENH */ -#define SPEEX_GET_PF 1 - - - - -/* Values allowed for mode queries */ -/** Query the frame size of a mode */ -#define SPEEX_MODE_FRAME_SIZE 0 - -/** Query the size of an encoded frame for a particular sub-mode */ -#define SPEEX_SUBMODE_BITS_PER_FRAME 1 - - - -/** Get major Speex version */ -#define SPEEX_LIB_GET_MAJOR_VERSION 1 -/** Get minor Speex version */ -#define SPEEX_LIB_GET_MINOR_VERSION 3 -/** Get micro Speex version */ -#define SPEEX_LIB_GET_MICRO_VERSION 5 -/** Get extra Speex version */ -#define SPEEX_LIB_GET_EXTRA_VERSION 7 -/** Get Speex version string */ -#define SPEEX_LIB_GET_VERSION_STRING 9 - -/*#define SPEEX_LIB_SET_ALLOC_FUNC 10 -#define SPEEX_LIB_GET_ALLOC_FUNC 11 -#define SPEEX_LIB_SET_FREE_FUNC 12 -#define SPEEX_LIB_GET_FREE_FUNC 13 - -#define SPEEX_LIB_SET_WARNING_FUNC 14 -#define SPEEX_LIB_GET_WARNING_FUNC 15 -#define SPEEX_LIB_SET_ERROR_FUNC 16 -#define SPEEX_LIB_GET_ERROR_FUNC 17 -*/ - -/** Number of defined modes in Speex */ -#define SPEEX_NB_MODES 3 - -/** modeID for the defined narrowband mode */ -#define SPEEX_MODEID_NB 0 - -/** modeID for the defined wideband mode */ -#define SPEEX_MODEID_WB 1 - -/** modeID for the defined ultra-wideband mode */ -#define SPEEX_MODEID_UWB 2 - -struct SpeexMode; - - -/* Prototypes for mode function pointers */ - -/** Encoder state initialization function */ -typedef void *(*encoder_init_func)(const struct SpeexMode *mode); - -/** Encoder state destruction function */ -typedef void (*encoder_destroy_func)(void *st); - -/** Main encoding function */ -typedef int (*encode_func)(void *state, void *in, SpeexBits *bits); - -/** Function for controlling the encoder options */ -typedef int (*encoder_ctl_func)(void *state, int request, void *ptr); - -/** Decoder state initialization function */ -typedef void *(*decoder_init_func)(const struct SpeexMode *mode); - -/** Decoder state destruction function */ -typedef void (*decoder_destroy_func)(void *st); - -/** Main decoding function */ -typedef int (*decode_func)(void *state, SpeexBits *bits, void *out); - -/** Function for controlling the decoder options */ -typedef int (*decoder_ctl_func)(void *state, int request, void *ptr); - - -/** Query function for a mode */ -typedef int (*mode_query_func)(const void *mode, int request, void *ptr); - -/** Struct defining a Speex mode */ -typedef struct SpeexMode { - /** Pointer to the low-level mode data */ - const void *mode; - - /** Pointer to the mode query function */ - mode_query_func query; - - /** The name of the mode (you should not rely on this to identify the mode)*/ - const char *modeName; - - /**ID of the mode*/ - int modeID; - - /**Version number of the bitstream (incremented every time we break - bitstream compatibility*/ - int bitstream_version; - - /** Pointer to encoder initialization function */ - encoder_init_func enc_init; - - /** Pointer to encoder destruction function */ - encoder_destroy_func enc_destroy; - - /** Pointer to frame encoding function */ - encode_func enc; - - /** Pointer to decoder initialization function */ - decoder_init_func dec_init; - - /** Pointer to decoder destruction function */ - decoder_destroy_func dec_destroy; - - /** Pointer to frame decoding function */ - decode_func dec; - - /** ioctl-like requests for encoder */ - encoder_ctl_func enc_ctl; - - /** ioctl-like requests for decoder */ - decoder_ctl_func dec_ctl; - -} SpeexMode; - -/** - * Returns a handle to a newly created Speex encoder state structure. For now, - * the "mode" argument can be &nb_mode or &wb_mode . In the future, more modes - * may be added. Note that for now if you have more than one channels to - * encode, you need one state per channel. - * - * @param mode The mode to use (either speex_nb_mode or speex_wb.mode) - * @return A newly created encoder state or NULL if state allocation fails - */ -void *speex_encoder_init(const SpeexMode *mode); - -/** Frees all resources associated to an existing Speex encoder state. - * @param state Encoder state to be destroyed */ -void speex_encoder_destroy(void *state); - -/** Uses an existing encoder state to encode one frame of speech pointed to by - "in". The encoded bit-stream is saved in "bits". - @param state Encoder state - @param in Frame that will be encoded with a +-2^15 range. This data MAY be - overwritten by the encoder and should be considered uninitialised - after the call. - @param bits Bit-stream where the data will be written - @return 0 if frame needs not be transmitted (DTX only), 1 otherwise - */ -int speex_encode(void *state, float *in, SpeexBits *bits); - -/** Uses an existing encoder state to encode one frame of speech pointed to by - "in". The encoded bit-stream is saved in "bits". - @param state Encoder state - @param in Frame that will be encoded with a +-2^15 range - @param bits Bit-stream where the data will be written - @return 0 if frame needs not be transmitted (DTX only), 1 otherwise - */ -int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits); - -/** Used like the ioctl function to control the encoder parameters - * - * @param state Encoder state - * @param request ioctl-type request (one of the SPEEX_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown, -2 for invalid parameter - */ -int speex_encoder_ctl(void *state, int request, void *ptr); - - -/** Returns a handle to a newly created decoder state structure. For now, - * the mode argument can be &nb_mode or &wb_mode . In the future, more modes - * may be added. Note that for now if you have more than one channels to - * decode, you need one state per channel. - * - * @param mode Speex mode (one of speex_nb_mode or speex_wb_mode) - * @return A newly created decoder state or NULL if state allocation fails - */ -void *speex_decoder_init(const SpeexMode *mode); - -/** Frees all resources associated to an existing decoder state. - * - * @param state State to be destroyed - */ -void speex_decoder_destroy(void *state); - -/** Uses an existing decoder state to decode one frame of speech from - * bit-stream bits. The output speech is saved written to out. - * - * @param state Decoder state - * @param bits Bit-stream from which to decode the frame (NULL if the packet was lost) - * @param out Where to write the decoded frame - * @return return status (0 for no error, -1 for end of stream, -2 corrupt stream) - */ -int speex_decode(void *state, SpeexBits *bits, float *out); - -/** Uses an existing decoder state to decode one frame of speech from - * bit-stream bits. The output speech is saved written to out. - * - * @param state Decoder state - * @param bits Bit-stream from which to decode the frame (NULL if the packet was lost) - * @param out Where to write the decoded frame - * @return return status (0 for no error, -1 for end of stream, -2 corrupt stream) - */ -int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out); - -/** Used like the ioctl function to control the encoder parameters - * - * @param state Decoder state - * @param request ioctl-type request (one of the SPEEX_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown, -2 for invalid parameter - */ -int speex_decoder_ctl(void *state, int request, void *ptr); - - -/** Query function for mode information - * - * @param mode Speex mode - * @param request ioctl-type request (one of the SPEEX_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown, -2 for invalid parameter - */ -int speex_mode_query(const SpeexMode *mode, int request, void *ptr); - -/** Functions for controlling the behavior of libspeex - * @param request ioctl-type request (one of the SPEEX_LIB_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown, -2 for invalid parameter - */ -int speex_lib_ctl(int request, void *ptr); - -/** Default narrowband mode */ -extern const SpeexMode speex_nb_mode; - -/** Default wideband mode */ -extern const SpeexMode speex_wb_mode; - -/** Default "ultra-wideband" mode */ -extern const SpeexMode speex_uwb_mode; - -/** List of all modes available */ -extern const SpeexMode * const speex_mode_list[SPEEX_NB_MODES]; - -/** Obtain one of the modes available */ -const SpeexMode * speex_lib_get_mode (int mode); - -#ifndef WIN32 -/* We actually override the function in the narrowband case so that we can avoid linking in the wideband stuff */ -#define speex_lib_get_mode(mode) ((mode)==SPEEX_MODEID_NB ? &speex_nb_mode : speex_lib_get_mode (mode)) -#endif - -#ifdef __cplusplus -} -#endif - -/** @}*/ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_bits.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_bits.h deleted file mode 100755 index a26fb4c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_bits.h +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file speex_bits.h - @brief Handles bit packing/unpacking -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef BITS_H -#define BITS_H -/** @defgroup SpeexBits SpeexBits: Bit-stream manipulations - * This is the structure that holds the bit-stream when encoding or decoding - * with Speex. It allows some manipulations as well. - * @{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** Bit-packing data structure representing (part of) a bit-stream. */ -typedef struct SpeexBits { - char *chars; /**< "raw" data */ - int nbBits; /**< Total number of bits stored in the stream*/ - int charPtr; /**< Position of the byte "cursor" */ - int bitPtr; /**< Position of the bit "cursor" within the current char */ - int owner; /**< Does the struct "own" the "raw" buffer (member "chars") */ - int overflow;/**< Set to one if we try to read past the valid data */ - int buf_size;/**< Allocated size for buffer */ - int reserved1; /**< Reserved for future use */ - void *reserved2; /**< Reserved for future use */ -} SpeexBits; - -/** Initializes and allocates resources for a SpeexBits struct */ -void speex_bits_init(SpeexBits *bits); - -/** Initializes SpeexBits struct using a pre-allocated buffer*/ -void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size); - -/** Sets the bits in a SpeexBits struct to use data from an existing buffer (for decoding without copying data) */ -void speex_bits_set_bit_buffer(SpeexBits *bits, void *buff, int buf_size); - -/** Frees all resources associated to a SpeexBits struct. Right now this does nothing since no resources are allocated, but this could change in the future.*/ -void speex_bits_destroy(SpeexBits *bits); - -/** Resets bits to initial value (just after initialization, erasing content)*/ -void speex_bits_reset(SpeexBits *bits); - -/** Rewind the bit-stream to the beginning (ready for read) without erasing the content */ -void speex_bits_rewind(SpeexBits *bits); - -/** Initializes the bit-stream from the data in an area of memory */ -void speex_bits_read_from(SpeexBits *bits, char *bytes, int len); - -/** Append bytes to the bit-stream - * - * @param bits Bit-stream to operate on - * @param bytes pointer to the bytes what will be appended - * @param len Number of bytes of append - */ -void speex_bits_read_whole_bytes(SpeexBits *bits, char *bytes, int len); - -/** Write the content of a bit-stream to an area of memory - * - * @param bits Bit-stream to operate on - * @param bytes Memory location where to write the bits - * @param max_len Maximum number of bytes to write (i.e. size of the "bytes" buffer) - * @return Number of bytes written to the "bytes" buffer -*/ -int speex_bits_write(SpeexBits *bits, char *bytes, int max_len); - -/** Like speex_bits_write, but writes only the complete bytes in the stream. Also removes the written bytes from the stream */ -int speex_bits_write_whole_bytes(SpeexBits *bits, char *bytes, int max_len); - -/** Append bits to the bit-stream - * @param bits Bit-stream to operate on - * @param data Value to append as integer - * @param nbBits number of bits to consider in "data" - */ -void speex_bits_pack(SpeexBits *bits, int data, int nbBits); - -/** Interpret the next bits in the bit-stream as a signed integer - * - * @param bits Bit-stream to operate on - * @param nbBits Number of bits to interpret - * @return A signed integer represented by the bits read - */ -int speex_bits_unpack_signed(SpeexBits *bits, int nbBits); - -/** Interpret the next bits in the bit-stream as an unsigned integer - * - * @param bits Bit-stream to operate on - * @param nbBits Number of bits to interpret - * @return An unsigned integer represented by the bits read - */ -unsigned int speex_bits_unpack_unsigned(SpeexBits *bits, int nbBits); - -/** Returns the number of bytes in the bit-stream, including the last one even if it is not "full" - * - * @param bits Bit-stream to operate on - * @return Number of bytes in the stream - */ -int speex_bits_nbytes(SpeexBits *bits); - -/** Same as speex_bits_unpack_unsigned, but without modifying the cursor position - * - * @param bits Bit-stream to operate on - * @param nbBits Number of bits to look for - * @return Value of the bits peeked, interpreted as unsigned - */ -unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits); - -/** Get the value of the next bit in the stream, without modifying the - * "cursor" position - * - * @param bits Bit-stream to operate on - * @return Value of the bit peeked (one bit only) - */ -int speex_bits_peek(SpeexBits *bits); - -/** Advances the position of the "bit cursor" in the stream - * - * @param bits Bit-stream to operate on - * @param n Number of bits to advance - */ -void speex_bits_advance(SpeexBits *bits, int n); - -/** Returns the number of bits remaining to be read in a stream - * - * @param bits Bit-stream to operate on - * @return Number of bits that can still be read from the stream - */ -int speex_bits_remaining(SpeexBits *bits); - -/** Insert a terminator so that the data can be sent as a packet while auto-detecting - * the number of frames in each packet - * - * @param bits Bit-stream to operate on - */ -void speex_bits_insert_terminator(SpeexBits *bits); - -#ifdef __cplusplus -} -#endif - -/* @} */ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_buffer.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_buffer.h deleted file mode 100755 index bceae3f..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_buffer.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2007 Jean-Marc Valin - - File: speex_buffer.h - This is a very simple ring buffer implementation. It is not thread-safe - so you need to do your own locking. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SPEEX_BUFFER_H -#define SPEEX_BUFFER_H - -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct SpeexBuffer_; -typedef struct SpeexBuffer_ SpeexBuffer; - -SpeexBuffer *speex_buffer_init(int size); - -void speex_buffer_destroy(SpeexBuffer *st); - -int speex_buffer_write(SpeexBuffer *st, void *data, int len); - -int speex_buffer_writezeros(SpeexBuffer *st, int len); - -int speex_buffer_read(SpeexBuffer *st, void *data, int len); - -int speex_buffer_get_available(SpeexBuffer *st); - -int speex_buffer_resize(SpeexBuffer *st, int len); - -#ifdef __cplusplus -} -#endif - -#endif - - - - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_callbacks.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_callbacks.h deleted file mode 100755 index 6f450b3..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_callbacks.h +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin*/ -/** - @file speex_callbacks.h - @brief Describes callback handling and in-band signalling -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef SPEEX_CALLBACKS_H -#define SPEEX_CALLBACKS_H -/** @defgroup SpeexCallbacks Various definitions for Speex callbacks supported by the decoder. - * @{ - */ - -#include "speex.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Total number of callbacks */ -#define SPEEX_MAX_CALLBACKS 16 - -/* Describes all the in-band requests */ - -/*These are 1-bit requests*/ -/** Request for perceptual enhancement (1 for on, 0 for off) */ -#define SPEEX_INBAND_ENH_REQUEST 0 -/** Reserved */ -#define SPEEX_INBAND_RESERVED1 1 - -/*These are 4-bit requests*/ -/** Request for a mode change */ -#define SPEEX_INBAND_MODE_REQUEST 2 -/** Request for a low mode change */ -#define SPEEX_INBAND_LOW_MODE_REQUEST 3 -/** Request for a high mode change */ -#define SPEEX_INBAND_HIGH_MODE_REQUEST 4 -/** Request for VBR (1 on, 0 off) */ -#define SPEEX_INBAND_VBR_QUALITY_REQUEST 5 -/** Request to be sent acknowledge */ -#define SPEEX_INBAND_ACKNOWLEDGE_REQUEST 6 -/** Request for VBR (1 for on, 0 for off) */ -#define SPEEX_INBAND_VBR_REQUEST 7 - -/*These are 8-bit requests*/ -/** Send a character in-band */ -#define SPEEX_INBAND_CHAR 8 -/** Intensity stereo information */ -#define SPEEX_INBAND_STEREO 9 - -/*These are 16-bit requests*/ -/** Transmit max bit-rate allowed */ -#define SPEEX_INBAND_MAX_BITRATE 10 - -/*These are 32-bit requests*/ -/** Acknowledge packet reception */ -#define SPEEX_INBAND_ACKNOWLEDGE 12 - -/** Callback function type */ -typedef int (*speex_callback_func)(SpeexBits *bits, void *state, void *data); - -/** Callback information */ -typedef struct SpeexCallback { - int callback_id; /**< ID associated to the callback */ - speex_callback_func func; /**< Callback handler function */ - void *data; /**< Data that will be sent to the handler */ - void *reserved1; /**< Reserved for future use */ - int reserved2; /**< Reserved for future use */ -} SpeexCallback; - -/** Handle in-band request */ -int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state); - -/** Standard handler for mode request (change mode, no questions asked) */ -int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data); - -/** Standard handler for high mode request (change high mode, no questions asked) */ -int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data); - -/** Standard handler for in-band characters (write to stderr) */ -int speex_std_char_handler(SpeexBits *bits, void *state, void *data); - -/** Default handler for user-defined requests: in this case, just ignore */ -int speex_default_user_handler(SpeexBits *bits, void *state, void *data); - - - -/** Standard handler for low mode request (change low mode, no questions asked) */ -int speex_std_low_mode_request_handler(SpeexBits *bits, void *state, void *data); - -/** Standard handler for VBR request (Set VBR, no questions asked) */ -int speex_std_vbr_request_handler(SpeexBits *bits, void *state, void *data); - -/** Standard handler for enhancer request (Turn enhancer on/off, no questions asked) */ -int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data); - -/** Standard handler for VBR quality request (Set VBR quality, no questions asked) */ -int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data); - - -#ifdef __cplusplus -} -#endif - -/** @} */ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h deleted file mode 100755 index bd54854..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __SPEEX_TYPES_H__ -#define __SPEEX_TYPES_H__ - -/* these are filled in by configure */ -typedef short spx_int16_t; -typedef unsigned short spx_uint16_t; -typedef int spx_int32_t; -typedef unsigned int spx_uint32_t; - -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h.in b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h.in deleted file mode 100755 index 3fab2ae..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_config_types.h.in +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __SPEEX_TYPES_H__ -#define __SPEEX_TYPES_H__ - -/* these are filled in by configure */ -typedef @SIZE16@ spx_int16_t; -typedef unsigned @SIZE16@ spx_uint16_t; -typedef @SIZE32@ spx_int32_t; -typedef unsigned @SIZE32@ spx_uint32_t; - -#endif - diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_echo.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_echo.h deleted file mode 100755 index d852928..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_echo.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) Jean-Marc Valin */ -/** - @file speex_echo.h - @brief Echo cancellation -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SPEEX_ECHO_H -#define SPEEX_ECHO_H -/** @defgroup SpeexEchoState SpeexEchoState: Acoustic echo canceller - * This is the acoustic echo canceller module. - * @{ - */ -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Obtain frame size used by the AEC */ -#define SPEEX_ECHO_GET_FRAME_SIZE 3 - -/** Set sampling rate */ -#define SPEEX_ECHO_SET_SAMPLING_RATE 24 -/** Get sampling rate */ -#define SPEEX_ECHO_GET_SAMPLING_RATE 25 - -/* Can't set window sizes */ -/** Get size of impulse response (int32) */ -#define SPEEX_ECHO_GET_IMPULSE_RESPONSE_SIZE 27 - -/* Can't set window content */ -/** Get impulse response (int32[]) */ -#define SPEEX_ECHO_GET_IMPULSE_RESPONSE 29 - -/** Internal echo canceller state. Should never be accessed directly. */ -struct SpeexEchoState_; - -/** @class SpeexEchoState - * This holds the state of the echo canceller. You need one per channel. -*/ - -/** Internal echo canceller state. Should never be accessed directly. */ -typedef struct SpeexEchoState_ SpeexEchoState; - -/** Creates a new echo canceller state - * @param frame_size Number of samples to process at one time (should correspond to 10-20 ms) - * @param filter_length Number of samples of echo to cancel (should generally correspond to 100-500 ms) - * @return Newly-created echo canceller state - */ -SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length); - -/** Creates a new multi-channel echo canceller state - * @param frame_size Number of samples to process at one time (should correspond to 10-20 ms) - * @param filter_length Number of samples of echo to cancel (should generally correspond to 100-500 ms) - * @param nb_mic Number of microphone channels - * @param nb_speakers Number of speaker channels - * @return Newly-created echo canceller state - */ -SpeexEchoState *speex_echo_state_init_mc(int frame_size, int filter_length, int nb_mic, int nb_speakers); - -/** Destroys an echo canceller state - * @param st Echo canceller state -*/ -void speex_echo_state_destroy(SpeexEchoState *st); - -/** Performs echo cancellation a frame, based on the audio sent to the speaker (no delay is added - * to playback in this form) - * - * @param st Echo canceller state - * @param rec Signal from the microphone (near end + far end echo) - * @param play Signal played to the speaker (received from far end) - * @param out Returns near-end signal with echo removed - */ -void speex_echo_cancellation(SpeexEchoState *st, const spx_int16_t *rec, const spx_int16_t *play, spx_int16_t *out); - -/** Performs echo cancellation a frame (deprecated) */ -void speex_echo_cancel(SpeexEchoState *st, const spx_int16_t *rec, const spx_int16_t *play, spx_int16_t *out, spx_int32_t *Yout); - -/** Perform echo cancellation using internal playback buffer, which is delayed by two frames - * to account for the delay introduced by most soundcards (but it could be off!) - * @param st Echo canceller state - * @param rec Signal from the microphone (near end + far end echo) - * @param out Returns near-end signal with echo removed -*/ -void speex_echo_capture(SpeexEchoState *st, const spx_int16_t *rec, spx_int16_t *out); - -/** Let the echo canceller know that a frame was just queued to the soundcard - * @param st Echo canceller state - * @param play Signal played to the speaker (received from far end) -*/ -void speex_echo_playback(SpeexEchoState *st, const spx_int16_t *play); - -/** Reset the echo canceller to its original state - * @param st Echo canceller state - */ -void speex_echo_state_reset(SpeexEchoState *st); - -/** Used like the ioctl function to control the echo canceller parameters - * - * @param st Echo canceller state - * @param request ioctl-type request (one of the SPEEX_ECHO_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown - */ -int speex_echo_ctl(SpeexEchoState *st, int request, void *ptr); - - - -struct SpeexDecorrState_; - -typedef struct SpeexDecorrState_ SpeexDecorrState; - - -/** Create a state for the channel decorrelation algorithm - This is useful for multi-channel echo cancellation only - * @param rate Sampling rate - * @param channels Number of channels (it's a bit pointless if you don't have at least 2) - * @param frame_size Size of the frame to process at ones (counting samples *per* channel) -*/ -SpeexDecorrState *speex_decorrelate_new(int rate, int channels, int frame_size); - -/** Remove correlation between the channels by modifying the phase and possibly - adding noise in a way that is not (or little) perceptible. - * @param st Decorrelator state - * @param in Input audio in interleaved format - * @param out Result of the decorrelation (out *may* alias in) - * @param strength How much alteration of the audio to apply from 0 to 100. -*/ -void speex_decorrelate(SpeexDecorrState *st, const spx_int16_t *in, spx_int16_t *out, int strength); - -/** Destroy a Decorrelation state - * @param st State to destroy -*/ -void speex_decorrelate_destroy(SpeexDecorrState *st); - - -#ifdef __cplusplus -} -#endif - - -/** @}*/ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_header.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_header.h deleted file mode 100755 index f8e36db..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_header.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file speex_header.h - @brief Describes the Speex header -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - - -#ifndef SPEEX_HEADER_H -#define SPEEX_HEADER_H -/** @defgroup SpeexHeader SpeexHeader: Makes it easy to write/parse an Ogg/Speex header - * This is the Speex header for the Ogg encapsulation. You don't need that if you just use RTP. - * @{ - */ - -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct SpeexMode; - -/** Length of the Speex header identifier */ -#define SPEEX_HEADER_STRING_LENGTH 8 - -/** Maximum number of characters for encoding the Speex version number in the header */ -#define SPEEX_HEADER_VERSION_LENGTH 20 - -/** Speex header info for file-based formats */ -typedef struct SpeexHeader { - char speex_string[SPEEX_HEADER_STRING_LENGTH]; /**< Identifies a Speex bit-stream, always set to "Speex " */ - char speex_version[SPEEX_HEADER_VERSION_LENGTH]; /**< Speex version */ - spx_int32_t speex_version_id; /**< Version for Speex (for checking compatibility) */ - spx_int32_t header_size; /**< Total size of the header ( sizeof(SpeexHeader) ) */ - spx_int32_t rate; /**< Sampling rate used */ - spx_int32_t mode; /**< Mode used (0 for narrowband, 1 for wideband) */ - spx_int32_t mode_bitstream_version; /**< Version ID of the bit-stream */ - spx_int32_t nb_channels; /**< Number of channels encoded */ - spx_int32_t bitrate; /**< Bit-rate used */ - spx_int32_t frame_size; /**< Size of frames */ - spx_int32_t vbr; /**< 1 for a VBR encoding, 0 otherwise */ - spx_int32_t frames_per_packet; /**< Number of frames stored per Ogg packet */ - spx_int32_t extra_headers; /**< Number of additional headers after the comments */ - spx_int32_t reserved1; /**< Reserved for future use, must be zero */ - spx_int32_t reserved2; /**< Reserved for future use, must be zero */ -} SpeexHeader; - -/** Initializes a SpeexHeader using basic information */ -void speex_init_header(SpeexHeader *header, int rate, int nb_channels, const struct SpeexMode *m); - -/** Creates the header packet from the header itself (mostly involves endianness conversion) */ -char *speex_header_to_packet(SpeexHeader *header, int *size); - -/** Creates a SpeexHeader from a packet */ -SpeexHeader *speex_packet_to_header(char *packet, int size); - -/** Frees the memory allocated by either speex_header_to_packet() or speex_packet_to_header() */ -void speex_header_free(void *ptr); - -#ifdef __cplusplus -} -#endif - -/** @} */ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_jitter.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_jitter.h deleted file mode 100755 index 03bac15..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_jitter.h +++ /dev/null @@ -1,197 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file speex_jitter.h - @brief Adaptive jitter buffer for Speex -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef SPEEX_JITTER_H -#define SPEEX_JITTER_H -/** @defgroup JitterBuffer JitterBuffer: Adaptive jitter buffer - * This is the jitter buffer that reorders UDP/RTP packets and adjusts the buffer size - * to maintain good quality and low latency. - * @{ - */ - -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Generic adaptive jitter buffer state */ -struct JitterBuffer_; - -/** Generic adaptive jitter buffer state */ -typedef struct JitterBuffer_ JitterBuffer; - -/** Definition of an incoming packet */ -typedef struct _JitterBufferPacket JitterBufferPacket; - -/** Definition of an incoming packet */ -struct _JitterBufferPacket { - char *data; /**< Data bytes contained in the packet */ - spx_uint32_t len; /**< Length of the packet in bytes */ - spx_uint32_t timestamp; /**< Timestamp for the packet */ - spx_uint32_t span; /**< Time covered by the packet (same units as timestamp) */ - spx_uint16_t sequence; /**< RTP Sequence number if available (0 otherwise) */ - spx_uint32_t user_data; /**< Put whatever data you like here (it's ignored by the jitter buffer) */ -}; - -/** Packet has been retrieved */ -#define JITTER_BUFFER_OK 0 -/** Packet is lost or is late */ -#define JITTER_BUFFER_MISSING 1 -/** A "fake" packet is meant to be inserted here to increase buffering */ -#define JITTER_BUFFER_INSERTION 2 -/** There was an error in the jitter buffer */ -#define JITTER_BUFFER_INTERNAL_ERROR -1 -/** Invalid argument */ -#define JITTER_BUFFER_BAD_ARGUMENT -2 - - -/** Set minimum amount of extra buffering required (margin) */ -#define JITTER_BUFFER_SET_MARGIN 0 -/** Get minimum amount of extra buffering required (margin) */ -#define JITTER_BUFFER_GET_MARGIN 1 -/* JITTER_BUFFER_SET_AVAILABLE_COUNT wouldn't make sense */ - -/** Get the amount of available packets currently buffered */ -#define JITTER_BUFFER_GET_AVAILABLE_COUNT 3 -/** Included because of an early misspelling (will remove in next release) */ -#define JITTER_BUFFER_GET_AVALIABLE_COUNT 3 - -/** Assign a function to destroy unused packet. When setting that, the jitter - buffer no longer copies packet data. */ -#define JITTER_BUFFER_SET_DESTROY_CALLBACK 4 -/** */ -#define JITTER_BUFFER_GET_DESTROY_CALLBACK 5 - -/** Tell the jitter buffer to only adjust the delay in multiples of the step parameter provided */ -#define JITTER_BUFFER_SET_DELAY_STEP 6 -/** */ -#define JITTER_BUFFER_GET_DELAY_STEP 7 - -/** Tell the jitter buffer to only do concealment in multiples of the size parameter provided */ -#define JITTER_BUFFER_SET_CONCEALMENT_SIZE 8 -#define JITTER_BUFFER_GET_CONCEALMENT_SIZE 9 - -/** Absolute max amount of loss that can be tolerated regardless of the delay. Typical loss - should be half of that or less. */ -#define JITTER_BUFFER_SET_MAX_LATE_RATE 10 -#define JITTER_BUFFER_GET_MAX_LATE_RATE 11 - -/** Equivalent cost of one percent late packet in timestamp units */ -#define JITTER_BUFFER_SET_LATE_COST 12 -#define JITTER_BUFFER_GET_LATE_COST 13 - - -/** Initialises jitter buffer - * - * @param step_size Starting value for the size of concleanment packets and delay - adjustment steps. Can be changed at any time using JITTER_BUFFER_SET_DELAY_STEP - and JITTER_BUFFER_GET_CONCEALMENT_SIZE. - * @return Newly created jitter buffer state - */ -JitterBuffer *jitter_buffer_init(int step_size); - -/** Restores jitter buffer to its original state - * - * @param jitter Jitter buffer state - */ -void jitter_buffer_reset(JitterBuffer *jitter); - -/** Destroys jitter buffer - * - * @param jitter Jitter buffer state - */ -void jitter_buffer_destroy(JitterBuffer *jitter); - -/** Put one packet into the jitter buffer - * - * @param jitter Jitter buffer state - * @param packet Incoming packet -*/ -void jitter_buffer_put(JitterBuffer *jitter, const JitterBufferPacket *packet); - -/** Get one packet from the jitter buffer - * - * @param jitter Jitter buffer state - * @param packet Returned packet - * @param desired_span Number of samples (or units) we wish to get from the buffer (no guarantee) - * @param current_timestamp Timestamp for the returned packet -*/ -int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t desired_span, spx_int32_t *start_offset); - -/** Used right after jitter_buffer_get() to obtain another packet that would have the same timestamp. - * This is mainly useful for media where a single "frame" can be split into several packets. - * - * @param jitter Jitter buffer state - * @param packet Returned packet - */ -int jitter_buffer_get_another(JitterBuffer *jitter, JitterBufferPacket *packet); - -/** Get pointer timestamp of jitter buffer - * - * @param jitter Jitter buffer state -*/ -int jitter_buffer_get_pointer_timestamp(JitterBuffer *jitter); - -/** Advance by one tick - * - * @param jitter Jitter buffer state -*/ -void jitter_buffer_tick(JitterBuffer *jitter); - -/** Telling the jitter buffer about the remaining data in the application buffer - * @param jitter Jitter buffer state - * @param rem Amount of data buffered by the application (timestamp units) - */ -void jitter_buffer_remaining_span(JitterBuffer *jitter, spx_uint32_t rem); - -/** Used like the ioctl function to control the jitter buffer parameters - * - * @param jitter Jitter buffer state - * @param request ioctl-type request (one of the JITTER_BUFFER_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown -*/ -int jitter_buffer_ctl(JitterBuffer *jitter, int request, void *ptr); - -int jitter_buffer_update_delay(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset); - -/* @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_preprocess.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_preprocess.h deleted file mode 100755 index 2762d10..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_preprocess.h +++ /dev/null @@ -1,219 +0,0 @@ -/* Copyright (C) 2003 Epic Games - Written by Jean-Marc Valin */ -/** - * @file speex_preprocess.h - * @brief Speex preprocessor. The preprocess can do noise suppression, - * residual echo suppression (after using the echo canceller), automatic - * gain control (AGC) and voice activity detection (VAD). -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SPEEX_PREPROCESS_H -#define SPEEX_PREPROCESS_H -/** @defgroup SpeexPreprocessState SpeexPreprocessState: The Speex preprocessor - * This is the Speex preprocessor. The preprocess can do noise suppression, - * residual echo suppression (after using the echo canceller), automatic - * gain control (AGC) and voice activity detection (VAD). - * @{ - */ - -#include "speex_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** State of the preprocessor (one per channel). Should never be accessed directly. */ -struct SpeexPreprocessState_; - -/** State of the preprocessor (one per channel). Should never be accessed directly. */ -typedef struct SpeexPreprocessState_ SpeexPreprocessState; - - -/** Creates a new preprocessing state. You MUST create one state per channel processed. - * @param frame_size Number of samples to process at one time (should correspond to 10-20 ms). Must be - * the same value as that used for the echo canceller for residual echo cancellation to work. - * @param sampling_rate Sampling rate used for the input. - * @return Newly created preprocessor state -*/ -SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate); - -/** Destroys a preprocessor state - * @param st Preprocessor state to destroy -*/ -void speex_preprocess_state_destroy(SpeexPreprocessState *st); - -/** Preprocess a frame - * @param st Preprocessor state - * @param x Audio sample vector (in and out). Must be same size as specified in speex_preprocess_state_init(). - * @return Bool value for voice activity (1 for speech, 0 for noise/silence), ONLY if VAD turned on. -*/ -int speex_preprocess_run(SpeexPreprocessState *st, spx_int16_t *x); - -/** Preprocess a frame (deprecated, use speex_preprocess_run() instead)*/ -int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo); - -/** Update preprocessor state, but do not compute the output - * @param st Preprocessor state - * @param x Audio sample vector (in only). Must be same size as specified in speex_preprocess_state_init(). -*/ -void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x); - -/** Used like the ioctl function to control the preprocessor parameters - * @param st Preprocessor state - * @param request ioctl-type request (one of the SPEEX_PREPROCESS_* macros) - * @param ptr Data exchanged to-from function - * @return 0 if no error, -1 if request in unknown -*/ -int speex_preprocess_ctl(SpeexPreprocessState *st, int request, void *ptr); - - - -/** Set preprocessor denoiser state */ -#define SPEEX_PREPROCESS_SET_DENOISE 0 -/** Get preprocessor denoiser state */ -#define SPEEX_PREPROCESS_GET_DENOISE 1 - -/** Set preprocessor Automatic Gain Control state */ -#define SPEEX_PREPROCESS_SET_AGC 2 -/** Get preprocessor Automatic Gain Control state */ -#define SPEEX_PREPROCESS_GET_AGC 3 - -/** Set preprocessor Voice Activity Detection state */ -#define SPEEX_PREPROCESS_SET_VAD 4 -/** Get preprocessor Voice Activity Detection state */ -#define SPEEX_PREPROCESS_GET_VAD 5 - -/** Set preprocessor Automatic Gain Control level (float) */ -#define SPEEX_PREPROCESS_SET_AGC_LEVEL 6 -/** Get preprocessor Automatic Gain Control level (float) */ -#define SPEEX_PREPROCESS_GET_AGC_LEVEL 7 - -/** Set preprocessor dereverb state */ -#define SPEEX_PREPROCESS_SET_DEREVERB 8 -/** Get preprocessor dereverb state */ -#define SPEEX_PREPROCESS_GET_DEREVERB 9 - -/** Set preprocessor dereverb level */ -#define SPEEX_PREPROCESS_SET_DEREVERB_LEVEL 10 -/** Get preprocessor dereverb level */ -#define SPEEX_PREPROCESS_GET_DEREVERB_LEVEL 11 - -/** Set preprocessor dereverb decay */ -#define SPEEX_PREPROCESS_SET_DEREVERB_DECAY 12 -/** Get preprocessor dereverb decay */ -#define SPEEX_PREPROCESS_GET_DEREVERB_DECAY 13 - -/** Set probability required for the VAD to go from silence to voice */ -#define SPEEX_PREPROCESS_SET_PROB_START 14 -/** Get probability required for the VAD to go from silence to voice */ -#define SPEEX_PREPROCESS_GET_PROB_START 15 - -/** Set probability required for the VAD to stay in the voice state (integer percent) */ -#define SPEEX_PREPROCESS_SET_PROB_CONTINUE 16 -/** Get probability required for the VAD to stay in the voice state (integer percent) */ -#define SPEEX_PREPROCESS_GET_PROB_CONTINUE 17 - -/** Set maximum attenuation of the noise in dB (negative number) */ -#define SPEEX_PREPROCESS_SET_NOISE_SUPPRESS 18 -/** Get maximum attenuation of the noise in dB (negative number) */ -#define SPEEX_PREPROCESS_GET_NOISE_SUPPRESS 19 - -/** Set maximum attenuation of the residual echo in dB (negative number) */ -#define SPEEX_PREPROCESS_SET_ECHO_SUPPRESS 20 -/** Get maximum attenuation of the residual echo in dB (negative number) */ -#define SPEEX_PREPROCESS_GET_ECHO_SUPPRESS 21 - -/** Set maximum attenuation of the residual echo in dB when near end is active (negative number) */ -#define SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE 22 -/** Get maximum attenuation of the residual echo in dB when near end is active (negative number) */ -#define SPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE 23 - -/** Set the corresponding echo canceller state so that residual echo suppression can be performed (NULL for no residual echo suppression) */ -#define SPEEX_PREPROCESS_SET_ECHO_STATE 24 -/** Get the corresponding echo canceller state */ -#define SPEEX_PREPROCESS_GET_ECHO_STATE 25 - -/** Set maximal gain increase in dB/second (int32) */ -#define SPEEX_PREPROCESS_SET_AGC_INCREMENT 26 - -/** Get maximal gain increase in dB/second (int32) */ -#define SPEEX_PREPROCESS_GET_AGC_INCREMENT 27 - -/** Set maximal gain decrease in dB/second (int32) */ -#define SPEEX_PREPROCESS_SET_AGC_DECREMENT 28 - -/** Get maximal gain decrease in dB/second (int32) */ -#define SPEEX_PREPROCESS_GET_AGC_DECREMENT 29 - -/** Set maximal gain in dB (int32) */ -#define SPEEX_PREPROCESS_SET_AGC_MAX_GAIN 30 - -/** Get maximal gain in dB (int32) */ -#define SPEEX_PREPROCESS_GET_AGC_MAX_GAIN 31 - -/* Can't set loudness */ -/** Get loudness */ -#define SPEEX_PREPROCESS_GET_AGC_LOUDNESS 33 - -/* Can't set gain */ -/** Get current gain (int32 percent) */ -#define SPEEX_PREPROCESS_GET_AGC_GAIN 35 - -/* Can't set spectrum size */ -/** Get spectrum size for power spectrum (int32) */ -#define SPEEX_PREPROCESS_GET_PSD_SIZE 37 - -/* Can't set power spectrum */ -/** Get power spectrum (int32[] of squared values) */ -#define SPEEX_PREPROCESS_GET_PSD 39 - -/* Can't set noise size */ -/** Get spectrum size for noise estimate (int32) */ -#define SPEEX_PREPROCESS_GET_NOISE_PSD_SIZE 41 - -/* Can't set noise estimate */ -/** Get noise estimate (int32[] of squared values) */ -#define SPEEX_PREPROCESS_GET_NOISE_PSD 43 - -/* Can't set speech probability */ -/** Get speech probability in last frame (int32). */ -#define SPEEX_PREPROCESS_GET_PROB 45 - -/** Set preprocessor Automatic Gain Control level (int32) */ -#define SPEEX_PREPROCESS_SET_AGC_TARGET 46 -/** Get preprocessor Automatic Gain Control level (int32) */ -#define SPEEX_PREPROCESS_GET_AGC_TARGET 47 - -#ifdef __cplusplus -} -#endif - -/** @}*/ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_resampler.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_resampler.h deleted file mode 100755 index 6bb9a2e..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_resampler.h +++ /dev/null @@ -1,340 +0,0 @@ -/* Copyright (C) 2007 Jean-Marc Valin - - File: speex_resampler.h - Resampling code - - The design goals of this code are: - - Very fast algorithm - - Low memory requirement - - Good *perceptual* quality (and not best SNR) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef SPEEX_RESAMPLER_H -#define SPEEX_RESAMPLER_H - -#ifdef OUTSIDE_SPEEX - -/********* WARNING: MENTAL SANITY ENDS HERE *************/ - -/* If the resampler is defined outside of Speex, we change the symbol names so that - there won't be any clash if linking with Speex later on. */ - -/* #define RANDOM_PREFIX your software name here */ -#ifndef RANDOM_PREFIX -#error "Please define RANDOM_PREFIX (above) to something specific to your project to prevent symbol name clashes" -#endif - -#define CAT_PREFIX2(a,b) a ## b -#define CAT_PREFIX(a,b) CAT_PREFIX2(a, b) - -#define speex_resampler_init CAT_PREFIX(RANDOM_PREFIX,_resampler_init) -#define speex_resampler_init_frac CAT_PREFIX(RANDOM_PREFIX,_resampler_init_frac) -#define speex_resampler_destroy CAT_PREFIX(RANDOM_PREFIX,_resampler_destroy) -#define speex_resampler_process_float CAT_PREFIX(RANDOM_PREFIX,_resampler_process_float) -#define speex_resampler_process_int CAT_PREFIX(RANDOM_PREFIX,_resampler_process_int) -#define speex_resampler_process_interleaved_float CAT_PREFIX(RANDOM_PREFIX,_resampler_process_interleaved_float) -#define speex_resampler_process_interleaved_int CAT_PREFIX(RANDOM_PREFIX,_resampler_process_interleaved_int) -#define speex_resampler_set_rate CAT_PREFIX(RANDOM_PREFIX,_resampler_set_rate) -#define speex_resampler_get_rate CAT_PREFIX(RANDOM_PREFIX,_resampler_get_rate) -#define speex_resampler_set_rate_frac CAT_PREFIX(RANDOM_PREFIX,_resampler_set_rate_frac) -#define speex_resampler_get_ratio CAT_PREFIX(RANDOM_PREFIX,_resampler_get_ratio) -#define speex_resampler_set_quality CAT_PREFIX(RANDOM_PREFIX,_resampler_set_quality) -#define speex_resampler_get_quality CAT_PREFIX(RANDOM_PREFIX,_resampler_get_quality) -#define speex_resampler_set_input_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_set_input_stride) -#define speex_resampler_get_input_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_get_input_stride) -#define speex_resampler_set_output_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_set_output_stride) -#define speex_resampler_get_output_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_get_output_stride) -#define speex_resampler_get_input_latency CAT_PREFIX(RANDOM_PREFIX,_resampler_get_input_latency) -#define speex_resampler_get_output_latency CAT_PREFIX(RANDOM_PREFIX,_resampler_get_output_latency) -#define speex_resampler_skip_zeros CAT_PREFIX(RANDOM_PREFIX,_resampler_skip_zeros) -#define speex_resampler_reset_mem CAT_PREFIX(RANDOM_PREFIX,_resampler_reset_mem) -#define speex_resampler_strerror CAT_PREFIX(RANDOM_PREFIX,_resampler_strerror) - -#define spx_int16_t short -#define spx_int32_t int -#define spx_uint16_t unsigned short -#define spx_uint32_t unsigned int - -#else /* OUTSIDE_SPEEX */ - -#include "speex_types.h" - -#endif /* OUTSIDE_SPEEX */ - -#ifdef __cplusplus -extern "C" { -#endif - -#define SPEEX_RESAMPLER_QUALITY_MAX 10 -#define SPEEX_RESAMPLER_QUALITY_MIN 0 -#define SPEEX_RESAMPLER_QUALITY_DEFAULT 4 -#define SPEEX_RESAMPLER_QUALITY_VOIP 3 -#define SPEEX_RESAMPLER_QUALITY_DESKTOP 5 - -enum { - RESAMPLER_ERR_SUCCESS = 0, - RESAMPLER_ERR_ALLOC_FAILED = 1, - RESAMPLER_ERR_BAD_STATE = 2, - RESAMPLER_ERR_INVALID_ARG = 3, - RESAMPLER_ERR_PTR_OVERLAP = 4, - - RESAMPLER_ERR_MAX_ERROR -}; - -struct SpeexResamplerState_; -typedef struct SpeexResamplerState_ SpeexResamplerState; - -/** Create a new resampler with integer input and output rates. - * @param nb_channels Number of channels to be processed - * @param in_rate Input sampling rate (integer number of Hz). - * @param out_rate Output sampling rate (integer number of Hz). - * @param quality Resampling quality between 0 and 10, where 0 has poor quality - * and 10 has very high quality. - * @return Newly created resampler state - * @retval NULL Error: not enough memory - */ -SpeexResamplerState *speex_resampler_init(spx_uint32_t nb_channels, - spx_uint32_t in_rate, - spx_uint32_t out_rate, - int quality, - int *err); - -/** Create a new resampler with fractional input/output rates. The sampling - * rate ratio is an arbitrary rational number with both the numerator and - * denominator being 32-bit integers. - * @param nb_channels Number of channels to be processed - * @param ratio_num Numerator of the sampling rate ratio - * @param ratio_den Denominator of the sampling rate ratio - * @param in_rate Input sampling rate rounded to the nearest integer (in Hz). - * @param out_rate Output sampling rate rounded to the nearest integer (in Hz). - * @param quality Resampling quality between 0 and 10, where 0 has poor quality - * and 10 has very high quality. - * @return Newly created resampler state - * @retval NULL Error: not enough memory - */ -SpeexResamplerState *speex_resampler_init_frac(spx_uint32_t nb_channels, - spx_uint32_t ratio_num, - spx_uint32_t ratio_den, - spx_uint32_t in_rate, - spx_uint32_t out_rate, - int quality, - int *err); - -/** Destroy a resampler state. - * @param st Resampler state - */ -void speex_resampler_destroy(SpeexResamplerState *st); - -/** Resample a float array. The input and output buffers must *not* overlap. - * @param st Resampler state - * @param channel_index Index of the channel to process for the multi-channel - * base (0 otherwise) - * @param in Input buffer - * @param in_len Number of input samples in the input buffer. Returns the - * number of samples processed - * @param out Output buffer - * @param out_len Size of the output buffer. Returns the number of samples written - */ -int speex_resampler_process_float(SpeexResamplerState *st, - spx_uint32_t channel_index, - const float *in, - spx_uint32_t *in_len, - float *out, - spx_uint32_t *out_len); - -/** Resample an int array. The input and output buffers must *not* overlap. - * @param st Resampler state - * @param channel_index Index of the channel to process for the multi-channel - * base (0 otherwise) - * @param in Input buffer - * @param in_len Number of input samples in the input buffer. Returns the number - * of samples processed - * @param out Output buffer - * @param out_len Size of the output buffer. Returns the number of samples written - */ -int speex_resampler_process_int(SpeexResamplerState *st, - spx_uint32_t channel_index, - const spx_int16_t *in, - spx_uint32_t *in_len, - spx_int16_t *out, - spx_uint32_t *out_len); - -/** Resample an interleaved float array. The input and output buffers must *not* overlap. - * @param st Resampler state - * @param in Input buffer - * @param in_len Number of input samples in the input buffer. Returns the number - * of samples processed. This is all per-channel. - * @param out Output buffer - * @param out_len Size of the output buffer. Returns the number of samples written. - * This is all per-channel. - */ -int speex_resampler_process_interleaved_float(SpeexResamplerState *st, - const float *in, - spx_uint32_t *in_len, - float *out, - spx_uint32_t *out_len); - -/** Resample an interleaved int array. The input and output buffers must *not* overlap. - * @param st Resampler state - * @param in Input buffer - * @param in_len Number of input samples in the input buffer. Returns the number - * of samples processed. This is all per-channel. - * @param out Output buffer - * @param out_len Size of the output buffer. Returns the number of samples written. - * This is all per-channel. - */ -int speex_resampler_process_interleaved_int(SpeexResamplerState *st, - const spx_int16_t *in, - spx_uint32_t *in_len, - spx_int16_t *out, - spx_uint32_t *out_len); - -/** Set (change) the input/output sampling rates (integer value). - * @param st Resampler state - * @param in_rate Input sampling rate (integer number of Hz). - * @param out_rate Output sampling rate (integer number of Hz). - */ -int speex_resampler_set_rate(SpeexResamplerState *st, - spx_uint32_t in_rate, - spx_uint32_t out_rate); - -/** Get the current input/output sampling rates (integer value). - * @param st Resampler state - * @param in_rate Input sampling rate (integer number of Hz) copied. - * @param out_rate Output sampling rate (integer number of Hz) copied. - */ -void speex_resampler_get_rate(SpeexResamplerState *st, - spx_uint32_t *in_rate, - spx_uint32_t *out_rate); - -/** Set (change) the input/output sampling rates and resampling ratio - * (fractional values in Hz supported). - * @param st Resampler state - * @param ratio_num Numerator of the sampling rate ratio - * @param ratio_den Denominator of the sampling rate ratio - * @param in_rate Input sampling rate rounded to the nearest integer (in Hz). - * @param out_rate Output sampling rate rounded to the nearest integer (in Hz). - */ -int speex_resampler_set_rate_frac(SpeexResamplerState *st, - spx_uint32_t ratio_num, - spx_uint32_t ratio_den, - spx_uint32_t in_rate, - spx_uint32_t out_rate); - -/** Get the current resampling ratio. This will be reduced to the least - * common denominator. - * @param st Resampler state - * @param ratio_num Numerator of the sampling rate ratio copied - * @param ratio_den Denominator of the sampling rate ratio copied - */ -void speex_resampler_get_ratio(SpeexResamplerState *st, - spx_uint32_t *ratio_num, - spx_uint32_t *ratio_den); - -/** Set (change) the conversion quality. - * @param st Resampler state - * @param quality Resampling quality between 0 and 10, where 0 has poor - * quality and 10 has very high quality. - */ -int speex_resampler_set_quality(SpeexResamplerState *st, - int quality); - -/** Get the conversion quality. - * @param st Resampler state - * @param quality Resampling quality between 0 and 10, where 0 has poor - * quality and 10 has very high quality. - */ -void speex_resampler_get_quality(SpeexResamplerState *st, - int *quality); - -/** Set (change) the input stride. - * @param st Resampler state - * @param stride Input stride - */ -void speex_resampler_set_input_stride(SpeexResamplerState *st, - spx_uint32_t stride); - -/** Get the input stride. - * @param st Resampler state - * @param stride Input stride copied - */ -void speex_resampler_get_input_stride(SpeexResamplerState *st, - spx_uint32_t *stride); - -/** Set (change) the output stride. - * @param st Resampler state - * @param stride Output stride - */ -void speex_resampler_set_output_stride(SpeexResamplerState *st, - spx_uint32_t stride); - -/** Get the output stride. - * @param st Resampler state copied - * @param stride Output stride - */ -void speex_resampler_get_output_stride(SpeexResamplerState *st, - spx_uint32_t *stride); - -/** Get the latency in input samples introduced by the resampler. - * @param st Resampler state - */ -int speex_resampler_get_input_latency(SpeexResamplerState *st); - -/** Get the latency in output samples introduced by the resampler. - * @param st Resampler state - */ -int speex_resampler_get_output_latency(SpeexResamplerState *st); - -/** Make sure that the first samples to go out of the resamplers don't have - * leading zeros. This is only useful before starting to use a newly created - * resampler. It is recommended to use that when resampling an audio file, as - * it will generate a file with the same length. For real-time processing, - * it is probably easier not to use this call (so that the output duration - * is the same for the first frame). - * @param st Resampler state - */ -int speex_resampler_skip_zeros(SpeexResamplerState *st); - -/** Reset a resampler so a new (unrelated) stream can be processed. - * @param st Resampler state - */ -int speex_resampler_reset_mem(SpeexResamplerState *st); - -/** Returns the English meaning for an error code - * @param err Error code - * @return English string - */ -const char *speex_resampler_strerror(int err); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_stereo.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_stereo.h deleted file mode 100755 index b817a55..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_stereo.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin*/ -/** - @file speex_stereo.h - @brief Describes the handling for intensity stereo -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef STEREO_H -#define STEREO_H -/** @defgroup SpeexStereoState SpeexStereoState: Handling Speex stereo files - * This describes the Speex intensity stereo encoding/decoding - * @{ - */ - -#include "speex_types.h" -#include "speex_bits.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** If you access any of these fields directly, I'll personally come and bite you */ -typedef struct SpeexStereoState { - float balance; /**< Left/right balance info */ - float e_ratio; /**< Ratio of energies: E(left+right)/[E(left)+E(right)] */ - float smooth_left; /**< Smoothed left channel gain */ - float smooth_right; /**< Smoothed right channel gain */ - float reserved1; /**< Reserved for future use */ - float reserved2; /**< Reserved for future use */ -} SpeexStereoState; - -/** Deprecated. Use speex_stereo_state_init() instead. */ -#define SPEEX_STEREO_STATE_INIT {1,.5,1,1,0,0} - -/** Initialise/create a stereo stereo state */ -SpeexStereoState *speex_stereo_state_init(); - -/** Reset/re-initialise an already allocated stereo state */ -void speex_stereo_state_reset(SpeexStereoState *stereo); - -/** Destroy a stereo stereo state */ -void speex_stereo_state_destroy(SpeexStereoState *stereo); - -/** Transforms a stereo frame into a mono frame and stores intensity stereo info in 'bits' */ -void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits); - -/** Transforms a stereo frame into a mono frame and stores intensity stereo info in 'bits' */ -void speex_encode_stereo_int(spx_int16_t *data, int frame_size, SpeexBits *bits); - -/** Transforms a mono frame into a stereo frame using intensity stereo info */ -void speex_decode_stereo(float *data, int frame_size, SpeexStereoState *stereo); - -/** Transforms a mono frame into a stereo frame using intensity stereo info */ -void speex_decode_stereo_int(spx_int16_t *data, int frame_size, SpeexStereoState *stereo); - -/** Callback handler for intensity stereo info */ -int speex_std_stereo_request_handler(SpeexBits *bits, void *state, void *data); - -#ifdef __cplusplus -} -#endif - -/** @} */ -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_types.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_types.h deleted file mode 100755 index 852fed8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex/speex_types.h +++ /dev/null @@ -1,126 +0,0 @@ -/* speex_types.h taken from libogg */ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 7524 2004-08-11 04:20:36Z conrad $ - - ********************************************************************/ -/** - @file speex_types.h - @brief Speex types -*/ -#ifndef _SPEEX_TYPES_H -#define _SPEEX_TYPES_H - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include <_G_config.h> - typedef _G_int32_t spx_int32_t; - typedef _G_uint32_t spx_uint32_t; - typedef _G_int16_t spx_int16_t; - typedef _G_uint16_t spx_uint16_t; -# elif defined(__MINGW32__) - typedef short spx_int16_t; - typedef unsigned short spx_uint16_t; - typedef int spx_int32_t; - typedef unsigned int spx_uint32_t; -# elif defined(__MWERKS__) - typedef int spx_int32_t; - typedef unsigned int spx_uint32_t; - typedef short spx_int16_t; - typedef unsigned short spx_uint16_t; -# else - /* MSVC/Borland */ - typedef __int32 spx_int32_t; - typedef unsigned __int32 spx_uint32_t; - typedef __int16 spx_int16_t; - typedef unsigned __int16 spx_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include <sys/types.h> - typedef SInt16 spx_int16_t; - typedef UInt16 spx_uint16_t; - typedef SInt32 spx_int32_t; - typedef UInt32 spx_uint32_t; - -#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ - -# include <sys/types.h> - typedef int16_t spx_int16_t; - typedef u_int16_t spx_uint16_t; - typedef int32_t spx_int32_t; - typedef u_int32_t spx_uint32_t; - -#elif defined(__BEOS__) - - /* Be */ -# include <inttypes.h> - typedef int16_t spx_int16_t; - typedef u_int16_t spx_uint16_t; - typedef int32_t spx_int32_t; - typedef u_int32_t spx_uint32_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short spx_int16_t; - typedef unsigned short spx_uint16_t; - typedef int spx_int32_t; - typedef unsigned int spx_uint32_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short spx_int16_t; - typedef int spx_int32_t; - typedef unsigned int spx_uint32_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef int spx_int32_t; - typedef unsigned spx_uint32_t; - typedef short spx_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short spx_int16_t; - typedef unsigned short spx_uint16_t; - typedef signed int spx_int32_t; - typedef unsigned int spx_uint32_t; - -#elif defined(CONFIG_TI_C54X) || defined (CONFIG_TI_C55X) - - typedef short spx_int16_t; - typedef unsigned short spx_uint16_t; - typedef long spx_int32_t; - typedef unsigned long spx_uint32_t; - -#elif defined(CONFIG_TI_C6X) - - typedef short spx_int16_t; - typedef unsigned short spx_uint16_t; - typedef int spx_int32_t; - typedef unsigned int spx_uint32_t; - -#else - -# include <speex/speex_config_types.h> - -#endif - -#endif /* _SPEEX_TYPES_H */ diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_callbacks.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_callbacks.c deleted file mode 100755 index 09f037c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_callbacks.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File speex_callbacks.c - Callback handling and in-band signalling - - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "speex/speex_callbacks.h" -#include "arch.h" -#include "os_support.h" - -EXPORT int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state) -{ - int id; - SpeexCallback *callback; - /*speex_bits_advance(bits, 5);*/ - id=speex_bits_unpack_unsigned(bits, 4); - callback = callback_list+id; - - if (callback->func) - { - return callback->func(bits, state, callback->data); - } else - /*If callback is not registered, skip the right number of bits*/ - { - int adv; - if (id<2) - adv = 1; - else if (id<8) - adv = 4; - else if (id<10) - adv = 8; - else if (id<12) - adv = 16; - else if (id<14) - adv = 32; - else - adv = 64; - speex_bits_advance(bits, adv); - } - return 0; -} - -EXPORT int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data) -{ - spx_int32_t m; - m = speex_bits_unpack_unsigned(bits, 4); - speex_encoder_ctl(data, SPEEX_SET_MODE, &m); - return 0; -} - -EXPORT int speex_std_low_mode_request_handler(SpeexBits *bits, void *state, void *data) -{ - spx_int32_t m; - m = speex_bits_unpack_unsigned(bits, 4); - speex_encoder_ctl(data, SPEEX_SET_LOW_MODE, &m); - return 0; -} - -EXPORT int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data) -{ - spx_int32_t m; - m = speex_bits_unpack_unsigned(bits, 4); - speex_encoder_ctl(data, SPEEX_SET_HIGH_MODE, &m); - return 0; -} - -#ifndef DISABLE_VBR -EXPORT int speex_std_vbr_request_handler(SpeexBits *bits, void *state, void *data) -{ - spx_int32_t vbr; - vbr = speex_bits_unpack_unsigned(bits, 1); - speex_encoder_ctl(data, SPEEX_SET_VBR, &vbr); - return 0; -} -#endif /* #ifndef DISABLE_VBR */ - -EXPORT int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data) -{ - spx_int32_t enh; - enh = speex_bits_unpack_unsigned(bits, 1); - speex_decoder_ctl(data, SPEEX_SET_ENH, &enh); - return 0; -} - -#ifndef DISABLE_VBR -EXPORT int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data) -{ - float qual; - qual = speex_bits_unpack_unsigned(bits, 4); - speex_encoder_ctl(data, SPEEX_SET_VBR_QUALITY, &qual); - return 0; -} -#endif /* #ifndef DISABLE_VBR */ - -EXPORT int speex_std_char_handler(SpeexBits *bits, void *state, void *data) -{ - unsigned char ch; - ch = speex_bits_unpack_unsigned(bits, 8); - _speex_putc(ch, data); - /*printf("speex_std_char_handler ch=%x\n", ch);*/ - return 0; -} - - - -/* Default handler for user callbacks: skip it */ -EXPORT int speex_default_user_handler(SpeexBits *bits, void *state, void *data) -{ - int req_size = speex_bits_unpack_unsigned(bits, 4); - speex_bits_advance(bits, 5+8*req_size); - return 0; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_header.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_header.c deleted file mode 100755 index 8275148..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/speex_header.c +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: speex_header.c - Describes the Speex header - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "arch.h" -#include "speex/speex_header.h" -#include "speex/speex.h" -#include "os_support.h" - -#ifndef NULL -#define NULL 0 -#endif - -/** Convert little endian */ -static inline spx_int32_t le_int(spx_int32_t i) -{ -#if !defined(__LITTLE_ENDIAN__) && ( defined(WORDS_BIGENDIAN) || defined(__BIG_ENDIAN__) ) - spx_uint32_t ui, ret; - ui = i; - ret = ui>>24; - ret |= (ui>>8)&0x0000ff00; - ret |= (ui<<8)&0x00ff0000; - ret |= (ui<<24); - return ret; -#else - return i; -#endif -} - -#define ENDIAN_SWITCH(x) {x=le_int(x);} - - -/* -typedef struct SpeexHeader { - char speex_string[8]; - char speex_version[SPEEX_HEADER_VERSION_LENGTH]; - int speex_version_id; - int header_size; - int rate; - int mode; - int mode_bitstream_version; - int nb_channels; - int bitrate; - int frame_size; - int vbr; - int frames_per_packet; - int extra_headers; - int reserved1; - int reserved2; -} SpeexHeader; -*/ - -EXPORT void speex_init_header(SpeexHeader *header, int rate, int nb_channels, const SpeexMode *m) -{ - int i; - const char *h="Speex "; - /* - strncpy(header->speex_string, "Speex ", 8); - strncpy(header->speex_version, SPEEX_VERSION, SPEEX_HEADER_VERSION_LENGTH-1); - header->speex_version[SPEEX_HEADER_VERSION_LENGTH-1]=0; - */ - for (i=0;i<8;i++) - header->speex_string[i]=h[i]; - for (i=0;i<SPEEX_HEADER_VERSION_LENGTH-1 && SPEEX_VERSION[i];i++) - header->speex_version[i]=SPEEX_VERSION[i]; - for (;i<SPEEX_HEADER_VERSION_LENGTH;i++) - header->speex_version[i]=0; - - header->speex_version_id = 1; - header->header_size = sizeof(SpeexHeader); - - header->rate = rate; - header->mode = m->modeID; - header->mode_bitstream_version = m->bitstream_version; - if (m->modeID<0) - speex_warning("This mode is meant to be used alone"); - header->nb_channels = nb_channels; - header->bitrate = -1; - speex_mode_query(m, SPEEX_MODE_FRAME_SIZE, &header->frame_size); - header->vbr = 0; - - header->frames_per_packet = 0; - header->extra_headers = 0; - header->reserved1 = 0; - header->reserved2 = 0; -} - -EXPORT char *speex_header_to_packet(SpeexHeader *header, int *size) -{ - SpeexHeader *le_header; - le_header = (SpeexHeader*)speex_alloc(sizeof(SpeexHeader)); - - SPEEX_COPY(le_header, header, 1); - - /*Make sure everything is now little-endian*/ - ENDIAN_SWITCH(le_header->speex_version_id); - ENDIAN_SWITCH(le_header->header_size); - ENDIAN_SWITCH(le_header->rate); - ENDIAN_SWITCH(le_header->mode); - ENDIAN_SWITCH(le_header->mode_bitstream_version); - ENDIAN_SWITCH(le_header->nb_channels); - ENDIAN_SWITCH(le_header->bitrate); - ENDIAN_SWITCH(le_header->frame_size); - ENDIAN_SWITCH(le_header->vbr); - ENDIAN_SWITCH(le_header->frames_per_packet); - ENDIAN_SWITCH(le_header->extra_headers); - - *size = sizeof(SpeexHeader); - return (char *)le_header; -} - -EXPORT SpeexHeader *speex_packet_to_header(char *packet, int size) -{ - int i; - SpeexHeader *le_header; - const char *h = "Speex "; - for (i=0;i<8;i++) - if (packet[i]!=h[i]) - { - speex_notify("This doesn't look like a Speex file"); - return NULL; - } - - /*FIXME: Do we allow larger headers?*/ - if (size < (int)sizeof(SpeexHeader)) - { - speex_notify("Speex header too small"); - return NULL; - } - - le_header = (SpeexHeader*)speex_alloc(sizeof(SpeexHeader)); - - SPEEX_COPY(le_header, (SpeexHeader*)packet, 1); - - /*Make sure everything is converted correctly from little-endian*/ - ENDIAN_SWITCH(le_header->speex_version_id); - ENDIAN_SWITCH(le_header->header_size); - ENDIAN_SWITCH(le_header->rate); - ENDIAN_SWITCH(le_header->mode); - ENDIAN_SWITCH(le_header->mode_bitstream_version); - ENDIAN_SWITCH(le_header->nb_channels); - ENDIAN_SWITCH(le_header->bitrate); - ENDIAN_SWITCH(le_header->frame_size); - ENDIAN_SWITCH(le_header->vbr); - ENDIAN_SWITCH(le_header->frames_per_packet); - ENDIAN_SWITCH(le_header->extra_headers); - - if (le_header->mode >= SPEEX_NB_MODES || le_header->mode < 0) - { - speex_notify("Invalid mode specified in Speex header"); - speex_free (le_header); - return NULL; - } - - if (le_header->nb_channels>2) - le_header->nb_channels = 2; - if (le_header->nb_channels<1) - le_header->nb_channels = 1; - - return le_header; - -} - -EXPORT void speex_header_free(void *ptr) -{ - speex_free(ptr); -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stack_alloc.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stack_alloc.h deleted file mode 100755 index 5264e66..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stack_alloc.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file stack_alloc.h - @brief Temporary memory allocation on stack -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef STACK_ALLOC_H -#define STACK_ALLOC_H - -#ifdef USE_ALLOCA -# ifdef WIN32 -# include <malloc.h> -# else -# ifdef HAVE_ALLOCA_H -# include <alloca.h> -# else -# include <stdlib.h> -# endif -# endif -#endif - -/** - * @def ALIGN(stack, size) - * - * Aligns the stack to a 'size' boundary - * - * @param stack Stack - * @param size New size boundary - */ - -/** - * @def PUSH(stack, size, type) - * - * Allocates 'size' elements of type 'type' on the stack - * - * @param stack Stack - * @param size Number of elements - * @param type Type of element - */ - -/** - * @def VARDECL(var) - * - * Declare variable on stack - * - * @param var Variable to declare - */ - -/** - * @def ALLOC(var, size, type) - * - * Allocate 'size' elements of 'type' on stack - * - * @param var Name of variable to allocate - * @param size Number of elements - * @param type Type of element - */ - -#ifdef ENABLE_VALGRIND - -#include <valgrind/memcheck.h> - -#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) - -#define PUSH(stack, size, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(type)),VALGRIND_MAKE_WRITABLE(stack, ((size)*sizeof(type))),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) - -#else - -#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) - -#define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) - -#endif - -#if defined(VAR_ARRAYS) -#define VARDECL(var) -#define ALLOC(var, size, type) type var[size] -#elif defined(USE_ALLOCA) -#define VARDECL(var) var -#define ALLOC(var, size, type) var = alloca(sizeof(type)*(size)) -#else -#define VARDECL(var) var -#define ALLOC(var, size, type) var = PUSH(stack, size, type) -#endif - - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stereo.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stereo.c deleted file mode 100755 index 3655e4c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/stereo.c +++ /dev/null @@ -1,296 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: stereo.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "speex/speex_stereo.h" -#include "speex/speex_callbacks.h" -#include "math_approx.h" -#include "vq.h" -#include <math.h> -#include "os_support.h" - -typedef struct RealSpeexStereoState { - spx_word32_t balance; /**< Left/right balance info */ - spx_word32_t e_ratio; /**< Ratio of energies: E(left+right)/[E(left)+E(right)] */ - spx_word32_t smooth_left; /**< Smoothed left channel gain */ - spx_word32_t smooth_right; /**< Smoothed right channel gain */ - spx_uint32_t reserved1; /**< Reserved for future use */ - spx_int32_t reserved2; /**< Reserved for future use */ -} RealSpeexStereoState; - - -/*float e_ratio_quant[4] = {1, 1.26, 1.587, 2};*/ -#ifndef FIXED_POINT -static const float e_ratio_quant[4] = {.25f, .315f, .397f, .5f}; -static const float e_ratio_quant_bounds[3] = {0.2825f, 0.356f, 0.4485f}; -#else -static const spx_word16_t e_ratio_quant[4] = {8192, 10332, 13009, 16384}; -static const spx_word16_t e_ratio_quant_bounds[3] = {9257, 11665, 14696}; -static const spx_word16_t balance_bounds[31] = {18, 23, 30, 38, 49, 63, 81, 104, - 134, 172, 221, 284, 364, 468, 600, 771, - 990, 1271, 1632, 2096, 2691, 3455, 4436, 5696, - 7314, 9392, 12059, 15484, 19882, 25529, 32766}; -#endif - -/* This is an ugly compatibility hack that properly resets the stereo state - In case it it compiled in fixed-point, but initialised with the deprecated - floating point static initialiser */ -#ifdef FIXED_POINT -#define COMPATIBILITY_HACK(s) do {if ((s)->reserved1 != 0xdeadbeef) speex_stereo_state_reset((SpeexStereoState*)s); } while (0); -#else -#define COMPATIBILITY_HACK(s) -#endif - -EXPORT SpeexStereoState *speex_stereo_state_init() -{ - SpeexStereoState *stereo = speex_alloc(sizeof(SpeexStereoState)); - speex_stereo_state_reset(stereo); - return stereo; -} - -EXPORT void speex_stereo_state_reset(SpeexStereoState *_stereo) -{ - RealSpeexStereoState *stereo = (RealSpeexStereoState*)_stereo; -#ifdef FIXED_POINT - stereo->balance = 65536; - stereo->e_ratio = 16384; - stereo->smooth_left = 16384; - stereo->smooth_right = 16384; - stereo->reserved1 = 0xdeadbeef; - stereo->reserved2 = 0; -#else - stereo->balance = 1.0f; - stereo->e_ratio = .5f; - stereo->smooth_left = 1.f; - stereo->smooth_right = 1.f; - stereo->reserved1 = 0; - stereo->reserved2 = 0; -#endif -} - -EXPORT void speex_stereo_state_destroy(SpeexStereoState *stereo) -{ - speex_free(stereo); -} - -#ifndef DISABLE_FLOAT_API -EXPORT void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits) -{ - int i, tmp; - float e_left=0, e_right=0, e_tot=0; - float balance, e_ratio; - for (i=0;i<frame_size;i++) - { - e_left += ((float)data[2*i])*data[2*i]; - e_right += ((float)data[2*i+1])*data[2*i+1]; - data[i] = .5*(((float)data[2*i])+data[2*i+1]); - e_tot += ((float)data[i])*data[i]; - } - balance=(e_left+1)/(e_right+1); - e_ratio = e_tot/(1+e_left+e_right); - - /*Quantization*/ - speex_bits_pack(bits, 14, 5); - speex_bits_pack(bits, SPEEX_INBAND_STEREO, 4); - - balance=4*log(balance); - - /*Pack sign*/ - if (balance>0) - speex_bits_pack(bits, 0, 1); - else - speex_bits_pack(bits, 1, 1); - balance=floor(.5+fabs(balance)); - if (balance>30) - balance=31; - - speex_bits_pack(bits, (int)balance, 5); - - /* FIXME: this is a hack */ - tmp=scal_quant(e_ratio*Q15_ONE, e_ratio_quant_bounds, 4); - speex_bits_pack(bits, tmp, 2); -} -#endif /* #ifndef DISABLE_FLOAT_API */ - -EXPORT void speex_encode_stereo_int(spx_int16_t *data, int frame_size, SpeexBits *bits) -{ - int i, tmp; - spx_word32_t e_left=0, e_right=0, e_tot=0; - spx_word32_t balance, e_ratio; - spx_word32_t largest, smallest; - int balance_id; -#ifdef FIXED_POINT - int shift; -#endif - - /* In band marker */ - speex_bits_pack(bits, 14, 5); - /* Stereo marker */ - speex_bits_pack(bits, SPEEX_INBAND_STEREO, 4); - - for (i=0;i<frame_size;i++) - { - e_left += SHR32(MULT16_16(data[2*i],data[2*i]),8); - e_right += SHR32(MULT16_16(data[2*i+1],data[2*i+1]),8); -#ifdef FIXED_POINT - /* I think this is actually unbiased */ - data[i] = SHR16(data[2*i],1)+PSHR16(data[2*i+1],1); -#else - data[i] = .5*(((float)data[2*i])+data[2*i+1]); -#endif - e_tot += SHR32(MULT16_16(data[i],data[i]),8); - } - if (e_left > e_right) - { - speex_bits_pack(bits, 0, 1); - largest = e_left; - smallest = e_right; - } else { - speex_bits_pack(bits, 1, 1); - largest = e_right; - smallest = e_left; - } - - /* Balance quantization */ -#ifdef FIXED_POINT - shift = spx_ilog2(largest)-15; - largest = VSHR32(largest, shift-4); - smallest = VSHR32(smallest, shift); - balance = DIV32(largest, ADD32(smallest, 1)); - if (balance > 32767) - balance = 32767; - balance_id = scal_quant(EXTRACT16(balance), balance_bounds, 32); -#else - balance=(largest+1.)/(smallest+1.); - balance=4*log(balance); - balance_id=floor(.5+fabs(balance)); - if (balance_id>30) - balance_id=31; -#endif - - speex_bits_pack(bits, balance_id, 5); - - /* "coherence" quantisation */ -#ifdef FIXED_POINT - shift = spx_ilog2(e_tot); - e_tot = VSHR32(e_tot, shift-25); - e_left = VSHR32(e_left, shift-10); - e_right = VSHR32(e_right, shift-10); - e_ratio = DIV32(e_tot, e_left+e_right+1); -#else - e_ratio = e_tot/(1.+e_left+e_right); -#endif - - tmp=scal_quant(EXTRACT16(e_ratio), e_ratio_quant_bounds, 4); - /*fprintf (stderr, "%d %d %d %d\n", largest, smallest, balance_id, e_ratio);*/ - speex_bits_pack(bits, tmp, 2); -} - -#ifndef DISABLE_FLOAT_API -EXPORT void speex_decode_stereo(float *data, int frame_size, SpeexStereoState *_stereo) -{ - int i; - spx_word32_t balance; - spx_word16_t e_left, e_right, e_ratio; - RealSpeexStereoState *stereo = (RealSpeexStereoState*)_stereo; - - COMPATIBILITY_HACK(stereo); - - balance=stereo->balance; - e_ratio=stereo->e_ratio; - - /* These two are Q14, with max value just below 2. */ - e_right = DIV32(QCONST32(1., 22), spx_sqrt(MULT16_32_Q15(e_ratio, ADD32(QCONST32(1., 16), balance)))); - e_left = SHR32(MULT16_16(spx_sqrt(balance), e_right), 8); - - for (i=frame_size-1;i>=0;i--) - { - spx_word16_t tmp=data[i]; - stereo->smooth_left = EXTRACT16(PSHR32(MAC16_16(MULT16_16(stereo->smooth_left, QCONST16(0.98, 15)), e_left, QCONST16(0.02, 15)), 15)); - stereo->smooth_right = EXTRACT16(PSHR32(MAC16_16(MULT16_16(stereo->smooth_right, QCONST16(0.98, 15)), e_right, QCONST16(0.02, 15)), 15)); - data[2*i] = (float)MULT16_16_P14(stereo->smooth_left, tmp); - data[2*i+1] = (float)MULT16_16_P14(stereo->smooth_right, tmp); - } -} -#endif /* #ifndef DISABLE_FLOAT_API */ - -EXPORT void speex_decode_stereo_int(spx_int16_t *data, int frame_size, SpeexStereoState *_stereo) -{ - int i; - spx_word32_t balance; - spx_word16_t e_left, e_right, e_ratio; - RealSpeexStereoState *stereo = (RealSpeexStereoState*)_stereo; - - COMPATIBILITY_HACK(stereo); - - balance=stereo->balance; - e_ratio=stereo->e_ratio; - - /* These two are Q14, with max value just below 2. */ - e_right = DIV32(QCONST32(1., 22), spx_sqrt(MULT16_32_Q15(e_ratio, ADD32(QCONST32(1., 16), balance)))); - e_left = SHR32(MULT16_16(spx_sqrt(balance), e_right), 8); - - for (i=frame_size-1;i>=0;i--) - { - spx_int16_t tmp=data[i]; - stereo->smooth_left = EXTRACT16(PSHR32(MAC16_16(MULT16_16(stereo->smooth_left, QCONST16(0.98, 15)), e_left, QCONST16(0.02, 15)), 15)); - stereo->smooth_right = EXTRACT16(PSHR32(MAC16_16(MULT16_16(stereo->smooth_right, QCONST16(0.98, 15)), e_right, QCONST16(0.02, 15)), 15)); - data[2*i] = (spx_int16_t)MULT16_16_P14(stereo->smooth_left, tmp); - data[2*i+1] = (spx_int16_t)MULT16_16_P14(stereo->smooth_right, tmp); - } -} - -EXPORT int speex_std_stereo_request_handler(SpeexBits *bits, void *state, void *data) -{ - RealSpeexStereoState *stereo; - spx_word16_t sign=1, dexp; - int tmp; - - stereo = (RealSpeexStereoState*)data; - - COMPATIBILITY_HACK(stereo); - - if (speex_bits_unpack_unsigned(bits, 1)) - sign=-1; - dexp = speex_bits_unpack_unsigned(bits, 5); -#ifndef FIXED_POINT - stereo->balance = exp(sign*.25*dexp); -#else - stereo->balance = spx_exp(MULT16_16(sign, SHL16(dexp, 9))); -#endif - tmp = speex_bits_unpack_unsigned(bits, 2); - stereo->e_ratio = e_ratio_quant[tmp]; - - return 0; -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.c deleted file mode 100755 index 5b7dd9b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.c +++ /dev/null @@ -1,275 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: vbr.c - - VBR-related routines - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "vbr.h" -#include <math.h> - - -#define sqr(x) ((x)*(x)) - -#define MIN_ENERGY 6000 -#define NOISE_POW .3 - -#ifndef DISABLE_VBR - -const float vbr_nb_thresh[9][11]={ - {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f}, /* CNG */ - { 4.0f, 2.5f, 2.0f, 1.2f, 0.5f, 0.0f, -0.5f, -0.7f, -0.8f, -0.9f, -1.0f}, /* 2 kbps */ - {10.0f, 6.5f, 5.2f, 4.5f, 3.9f, 3.5f, 3.0f, 2.5f, 2.3f, 1.8f, 1.0f}, /* 6 kbps */ - {11.0f, 8.8f, 7.5f, 6.5f, 5.0f, 3.9f, 3.9f, 3.9f, 3.5f, 3.0f, 1.0f}, /* 8 kbps */ - {11.0f, 11.0f, 9.9f, 8.5f, 7.0f, 6.0f, 4.5f, 4.0f, 4.0f, 4.0f, 2.0f}, /* 11 kbps */ - {11.0f, 11.0f, 11.0f, 11.0f, 9.5f, 8.5f, 8.0f, 7.0f, 6.0f, 5.0f, 3.0f}, /* 15 kbps */ - {11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 9.5f, 8.5f, 7.0f, 6.0f, 5.0f}, /* 18 kbps */ - {11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 9.8f, 9.5f, 7.5f}, /* 24 kbps */ - { 7.0f, 4.5f, 3.7f, 3.0f, 2.5f, 2.0f, 1.8f, 1.5f, 1.0f, 0.0f, 0.0f} /* 4 kbps */ -}; - - -const float vbr_hb_thresh[5][11]={ - {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f}, /* silence */ - {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f}, /* 2 kbps */ - {11.0f, 11.0f, 9.5f, 8.5f, 7.5f, 6.0f, 5.0f, 3.9f, 3.0f, 2.0f, 1.0f}, /* 6 kbps */ - {11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 9.5f, 8.7f, 7.8f, 7.0f, 6.5f, 4.0f}, /* 10 kbps */ - {11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 11.0f, 9.8f, 7.5f, 5.5f} /* 18 kbps */ -}; - -const float vbr_uhb_thresh[2][11]={ - {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f}, /* silence */ - { 3.9f, 2.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f} /* 2 kbps */ -}; - -void vbr_init(VBRState *vbr) -{ - int i; - - vbr->average_energy=0; - vbr->last_energy=1; - vbr->accum_sum=0; - vbr->energy_alpha=.1; - vbr->soft_pitch=0; - vbr->last_pitch_coef=0; - vbr->last_quality=0; - - vbr->noise_accum = .05*pow(MIN_ENERGY, NOISE_POW); - vbr->noise_accum_count=.05; - vbr->noise_level=vbr->noise_accum/vbr->noise_accum_count; - vbr->consec_noise=0; - - - for (i=0;i<VBR_MEMORY_SIZE;i++) - vbr->last_log_energy[i] = log(MIN_ENERGY); -} - - -/* - This function should analyse the signal and decide how critical the - coding error will be perceptually. The following factors should be - taken into account: - - -Attacks (positive energy derivative) should be coded with more bits - - -Stationary voiced segments should receive more bits - - -Segments with (very) low absolute energy should receive less bits (maybe - only shaped noise?) - - -DTX for near-zero energy? - - -Stationary fricative segments should have less bits - - -Temporal masking: when energy slope is decreasing, decrease the bit-rate - - -Decrease bit-rate for males (low pitch)? - - -(wideband only) less bits in the high-band when signal is very - non-stationary (harder to notice high-frequency noise)??? - -*/ - -float vbr_analysis(VBRState *vbr, spx_word16_t *sig, int len, int pitch, float pitch_coef) -{ - int i; - float ener=0, ener1=0, ener2=0; - float qual=7; - int va; - float log_energy; - float non_st=0; - float voicing; - float pow_ener; - - for (i=0;i<len>>1;i++) - ener1 += ((float)sig[i])*sig[i]; - - for (i=len>>1;i<len;i++) - ener2 += ((float)sig[i])*sig[i]; - ener=ener1+ener2; - - log_energy = log(ener+MIN_ENERGY); - for (i=0;i<VBR_MEMORY_SIZE;i++) - non_st += sqr(log_energy-vbr->last_log_energy[i]); - non_st = non_st/(30*VBR_MEMORY_SIZE); - if (non_st>1) - non_st=1; - - voicing = 3*(pitch_coef-.4)*fabs(pitch_coef-.4); - vbr->average_energy = (1-vbr->energy_alpha)*vbr->average_energy + vbr->energy_alpha*ener; - vbr->noise_level=vbr->noise_accum/vbr->noise_accum_count; - pow_ener = pow(ener,NOISE_POW); - if (vbr->noise_accum_count<.06 && ener>MIN_ENERGY) - vbr->noise_accum = .05*pow_ener; - - if ((voicing<.3 && non_st < .2 && pow_ener < 1.2*vbr->noise_level) - || (voicing<.3 && non_st < .05 && pow_ener < 1.5*vbr->noise_level) - || (voicing<.4 && non_st < .05 && pow_ener < 1.2*vbr->noise_level) - || (voicing<0 && non_st < .05)) - { - float tmp; - va = 0; - vbr->consec_noise++; - if (pow_ener > 3*vbr->noise_level) - tmp = 3*vbr->noise_level; - else - tmp = pow_ener; - if (vbr->consec_noise>=4) - { - vbr->noise_accum = .95*vbr->noise_accum + .05*tmp; - vbr->noise_accum_count = .95*vbr->noise_accum_count + .05; - } - } else { - va = 1; - vbr->consec_noise=0; - } - - if (pow_ener < vbr->noise_level && ener>MIN_ENERGY) - { - vbr->noise_accum = .95*vbr->noise_accum + .05*pow_ener; - vbr->noise_accum_count = .95*vbr->noise_accum_count + .05; - } - - /* Checking for very low absolute energy */ - if (ener < 30000) - { - qual -= .7; - if (ener < 10000) - qual-=.7; - if (ener < 3000) - qual-=.7; - } else { - float short_diff, long_diff; - short_diff = log((ener+1)/(1+vbr->last_energy)); - long_diff = log((ener+1)/(1+vbr->average_energy)); - /*fprintf (stderr, "%f %f\n", short_diff, long_diff);*/ - - if (long_diff<-5) - long_diff=-5; - if (long_diff>2) - long_diff=2; - - if (long_diff>0) - qual += .6*long_diff; - if (long_diff<0) - qual += .5*long_diff; - if (short_diff>0) - { - if (short_diff>5) - short_diff=5; - qual += .5*short_diff; - } - /* Checking for energy increases */ - if (ener2 > 1.6*ener1) - qual += .5; - } - vbr->last_energy = ener; - vbr->soft_pitch = .6*vbr->soft_pitch + .4*pitch_coef; - qual += 2.2*((pitch_coef-.4) + (vbr->soft_pitch-.4)); - - if (qual < vbr->last_quality) - qual = .5*qual + .5*vbr->last_quality; - if (qual<4) - qual=4; - if (qual>10) - qual=10; - - /* - if (vbr->consec_noise>=2) - qual-=1.3; - if (vbr->consec_noise>=5) - qual-=1.3; - if (vbr->consec_noise>=12) - qual-=1.3; - */ - if (vbr->consec_noise>=3) - qual=4; - - if (vbr->consec_noise) - qual -= 1.0 * (log(3.0 + vbr->consec_noise)-log(3)); - if (qual<0) - qual=0; - - if (ener<60000) - { - if (vbr->consec_noise>2) - qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3)); - if (ener<10000&&vbr->consec_noise>2) - qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3)); - if (qual<0) - qual=0; - qual += .3*log(.0001+ener/60000.0); - } - if (qual<-1) - qual=-1; - - /*printf ("%f %f %f %f %d\n", qual, voicing, non_st, pow_ener/(.01+vbr->noise_level), va);*/ - - vbr->last_pitch_coef = pitch_coef; - vbr->last_quality = qual; - - for (i=VBR_MEMORY_SIZE-1;i>0;i--) - vbr->last_log_energy[i] = vbr->last_log_energy[i-1]; - vbr->last_log_energy[0] = log_energy; - - /*printf ("VBR: %f %f %f %d %f\n", (float)(log_energy-log(vbr->average_energy+MIN_ENERGY)), non_st, voicing, va, vbr->noise_level);*/ - - return qual; -} - -void vbr_destroy(VBRState *vbr) -{ -} - -#endif /* #ifndef DISABLE_VBR */ diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.h deleted file mode 100755 index ff1e3e4..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vbr.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file vbr.h - @brief Variable Bit-Rate (VBR) related routines -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - - -#ifndef VBR_H -#define VBR_H - -#include "arch.h" - -#define VBR_MEMORY_SIZE 5 - -extern const float vbr_nb_thresh[9][11]; -extern const float vbr_hb_thresh[5][11]; -extern const float vbr_uhb_thresh[2][11]; - -/** VBR state. */ -typedef struct VBRState { - float energy_alpha; - float average_energy; - float last_energy; - float last_log_energy[VBR_MEMORY_SIZE]; - float accum_sum; - float last_pitch_coef; - float soft_pitch; - float last_quality; - float noise_level; - float noise_accum; - float noise_accum_count; - int consec_noise; -} VBRState; - -void vbr_init(VBRState *vbr); - -float vbr_analysis(VBRState *vbr, spx_word16_t *sig, int len, int pitch, float pitch_coef); - -void vbr_destroy(VBRState *vbr); - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vorbis_psy.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vorbis_psy.h deleted file mode 100755 index 6871057..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vorbis_psy.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (C) 2005 Jean-Marc Valin, CSIRO, Christopher Montgomery - File: vorbis_psy.h - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef VORBIS_PSY_H -#define VORBIS_PSY_H - -#ifdef VORBIS_PSYCHO - -#include "smallft.h" -#define P_BANDS 17 /* 62Hz to 16kHz */ -#define NOISE_COMPAND_LEVELS 40 - - -#define todB(x) ((x)>1e-13?log((x)*(x))*4.34294480f:-30) -#define fromdB(x) (exp((x)*.11512925f)) - -/* The bark scale equations are approximations, since the original - table was somewhat hand rolled. The below are chosen to have the - best possible fit to the rolled tables, thus their somewhat odd - appearance (these are more accurate and over a longer range than - the oft-quoted bark equations found in the texts I have). The - approximations are valid from 0 - 30kHz (nyquist) or so. - - all f in Hz, z in Bark */ - -#define toBARK(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n)) -#define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f) - -/* Frequency to octave. We arbitrarily declare 63.5 Hz to be octave - 0.0 */ - -#define toOC(n) (log(n)*1.442695f-5.965784f) -#define fromOC(o) (exp(((o)+5.965784f)*.693147f)) - - -typedef struct { - - float noisewindowlo; - float noisewindowhi; - int noisewindowlomin; - int noisewindowhimin; - int noisewindowfixed; - float noiseoff[P_BANDS]; - float noisecompand[NOISE_COMPAND_LEVELS]; - -} VorbisPsyInfo; - - - -typedef struct { - int n; - int rate; - struct drft_lookup lookup; - VorbisPsyInfo *vi; - - float *window; - float *noiseoffset; - long *bark; - -} VorbisPsy; - - -VorbisPsy *vorbis_psy_init(int rate, int size); -void vorbis_psy_destroy(VorbisPsy *psy); -void compute_curve(VorbisPsy *psy, float *audio, float *curve); -void curve_to_lpc(VorbisPsy *psy, float *curve, float *awk1, float *awk2, int ord); - -#endif -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.c deleted file mode 100755 index 609f124..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin - File: vq.c - Vector quantization - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "vq.h" -#include "stack_alloc.h" -#include "arch.h" - -#ifdef _USE_SSE -#include <xmmintrin.h> -#include "vq_sse.h" -#elif defined(SHORTCUTS) && (defined(ARM4_ASM) || defined(ARM5E_ASM)) -#include "vq_arm4.h" -#elif defined(BFIN_ASM) -#include "vq_bfin.h" -#endif - - -int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries) -{ - int i=0; - while (i<entries-1 && in>boundary[0]) - { - boundary++; - i++; - } - return i; -} - -int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries) -{ - int i=0; - while (i<entries-1 && in>boundary[0]) - { - boundary++; - i++; - } - return i; -} - - -#ifndef OVERRIDE_VQ_NBEST -/*Finds the indices of the n-best entries in a codebook*/ -void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - int i,j,k,used; - used = 0; - for (i=0;i<entries;i++) - { - spx_word32_t dist=0; - for (j=0;j<len;j++) - dist = MAC16_16(dist,in[j],*codebook++); -#ifdef FIXED_POINT - dist=SUB32(SHR32(E[i],1),dist); -#else - dist=.5f*E[i]-dist; -#endif - if (i<N || dist<best_dist[N-1]) - { - for (k=N-1; (k >= 1) && (k > used || dist < best_dist[k-1]); k--) - { - best_dist[k]=best_dist[k-1]; - nbest[k] = nbest[k-1]; - } - best_dist[k]=dist; - nbest[k]=i; - used++; - } - } -} -#endif - - - - -#ifndef OVERRIDE_VQ_NBEST_SIGN -/*Finds the indices of the n-best entries in a codebook with sign*/ -void vq_nbest_sign(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - int i,j,k, sign, used; - used=0; - for (i=0;i<entries;i++) - { - spx_word32_t dist=0; - for (j=0;j<len;j++) - dist = MAC16_16(dist,in[j],*codebook++); - if (dist>0) - { - sign=0; - dist=-dist; - } else - { - sign=1; - } -#ifdef FIXED_POINT - dist = ADD32(dist,SHR32(E[i],1)); -#else - dist = ADD32(dist,.5f*E[i]); -#endif - if (i<N || dist<best_dist[N-1]) - { - for (k=N-1; (k >= 1) && (k > used || dist < best_dist[k-1]); k--) - { - best_dist[k]=best_dist[k-1]; - nbest[k] = nbest[k-1]; - } - best_dist[k]=dist; - nbest[k]=i; - used++; - if (sign) - nbest[k]+=entries; - } - } -} -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.h deleted file mode 100755 index 5a4ced2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ -/** - @file vq.h - @brief Vector quantization -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef VQ_H -#define VQ_H - -#include "arch.h" - -int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries); -int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries); - -#ifdef _USE_SSE -#include <xmmintrin.h> -void vq_nbest(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); - -void vq_nbest_sign(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); -#else -void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); - -void vq_nbest_sign(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack); -#endif - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_arm4.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_arm4.h deleted file mode 100755 index 585b861..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_arm4.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file vq_arm4.h - @brief ARM4-optimized vq routine -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_VQ_NBEST -void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - int i,j; - for (i=0;i<entries;i+=4) - { -#if 1 - spx_word32_t dist1, dist2, dist3, dist4; - int dead1, dead2, dead3, dead4, dead5, dead6, dead7, dead8; - __asm__ __volatile__ ( - "mov %0, #0 \n\t" - "mov %1, #0 \n\t" - "mov %2, #0 \n\t" - "mov %3, #0 \n\t" - "mov %10, %4 \n\t" - "add %4, %4, %4\n\t" - ".vqloop%=:\n\t" - "ldrsh %7, [%5], #2 \n\t" - "ldrsh %8, [%6] \n\t" - "mov %9, %6 \n\t" - "mla %0, %7, %8, %0 \n\t" - "ldrsh %8, [%9, %4]! \n\t" - "mla %1, %7, %8, %1 \n\t" - "ldrsh %8, [%9, %4]!\n\t" - "mla %2, %7, %8, %2 \n\t" - "ldrsh %8, [%9, %4]! \n\t" - "mla %3, %7, %8, %3 \n\t" - "subs %10, %10, #1 \n\t" - "add %6, %6, #2 \n\t" - "bne .vqloop%=" - : "=r" (dist1), "=r" (dist2), "=r" (dist3), "=r" (dist4), - "=r" (dead1), "=r" (dead2), "=r" (codebook), "=r" (dead4), - "=r" (dead5), "=r" (dead6), "=r" (dead7) - : "4" (len), "5" (in), "6" (codebook) - : "cc"); -#else -dist1=dist2=dist3=dist4=0; - /* spx_word32_t dist1=0; - spx_word32_t dist2=0; - spx_word32_t dist3=0; - spx_word32_t dist4=0;*/ - for (j=0;j<2;j++) - { - const spx_word16_t *code = codebook; - dist1 = MAC16_16(dist1,in[j],*code); - code += len; - dist2 = MAC16_16(dist2,in[j],*code); - code += len; - dist3 = MAC16_16(dist3,in[j],*code); - code += len; - dist4 = MAC16_16(dist4,in[j],*code); - codebook++; - } -#endif - dist1=SUB32(SHR(*E++,1),dist1); - if (dist1<*best_dist || i==0) - { - *best_dist=dist1; - *nbest=i; - } - dist2=SUB32(SHR(*E++,1),dist2); - if (dist2<*best_dist) - { - *best_dist=dist2; - *nbest=i+1; - } - dist3=SUB32(SHR(*E++,1),dist3); - if (dist3<*best_dist) - { - *best_dist=dist3; - *nbest=i+2; - } - dist4=SUB32(SHR(*E++,1),dist4); - if (dist4<*best_dist) - { - *best_dist=dist4; - *nbest=i+3; - } - codebook += 3*len; - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_bfin.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_bfin.h deleted file mode 100755 index 2cc9ea5..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_bfin.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2005 Analog Devices */ -/** - @file vq_bfin.h - @author Jean-Marc Valin - @brief Blackfin-optimized vq routine -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_VQ_NBEST -void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - if (N==1) - { - best_dist[0] = 2147483647; - { - spx_word32_t dist; - __asm__ __volatile__ - ( - "LC0 = %8;\n\t" - "R2 = 0;\n\t" - "I0 = %6;\n\t" - "B0 = %6;\n\t" - "L0 = %9;\n\t" - "LOOP entries_loop%= LC0;\n\t" - "LOOP_BEGIN entries_loop%=;\n\t" - "%0 = [%4++];\n\t" - "%0 >>= 1;\n\t" - "A0 = %0;\n\t" - "R0.L = W[%1++%7] || R1.L = W[I0++];\n\t" - "LOOP vq_loop%= LC1 = %5;\n\t" - "LOOP_BEGIN vq_loop%=;\n\t" - "%0 = (A0 -= R0.L*R1.L) (IS) || R0.L = W[%1++%7] || R1.L = W[I0++];\n\t" - "LOOP_END vq_loop%=;\n\t" - "%0 = (A0 -= R0.L*R1.L) (IS);\n\t" - "cc = %0 < %2;\n\t" - "if cc %2 = %0;\n\t" - "if cc %3 = R2;\n\t" - "R2 += 1;\n\t" - "LOOP_END entries_loop%=;\n\t" - : "=&D" (dist), "=&a" (codebook), "=&d" (best_dist[0]), "=&d" (nbest[0]), "=&a" (E) - : "a" (len-1), "a" (in), "a" (2), "d" (entries), "d" (len<<1), "1" (codebook), "4" (E), "2" (best_dist[0]), "3" (nbest[0]) - : "R0", "R1", "R2", "I0", "L0", "B0", "A0", "cc", "memory" - ); - } - } else { - int i,k,used; - used = 0; - for (i=0;i<entries;i++) - { - spx_word32_t dist; - __asm__ - ( - "%0 >>= 1;\n\t" - "A0 = %0;\n\t" - "I0 = %3;\n\t" - "L0 = 0;\n\t" - "R0.L = W[%1++%4] || R1.L = W[I0++];\n\t" - "LOOP vq_loop%= LC0 = %2;\n\t" - "LOOP_BEGIN vq_loop%=;\n\t" - "%0 = (A0 -= R0.L*R1.L) (IS) || R0.L = W[%1++%4] || R1.L = W[I0++];\n\t" - "LOOP_END vq_loop%=;\n\t" - "%0 = (A0 -= R0.L*R1.L) (IS);\n\t" - : "=D" (dist), "=a" (codebook) - : "a" (len-1), "a" (in), "a" (2), "1" (codebook), "0" (E[i]) - : "R0", "R1", "I0", "L0", "A0" - ); - if (i<N || dist<best_dist[N-1]) - { - for (k=N-1; (k >= 1) && (k > used || dist < best_dist[k-1]); k--) - { - best_dist[k]=best_dist[k-1]; - nbest[k] = nbest[k-1]; - } - best_dist[k]=dist; - nbest[k]=i; - used++; - } - } - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_sse.h b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_sse.h deleted file mode 100755 index 00a42ce..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/vq_sse.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2004 Jean-Marc Valin */ -/** - @file vq_sse.h - @brief SSE-optimized vq routine -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define OVERRIDE_VQ_NBEST -void vq_nbest(spx_word16_t *_in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - int i,j,k,used; - VARDECL(float *dist); - VARDECL(__m128 *in); - __m128 half; - used = 0; - ALLOC(dist, entries, float); - half = _mm_set_ps1(.5f); - ALLOC(in, len, __m128); - for (i=0;i<len;i++) - in[i] = _mm_set_ps1(_in[i]); - for (i=0;i<entries>>2;i++) - { - __m128 d = _mm_mul_ps(E[i], half); - for (j=0;j<len;j++) - d = _mm_sub_ps(d, _mm_mul_ps(in[j], *codebook++)); - _mm_storeu_ps(dist+4*i, d); - } - for (i=0;i<entries;i++) - { - if (i<N || dist[i]<best_dist[N-1]) - { - for (k=N-1; (k >= 1) && (k > used || dist[i] < best_dist[k-1]); k--) - { - best_dist[k]=best_dist[k-1]; - nbest[k] = nbest[k-1]; - } - best_dist[k]=dist[i]; - nbest[k]=i; - used++; - } - } -} - - - - -#define OVERRIDE_VQ_NBEST_SIGN -void vq_nbest_sign(spx_word16_t *_in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack) -{ - int i,j,k,used; - VARDECL(float *dist); - VARDECL(__m128 *in); - __m128 half; - used = 0; - ALLOC(dist, entries, float); - half = _mm_set_ps1(.5f); - ALLOC(in, len, __m128); - for (i=0;i<len;i++) - in[i] = _mm_set_ps1(_in[i]); - for (i=0;i<entries>>2;i++) - { - __m128 d = _mm_setzero_ps(); - for (j=0;j<len;j++) - d = _mm_add_ps(d, _mm_mul_ps(in[j], *codebook++)); - _mm_storeu_ps(dist+4*i, d); - } - for (i=0;i<entries;i++) - { - int sign; - if (dist[i]>0) - { - sign=0; - dist[i]=-dist[i]; - } else - { - sign=1; - } - dist[i] += .5f*((float*)E)[i]; - if (i<N || dist[i]<best_dist[N-1]) - { - for (k=N-1; (k >= 1) && (k > used || dist[i] < best_dist[k-1]); k--) - { - best_dist[k]=best_dist[k-1]; - nbest[k] = nbest[k-1]; - } - best_dist[k]=dist[i]; - nbest[k]=i; - used++; - if (sign) - nbest[k]+=entries; - } - } -} diff --git a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/window.c b/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/window.c deleted file mode 100755 index ac042d4..0000000 --- a/TeamTalk/IOSDuoduo/Voice/Code/Libs/libspeex/window.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright (C) 2006 Jean-Marc Valin - File: window.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "arch.h" - -#ifdef FIXED_POINT -const spx_word16_t lag_window[11] = { - 16384, 16337, 16199, 15970, 15656, 15260, 14790, 14254, 13659, 13015, 12330 -}; - -const spx_word16_t lpc_window[200] = { -1310, 1313, 1321, 1333, 1352, 1375, 1403, 1436, -1475, 1518, 1567, 1621, 1679, 1743, 1811, 1884, -1962, 2044, 2132, 2224, 2320, 2421, 2526, 2636, -2750, 2868, 2990, 3116, 3246, 3380, 3518, 3659, -3804, 3952, 4104, 4259, 4417, 4578, 4742, 4909, -5079, 5251, 5425, 5602, 5781, 5963, 6146, 6331, -6518, 6706, 6896, 7087, 7280, 7473, 7668, 7863, -8059, 8256, 8452, 8650, 8847, 9044, 9241, 9438, -9635, 9831, 10026, 10220, 10414, 10606, 10797, 10987, -11176, 11363, 11548, 11731, 11912, 12091, 12268, 12443, -12615, 12785, 12952, 13116, 13277, 13435, 13590, 13742, -13890, 14035, 14176, 14314, 14448, 14578, 14704, 14826, -14944, 15058, 15168, 15273, 15374, 15470, 15562, 15649, -15732, 15810, 15883, 15951, 16015, 16073, 16127, 16175, -16219, 16257, 16291, 16319, 16342, 16360, 16373, 16381, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, -16384, 16384, 16384, 16361, 16294, 16183, 16028, 15830, -15588, 15304, 14979, 14613, 14207, 13763, 13282, 12766, -12215, 11631, 11016, 10373, 9702, 9007, 8289, 7551, -6797, 6028, 5251, 4470, 3695, 2943, 2248, 1696 -}; -#else -const spx_word16_t lag_window[11] = { - 1.00000, 0.99716, 0.98869, 0.97474, 0.95554, 0.93140, 0.90273, 0.86998, 0.83367, 0.79434, 0.75258 -}; - -const spx_word16_t lpc_window[200] = { - 0.080000f, 0.080158f, 0.080630f, 0.081418f, 0.082520f, 0.083935f, 0.085663f, 0.087703f, - 0.090052f, 0.092710f, 0.095674f, 0.098943f, 0.102514f, 0.106385f, 0.110553f, 0.115015f, - 0.119769f, 0.124811f, 0.130137f, 0.135744f, 0.141628f, 0.147786f, 0.154212f, 0.160902f, - 0.167852f, 0.175057f, 0.182513f, 0.190213f, 0.198153f, 0.206328f, 0.214731f, 0.223357f, - 0.232200f, 0.241254f, 0.250513f, 0.259970f, 0.269619f, 0.279453f, 0.289466f, 0.299651f, - 0.310000f, 0.320507f, 0.331164f, 0.341965f, 0.352901f, 0.363966f, 0.375151f, 0.386449f, - 0.397852f, 0.409353f, 0.420943f, 0.432615f, 0.444361f, 0.456172f, 0.468040f, 0.479958f, - 0.491917f, 0.503909f, 0.515925f, 0.527959f, 0.540000f, 0.552041f, 0.564075f, 0.576091f, - 0.588083f, 0.600042f, 0.611960f, 0.623828f, 0.635639f, 0.647385f, 0.659057f, 0.670647f, - 0.682148f, 0.693551f, 0.704849f, 0.716034f, 0.727099f, 0.738035f, 0.748836f, 0.759493f, - 0.770000f, 0.780349f, 0.790534f, 0.800547f, 0.810381f, 0.820030f, 0.829487f, 0.838746f, - 0.847800f, 0.856643f, 0.865269f, 0.873672f, 0.881847f, 0.889787f, 0.897487f, 0.904943f, - 0.912148f, 0.919098f, 0.925788f, 0.932214f, 0.938372f, 0.944256f, 0.949863f, 0.955189f, - 0.960231f, 0.964985f, 0.969447f, 0.973615f, 0.977486f, 0.981057f, 0.984326f, 0.987290f, - 0.989948f, 0.992297f, 0.994337f, 0.996065f, 0.997480f, 0.998582f, 0.999370f, 0.999842f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, - 1.000000f, 1.000000f, 1.000000f, 0.998640f, 0.994566f, 0.987787f, 0.978324f, 0.966203f, - 0.951458f, 0.934131f, 0.914270f, 0.891931f, 0.867179f, 0.840084f, 0.810723f, 0.779182f, - 0.745551f, 0.709930f, 0.672424f, 0.633148f, 0.592223f, 0.549781f, 0.505964f, 0.460932f, - 0.414863f, 0.367968f, 0.320511f, 0.272858f, 0.225569f, 0.179655f, 0.137254f, 0.103524f -}; -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/SpeexAllHeaders.h b/TeamTalk/IOSDuoduo/Voice/SpeexAllHeaders.h deleted file mode 100755 index 4c3d888..0000000 --- a/TeamTalk/IOSDuoduo/Voice/SpeexAllHeaders.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// SpeexAllHeaders.h -// OggSpeex -// -// Created by Jiang Chuncheng on 11/26/12. -// Copyright (c) 2012 Sense Force. All rights reserved. -// - -#ifndef OggSpeex_SpeexAllHeaders_h -#define OggSpeex_SpeexAllHeaders_h - -#import "ogg.h" -#import "os_types.h" -#import "speex.h" -#import "speex_bits.h" -#import "speex_buffer.h" -#import "speex_callbacks.h" -#import "speex_config_types.h" -#import "speex_echo.h" -#import "speex_header.h" -#import "speex_jitter.h" -#import "speex_preprocess.h" -#import "speex_stereo.h" -#import "speex_types.h" - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.h b/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.h deleted file mode 100755 index bf768a3..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - - File: AQRecorder.h -Abstract: Helper class for recording audio files via the AudioQueue - Version: 2.5 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple -Inc. ("Apple") in consideration of your agreement to the following -terms, and your use, installation, modification or redistribution of -this Apple software constitutes acceptance of these terms. If you do -not agree with these terms, please do not use, install, modify or -redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and -subject to these terms, Apple grants you a personal, non-exclusive -license, under Apple's copyrights in this original Apple software (the -"Apple Software"), to use, reproduce, modify and redistribute the Apple -Software, with or without modifications, in source and/or binary forms; -provided that if you redistribute the Apple Software in its entirety and -without modifications, you must retain this notice and the following -text and disclaimers in all such redistributions of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may -be used to endorse or promote products derived from the Apple Software -without specific prior written permission from Apple. Except as -expressly stated in this notice, no other rights or licenses, express or -implied, are granted by Apple herein, including but not limited to any -patent rights that may be infringed by your derivative works or by other -works in which the Apple Software may be incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE -MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION -THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND -OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, -MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED -AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), -STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -Copyright (C) 2012 Apple Inc. All Rights Reserved. - - -*/ - -#include <AudioToolbox/AudioToolbox.h> -#include <Foundation/Foundation.h> -#include <libkern/OSAtomic.h> - -#include "CAStreamBasicDescription.h" -#include "CAXException.h" -#include "Encapsulator.h" - -#define kNumberRecordBuffers 3 -#define kBufferDurationSeconds .5 - -class AQRecorder - { - public: - AQRecorder(); - ~AQRecorder(); - - UInt32 GetNumberChannels() const { return mRecordFormat.NumberChannels(); } - AudioQueueRef Queue() const { return mQueue; } - CAStreamBasicDescription DataFormat() const { return mRecordFormat; } - - Boolean StartRecord(Encapsulator *encapsulator); - void StopRecord(); - Boolean IsRunning() const { return mIsRunning; } - - UInt64 startTime; - - private: - AudioQueueRef mQueue; - AudioQueueBufferRef mBuffers[kNumberRecordBuffers]; - SInt64 mRecordPacket; // current packet number in record file - CAStreamBasicDescription mRecordFormat; - Boolean mIsRunning; - - OSStatus errorStatus; - Encapsulator *mEncapsulator; - - void SetupAudioFormat(UInt32 inFormatID); - int ComputeRecordBufferSize(const AudioStreamBasicDescription *format, float seconds); - - static void MyInputBufferHandler( void * inUserData, - AudioQueueRef inAQ, - AudioQueueBufferRef inBuffer, - const AudioTimeStamp * inStartTime, - UInt32 inNumPackets, - const AudioStreamPacketDescription* inPacketDesc); - }; \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.mm b/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.mm deleted file mode 100755 index 87080e2..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/AQRecorder.mm +++ /dev/null @@ -1,224 +0,0 @@ -/* - - File: AQRecorder.mm -Abstract: n/a - Version: 2.5 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple -Inc. ("Apple") in consideration of your agreement to the following -terms, and your use, installation, modification or redistribution of -this Apple software constitutes acceptance of these terms. If you do -not agree with these terms, please do not use, install, modify or -redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and -subject to these terms, Apple grants you a personal, non-exclusive -license, under Apple's copyrights in this original Apple software (the -"Apple Software"), to use, reproduce, modify and redistribute the Apple -Software, with or without modifications, in source and/or binary forms; -provided that if you redistribute the Apple Software in its entirety and -without modifications, you must retain this notice and the following -text and disclaimers in all such redistributions of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may -be used to endorse or promote products derived from the Apple Software -without specific prior written permission from Apple. Except as -expressly stated in this notice, no other rights or licenses, express or -implied, are granted by Apple herein, including but not limited to any -patent rights that may be infringed by your derivative works or by other -works in which the Apple Software may be incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE -MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION -THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND -OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, -MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED -AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), -STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -Copyright (C) 2012 Apple Inc. All Rights Reserved. - - -*/ - -#include "AQRecorder.h" -#include "CAStreamBasicDescription.h" -#include "CAXException.h" - -// ____________________________________________________________________________________ -// Determine the size, in bytes, of a buffer necessary to represent the supplied number -// of seconds of audio data. -int AQRecorder::ComputeRecordBufferSize(const AudioStreamBasicDescription *format, float seconds) -{ - int packets, frames, bytes = 0; - frames = (int)ceil(seconds * format->mSampleRate); - - if (format->mBytesPerFrame > 0) - bytes = frames * format->mBytesPerFrame; - else { - UInt32 maxPacketSize; - if (format->mBytesPerPacket > 0) - maxPacketSize = format->mBytesPerPacket; // constant packet size - else { - UInt32 propertySize = sizeof(maxPacketSize); - errorStatus = AudioQueueGetProperty(mQueue, kAudioQueueProperty_MaximumOutputPacketSize, &maxPacketSize, - &propertySize); - if (errorStatus) { - NSLog(@"ComputeRecordBufferSize error:%ld", errorStatus); - return 0; - } - } - if (format->mFramesPerPacket > 0) - packets = frames / format->mFramesPerPacket; - else - packets = frames; // worst-case scenario: 1 frame in a packet - if (packets == 0) // sanity check - packets = 1; - bytes = packets * maxPacketSize; - } - return bytes; -} - -// ____________________________________________________________________________________ -// AudioQueue callback function, called when an input buffers has been filled. -void AQRecorder::MyInputBufferHandler( void * inUserData, - AudioQueueRef inAQ, - AudioQueueBufferRef inBuffer, - const AudioTimeStamp * inStartTime, - UInt32 inNumPackets, - const AudioStreamPacketDescription* inPacketDesc) -{ - AQRecorder *aqr = (AQRecorder *)inUserData; - - if (inNumPackets > 0) { - - if (aqr->mEncapsulator) { - [aqr->mEncapsulator inputPCMDataFromBuffer:(unsigned char *)inBuffer->mAudioData size:inBuffer->mAudioDataByteSize]; - } - - aqr->mRecordPacket += inNumPackets; - } - - // if we're not stopping, re-enqueue the buffe so that it gets filled again - if (aqr->IsRunning()) { - OSStatus errorStatus = AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL); - if (errorStatus) { - NSLog(@"MyInputBufferHandler error:%ld", errorStatus); - return; - } - } -} - -AQRecorder::AQRecorder() -{ - mIsRunning = false; - mRecordPacket = 0; -} - -AQRecorder::~AQRecorder() -{ - AudioQueueDispose(mQueue, TRUE); -// AudioFileClose(mRecordFile); -// if (mFileName) CFRelease(mFileName); - mEncapsulator = nil; -} - -void AQRecorder::SetupAudioFormat(UInt32 inFormatID) -{ - memset(&mRecordFormat, 0, sizeof(mRecordFormat)); - - mRecordFormat.mFormatID = inFormatID; - if (inFormatID == kAudioFormatLinearPCM) - { - // if we want pcm, default to signed 16-bit little-endian - mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; - mRecordFormat.mBitsPerChannel = 16; - mRecordFormat.mChannelsPerFrame = 1; - mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame; - mRecordFormat.mFramesPerPacket = 1; - mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame * mRecordFormat.mFramesPerPacket; - - mRecordFormat.mSampleRate = 8000; //8k frames per second - } -} - -Boolean AQRecorder::StartRecord(Encapsulator *encapsulator) { - int i, bufferByteSize; - UInt32 size; - - mEncapsulator = encapsulator; - [mEncapsulator prepareForEncapsulating]; - - // specify the recording format - SetupAudioFormat(kAudioFormatLinearPCM); - - // create the queue - errorStatus = AudioQueueNewInput( - &mRecordFormat, - MyInputBufferHandler, - this /* userData */, - NULL /* run loop */, NULL /* run loop mode */, - 0 /* flags */, &mQueue); - if (errorStatus) { - NSLog(@"StartRecord error:%ld when AudioQueueNewInput ", errorStatus); - return false; - } - - // get the record format back from the queue's audio converter -- - // the file may require a more specific stream description than was necessary to create the encoder. - mRecordPacket = 0; - - size = sizeof(mRecordFormat); - errorStatus = AudioQueueGetProperty(mQueue, kAudioQueueProperty_StreamDescription, - &mRecordFormat, &size); - if (errorStatus) { - NSLog(@"StartRecord error:%ld when AudioQueueGetProperty StreamDescription", errorStatus); - } - - UInt32 val = 1; - errorStatus = AudioQueueSetProperty(mQueue, kAudioQueueProperty_EnableLevelMetering, &val, sizeof(UInt32)); - if (errorStatus) { - NSLog(@"StartRecord error:%ld when AudioQueueGetProperty LevelMetering", errorStatus); - } - - // allocate and enqueue buffers - bufferByteSize = ComputeRecordBufferSize(&mRecordFormat, kBufferDurationSeconds); // enough bytes for half a second - for (i = 0; i < kNumberRecordBuffers; ++i) { - errorStatus = AudioQueueAllocateBuffer(mQueue, bufferByteSize, &mBuffers[i]); - errorStatus = AudioQueueEnqueueBuffer(mQueue, mBuffers[i], 0, NULL); - if (errorStatus) { - NSLog(@"StartRecord error:%ld alloc and enqueue buffer", errorStatus); - } - } - // start the queue - mIsRunning = true; - errorStatus = AudioQueueStart(mQueue, NULL); - if (errorStatus) { - NSLog(@"StartRecord error:%ld", errorStatus); - return false; - } - return true; -} - -void AQRecorder::StopRecord() -{ - // end recording - mIsRunning = false; - errorStatus = AudioQueueStop(mQueue, true); - if (errorStatus) { - NSLog(@"StopRecord error:%ld", errorStatus); - } - AudioQueueDispose(mQueue, true); - - if (mEncapsulator) { - [mEncapsulator stopEncapsulating:NO]; - } - mEncapsulator = nil; - -} diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexAllHeaders.h b/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexAllHeaders.h deleted file mode 100755 index 4c3d888..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexAllHeaders.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// SpeexAllHeaders.h -// OggSpeex -// -// Created by Jiang Chuncheng on 11/26/12. -// Copyright (c) 2012 Sense Force. All rights reserved. -// - -#ifndef OggSpeex_SpeexAllHeaders_h -#define OggSpeex_SpeexAllHeaders_h - -#import "ogg.h" -#import "os_types.h" -#import "speex.h" -#import "speex_bits.h" -#import "speex_buffer.h" -#import "speex_callbacks.h" -#import "speex_config_types.h" -#import "speex_echo.h" -#import "speex_header.h" -#import "speex_jitter.h" -#import "speex_preprocess.h" -#import "speex_stereo.h" -#import "speex_types.h" - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.h b/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.h deleted file mode 100755 index 15a8799..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// SpeexCodec.h -// OggSpeex -// -// Created by Jiang Chuncheng on 11/26/12. -// Copyright (c) 2012 Sense Force. All rights reserved. -// - -/**----Guide---- - * Encode: open -> encode:length -> close - * Decode: open -> encode:length:output -> close - */ - -#import <Foundation/Foundation.h> -#import "SpeexAllHeaders.h" - -@interface SpeexCodec : NSObject { - int codecOpenedTimes; //the times the codec is opened - - int encodeFrameSize; - int decodeFrameSize; - SpeexBits encodeSpeexBits; - SpeexBits decodeSpeexBits; - void *encodeState; - void *decodeState; -} - -- (void)open:(int)quality; -- (NSData *)encode:(short *)pcmBuffer length:(int)lengthOfShorts; -- (int)decode:(Byte *)encodedBytes length:(int)lengthOfBytes output:(short *)decoded; -- (void)close; - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.m b/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.m deleted file mode 100755 index 274f672..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Codec/SpeexCodec.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// SpeexCodec.m -// OggSpeex -// -// Created by Jiang Chuncheng on 11/26/12. -// Copyright (c) 2012 Sense Force. All rights reserved. -// - -#import "SpeexCodec.h" - -@implementation SpeexCodec -- (id)init { - if (self = [super init]) { - codecOpenedTimes = 0; - } - return self; -} - -/* - quality value 1 ~ 10 - */ -- (void)open:(int)quality { - if ((quality < 1) || (quality > 10)) { - return; - } - if (codecOpenedTimes++ != 0) { - return; - } - else { - speex_bits_init(&encodeSpeexBits); - speex_bits_init(&decodeSpeexBits); - - encodeState = speex_encoder_init(&speex_nb_mode); - decodeState = speex_decoder_init(&speex_nb_mode); - - int tmp = quality; - speex_encoder_ctl(encodeState, SPEEX_SET_QUALITY, &tmp); - speex_encoder_ctl(encodeState, SPEEX_GET_FRAME_SIZE, &encodeFrameSize); - speex_decoder_ctl(decodeState, SPEEX_GET_FRAME_SIZE, &decodeFrameSize); - } -} - -- (NSData *)encode:(short *)pcmBuffer length:(int)lengthOfShorts { - if (codecOpenedTimes == 0) { - return nil; - } - - NSMutableData *decodedData = [NSMutableData dataWithCapacity:20]; - - short input_frame[encodeFrameSize]; - char cbits[200]; - int nbBytes; - - speex_bits_reset(&encodeSpeexBits); - - int nSamples = (int)ceil(lengthOfShorts / (float)encodeFrameSize); - - for (int sampleIndex = 0; sampleIndex < nSamples; sampleIndex++) { - memcpy(input_frame, pcmBuffer + (sampleIndex * encodeFrameSize * sizeof(short)), encodeFrameSize * sizeof(short)); - speex_encode_int(encodeState, input_frame, &encodeSpeexBits); - nbBytes = speex_bits_write(&encodeSpeexBits, cbits, encodeFrameSize); - - [decodedData appendBytes:cbits length:nbBytes]; - } - - return decodedData; -} - -- (int)decode:(unsigned char *)encodedBytes length:(int)lengthOfBytes output:(short *)decoded { - if ( ! codecOpenedTimes) - return 0; - - char cbits[200]; - memcpy(cbits, encodedBytes, lengthOfBytes); - - speex_bits_read_from(&decodeSpeexBits, cbits, lengthOfBytes); - - speex_decode_int(decodeState, &decodeSpeexBits, decoded); - - return decodeFrameSize; -} - -- (void)close { - if (--codecOpenedTimes != 0) { - return; - } - - speex_bits_destroy(&encodeSpeexBits); - speex_bits_destroy(&decodeSpeexBits); - speex_encoder_destroy(encodeState); - speex_decoder_destroy(decodeState); -} - -- (void)dealloc { - [self close]; -#if !__has_feature(objc_arc) - [super dealloc]; -#endif -} - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.h b/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.h deleted file mode 100755 index 6bf8ca4..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Decapsulator.h -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import <AVFoundation/AVFoundation.h> -#import "SpeexCodec.h" - -@class RawAudioDataPlayer; - -@protocol DecapsulatingDelegate <NSObject> - -- (void)decapsulatingAndPlayingOver; - -@end - -@interface Decapsulator : NSObject { - NSString *mFileName; - - BOOL isPlaying; - - NSOperationQueue *operationQueue; - - ogg_stream_state oggStreamState; - ogg_sync_state oggSyncState; - int packetNo; -} - -@property (atomic, strong) RawAudioDataPlayer *player; -@property (nonatomic, weak) id<DecapsulatingDelegate> delegate; - -//生成对象 -- (id)initWithFileName:(NSString *)filename; - -- (void)play; - -- (void)stopPlaying; - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.m b/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.m deleted file mode 100755 index e6f59d4..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Decapsulator.m +++ /dev/null @@ -1,211 +0,0 @@ -// -// Decapsulator.m -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import "Decapsulator.h" -#import "RawAudioDataPlayer.h" - -#define DESIRED_BUFFER_SIZE 4096 - -@interface Decapsulator() - -//将ogg格式数据转换为pcm数据 -- (void)convertOggToPCMWithData:(NSData *)oggData; - -//packet转换完成 -- (void)packetDecoded:(Byte *)decodedData size:(int)dataSize; - -- (void)error:(NSString *)errorDesription; - - -@end - -@implementation Decapsulator - - -- (id)initWithFileName:(NSString *)filename { - if (self = [super init]) { - mFileName = [NSString stringWithString:filename]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ( ! [fileManager fileExistsAtPath:filename]) { - NSLog(@"要播放的文件不存在:%@", filename); - } - operationQueue = [[NSOperationQueue alloc] init]; - } - return self; -} - -- (void)play { - isPlaying = YES; - - if ( ! self.player) { - self.player = [[RawAudioDataPlayer alloc] init]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playingingOver:) name:NOTIFICATION_PLAY_OVER object:nil]; - } - [self.player startPlay]; - - NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(convertOggToPCMWithData:) object:[NSData dataWithContentsOfFile:mFileName]]; - [[[NSOperationQueue alloc] init] addOperation:operation]; - -} - -- (void)stopPlaying { - isPlaying = NO; - if (self.player) { - [self.player stopPlay]; - } -// [self playingingOver:nil]; -} - -#pragma mark - - -//packet转换完成 -- (void)packetDecoded:(Byte *)decodedData size:(int)dataSize { - [self.player inputNewDataFromBuffer:decodedData size:dataSize]; -} - -//将ogg格式数据转换为pcm数据 -- (void )convertOggToPCMWithData:(NSData *)oggData { - NSString *string = [[NSString alloc] initWithData:oggData encoding:NSUTF8StringEncoding]; - NSLog(@"string------->%@",string); - const Byte *oggBytes = [oggData bytes]; - int oggByteSize = [oggData length]; - int readedBytes = 0; - NSUInteger decodedByteLength = 0; - - packetNo = 0; - int pageNo = 0; - - ogg_sync_init(&oggSyncState); - ogg_stream_init(&oggStreamState, 0); - - while (isPlaying) { - - int byteSizeToRead = oggByteSize - readedBytes; - if (byteSizeToRead > DESIRED_BUFFER_SIZE) { - byteSizeToRead = DESIRED_BUFFER_SIZE; - } - char *buffer = ogg_sync_buffer(&oggSyncState, DESIRED_BUFFER_SIZE); - memcpy(buffer, oggBytes, byteSizeToRead); //!!! - oggBytes += byteSizeToRead; - readedBytes += byteSizeToRead; - NSLog(@"byteSizeToRead = %d, oggByteSize = %d, readedBytes = %d", byteSizeToRead, oggByteSize, readedBytes); -// oggSyncState.bodybytes = byteSizeToRead; - - int resultSyncWrote = ogg_sync_wrote(&oggSyncState, byteSizeToRead); - if (resultSyncWrote == -1) { - [self error:@"error:the number of bytes written overflows the internal storage of the ogg_sync_state struct or an internal error occurred."]; - return; - } - - while (YES) { - ogg_page oggPage; - int resultSyncPageout= ogg_sync_pageout(&oggSyncState, &oggPage); - if (resultSyncPageout == 1) { - NSLog(@"to decode a page which was synced and returned"); - - //检查header和comment - if(packetNo == 0) { - NSLog(@"it's the header page, check the header later"); - if ([self readOggHeaderToStreamState:&oggStreamState fromOggPage:&oggPage]) { - oggStreamState.packetno = packetNo ++; - pageNo ++; - } - else { - packetNo = 0; - } - continue; - } - else if(packetNo == 1) { - NSLog(@"it's the comment"); - oggStreamState.packetno = packetNo ++; - pageNo ++; - continue; - } - else { - oggStreamState.pageno = pageNo ++; - } - - int resultStreamPagein = ogg_stream_pagein(&oggStreamState, &oggPage); - if (resultStreamPagein == -1) { - [self error:@"ogg_stream_pagein failure"]; - return; - } - - SpeexCodec *codec = [[SpeexCodec alloc] init]; - [codec open:4]; - short decodedBuffer[1024]; - - while (YES) { - ogg_packet oggPacket; - int packetResult = ogg_stream_packetout(&oggStreamState, &oggPacket); - if (packetResult == 1) { - //decode speex -// NSLog(@"to decode a packet"); - packetNo ++; - int nDecodedByte = sizeof(short) * [codec decode:oggPacket.packet length:oggPacket.bytes output:decodedBuffer]; - decodedByteLength += nDecodedByte; - [self packetDecoded:(Byte *)decodedBuffer size:nDecodedByte]; - } - else if (packetResult == 0) { - //need more - break; - } - else { - break; - } - } - - [codec close]; - codec = nil; - } - else if (resultSyncPageout == 0) { - NSLog(@"not enough to decode a page or error"); - break; - } - else { - [self error:@"stream has not yet captured sync"]; - } - } - - if (byteSizeToRead < DESIRED_BUFFER_SIZE) { - break; - } - } - self.player.isDataInputOver = YES; - - NSLog(@"decode ogg to pcm: %d -> %d", [oggData length], decodedByteLength); -} - -- (BOOL)readOggHeaderToStreamState:(ogg_stream_state *)os fromOggPage:(ogg_page *)op { - if (op->body_len != 80) { - return NO; - } -// if ( ! [[NSString stringWithCharacters:(unichar *)op->header length:4] isEqualToString:@"OggS"]) { -// return NO; -// } - os->serialno = ogg_page_serialno(op); - return YES; -} - -- (void)error:(NSString *)errorDesription { - NSLog(@"error:%@", errorDesription); -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - DecapsulatingDelegate - -- (void)playingingOver:(NSNotification *)notification { - if (self.delegate) { - [self.delegate decapsulatingAndPlayingOver]; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.h b/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.h deleted file mode 100755 index fcfffb8..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.h +++ /dev/null @@ -1,132 +0,0 @@ -// -// Encapsulator.h -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "SpeexCodec.h" - -#define FRAME_SIZE 160 // PCM音频8khz*20ms -> 8000*0.02=160 - -@class EncapsulatingOperation; - -@protocol EncapsulatingDelegate <NSObject> - -- (void)encapsulatingOver; - -@end - -@interface Encapsulator : NSObject { - - NSMutableData *bufferData; //用于ogg文件输出 - NSMutableData *tempData; //用于输入的pcm切割剩余 - - NSMutableArray *pcmDatas; - - NSOperationQueue *operationQueue; - EncapsulatingOperation *encapsulationOperation; - NSString *mFileName; - - int mode; - int sampleRate; - int channels; - int nframes; - BOOL vbr; - int streamSeraialNmber; - - BOOL moreDataInputing, isCanceled; //moreDataInputing是否继续封装;isCanceled,是否强制停止封装 - - SpeexHeader speexHeader; - - id<EncapsulatingDelegate> delegate; - - - // - -} -//@property (atomic, retain) NSMutableData *bufferData; -@property (assign) BOOL moreDataInputing, isCanceled; -@property (readonly) SpeexHeader speexHeader; -@property (readonly, retain) NSString *mFileName; - -@property (nonatomic, weak) id<EncapsulatingDelegate> delegete; - -@property int mode; -@property int sampleRate; -@property int channels; -@property int nframes; -@property BOOL vbr; - -@property int streamSeraialNmber; - -void writeInt(unsigned char *dest, int offset, int value); - -void writeString(unsigned char *dest, int offset, unsigned char *value, int length); - -+ (NSString *)defaultFileName; - -//生成对象 -- (id)initWithFileName:(NSString *)filename; - -- (void)resetWithFileName:(NSString *)filename; - -- (NSMutableData *)getBufferData; - -- (NSMutableArray *)getPCMDatas; - -//设置参数 -- (void)setMode:(int)_mode sampleRate:(int)_sampleRate channels:(int)_channels frames:(int)_nframes vbr:(BOOL)_vbr; - -//输入新PCM数据。注意数据同步 -- (void)inputPCMDataFromBuffer:(Byte *)buffer size:(UInt32)dataSize; - -//停止封装。是否强制结束未完成的封装 -- (void)stopEncapsulating:(BOOL)forceCancel; - -//为即将开始的封装做准备,包括写入ogg的头 -- (void)prepareForEncapsulating; - -@end - -@interface EncapsulatingOperation : NSOperation { - - Encapsulator *mParent; - - NSMutableArray *oggPeckets; - - ogg_stream_state oggStreamState; - ogg_page oggPage; - - int isFirstInput; - ogg_int64_t mPacketCount; - ogg_int16_t mGranulepos; - - // - NSMutableData* _data; - -} - -@property (nonatomic, retain) Encapsulator *mParent; - -//初始化NSOperation -- (id)initWithParent:(Encapsulator *)parent; - -//写入ogg的头以及comment -- (void)writeHeaderWithComment:(NSString *)comment; - -//从编码好的数据中输出ogg packet -- (void)inputOggPacketFromSpeexData:(NSData *)data; - -//检查packet是否足够生成一个page -- (void)checkPageSufficient; - -//将页保存至文件并重置一些计数器。是否关闭文件。 -- (void)outputAPage:(BOOL)isHeaderOrComment endOfSteam:(BOOL)endOfStream; - -//将新的数据添加到音频文件末尾 -- (void)writeDataToFile:(NSData *)newData; - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.m b/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.m deleted file mode 100755 index 8dc5b30..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/Encapsulator.m +++ /dev/null @@ -1,338 +0,0 @@ -// -// Encapsulator.m -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import "Encapsulator.h" - -#define NOTIFICATION_ENCAPSULTING_OVER @"EncapsulatingOver" - -@implementation Encapsulator - -@synthesize moreDataInputing,isCanceled; -@synthesize speexHeader; -@synthesize mode, sampleRate, channels, nframes, vbr, streamSeraialNmber; -@synthesize mFileName; -@synthesize delegete; - -void writeInt(unsigned char *dest, int offset, int value) { - for(int i = 0;i < 4;i++) { - dest[offset + i]=(unsigned char)(0xff & ((unsigned int)value)>>(i*8)); - } -} - -void writeString(unsigned char *dest, int offset, unsigned char *value, int length) { - unsigned char *tempPointr = dest + offset; - memcpy(tempPointr, value, length); -} - -+ (NSString *)defaultFileName { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDirectory = [paths objectAtIndex:0]; - NSString *voiceDirectory = [documentsDirectory stringByAppendingPathComponent:@"voice"]; - if ( ! [[NSFileManager defaultManager] fileExistsAtPath:voiceDirectory]) { - [[NSFileManager defaultManager] createDirectoryAtPath:voiceDirectory withIntermediateDirectories:YES attributes:nil error:NULL]; - } - return [voiceDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%.0f.spx", [[NSDate date] timeIntervalSince1970]]]; - -} - -- (id)initWithFileName:(NSString *)filename { - if (self = [super init]) { - mFileName = [NSString stringWithString:filename]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:filename]) { - [fileManager removeItemAtPath:filename error:nil]; - } - bufferData = [NSMutableData data]; - tempData = [NSMutableData data]; - pcmDatas = [NSMutableArray array]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(encapsulatingOver:) name:NOTIFICATION_ENCAPSULTING_OVER object:nil]; - - [self setMode:0 sampleRate:8000 channels:1 frames:1 vbr:YES]; - - NSLog(@"size of version(%s)",speexHeader.speex_version); - speex_init_header(&speexHeader, sampleRate, channels, &speex_nb_mode); - - NSLog(@"size of version(%s)",speexHeader.speex_version); - - operationQueue = [[NSOperationQueue alloc] init]; - } - return self; -} - -- (void)resetWithFileName:(NSString *)filename { - for(NSOperation *operation in [operationQueue operations]) { - [operation cancel]; - } - mFileName = [NSString stringWithString:filename]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:filename]) { - [fileManager removeItemAtPath:filename error:nil]; - } - - [bufferData setLength:0]; - [tempData setLength:0]; - [pcmDatas removeAllObjects]; -} - -- (NSMutableData *)getBufferData { - return bufferData; -} - -- (NSMutableArray *)getPCMDatas { - @synchronized(pcmDatas) { - return pcmDatas; - } -} - - -- (void)setMode:(int)_mode sampleRate:(int)_sampleRate channels:(int)_channels frames:(int)_nframes vbr:(BOOL)_vbr { - self.mode = _mode; - self.sampleRate = _sampleRate; - self.channels = _channels; - self.nframes = _nframes; - self.vbr = _vbr; - -} - -- (void)prepareForEncapsulating { - - self.moreDataInputing = YES; - self.isCanceled = NO; - encapsulationOperation = [[EncapsulatingOperation alloc] initWithParent:self]; - if (operationQueue) { - [operationQueue addOperation:encapsulationOperation]; - } - - //写入一些数据之前的头 - [encapsulationOperation writeHeaderWithComment:@"Encoded with:test by jcccn "]; - -} - -- (void)inputPCMDataFromBuffer:(Byte *)buffer size:(UInt32)dataSize { - - if ( ! self.moreDataInputing) { - return; - } - int packetSize = FRAME_SIZE * 2; - @synchronized(pcmDatas) { - [tempData appendBytes:buffer length:dataSize]; - while ([tempData length] >= packetSize) { - @autoreleasepool { - NSData *pcmData = [NSData dataWithBytes:[tempData bytes] length:packetSize]; - [pcmDatas addObject:pcmData]; - - Byte *dataPtr = (Byte *)[tempData bytes]; - dataPtr += packetSize; - tempData = [NSMutableData dataWithBytesNoCopy:dataPtr length:[tempData length] - packetSize freeWhenDone:NO]; - - } - } - } -} - -- (void)stopEncapsulating:(BOOL)forceCancel { - self.moreDataInputing = NO; - if ( ! self.isCanceled) { - self.isCanceled = forceCancel; - } -} - -- (void)encapsulatingOver:(NSNotification *)notification { - NSLog(@"encapsulatingOver by %@", [self description]); - if (self.delegete) { - [self.delegete encapsulatingOver]; - } -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end - -@implementation EncapsulatingOperation - -@synthesize mParent; - -//不停从bufferData中获取数据构建paket并且修改相关计数器 -- (void)main { - SpeexCodec *codec = [[SpeexCodec alloc] init]; - [codec open:4]; //压缩率为4 - while ( ! self.mParent.isCanceled) { - if ([[self.mParent getPCMDatas] count] > 0) { - NSData *pcmData = [[self.mParent getPCMDatas] objectAtIndex:0]; - - NSData *speexData = [codec encode:(short *)[pcmData bytes] length:[pcmData length]/sizeof(short)]; - - [self inputOggPacketFromSpeexData:speexData]; - - if ([[self.mParent getPCMDatas] count] > 0) - { - [[self.mParent getPCMDatas] removeObjectAtIndex:0]; - } - } - else { - [NSThread sleepForTimeInterval:0.02]; - - if ( ! [self.mParent moreDataInputing]) { - break; - } - } - - } - [codec close]; - codec = nil; - if ( ! [self.mParent isCanceled]) { - [self outputAPage:NO endOfSteam:YES]; - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_ENCAPSULTING_OVER object:self userInfo:nil]; - } -} - -//初始化NSOperation -- (id)initWithParent:(Encapsulator *)parent { - if (self = [super init]) { - self.mParent = parent; - - isFirstInput = 1; - mPacketCount = 0; - mGranulepos = 0; - - oggPeckets = [NSMutableArray array]; - - ogg_stream_init(&oggStreamState, arc4random()%8888); - } - return self; -} - - -//写入ogg的头以及comment -- (void)writeHeaderWithComment:(NSString *)comment { - - mPacketCount = 0; - mGranulepos = 0; - - //first, write the ogg header page - unsigned char speexHeader[80]; - - int offset = 0; - writeString(speexHeader, offset+0, (unsigned char *)"Speex ", 8); // 0 - 7: speex_string - int versionSize = sizeof(self.mParent.speexHeader.speex_version); - NSLog(@"size of version(%s) chars array:%d",self.mParent.speexHeader.speex_version, versionSize); - writeString(speexHeader, offset+8, (unsigned char *)self.mParent.speexHeader.speex_version, versionSize); //8 - 27: speex_version - writeInt(speexHeader, offset+28, 1); // 28 - 31: speex_version_id - writeInt(speexHeader, offset+32, 80); // 32 - 35: header_size - writeInt(speexHeader, offset+36, 8000); // 36 - 39: rate - writeInt(speexHeader, offset+40, 0); // 40 - 43: mode (0=NB, 1=WB, 2=UWB) - writeInt(speexHeader, offset+44, 4); // 44 - 47: mode_bitstream_version - writeInt(speexHeader, offset+48, 1); // 48 - 51: nb_channels - writeInt(speexHeader, offset+52, -1); // 52 - 55: bitrate - writeInt(speexHeader, offset+56, 160 << 0); // 56 - 59: frame_size (NB=160, WB=320, UWB=640) - writeInt(speexHeader, offset+60, 1); // 60 - 63: vbr - writeInt(speexHeader, offset+64, 1); // 64 - 67: frames_per_packet - writeInt(speexHeader, offset+68, 0); // 68 - 71: extra_headers - writeInt(speexHeader, offset+72, 0); // 72 - 75: reserved1 - writeInt(speexHeader, offset+76, 0); // 76 - 79: reserved2 - - ogg_packet speexHeaderPacket; - speexHeaderPacket.packet = (unsigned char *)speexHeader; - speexHeaderPacket.bytes = 80; - speexHeaderPacket.b_o_s = 1; - speexHeaderPacket.e_o_s = 0; - speexHeaderPacket.granulepos = 0; - speexHeaderPacket.packetno = mPacketCount++; - - ogg_stream_packetin(&oggStreamState, &speexHeaderPacket); - [self outputAPage:YES endOfSteam:NO]; - NSLog(@"ogg header writed\n"); - - - - //second. write the ogg comment page - offset = 0; - const char *commentChars = [comment cStringUsingEncoding:NSUTF8StringEncoding]; - int length = [comment lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - unsigned char speexCommentHeader[length + 8]; - writeInt(speexCommentHeader, offset, length); // vendor comment size - writeString(speexCommentHeader, offset+4, (unsigned char *)commentChars, length); // vendor comment - writeInt(speexCommentHeader, offset+length+4, 0); // user comment list length - - ogg_packet speexCommentPacket; - speexCommentPacket.packet = (unsigned char *)speexCommentHeader; - speexCommentPacket.bytes = length + 8; - speexCommentPacket.b_o_s = 0; - speexCommentPacket.e_o_s = 0; - speexCommentPacket.granulepos = 0; - speexCommentPacket.packetno = mPacketCount++; - - ogg_stream_packetin(&oggStreamState, &speexCommentPacket); - [self outputAPage:YES endOfSteam:NO]; - NSLog(@"ogg comment writed\n"); -} - -- (void)inputOggPacketFromSpeexData:(NSData *)data { - ogg_packet packet; - packet.packet = (unsigned char *)[data bytes]; - packet.bytes = (long)([data length]); - packet.b_o_s = 0; - packet.e_o_s = 0; - mGranulepos += FRAME_SIZE; - packet.granulepos = mGranulepos; - packet.packetno = mPacketCount++; - ogg_stream_packetin(&oggStreamState, &packet); - - [self checkPageSufficient]; -} - -//检查packet是否足够生成一个page -- (void)checkPageSufficient { - [self outputAPage:NO endOfSteam:NO]; -} - -//将页保存至文件并重置一些计数器。是否关闭文件。 -- (void)outputAPage:(BOOL)isHeaderOrComment endOfSteam:(BOOL)endOfStream { - if (isHeaderOrComment || endOfStream) { - ogg_stream_flush(&oggStreamState, &oggPage); - [[self.mParent getBufferData] appendBytes:oggPage.header length:oggPage.header_len]; - [[self.mParent getBufferData] appendBytes:oggPage.body length:oggPage.body_len]; - [self writeDataToFile:[self.mParent getBufferData]]; - [[self.mParent getBufferData] setLength:0]; - - if (endOfStream) { - NSLog(@"end of stream"); -// self.mParent.moreDataInputing = NO; - } - } - else { - if (ogg_stream_pageout(&oggStreamState, &oggPage)) { - NSLog(@"page out"); - [[self.mParent getBufferData] appendBytes:oggPage.header length:oggPage.header_len]; - [[self.mParent getBufferData] appendBytes:oggPage.body length:oggPage.body_len]; - [self writeDataToFile:[self.mParent getBufferData]]; - - [[self.mParent getBufferData] setLength:0]; - } - } - -} - -- (void)writeDataToFile:(NSData *)newData { - NSString *filename = (NSString *)self.mParent.mFileName; - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ( ! [fileManager fileExistsAtPath:filename]) { - [fileManager createFileAtPath:filename contents:nil attributes:nil]; - } -// NSLog(@"write data of %d bytes to file %@", [newData length], filename); - NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:filename]; - [file seekToEndOfFile]; - [file writeData:newData]; - [file closeFile]; -} - - -@end \ No newline at end of file diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.h b/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.h deleted file mode 100755 index 76df96c..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// PlayerManager.h -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import <AVFoundation/AVFoundation.h> -#import "Decapsulator.h" - -typedef NS_ENUM(NSUInteger, PlayerType) -{ - DDEarPhone, - DDSpeaker -}; - -@protocol PlayingDelegate <NSObject> - -- (void)playingStoped; - -@end - -@interface PlayerManager : NSObject <DecapsulatingDelegate, AVAudioPlayerDelegate> { - Decapsulator *decapsulator; - AVAudioPlayer *avAudioPlayer; - -} -@property (nonatomic, strong) Decapsulator *decapsulator; -@property (nonatomic, strong) AVAudioPlayer *avAudioPlayer; -@property (nonatomic, weak) id<PlayingDelegate> delegate; - -+ (PlayerManager *)sharedManager; - -- (void)playAudioWithFileName:(NSString *)filename delegate:(id<PlayingDelegate>)newDelegate; -- (void)stopPlaying; - -- (void)playAudioWithFileName:(NSString *)filename playerType:(PlayerType)type delegate:(id<PlayingDelegate>)newDelegate; -- (BOOL)playingFileName:(NSString*)fileName; -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.m b/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.m deleted file mode 100755 index 485a8a5..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PlayerManager.m +++ /dev/null @@ -1,280 +0,0 @@ -// -// PlayerManager.m -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import "PlayerManager.h" - -@interface PlayerManager () - -- (void)startProximityMonitering; //开启距离感应器监听(开始播放时) -- (void)stopProximityMonitering; //关闭距离感应器监听(播放完成时) - -@end - -@implementation PlayerManager -{ - NSString* _playingFileName; -} -@synthesize decapsulator; -@synthesize avAudioPlayer; - -static PlayerManager *mPlayerManager = nil; - -+ (PlayerManager *)sharedManager { - static PlayerManager *g_playerManager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_playerManager = [[PlayerManager alloc] init]; - }); - return g_playerManager; -// @synchronized(self) { -// if (mPlayerManager == nil) -// { -// mPlayerManager = [[PlayerManager alloc] init]; -// -// [[NSNotificationCenter defaultCenter] addObserver:mPlayerManager -// selector:@selector(sensorStateChange:) -// name:@"UIDeviceProximityStateDidChangeNotification" -// object:nil]; -// } -// } -// return mPlayerManager; -} - -+ (id)allocWithZone:(NSZone *)zone -{ - @synchronized(self) - { - if(mPlayerManager == nil) - { - mPlayerManager = [super allocWithZone:zone]; - return mPlayerManager; - } - } - - return nil; -} - -- (id)init { - if (self = [super init]) { - - [[NSNotificationCenter defaultCenter] addObserver:mPlayerManager - selector:@selector(sensorStateChange:) - name:@"UIDeviceProximityStateDidChangeNotification" - object:nil]; - - //初始化播放器的时候如下设置 - UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; - AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); - UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; - AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); - - AVAudioSession *audioSession = [AVAudioSession sharedInstance]; - //默认情况下扬声器播放 - [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; - [audioSession setActive:YES error:nil]; - } - return self; -} - -- (void)playAudioWithFileName:(NSString *)filename delegate:(id<PlayingDelegate>)newDelegate { - if ( ! filename) { - return; - } - if ([filename rangeOfString:@".spx"].location != NSNotFound) { - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - - [self stopPlaying]; - - self.delegate = newDelegate; - - self.decapsulator = [[Decapsulator alloc] initWithFileName:filename]; - self.decapsulator.delegate = self; - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - [self startProximityMonitering]; - _playingFileName = [filename copy]; - [self.decapsulator play]; - - } - else if ([filename rangeOfString:@".mp3"].location != NSNotFound) { - if ( ! [[NSFileManager defaultManager] fileExistsAtPath:filename]) { - NSLog(@"要播放的文件不存在:%@", filename); - _playingFileName = nil; - [self.delegate playingStoped]; - [newDelegate playingStoped]; - return; - } - [self.delegate playingStoped]; - self.delegate = newDelegate; - - NSError *error; - self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filename] error:&error]; - if (self.avAudioPlayer) { - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - self.avAudioPlayer.delegate = self; - _playingFileName = [filename copy]; - [self.avAudioPlayer play]; - [self startProximityMonitering]; - } - else { - [self.delegate playingStoped]; - } - } - else { - [self.delegate playingStoped]; - } -} - -- (void)playAudioWithFileName:(NSString *)filename playerType:(PlayerType)type delegate:(id<PlayingDelegate>)newDelegate -{ - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - if ([filename rangeOfString:@".spx"].location != NSNotFound) { - [self stopPlaying]; - self.delegate = newDelegate; - - self.decapsulator = [[Decapsulator alloc] initWithFileName:filename]; - self.decapsulator.delegate = self; - [self.decapsulator play]; - - } - else if ([filename rangeOfString:@".mp3"].location != NSNotFound) { - if ( ! [[NSFileManager defaultManager] fileExistsAtPath:filename]) { - NSLog(@"要播放的文件不存在:%@", filename); - _playingFileName = nil; - [self.delegate playingStoped]; - [newDelegate playingStoped]; - return; - } - _playingFileName = nil; - [self.delegate playingStoped]; - self.delegate = newDelegate; - - NSError *error; - self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filename] error:&error]; - if (self.avAudioPlayer) { - self.avAudioPlayer.delegate = self; - [self.avAudioPlayer play]; - } - else { - _playingFileName = nil; - [self.delegate playingStoped]; - } - }else if([filename rangeOfString:@".caf"].location != NSNotFound) - { - // if ( ! [[NSFileManager defaultManager] fileExistsAtPath:filename]) { - // NSLog(@"要播放的文件不存在:%@", filename); - // [self.delegate playingStoped]; - // [newDelegate playingStoped]; - // return; - // } - _playingFileName = nil; - [self.delegate playingStoped]; - self.delegate = newDelegate; - - NSError *error; - NSArray *array =[filename componentsSeparatedByString:@"."]; - NSString *bundlePath=[[NSBundle mainBundle]pathForResource:@"Resource" ofType:@"bundle"]; - NSBundle *bundle=[NSBundle bundleWithPath:bundlePath]; - NSString *soundPath=[bundle pathForResource:array[0] ofType:@"caf"inDirectory:nil]; - if (soundPath ==nil) { - NSLog(@"要播放的文件不存在:%@", filename); - [self.delegate playingStoped]; - [newDelegate playingStoped]; - return; - } - NSURL *soundUrl=[[NSURL alloc] initFileURLWithPath:soundPath]; - self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error]; - if (self.avAudioPlayer) { - self.avAudioPlayer.delegate = self; - [self.avAudioPlayer play]; - } - else { - _playingFileName = nil; - [self.delegate playingStoped]; - } - } - else { - _playingFileName = nil; - [self.delegate playingStoped]; - } - - switch (type) - { - case DDEarPhone: - //听筒 - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; - break; - case DDSpeaker: - //扬声器 - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - break; - default: - break; - } -} - -- (void)stopPlaying { - _playingFileName = nil; - [self stopProximityMonitering]; - - if (self.decapsulator) { - [self.decapsulator stopPlaying]; -// self.decapsulator.delegate = nil; //此行如果放在上一行之前会导致回调问题 - self.decapsulator = nil; - } - if (self.avAudioPlayer) { - [self.avAudioPlayer stop]; - self.avAudioPlayer = nil; - -// [self.delegate playingStoped]; - } - - [self.delegate playingStoped]; -} - -- (BOOL)playingFileName:(NSString *)fileName -{ - return [_playingFileName isEqualToString:fileName]; -} - -- (void)decapsulatingAndPlayingOver { - _playingFileName = nil; - [self.delegate playingStoped]; - [self stopProximityMonitering]; -} - -- (void)sensorStateChange:(NSNotification *)notification { - //如果此时手机靠近面部放在耳朵旁,那么声音将通过听筒输出,并将屏幕变暗 - if ([[UIDevice currentDevice] proximityState] == YES) { - NSLog(@"Device is close to user"); - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; - } - else { - NSLog(@"Device is not close to user"); - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - } -} - -- (void)startProximityMonitering { - [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; - NSLog(@"开启距离监听"); -} - -- (void)stopProximityMonitering { -// dispatch_async(dispatch_get_main_queue(), ^{ - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - [[UIDevice currentDevice] setProximityMonitoringEnabled:NO]; - NSLog(@"关闭距离监听"); -// }); -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.cpp b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.cpp deleted file mode 100755 index d5a4806..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - File: CADebugMacros.cpp - Abstract: CADebugMacros.h - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#include "CADebugMacros.h" -#include <stdio.h> -#include <stdarg.h> -#if TARGET_API_MAC_OSX - #include <syslog.h> -#endif - -#if DEBUG -#include <stdio.h> - -void DebugPrint(const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); -} -#endif // DEBUG - -#if TARGET_API_MAC_OSX -void LogError(const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); -#if DEBUG - vprintf(fmt, args); -#endif - vsyslog(LOG_ERR, fmt, args); - va_end(args); -} - -void LogWarning(const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); -#if DEBUG - vprintf(fmt, args); -#endif - vsyslog(LOG_WARNING, fmt, args); - va_end(args); -} -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.h b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.h deleted file mode 100755 index 4e13a30..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CADebugMacros.h +++ /dev/null @@ -1,604 +0,0 @@ -/* - File: CADebugMacros.h - Abstract: Part of CoreAudio Utility Classes - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#if !defined(__CADebugMacros_h__) -#define __CADebugMacros_h__ - -//============================================================================= -// Includes -//============================================================================= - -#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include <CoreAudio/CoreAudioTypes.h> -#else - #include "CoreAudioTypes.h" -#endif - -//============================================================================= -// CADebugMacros -//============================================================================= - -//#define CoreAudio_StopOnFailure 1 -//#define CoreAudio_TimeStampMessages 1 -//#define CoreAudio_ThreadStampMessages 1 -//#define CoreAudio_FlushDebugMessages 1 - -#if TARGET_RT_BIG_ENDIAN - #define CA4CCToCString(the4CC) { ((char*)&the4CC)[0], ((char*)&the4CC)[1], ((char*)&the4CC)[2], ((char*)&the4CC)[3], 0 } - #define CACopy4CCToCString(theCString, the4CC) { theCString[0] = ((char*)&the4CC)[0]; theCString[1] = ((char*)&the4CC)[1]; theCString[2] = ((char*)&the4CC)[2]; theCString[3] = ((char*)&the4CC)[3]; theCString[4] = 0; } -#else - #define CA4CCToCString(the4CC) { ((char*)&the4CC)[3], ((char*)&the4CC)[2], ((char*)&the4CC)[1], ((char*)&the4CC)[0], 0 } - #define CACopy4CCToCString(theCString, the4CC) { theCString[0] = ((char*)&the4CC)[3]; theCString[1] = ((char*)&the4CC)[2]; theCString[2] = ((char*)&the4CC)[1]; theCString[3] = ((char*)&the4CC)[0]; theCString[4] = 0; } -#endif - -// This is a macro that does a sizeof and casts the result to a UInt32. This is useful for all the -// places where -wshorten64-32 catches assigning a sizeof expression to a UInt32. -// For want of a better place to park this, we'll park it here. -#define SizeOf32(X) ((UInt32)sizeof(X)) - -// This is a macro that does a offsetof and casts the result to a UInt32. This is useful for all the -// places where -wshorten64-32 catches assigning an offsetof expression to a UInt32. -// For want of a better place to park this, we'll park it here. -#define OffsetOf32(X, Y) ((UInt32)offsetof(X, Y)) - -// This macro casts the expression to a UInt32. It is called out specially to allow us to track casts -// that have been added purely to avert -wshorten64-32 warnings on 64 bit platforms. -// For want of a better place to park this, we'll park it here. -#define ToUInt32(X) ((UInt32)(X)) - -#pragma mark Basic Definitions - -#if DEBUG || CoreAudio_Debug - // can be used to break into debugger immediately, also see CADebugger - #define BusError() (*(long *)0 = 0) - - // basic debugging print routines - #if TARGET_OS_MAC && !TARGET_API_MAC_CARBON - extern void DebugStr(const unsigned char* debuggerMsg); - #define DebugMessage(msg) DebugStr("\p"msg) - #define DebugMessageN1(msg, N1) - #define DebugMessageN2(msg, N1, N2) - #define DebugMessageN3(msg, N1, N2, N3) - #else -// #include "CADebugPrintf.h" - - #if (CoreAudio_FlushDebugMessages && !CoreAudio_UseSysLog) || defined(CoreAudio_UseSideFile) - #define FlushRtn ,fflush(DebugPrintfFile) - #else - #define FlushRtn - #endif - - #if CoreAudio_ThreadStampMessages - #include <pthread.h> - #include "CAHostTimeBase.h" - #if TARGET_RT_64_BIT - #define DebugPrintfThreadIDFormat "%16p" - #else - #define DebugPrintfThreadIDFormat "%8p" - #endif - #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " %s"DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), msg) FlushRtn - #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1) FlushRtn - #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2) FlushRtn - #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3) FlushRtn - #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4) FlushRtn - #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4, N5) FlushRtn - #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4, N5, N6) FlushRtn - #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4, N5, N6, N7) FlushRtn - #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn - #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma "%17qd: " DebugPrintfThreadIDFormat " "msg"\n", CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn - #elif CoreAudio_TimeStampMessages - #include "CAHostTimeBase.h" - #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%17qd: %s"DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), msg) FlushRtn - #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1) FlushRtn - #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2) FlushRtn - #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3) FlushRtn - #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4) FlushRtn - #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4, N5) FlushRtn - #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4, N5, N6) FlushRtn - #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4, N5, N6, N7) FlushRtn - #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn - #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma "%17qd: "msg DebugPrintfLineEnding, CAHostTimeBase::GetCurrentTimeInNanos(), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn - #else -// #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%s"DebugPrintfLineEnding, msg) FlushRtn - #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1) FlushRtn - #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2) FlushRtn - #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3) FlushRtn - #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4) FlushRtn - #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5) FlushRtn - #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6) FlushRtn - #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7) FlushRtn - #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn - #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn - #endif - #endif - void DebugPrint(const char *fmt, ...); // can be used like printf - #ifndef DEBUGPRINT - #define DEBUGPRINT(msg) DebugPrint msg // have to double-parenthesize arglist (see Debugging.h) - #endif - #if VERBOSE - #define vprint(msg) DEBUGPRINT(msg) - #else - #define vprint(msg) - #endif - - // Original macro keeps its function of turning on and off use of CADebuggerStop() for both asserts and throws. - // For backwards compat, it overrides any setting of the two sub-macros. - #if CoreAudio_StopOnFailure - #include "CADebugger.h" - #undef CoreAudio_StopOnAssert - #define CoreAudio_StopOnAssert 1 - #undef CoreAudio_StopOnThrow - #define CoreAudio_StopOnThrow 1 - #define STOP CADebuggerStop() - #else - #define STOP - #endif - - #if CoreAudio_StopOnAssert - #if !CoreAudio_StopOnFailure - #include "CADebugger.h" - #define STOP - #endif - #define __ASSERT_STOP CADebuggerStop() - #else - #define __ASSERT_STOP - #endif - - #if CoreAudio_StopOnThrow - #if !CoreAudio_StopOnFailure - #include "CADebugger.h" - #define STOP - #endif - #define __THROW_STOP CADebuggerStop() - #else - #define __THROW_STOP - #endif - -#else - #define DebugMessage(msg) - #define DebugMessageN1(msg, N1) - #define DebugMessageN2(msg, N1, N2) - #define DebugMessageN3(msg, N1, N2, N3) - #define DebugMessageN4(msg, N1, N2, N3, N4) - #define DebugMessageN5(msg, N1, N2, N3, N4, N5) - #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) - #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) - #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) - #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) - #ifndef DEBUGPRINT - #define DEBUGPRINT(msg) - #endif - #define vprint(msg) - #define STOP - #define __ASSERT_STOP - #define __THROW_STOP -#endif - -void LogError(const char *fmt, ...); // writes to syslog (and stderr if debugging) -void LogWarning(const char *fmt, ...); // writes to syslog (and stderr if debugging) - -#define NO_ACTION (void)0 - -#if DEBUG || CoreAudio_Debug - -#pragma mark Debug Macros - -#define Assert(inCondition, inMessage) \ - if(!(inCondition)) \ - { \ - DebugMessage(inMessage); \ - __ASSERT_STOP; \ - } - -#define AssertFileLine(inCondition, inMessage) \ - if(!(inCondition)) \ - { \ - DebugMessageN3("%s, line %d: %s", __FILE__, __LINE__, inMessage); \ - __ASSERT_STOP; \ - } - -#define AssertNoError(inError, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - char __4CC[5] = CA4CCToCString(__Err); \ - DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC); \ - __ASSERT_STOP; \ - } \ - } - -#define AssertNoKernelError(inError, inMessage) \ - { \ - unsigned int __Err = (unsigned int)(inError); \ - if(__Err != 0) \ - { \ - DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ - __ASSERT_STOP; \ - } \ - } - -#define AssertNotNULL(inPtr, inMessage) \ - { \ - if((inPtr) == NULL) \ - { \ - DebugMessage(inMessage); \ - __ASSERT_STOP; \ - } \ - } - -#define FailIf(inCondition, inHandler, inMessage) \ - if(inCondition) \ - { \ - DebugMessage(inMessage); \ - STOP; \ - goto inHandler; \ - } - -#define FailWithAction(inCondition, inAction, inHandler, inMessage) \ - if(inCondition) \ - { \ - DebugMessage(inMessage); \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfNULL(inPointer, inAction, inHandler, inMessage) \ - if((inPointer) == NULL) \ - { \ - DebugMessage(inMessage); \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfKernelError(inKernelError, inAction, inHandler, inMessage) \ - { \ - unsigned int __Err = (inKernelError); \ - if(__Err != 0) \ - { \ - DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#define FailIfError(inError, inAction, inHandler, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - char __4CC[5] = CA4CCToCString(__Err); \ - DebugMessageN2(inMessage ", Error: %ld (%s)", __Err, __4CC); \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#define FailIfNoMessage(inCondition, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - goto inHandler; \ - } - -#define FailWithActionNoMessage(inCondition, inAction, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfNULLNoMessage(inPointer, inAction, inHandler, inMessage) \ - if((inPointer) == NULL) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfKernelErrorNoMessage(inKernelError, inAction, inHandler, inMessage) \ - { \ - unsigned int __Err = (inKernelError); \ - if(__Err != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#define FailIfErrorNoMessage(inError, inAction, inHandler, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#if defined(__cplusplus) - -#define Throw(inException) __THROW_STOP; throw (inException) - -#define ThrowIf(inCondition, inException, inMessage) \ - if(inCondition) \ - { \ - DebugMessage(inMessage); \ - Throw(inException); \ - } - -#define ThrowIfNULL(inPointer, inException, inMessage) \ - if((inPointer) == NULL) \ - { \ - DebugMessage(inMessage); \ - Throw(inException); \ - } - -#define ThrowIfKernelError(inKernelError, inException, inMessage) \ - { \ - unsigned int __Err = (inKernelError); \ - if(__Err != 0) \ - { \ - DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ - Throw(inException); \ - } \ - } - -#define ThrowIfError(inError, inException, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - char __4CC[5] = CA4CCToCString(__Err); \ - DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC); \ - Throw(inException); \ - } \ - } - -#if TARGET_OS_WIN32 -#define ThrowIfWinError(inError, inException, inMessage) \ - { \ - HRESULT __Err = (inError); \ - if(FAILED(__Err)) \ - { \ - DebugMessageN2(inMessage ", Code: %d, Facility: 0x%X", HRESULT_CODE(__Err), HRESULT_FACILITY(__Err)); \ - Throw(inException); \ - } \ - } -#endif - -#define SubclassResponsibility(inMethodName, inException) \ - { \ - DebugMessage(inMethodName": Subclasses must implement this method"); \ - Throw(inException); \ - } - -#endif // defined(__cplusplus) - -#else - -#pragma mark Release Macros - -#define Assert(inCondition, inMessage) \ - if(!(inCondition)) \ - { \ - __ASSERT_STOP; \ - } - -#define AssertFileLine(inCondition, inMessage) Assert(inCondition, inMessage) - -#define AssertNoError(inError, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - __ASSERT_STOP; \ - } \ - } - -#define AssertNoKernelError(inError, inMessage) \ - { \ - unsigned int __Err = (unsigned int)(inError); \ - if(__Err != 0) \ - { \ - __ASSERT_STOP; \ - } \ - } - -#define AssertNotNULL(inPtr, inMessage) \ - { \ - if((inPtr) == NULL) \ - { \ - __ASSERT_STOP; \ - } \ - } - -#define FailIf(inCondition, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - goto inHandler; \ - } - -#define FailWithAction(inCondition, inAction, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfNULL(inPointer, inAction, inHandler, inMessage) \ - if((inPointer) == NULL) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfKernelError(inKernelError, inAction, inHandler, inMessage) \ - if((inKernelError) != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfError(inError, inAction, inHandler, inMessage) \ - if((inError) != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfNoMessage(inCondition, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - goto inHandler; \ - } - -#define FailWithActionNoMessage(inCondition, inAction, inHandler, inMessage) \ - if(inCondition) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfNULLNoMessage(inPointer, inAction, inHandler, inMessage) \ - if((inPointer) == NULL) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } - -#define FailIfKernelErrorNoMessage(inKernelError, inAction, inHandler, inMessage) \ - { \ - unsigned int __Err = (inKernelError); \ - if(__Err != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#define FailIfErrorNoMessage(inError, inAction, inHandler, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - STOP; \ - { inAction; } \ - goto inHandler; \ - } \ - } - -#if defined(__cplusplus) - -#define Throw(inException) __THROW_STOP; throw (inException) - -#define ThrowIf(inCondition, inException, inMessage) \ - if(inCondition) \ - { \ - Throw(inException); \ - } - -#define ThrowIfNULL(inPointer, inException, inMessage) \ - if((inPointer) == NULL) \ - { \ - Throw(inException); \ - } - -#define ThrowIfKernelError(inKernelError, inException, inMessage) \ - { \ - unsigned int __Err = (inKernelError); \ - if(__Err != 0) \ - { \ - Throw(inException); \ - } \ - } - -#define ThrowIfError(inError, inException, inMessage) \ - { \ - SInt32 __Err = (inError); \ - if(__Err != 0) \ - { \ - Throw(inException); \ - } \ - } - -#if TARGET_OS_WIN32 -#define ThrowIfWinError(inError, inException, inMessage) \ - { \ - HRESULT __Err = (inError); \ - if(FAILED(__Err)) \ - { \ - Throw(inException); \ - } \ - } -#endif - -#define SubclassResponsibility(inMethodName, inException) \ - { \ - Throw(inException); \ - } - -#endif // defined(__cplusplus) - -#endif // DEBUG || CoreAudio_Debug - -#endif diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAMath.h b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAMath.h deleted file mode 100755 index f666704..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAMath.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - File: CAMath.h - Abstract: Part of CoreAudio Utility Classes - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#ifndef __CAMath_h__ -#define __CAMath_h__ - -#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include <CoreAudio/CoreAudioTypes.h> -#else - #include <CoreAudioTypes.h> -#endif - -inline bool fiszero(Float64 f) { return (f == 0.); } -inline bool fiszero(Float32 f) { return (f == 0.f); } - -inline bool fnonzero(Float64 f) { return !fiszero(f); } -inline bool fnonzero(Float32 f) { return !fiszero(f); } - -inline bool fequal(const Float64 &a, const Float64 &b) { return a == b; } -inline bool fequal(const Float32 &a, const Float32 &b) { return a == b; } - -inline bool fnotequal(const Float64 &a, const Float64 &b) { return !fequal(a, b); } -inline bool fnotequal(const Float32 &a, const Float32 &b) { return !fequal(a, b); } - -#endif // __CAMath_h__ diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.cpp b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.cpp deleted file mode 100755 index 87a259b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.cpp +++ /dev/null @@ -1,795 +0,0 @@ -/* - File: CAStreamBasicDescription.cpp - Abstract: CAStreamBasicDescription.h - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#include "CAStreamBasicDescription.h" -#include "CAMath.h" - -#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include <CoreFoundation/CFByteOrder.h> -#else - #include <CFByteOrder.h> -#endif - -#pragma mark This file needs to compile on earlier versions of the OS, so please keep that in mind when editing it - -char *CAStringForOSType (OSType t, char *writeLocation) -{ - char *p = writeLocation; - unsigned char str[4] = {0}, *q = str; - *(UInt32 *)str = CFSwapInt32HostToBig(t); - - bool hasNonPrint = false; - for (int i = 0; i < 4; ++i) { - if (!(isprint(*q) && *q != '\\')) { - hasNonPrint = true; - break; - } - q++; - } - q = str; - - if (hasNonPrint) - p += sprintf (p, "0x"); - else - *p++ = '\''; - - for (int i = 0; i < 4; ++i) { - if (hasNonPrint) { - p += sprintf(p, "%02X", *q++); - } else { - *p++ = *q++; - } - } - if (!hasNonPrint) - *p++ = '\''; - *p = '\0'; - return writeLocation; -} - - -const AudioStreamBasicDescription CAStreamBasicDescription::sEmpty = { 0.0, 0, 0, 0, 0, 0, 0, 0, 0 }; - -CAStreamBasicDescription::CAStreamBasicDescription() -{ - memset (this, 0, sizeof(AudioStreamBasicDescription)); -} - -CAStreamBasicDescription::CAStreamBasicDescription(const AudioStreamBasicDescription &desc) -{ - SetFrom(desc); -} - - -CAStreamBasicDescription::CAStreamBasicDescription(double inSampleRate, UInt32 inFormatID, - UInt32 inBytesPerPacket, UInt32 inFramesPerPacket, - UInt32 inBytesPerFrame, UInt32 inChannelsPerFrame, - UInt32 inBitsPerChannel, UInt32 inFormatFlags) -{ - mSampleRate = inSampleRate; - mFormatID = inFormatID; - mBytesPerPacket = inBytesPerPacket; - mFramesPerPacket = inFramesPerPacket; - mBytesPerFrame = inBytesPerFrame; - mChannelsPerFrame = inChannelsPerFrame; - mBitsPerChannel = inBitsPerChannel; - mFormatFlags = inFormatFlags; - mReserved = 0; -} - -char *CAStreamBasicDescription::AsString(char *buf, size_t _bufsize) const -{ - int bufsize = (int)_bufsize; // must be signed to protect against overflow - char *theBuffer = buf; - int nc; - char formatID[24]; - CAStringForOSType (mFormatID, formatID); - nc = snprintf(buf, bufsize, "%2d ch, %6.0f Hz, %s (0x%08X) ", (int)NumberChannels(), mSampleRate, formatID, (int)mFormatFlags); - buf += nc; if ((bufsize -= nc) <= 0) goto exit; - if (mFormatID == kAudioFormatLinearPCM) { - bool isInt = !(mFormatFlags & kLinearPCMFormatFlagIsFloat); - int wordSize = SampleWordSize(); - const char *endian = (wordSize > 1) ? - ((mFormatFlags & kLinearPCMFormatFlagIsBigEndian) ? " big-endian" : " little-endian" ) : ""; - const char *sign = isInt ? - ((mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) ? " signed" : " unsigned") : ""; - const char *floatInt = isInt ? "integer" : "float"; - char packed[32]; - if (wordSize > 0 && PackednessIsSignificant()) { - if (mFormatFlags & kLinearPCMFormatFlagIsPacked) - snprintf(packed, sizeof(packed), "packed in %d bytes", wordSize); - else - snprintf(packed, sizeof(packed), "unpacked in %d bytes", wordSize); - } else - packed[0] = '\0'; - const char *align = (wordSize > 0 && AlignmentIsSignificant()) ? - ((mFormatFlags & kLinearPCMFormatFlagIsAlignedHigh) ? " high-aligned" : " low-aligned") : ""; - const char *deinter = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) ? ", deinterleaved" : ""; - const char *commaSpace = (packed[0]!='\0') || (align[0]!='\0') ? ", " : ""; - char bitdepth[20]; - - int fracbits = (mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift; - if (fracbits > 0) - snprintf(bitdepth, sizeof(bitdepth), "%d.%d", (int)mBitsPerChannel - fracbits, fracbits); - else - snprintf(bitdepth, sizeof(bitdepth), "%d", (int)mBitsPerChannel); - - /* nc =*/ snprintf(buf, bufsize, "%s-bit%s%s %s%s%s%s%s", - bitdepth, endian, sign, floatInt, - commaSpace, packed, align, deinter); - // buf += nc; if ((bufsize -= nc) <= 0) goto exit; - } else if (mFormatID == 'alac') { // kAudioFormatAppleLossless - int sourceBits = 0; - switch (mFormatFlags) - { - case 1: // kAppleLosslessFormatFlag_16BitSourceData - sourceBits = 16; - break; - case 2: // kAppleLosslessFormatFlag_20BitSourceData - sourceBits = 20; - break; - case 3: // kAppleLosslessFormatFlag_24BitSourceData - sourceBits = 24; - break; - case 4: // kAppleLosslessFormatFlag_32BitSourceData - sourceBits = 32; - break; - } - if (sourceBits) - nc = snprintf(buf, bufsize, "from %d-bit source, ", sourceBits); - else - nc = snprintf(buf, bufsize, "from UNKNOWN source bit depth, "); - buf += nc; if ((bufsize -= nc) <= 0) goto exit; - /* nc =*/ snprintf(buf, bufsize, "%d frames/packet", (int)mFramesPerPacket); - // buf += nc; if ((bufsize -= nc) <= 0) goto exit; - } - else - /* nc =*/ snprintf(buf, bufsize, "%d bits/channel, %d bytes/packet, %d frames/packet, %d bytes/frame", - (int)mBitsPerChannel, (int)mBytesPerPacket, (int)mFramesPerPacket, (int)mBytesPerFrame); -exit: - return theBuffer; -} - -void CAStreamBasicDescription::NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription) -{ - // the only thing that changes is to make mixable linear PCM into the canonical linear PCM format - if((ioDescription.mFormatID == kAudioFormatLinearPCM) && ((ioDescription.mFormatFlags & kIsNonMixableFlag) == 0)) - { - // the canonical linear PCM format - ioDescription.mFormatFlags = kAudioFormatFlagsCanonical; - ioDescription.mBytesPerPacket = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame; - ioDescription.mFramesPerPacket = 1; - ioDescription.mBytesPerFrame = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame; - ioDescription.mBitsPerChannel = 8 * SizeOf32(AudioSampleType); - } -} - -void CAStreamBasicDescription::NormalizeLinearPCMFormat(bool inNativeEndian, AudioStreamBasicDescription& ioDescription) -{ - // the only thing that changes is to make mixable linear PCM into the canonical linear PCM format - if((ioDescription.mFormatID == kAudioFormatLinearPCM) && ((ioDescription.mFormatFlags & kIsNonMixableFlag) == 0)) - { - // the canonical linear PCM format - ioDescription.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; - if(inNativeEndian) - { -#if TARGET_RT_BIG_ENDIAN - ioDescription.mFormatFlags |= kAudioFormatFlagIsBigEndian; -#endif - } - else - { -#if TARGET_RT_LITTLE_ENDIAN - ioDescription.mFormatFlags |= kAudioFormatFlagIsBigEndian; -#endif - } - ioDescription.mBytesPerPacket = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame; - ioDescription.mFramesPerPacket = 1; - ioDescription.mBytesPerFrame = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame; - ioDescription.mBitsPerChannel = 8 * SizeOf32(AudioSampleType); - } -} - -void CAStreamBasicDescription::ResetFormat(AudioStreamBasicDescription& ioDescription) -{ - ioDescription.mSampleRate = 0; - ioDescription.mFormatID = 0; - ioDescription.mBytesPerPacket = 0; - ioDescription.mFramesPerPacket = 0; - ioDescription.mBytesPerFrame = 0; - ioDescription.mChannelsPerFrame = 0; - ioDescription.mBitsPerChannel = 0; - ioDescription.mFormatFlags = 0; -} - -void CAStreamBasicDescription::FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription) -{ - if(fiszero(ioDescription.mSampleRate)) - { - ioDescription.mSampleRate = inTemplateDescription.mSampleRate; - } - if(ioDescription.mFormatID == 0) - { - ioDescription.mFormatID = inTemplateDescription.mFormatID; - } - if(ioDescription.mFormatFlags == 0) - { - ioDescription.mFormatFlags = inTemplateDescription.mFormatFlags; - } - if(ioDescription.mBytesPerPacket == 0) - { - ioDescription.mBytesPerPacket = inTemplateDescription.mBytesPerPacket; - } - if(ioDescription.mFramesPerPacket == 0) - { - ioDescription.mFramesPerPacket = inTemplateDescription.mFramesPerPacket; - } - if(ioDescription.mBytesPerFrame == 0) - { - ioDescription.mBytesPerFrame = inTemplateDescription.mBytesPerFrame; - } - if(ioDescription.mChannelsPerFrame == 0) - { - ioDescription.mChannelsPerFrame = inTemplateDescription.mChannelsPerFrame; - } - if(ioDescription.mBitsPerChannel == 0) - { - ioDescription.mBitsPerChannel = inTemplateDescription.mBitsPerChannel; - } -} - -void CAStreamBasicDescription::GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, UInt32 inMaxNameLength, bool inAbbreviate, bool inIncludeSampleRate) -{ - if(inIncludeSampleRate) - { - int theCharactersWritten = snprintf(outName, inMaxNameLength, "%.0f ", inDescription.mSampleRate); - outName += theCharactersWritten; - inMaxNameLength -= theCharactersWritten; - } - - switch(inDescription.mFormatID) - { - case kAudioFormatLinearPCM: - { - const char* theEndianString = NULL; - if((inDescription.mFormatFlags & kAudioFormatFlagIsBigEndian) != 0) - { - #if TARGET_RT_LITTLE_ENDIAN - theEndianString = "Big Endian"; - #endif - } - else - { - #if TARGET_RT_BIG_ENDIAN - theEndianString = "Little Endian"; - #endif - } - - const char* theKindString = NULL; - if((inDescription.mFormatFlags & kAudioFormatFlagIsFloat) != 0) - { - theKindString = (inAbbreviate ? "Float" : "Floating Point"); - } - else if((inDescription.mFormatFlags & kAudioFormatFlagIsSignedInteger) != 0) - { - theKindString = (inAbbreviate ? "SInt" : "Signed Integer"); - } - else - { - theKindString = (inAbbreviate ? "UInt" : "Unsigned Integer"); - } - - const char* thePackingString = NULL; - if((inDescription.mFormatFlags & kAudioFormatFlagIsPacked) == 0) - { - if((inDescription.mFormatFlags & kAudioFormatFlagIsAlignedHigh) != 0) - { - thePackingString = "High"; - } - else - { - thePackingString = "Low"; - } - } - - const char* theMixabilityString = NULL; - if((inDescription.mFormatFlags & kIsNonMixableFlag) == 0) - { - theMixabilityString = "Mixable"; - } - else - { - theMixabilityString = "Unmixable"; - } - - if(inAbbreviate) - { - if(theEndianString != NULL) - { - if(thePackingString != NULL) - { - snprintf(outName, inMaxNameLength, "%s %d Ch %s %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8); - } - else - { - snprintf(outName, inMaxNameLength, "%s %d Ch %s %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, theKindString, (int)inDescription.mBitsPerChannel); - } - } - else - { - if(thePackingString != NULL) - { - snprintf(outName, inMaxNameLength, "%s %d Ch %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)((inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8)); - } - else - { - snprintf(outName, inMaxNameLength, "%s %d Ch %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theKindString, (int)inDescription.mBitsPerChannel); - } - } - } - else - { - if(theEndianString != NULL) - { - if(thePackingString != NULL) - { - snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8); - } - else - { - snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString); - } - } - else - { - if(thePackingString != NULL) - { - snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8); - } - else - { - snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString); - } - } - } - } - break; - - case kAudioFormatAC3: - strlcpy(outName, "AC-3", sizeof(outName)); - break; - - case kAudioFormat60958AC3: - strlcpy(outName, "AC-3 for SPDIF", sizeof(outName)); - break; - - default: - CACopy4CCToCString(outName, inDescription.mFormatID); - break; - }; -} - -#if CoreAudio_Debug -#include "CALogMacros.h" - -void CAStreamBasicDescription::PrintToLog(const AudioStreamBasicDescription& inDesc) -{ - PrintFloat (" Sample Rate: ", inDesc.mSampleRate); - Print4CharCode (" Format ID: ", inDesc.mFormatID); - PrintHex (" Format Flags: ", inDesc.mFormatFlags); - PrintInt (" Bytes per Packet: ", inDesc.mBytesPerPacket); - PrintInt (" Frames per Packet: ", inDesc.mFramesPerPacket); - PrintInt (" Bytes per Frame: ", inDesc.mBytesPerFrame); - PrintInt (" Channels per Frame: ", inDesc.mChannelsPerFrame); - PrintInt (" Bits per Channel: ", inDesc.mBitsPerChannel); -} -#endif - -bool operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) -{ - bool theAnswer = false; - bool isDone = false; - - // note that if either side is 0, that field is skipped - - // format ID is the first order sort - if((!isDone) && ((x.mFormatID != 0) && (y.mFormatID != 0))) - { - if(x.mFormatID != y.mFormatID) - { - // formats are sorted numerically except that linear - // PCM is always first - if(x.mFormatID == kAudioFormatLinearPCM) - { - theAnswer = true; - } - else if(y.mFormatID == kAudioFormatLinearPCM) - { - theAnswer = false; - } - else - { - theAnswer = x.mFormatID < y.mFormatID; - } - isDone = true; - } - } - - - // mixable is always better than non-mixable for linear PCM and should be the second order sort item - if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM))) - { - if(((x.mFormatFlags & kIsNonMixableFlag) == 0) && ((y.mFormatFlags & kIsNonMixableFlag) != 0)) - { - theAnswer = true; - isDone = true; - } - else if(((x.mFormatFlags & kIsNonMixableFlag) != 0) && ((y.mFormatFlags & kIsNonMixableFlag) == 0)) - { - theAnswer = false; - isDone = true; - } - } - - // floating point vs integer for linear PCM only - if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM))) - { - if((x.mFormatFlags & kAudioFormatFlagIsFloat) != (y.mFormatFlags & kAudioFormatFlagIsFloat)) - { - // floating point is better than integer - theAnswer = y.mFormatFlags & kAudioFormatFlagIsFloat; - isDone = true; - } - } - - // bit depth - if((!isDone) && ((x.mBitsPerChannel != 0) && (y.mBitsPerChannel != 0))) - { - if(x.mBitsPerChannel != y.mBitsPerChannel) - { - // deeper bit depths are higher quality - theAnswer = x.mBitsPerChannel < y.mBitsPerChannel; - isDone = true; - } - } - - // sample rate - if((!isDone) && fnonzero(x.mSampleRate) && fnonzero(y.mSampleRate)) - { - if(fnotequal(x.mSampleRate, y.mSampleRate)) - { - // higher sample rates are higher quality - theAnswer = x.mSampleRate < y.mSampleRate; - isDone = true; - } - } - - // number of channels - if((!isDone) && ((x.mChannelsPerFrame != 0) && (y.mChannelsPerFrame != 0))) - { - if(x.mChannelsPerFrame != y.mChannelsPerFrame) - { - // more channels is higher quality - theAnswer = x.mChannelsPerFrame < y.mChannelsPerFrame; - //isDone = true; - } - } - - return theAnswer; -} - -static bool MatchFormatFlags(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) -{ - UInt32 xFlags = x.mFormatFlags; - UInt32 yFlags = y.mFormatFlags; - - // match wildcards - if (x.mFormatID == 0 || y.mFormatID == 0 || xFlags == 0 || yFlags == 0) - return true; - - if (x.mFormatID == kAudioFormatLinearPCM) - { - // knock off the all clear flag - xFlags = xFlags & ~kAudioFormatFlagsAreAllClear; - yFlags = yFlags & ~kAudioFormatFlagsAreAllClear; - - // if both kAudioFormatFlagIsPacked bits are set, then we don't care about the kAudioFormatFlagIsAlignedHigh bit. - if (xFlags & yFlags & kAudioFormatFlagIsPacked) { - xFlags = xFlags & ~kAudioFormatFlagIsAlignedHigh; - yFlags = yFlags & ~kAudioFormatFlagIsAlignedHigh; - } - - // if both kAudioFormatFlagIsFloat bits are set, then we don't care about the kAudioFormatFlagIsSignedInteger bit. - if (xFlags & yFlags & kAudioFormatFlagIsFloat) { - xFlags = xFlags & ~kAudioFormatFlagIsSignedInteger; - yFlags = yFlags & ~kAudioFormatFlagIsSignedInteger; - } - - // if the bit depth is 8 bits or less and the format is packed, we don't care about endianness - if((x.mBitsPerChannel <= 8) && ((xFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked)) - { - xFlags = xFlags & ~kAudioFormatFlagIsBigEndian; - } - if((y.mBitsPerChannel <= 8) && ((yFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked)) - { - yFlags = yFlags & ~kAudioFormatFlagIsBigEndian; - } - - // if the number of channels is 1, we don't care about non-interleavedness - if (x.mChannelsPerFrame == 1 && y.mChannelsPerFrame == 1) { - xFlags &= ~kLinearPCMFormatFlagIsNonInterleaved; - yFlags &= ~kLinearPCMFormatFlagIsNonInterleaved; - } - } - return xFlags == yFlags; -} - -bool operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) -{ - // the semantics for equality are: - // 1) Values must match exactly -- except for PCM format flags, see above. - // 2) wildcard's are ignored in the comparison - -#define MATCH(name) ((x.name) == 0 || (y.name) == 0 || (x.name) == (y.name)) - - return - // check the sample rate - (fiszero(x.mSampleRate) || fiszero(y.mSampleRate) || fequal(x.mSampleRate, y.mSampleRate)) - - // check the format ids - && MATCH(mFormatID) - - // check the format flags - && MatchFormatFlags(x, y) - - // check the bytes per packet - && MATCH(mBytesPerPacket) - - // check the frames per packet - && MATCH(mFramesPerPacket) - - // check the bytes per frame - && MATCH(mBytesPerFrame) - - // check the channels per frame - && MATCH(mChannelsPerFrame) - - // check the channels per frame - && MATCH(mBitsPerChannel) ; -} - -bool CAStreamBasicDescription::IsEqual(const AudioStreamBasicDescription &other, bool interpretingWildcards) const -{ - if (interpretingWildcards) - return *this == other; - return memcmp(this, &other, offsetof(AudioStreamBasicDescription, mReserved)) == 0; -} - -bool SanityCheck(const AudioStreamBasicDescription& x) -{ - // This function returns false if there are sufficiently insane values in any field. - // It is very conservative so even some very unlikely values will pass. - // This is just meant to catch the case where the data from a file is corrupted. - - return - (x.mSampleRate >= 0.) - && (x.mSampleRate < 3e6) // SACD sample rate is 2.8224 MHz - && (x.mBytesPerPacket < 1000000) - && (x.mFramesPerPacket < 1000000) - && (x.mBytesPerFrame < 1000000) - && (x.mChannelsPerFrame <= 1024) - && (x.mBitsPerChannel <= 1024) - && (x.mFormatID != 0) - && !(x.mFormatID == kAudioFormatLinearPCM && (x.mFramesPerPacket != 1 || x.mBytesPerPacket != x.mBytesPerFrame)); -} - -bool CAStreamBasicDescription::FromText(const char *inTextDesc, AudioStreamBasicDescription &fmt) -{ - const char *p = inTextDesc; - - memset(&fmt, 0, sizeof(fmt)); - - bool isPCM = true; // until proven otherwise - UInt32 pcmFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger; - - if (p[0] == '-') // previously we required a leading dash on PCM formats - ++p; - - if (p[0] == 'B' && p[1] == 'E') { - pcmFlags |= kLinearPCMFormatFlagIsBigEndian; - p += 2; - } else if (p[0] == 'L' && p[1] == 'E') { - p += 2; - } else { - // default is native-endian -#if TARGET_RT_BIG_ENDIAN - pcmFlags |= kLinearPCMFormatFlagIsBigEndian; -#endif - } - if (p[0] == 'F') { - pcmFlags = (pcmFlags & ~kAudioFormatFlagIsSignedInteger) | kAudioFormatFlagIsFloat; - ++p; - } else { - if (p[0] == 'U') { - pcmFlags &= ~kAudioFormatFlagIsSignedInteger; - ++p; - } - if (p[0] == 'I') - ++p; - else { - // it's not PCM; presumably some other format (NOT VALIDATED; use AudioFormat for that) - isPCM = false; - p = inTextDesc; // go back to the beginning - char buf[4] = { ' ',' ',' ',' ' }; - for (int i = 0; i < 4; ++i) { - if (*p != '\\') { - if ((buf[i] = *p++) == '\0') { - // special-case for 'aac' - if (i != 3) return false; - --p; // keep pointing at the terminating null - buf[i] = ' '; - break; - } - } else { - // "\xNN" is a hex byte - if (*++p != 'x') return false; - int x; - if (sscanf(++p, "%02X", &x) != 1) return false; - buf[i] = x; - p += 2; - } - } - - if (strchr("-@/#", buf[3])) { - // further special-casing for 'aac' - buf[3] = ' '; - --p; - } - - fmt.mFormatID = CFSwapInt32BigToHost(*(UInt32 *)buf); - } - } - - if (isPCM) { - fmt.mFormatID = kAudioFormatLinearPCM; - fmt.mFormatFlags = pcmFlags; - fmt.mFramesPerPacket = 1; - fmt.mChannelsPerFrame = 1; - int bitdepth = 0, fracbits = 0; - while (isdigit(*p)) - bitdepth = 10 * bitdepth + *p++ - '0'; - if (*p == '.') { - ++p; - if (!isdigit(*p)) { - fprintf(stderr, "Expected fractional bits following '.'\n"); - goto Bail; - } - while (isdigit(*p)) - fracbits = 10 * fracbits + *p++ - '0'; - bitdepth += fracbits; - fmt.mFormatFlags |= (fracbits << kLinearPCMFormatFlagsSampleFractionShift); - } - fmt.mBitsPerChannel = bitdepth; - fmt.mBytesPerPacket = fmt.mBytesPerFrame = (bitdepth + 7) / 8; - if (bitdepth & 7) { - // assume unpacked. (packed odd bit depths are describable but not supported in AudioConverter.) - fmt.mFormatFlags &= ~kLinearPCMFormatFlagIsPacked; - // alignment matters; default to high-aligned. use ':L_' for low. - fmt.mFormatFlags |= kLinearPCMFormatFlagIsAlignedHigh; - } - } - if (*p == '@') { - ++p; - while (isdigit(*p)) - fmt.mSampleRate = 10 * fmt.mSampleRate + (*p++ - '0'); - } - if (*p == '/') { - UInt32 flags = 0; - while (true) { - char c = *++p; - if (c >= '0' && c <= '9') - flags = (flags << 4) | (c - '0'); - else if (c >= 'A' && c <= 'F') - flags = (flags << 4) | (c - 'A' + 10); - else if (c >= 'a' && c <= 'f') - flags = (flags << 4) | (c - 'a' + 10); - else break; - } - fmt.mFormatFlags = flags; - } - if (*p == '#') { - ++p; - while (isdigit(*p)) - fmt.mFramesPerPacket = 10 * fmt.mFramesPerPacket + (*p++ - '0'); - } - if (*p == ':') { - ++p; - fmt.mFormatFlags &= ~kLinearPCMFormatFlagIsPacked; - if (*p == 'L') - fmt.mFormatFlags &= ~kLinearPCMFormatFlagIsAlignedHigh; - else if (*p == 'H') - fmt.mFormatFlags |= kLinearPCMFormatFlagIsAlignedHigh; - else - goto Bail; - ++p; - int bytesPerFrame = 0; - while (isdigit(*p)) - bytesPerFrame = 10 * bytesPerFrame + (*p++ - '0'); - fmt.mBytesPerFrame = fmt.mBytesPerPacket = bytesPerFrame; - } - if (*p == ',') { - ++p; - int ch = 0; - while (isdigit(*p)) - ch = 10 * ch + (*p++ - '0'); - fmt.mChannelsPerFrame = ch; - if (*p == 'D') { - ++p; - if (fmt.mFormatID != kAudioFormatLinearPCM) { - fprintf(stderr, "non-interleaved flag invalid for non-PCM formats\n"); - goto Bail; - } - fmt.mFormatFlags |= kAudioFormatFlagIsNonInterleaved; - } else { - if (*p == 'I') ++p; // default - if (fmt.mFormatID == kAudioFormatLinearPCM) - fmt.mBytesPerPacket = fmt.mBytesPerFrame *= ch; - } - } - if (*p != '\0') { - fprintf(stderr, "extra characters at end of format string: %s\n", p); - goto Bail; - } - return true; - -Bail: - fprintf(stderr, "Invalid format string: %s\n", inTextDesc); - fprintf(stderr, "Syntax of format strings is: \n"); - return false; -} - -const char *CAStreamBasicDescription::sTextParsingUsageString = - "format[@sample_rate_hz][/format_flags][#frames_per_packet][:LHbytesPerFrame][,channelsDI].\n" - "Format for PCM is [-][BE|LE]{F|I|UI}{bitdepth}; else a 4-char format code (e.g. aac, alac).\n"; diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.h b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.h deleted file mode 100755 index 97a2675..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAStreamBasicDescription.h +++ /dev/null @@ -1,409 +0,0 @@ -/* - File: CAStreamBasicDescription.h - Abstract: Part of CoreAudio Utility Classes - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#ifndef __CAStreamBasicDescription_h__ -#define __CAStreamBasicDescription_h__ - -#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include <CoreAudio/CoreAudioTypes.h> - #include <CoreFoundation/CoreFoundation.h> -#else - #include "CoreAudioTypes.h" - #include "CoreFoundation.h" -#endif - -#include "CADebugMacros.h" -#include <string.h> // for memset, memcpy -#include <stdio.h> // for FILE * - -#pragma mark This file needs to compile on more earlier versions of the OS, so please keep that in mind when editing it - -extern char *CAStringForOSType (OSType t, char *writeLocation); - -// define Leopard specific symbols for backward compatibility if applicable -#if COREAUDIOTYPES_VERSION < 1050 -typedef Float32 AudioSampleType; -enum { kAudioFormatFlagsCanonical = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked }; -#endif -#if COREAUDIOTYPES_VERSION < 1051 -typedef Float32 AudioUnitSampleType; -enum { - kLinearPCMFormatFlagsSampleFractionShift = 7, - kLinearPCMFormatFlagsSampleFractionMask = (0x3F << kLinearPCMFormatFlagsSampleFractionShift), -}; -#endif - -// define the IsMixable format flag for all versions of the system -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) - enum { kIsNonMixableFlag = kAudioFormatFlagIsNonMixable }; -#else - enum { kIsNonMixableFlag = (1L << 6) }; -#endif - -//============================================================================= -// CAStreamBasicDescription -// -// This is a wrapper class for the AudioStreamBasicDescription struct. -// It adds a number of convenience routines, but otherwise adds nothing -// to the footprint of the original struct. -//============================================================================= -class CAStreamBasicDescription : - public AudioStreamBasicDescription -{ - -// Constants -public: - static const AudioStreamBasicDescription sEmpty; - - enum CommonPCMFormat { - kPCMFormatOther = 0, - kPCMFormatFloat32 = 1, - kPCMFormatInt16 = 2, - kPCMFormatFixed824 = 3 - }; - -// Construction/Destruction -public: - CAStreamBasicDescription(); - - CAStreamBasicDescription(const AudioStreamBasicDescription &desc); - - CAStreamBasicDescription( double inSampleRate, UInt32 inFormatID, - UInt32 inBytesPerPacket, UInt32 inFramesPerPacket, - UInt32 inBytesPerFrame, UInt32 inChannelsPerFrame, - UInt32 inBitsPerChannel, UInt32 inFormatFlags); - - CAStreamBasicDescription( double inSampleRate, UInt32 inNumChannels, CommonPCMFormat pcmf, bool inIsInterleaved) { - unsigned wordsize; - - mSampleRate = inSampleRate; - mFormatID = kAudioFormatLinearPCM; - mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked; - mFramesPerPacket = 1; - mChannelsPerFrame = inNumChannels; - mBytesPerFrame = mBytesPerPacket = 0; - mReserved = 0; - - switch (pcmf) { - default: - return; - case kPCMFormatFloat32: - wordsize = 4; - mFormatFlags |= kAudioFormatFlagIsFloat; - break; - case kPCMFormatInt16: - wordsize = 2; - mFormatFlags |= kAudioFormatFlagIsSignedInteger; - break; - case kPCMFormatFixed824: - wordsize = 4; - mFormatFlags |= kAudioFormatFlagIsSignedInteger | (24 << kLinearPCMFormatFlagsSampleFractionShift); - break; - } - mBitsPerChannel = wordsize * 8; - if (inIsInterleaved) - mBytesPerFrame = mBytesPerPacket = wordsize * inNumChannels; - else { - mFormatFlags |= kAudioFormatFlagIsNonInterleaved; - mBytesPerFrame = mBytesPerPacket = wordsize; - } - } - -// Assignment - CAStreamBasicDescription& operator=(const AudioStreamBasicDescription& v) { SetFrom(v); return *this; } - - void SetFrom(const AudioStreamBasicDescription &desc) - { - memcpy(this, &desc, sizeof(AudioStreamBasicDescription)); - } - - bool FromText(const char *inTextDesc) { return FromText(inTextDesc, *this); } - static bool FromText(const char *inTextDesc, AudioStreamBasicDescription &outDesc); - // return true if parsing was successful - - static const char *sTextParsingUsageString; - - // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - // - // interrogation - - bool IsPCM() const { return mFormatID == kAudioFormatLinearPCM; } - - bool PackednessIsSignificant() const - { -// Assert(IsPCM(), "PackednessIsSignificant only applies for PCM"); - return (SampleWordSize() << 3) != mBitsPerChannel; - } - - bool AlignmentIsSignificant() const - { - return PackednessIsSignificant() || (mBitsPerChannel & 7) != 0; - } - - bool IsInterleaved() const - { - return !IsPCM() || !(mFormatFlags & kAudioFormatFlagIsNonInterleaved); - } - - bool IsSignedInteger() const - { - return IsPCM() && (mFormatFlags & kAudioFormatFlagIsSignedInteger); - } - - bool IsFloat() const - { - return IsPCM() && (mFormatFlags & kAudioFormatFlagIsFloat); - } - - bool IsNativeEndian() const - { - return (mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian; - } - - // for sanity with interleaved/deinterleaved possibilities, never access mChannelsPerFrame, use these: - UInt32 NumberInterleavedChannels() const { return IsInterleaved() ? mChannelsPerFrame : 1; } - UInt32 NumberChannelStreams() const { return IsInterleaved() ? 1 : mChannelsPerFrame; } - UInt32 NumberChannels() const { return mChannelsPerFrame; } - UInt32 SampleWordSize() const { - return (mBytesPerFrame > 0 && NumberInterleavedChannels()) ? mBytesPerFrame / NumberInterleavedChannels() : 0; - } - - UInt32 FramesToBytes(UInt32 nframes) const { return nframes * mBytesPerFrame; } - UInt32 BytesToFrames(UInt32 nbytes) const { -// Assert(mBytesPerFrame > 0, "bytesPerFrame must be > 0 in BytesToFrames"); - return nbytes / mBytesPerFrame; - } - - bool SameChannelsAndInterleaving(const CAStreamBasicDescription &a) const - { - return this->NumberChannels() == a.NumberChannels() && this->IsInterleaved() == a.IsInterleaved(); - } - - bool IdentifyCommonPCMFormat(CommonPCMFormat &outFormat, bool *outIsInterleaved=NULL) const - { // return true if it's a valid PCM format. - - outFormat = kPCMFormatOther; - // trap out patently invalid formats. - if (mFormatID != kAudioFormatLinearPCM || mFramesPerPacket != 1 || mBytesPerFrame != mBytesPerPacket || mBitsPerChannel/8 > mBytesPerFrame || mChannelsPerFrame == 0) - return false; - bool interleaved = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0; - if (outIsInterleaved != NULL) *outIsInterleaved = interleaved; - unsigned wordsize = mBytesPerFrame; - if (interleaved) { - if (wordsize % mChannelsPerFrame != 0) return false; - wordsize /= mChannelsPerFrame; - } - - if ((mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian - && wordsize * 8 == mBitsPerChannel) { - // packed and native endian, good - if (mFormatFlags & kLinearPCMFormatFlagIsFloat) { - // float: reject nonsense bits - if (mFormatFlags & (kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagsSampleFractionMask)) - return false; - if (wordsize == 4) - outFormat = kPCMFormatFloat32; - } else if (mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) { - // signed int - unsigned fracbits = (mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift; - if (wordsize == 4 && fracbits == 24) - outFormat = kPCMFormatFixed824; - else if (wordsize == 2 && fracbits == 0) - outFormat = kPCMFormatInt16; - } - } - return true; - } - - bool IsCommonFloat32(bool *outIsInterleaved=NULL) const { - CommonPCMFormat fmt; - return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatFloat32; - } - bool IsCommonFixed824(bool *outIsInterleaved=NULL) const { - CommonPCMFormat fmt; - return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatFixed824; - } - bool IsCommonInt16(bool *outIsInterleaved=NULL) const { - CommonPCMFormat fmt; - return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatInt16; - } - - // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - // - // manipulation - - void SetCanonical(UInt32 nChannels, bool interleaved) - // note: leaves sample rate untouched - { - mFormatID = kAudioFormatLinearPCM; - int sampleSize = SizeOf32(AudioSampleType); - mFormatFlags = kAudioFormatFlagsCanonical; - mBitsPerChannel = 8 * sampleSize; - mChannelsPerFrame = nChannels; - mFramesPerPacket = 1; - if (interleaved) - mBytesPerPacket = mBytesPerFrame = nChannels * sampleSize; - else { - mBytesPerPacket = mBytesPerFrame = sampleSize; - mFormatFlags |= kAudioFormatFlagIsNonInterleaved; - } - } - - bool IsCanonical() const - { - if (mFormatID != kAudioFormatLinearPCM) return false; - UInt32 reqFormatFlags; - UInt32 flagsMask = (kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagsSampleFractionMask); - bool interleaved = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0; - unsigned sampleSize = SizeOf32(AudioSampleType); - reqFormatFlags = kAudioFormatFlagsCanonical; - UInt32 reqFrameSize = interleaved ? (mChannelsPerFrame * sampleSize) : sampleSize; - - return ((mFormatFlags & flagsMask) == reqFormatFlags - && mBitsPerChannel == 8 * sampleSize - && mFramesPerPacket == 1 - && mBytesPerFrame == reqFrameSize - && mBytesPerPacket == reqFrameSize); - } - - void SetAUCanonical(UInt32 nChannels, bool interleaved) - { - mFormatID = kAudioFormatLinearPCM; -#if CA_PREFER_FIXED_POINT - mFormatFlags = kAudioFormatFlagsCanonical | (kAudioUnitSampleFractionBits << kLinearPCMFormatFlagsSampleFractionShift); -#else - mFormatFlags = kAudioFormatFlagsCanonical; -#endif - mChannelsPerFrame = nChannels; - mFramesPerPacket = 1; - mBitsPerChannel = 8 * SizeOf32(AudioUnitSampleType); - if (interleaved) - mBytesPerPacket = mBytesPerFrame = nChannels * SizeOf32(AudioUnitSampleType); - else { - mBytesPerPacket = mBytesPerFrame = SizeOf32(AudioUnitSampleType); - mFormatFlags |= kAudioFormatFlagIsNonInterleaved; - } - } - - void ChangeNumberChannels(UInt32 nChannels, bool interleaved) - // alter an existing format - { -// Assert(IsPCM(), "ChangeNumberChannels only works for PCM formats"); - UInt32 wordSize = SampleWordSize(); // get this before changing ANYTHING - if (wordSize == 0) - wordSize = (mBitsPerChannel + 7) / 8; - mChannelsPerFrame = nChannels; - mFramesPerPacket = 1; - if (interleaved) { - mBytesPerPacket = mBytesPerFrame = nChannels * wordSize; - mFormatFlags &= ~kAudioFormatFlagIsNonInterleaved; - } else { - mBytesPerPacket = mBytesPerFrame = wordSize; - mFormatFlags |= kAudioFormatFlagIsNonInterleaved; - } - } - - // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - // - // other - - bool IsEqual(const AudioStreamBasicDescription &other, bool interpretingWildcards=true) const; - - void Print() const { - Print (stdout); - } - - void Print(FILE* file) const { - PrintFormat (file, "", "AudioStreamBasicDescription:"); - } - - void PrintFormat(FILE *f, const char *indent, const char *name) const { - char buf[256]; - fprintf(f, "%s%s %s\n", indent, name, AsString(buf, sizeof(buf))); - } - - void PrintFormat2(FILE *f, const char *indent, const char *name) const { // no trailing newline - char buf[256]; - fprintf(f, "%s%s %s", indent, name, AsString(buf, sizeof(buf))); - } - - char * AsString(char *buf, size_t bufsize) const; - - static void Print (const AudioStreamBasicDescription &inDesc) - { - CAStreamBasicDescription desc(inDesc); - desc.Print (); - } - - OSStatus Save(CFPropertyListRef *outData) const; - - OSStatus Restore(CFPropertyListRef &inData); - -// Operations - static bool IsMixable(const AudioStreamBasicDescription& inDescription) { return (inDescription.mFormatID == kAudioFormatLinearPCM) && ((inDescription.mFormatFlags & kIsNonMixableFlag) == 0); } - static void NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription); - static void NormalizeLinearPCMFormat(bool inNativeEndian, AudioStreamBasicDescription& ioDescription); - static void ResetFormat(AudioStreamBasicDescription& ioDescription); - static void FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription); - static void GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, UInt32 inMaxNameLength, bool inAbbreviate, bool inIncludeSampleRate = false); -#if CoreAudio_Debug - static void PrintToLog(const AudioStreamBasicDescription& inDesc); -#endif -}; - -bool operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y); -bool operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y); -#if TARGET_OS_MAC || (TARGET_OS_WIN32 && (_MSC_VER > 600)) -inline bool operator!=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x == y); } -inline bool operator<=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return (x < y) || (x == y); } -inline bool operator>=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x < y); } -inline bool operator>(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !((x < y) || (x == y)); } -#endif - -bool SanityCheck(const AudioStreamBasicDescription& x); - - -#endif // __CAStreamBasicDescription_h__ diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.cpp b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.cpp deleted file mode 100755 index 0085128..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - File: CAXException.cpp - Abstract: CAXException.h - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#include "CAXException.h" - -CAXException::WarningHandler CAXException::sWarningHandler = NULL; diff --git a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.h b/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.h deleted file mode 100755 index c5dfb6b..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/PublicUtility/CAXException.h +++ /dev/null @@ -1,338 +0,0 @@ -/* - File: CAXException.h - Abstract: Part of CoreAudio Utility Classes - Version: 2.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2012 Apple Inc. All Rights Reserved. - -*/ -#ifndef __CAXException_h__ -#define __CAXException_h__ - -#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) - #include <CoreFoundation/CoreFoundation.h> -#else - #include <ConditionalMacros.h> - #include <CoreFoundation.h> -#endif -#include "CADebugMacros.h" -#include <ctype.h> -//#include <stdio.h> -#include <string.h> - - -class CAX4CCString { -public: - CAX4CCString(OSStatus error) { - // see if it appears to be a 4-char-code - char *str = mStr; - *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error); - if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) { - str[0] = str[5] = '\''; - str[6] = '\0'; - } else if (error > -200000 && error < 200000) - // no, format it as an integer - sprintf(str, "%d", (int)error); - else - sprintf(str, "0x%x", (int)error); - } - const char *get() const { return mStr; } - operator const char *() const { return mStr; } -private: - char mStr[16]; -}; - -// An extended exception class that includes the name of the failed operation -class CAXException { -public: - CAXException(const char *operation, OSStatus err) : - mError(err) - { - if (operation == NULL) - mOperation[0] = '\0'; - else if (strlen(operation) >= sizeof(mOperation)) { - memcpy(mOperation, operation, sizeof(mOperation) - 1); - mOperation[sizeof(mOperation) - 1] = '\0'; - } else - - strlcpy(mOperation, operation, sizeof(mOperation)); - } - - char *FormatError(char *str) const - { - return FormatError(str, mError); - } - - char mOperation[256]; - const OSStatus mError; - - // ------------------------------------------------- - - typedef void (*WarningHandler)(const char *msg, OSStatus err); - - static char *FormatError(char *str, OSStatus error) - { - strcpy(str, CAX4CCString(error)); - return str; - } - - static void Warning(const char *s, OSStatus error) - { - if (sWarningHandler) - (*sWarningHandler)(s, error); - } - - static void SetWarningHandler(WarningHandler f) { sWarningHandler = f; } -private: - static WarningHandler sWarningHandler; -}; - -#if DEBUG || CoreAudio_Debug - #define XThrowIfError(error, operation) \ - do { \ - OSStatus __err = error; \ - if (__err) { \ - DebugMessageN2("about to throw %s: %s", CAX4CCString(__err).get(), operation);\ - __THROW_STOP; \ - throw CAXException(operation, __err); \ - } \ - } while (0) - - #define XThrowIf(condition, error, operation) \ - do { \ - if (condition) { \ - OSStatus __err = error; \ - DebugMessageN2("about to throw %s: %s", CAX4CCString(__err).get(), operation);\ - __THROW_STOP; \ - throw CAXException(operation, __err); \ - } \ - } while (0) - - #define XRequireNoError(error, label) \ - do { \ - OSStatus __err = error; \ - if (__err) { \ - DebugMessageN2("about to throw %s: %s", CAX4CCString(__err).get(), #error);\ - STOP; \ - goto label; \ - } \ - } while (0) - - #define XAssert(assertion) \ - do { \ - if (!(assertion)) { \ - DebugMessageN3("[%s, %d] error: failed assertion: %s", __FILE__, __LINE__, #assertion); \ - __ASSERT_STOP; \ - } \ - } while (0) - - #define XAssertNoError(error) \ - do { \ - OSStatus __err = error; \ - if (__err) { \ - DebugMessageN2("error %s: %s", CAX4CCString(__err).get(), #error);\ - STOP; \ - } \ - } while (0) - - #define ca_require_noerr(errorCode, exceptionLabel) \ - do \ - { \ - int evalOnceErrorCode = (errorCode); \ - if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ - { \ - DebugMessageN5("ca_require_noerr: [%s, %d] (goto %s;) %s:%d", \ - #errorCode, evalOnceErrorCode, \ - #exceptionLabel, \ - __FILE__, \ - __LINE__); \ - goto exceptionLabel; \ - } \ - } while ( 0 ) - - #define ca_verify_noerr(errorCode) \ - do \ - { \ - int evalOnceErrorCode = (errorCode); \ - if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ - { \ - DebugMessageN4("ca_verify_noerr: [%s, %d] %s:%d", \ - #errorCode, evalOnceErrorCode, \ - __FILE__, \ - __LINE__); \ - } \ - } while ( 0 ) - - #define ca_debug_string(message) \ - do \ - { \ - DebugMessageN3("ca_debug_string: %s %s:%d", \ - message, \ - __FILE__, \ - __LINE__); \ - } while ( 0 ) - - - #define ca_verify(assertion) \ - do \ - { \ - if ( __builtin_expect(!(assertion), 0) ) \ - { \ - DebugMessageN3("ca_verify: %s %s:%d", \ - #assertion, \ - __FILE__, \ - __LINE__); \ - } \ - } while ( 0 ) - - #define ca_require(assertion, exceptionLabel) \ - do \ - { \ - if ( __builtin_expect(!(assertion), 0) ) \ - { \ - DebugMessageN4("ca_require: %s %s %s:%d", \ - #assertion, \ - #exceptionLabel, \ - __FILE__, \ - __LINE__); \ - goto exceptionLabel; \ - } \ - } while ( 0 ) - - #define ca_check(assertion) \ - do \ - { \ - if ( __builtin_expect(!(assertion), 0) ) \ - { \ - DebugMessageN3("ca_check: %s %s:%d", \ - #assertion, \ - __FILE__, \ - __LINE__); \ - } \ - } while ( 0 ) - -#else - #define XThrowIfError(error, operation) \ - do { \ - OSStatus __err = error; \ - if (__err) { \ - throw CAXException(operation, __err); \ - } \ - } while (0) - - #define XThrowIf(condition, error, operation) \ - do { \ - if (condition) { \ - OSStatus __err = error; \ - throw CAXException(operation, __err); \ - } \ - } while (0) - - #define XRequireNoError(error, label) \ - do { \ - OSStatus __err = error; \ - if (__err) { \ - goto label; \ - } \ - } while (0) - - #define XAssert(assertion) \ - do { \ - if (!(assertion)) { \ - } \ - } while (0) - - #define XAssertNoError(error) \ - do { \ - /*OSStatus __err =*/ error; \ - } while (0) - - #define ca_require_noerr(errorCode, exceptionLabel) \ - do \ - { \ - if ( __builtin_expect(0 != (errorCode), 0) ) \ - { \ - goto exceptionLabel; \ - } \ - } while ( 0 ) - - #define ca_verify_noerr(errorCode) \ - do \ - { \ - if ( 0 != (errorCode) ) \ - { \ - } \ - } while ( 0 ) - - #define ca_debug_string(message) - - #define ca_verify(assertion) \ - do \ - { \ - if ( !(assertion) ) \ - { \ - } \ - } while ( 0 ) - - #define ca_require(assertion, exceptionLabel) \ - do \ - { \ - if ( __builtin_expect(!(assertion), 0) ) \ - { \ - goto exceptionLabel; \ - } \ - } while ( 0 ) - - #define ca_check(assertion) \ - do \ - { \ - if ( !(assertion) ) \ - { \ - } \ - } while ( 0 ) - - -#endif - -#define XThrow(error, operation) XThrowIf(true, error, operation) -#define XThrowIfErr(error) XThrowIfError(error, #error) - -#endif // __CAXException_h__ diff --git a/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.h b/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.h deleted file mode 100755 index ce317cc..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// RawAudioDataPlayer.h -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import <AudioToolbox/AudioToolbox.h> -#import <AudioToolbox/AudioFile.h> - -#define QUEUE_BUFFER_SIZE 4 //队列缓冲个数 -#define EVERY_READ_LENGTH 1000 //每次从文件读取的长度 -#define MIN_SIZE_PER_FRAME 2000 //每侦最小数据长 - -#define NOTIFICATION_PLAY_OVER @"playingOver" - -@interface RawAudioDataPlayer : NSObject { - AudioStreamBasicDescription audioDescription;///音频参数 - AudioQueueRef audioQueue;//音频播放队列 - AudioQueueBufferRef audioQueueBuffers[QUEUE_BUFFER_SIZE];//音频缓存 - NSLock *synlock ;///同步控制 - Byte *pcmDataBuffer;//pcm的读文件数据区 - - BOOL isDataInputOver; - NSMutableData *mPcmData; - NSUInteger readedBytes; - NSMutableArray *emptyAudioQueueBufferIndexs; -} - -@property (nonatomic, assign) BOOL isDataInputOver; - -//static void AudioPlayerAQInputCallback(void *input, AudioQueueRef inQ, AudioQueueBufferRef outQB); - -- (void)startPlay; -- (void)stopPlay; -- (void)inputNewDataFromBuffer:(Byte *)buffer size:(int)bufferSize; - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.m b/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.m deleted file mode 100755 index 4908f40..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/RawAudioDataPlayer.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// RawAudioDataPlayer.m -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import "RawAudioDataPlayer.h" - -static void AudioPlayerAQInputCallback(void *input, AudioQueueRef inQ, AudioQueueBufferRef outQB); - -@interface RawAudioDataPlayer() - -- (void)prepare; -- (void)initAudio; -- (void)readPCMAndPlay:(AudioQueueRef)outQ buffer:(AudioQueueBufferRef)outQB; -- (int)checkUsedQueueBuffer:(AudioQueueBufferRef) qbuf; -- (void)putEmptyBuffer:(AudioQueueBufferRef)buffer; -- (void)removeEmptyBuffer:(AudioQueueBufferRef)buffer; - -@end - -@implementation RawAudioDataPlayer - -@synthesize isDataInputOver; - -- (id)init { - self = [super init]; - if (self) { - mPcmData = [NSMutableData data]; - readedBytes = 0; - pcmDataBuffer = malloc(EVERY_READ_LENGTH); - synlock = [[NSLock alloc] init]; - emptyAudioQueueBufferIndexs = [NSMutableArray arrayWithCapacity:QUEUE_BUFFER_SIZE]; - } - return self; -} - -- (void)prepare { - isDataInputOver = NO; - readedBytes = 0; - [emptyAudioQueueBufferIndexs removeAllObjects]; -} - --(void)startPlay { - [self initAudio]; - [self prepare]; - OSStatus status = AudioQueueStart(audioQueue, NULL); - if (status) { - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_PLAY_OVER object:nil]; - return; - } - for(int i=0;i<QUEUE_BUFFER_SIZE;i++) { - [self readPCMAndPlay:audioQueue buffer:audioQueueBuffers[i]]; - } - /* - audioQueue使用的是驱动回调方式,即通过AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);传入一个buff去播放,播放完buffer区后通过回调通知用户, - 用户得到通知后再重新初始化buff去播放,周而复始,当然,可以使用多个buff提高效率(测试发现使用单个buff会小卡) - */ -} - --(void)stopPlay { - AudioQueueStop(audioQueue, YES); - AudioQueueDispose(audioQueue, YES); -} - - --(void)initAudio { - ///设置音频参数 - audioDescription.mSampleRate = 8000;//采样率 - audioDescription.mFormatID = kAudioFormatLinearPCM; - audioDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; - audioDescription.mChannelsPerFrame = 1;///单声道 - audioDescription.mFramesPerPacket = 1;//每一个packet一侦数据 - audioDescription.mBitsPerChannel = 16;//每个采样点16bit量化 - audioDescription.mBytesPerFrame = (audioDescription.mBitsPerChannel/8) * audioDescription.mChannelsPerFrame; - audioDescription.mBytesPerPacket = audioDescription.mBytesPerFrame ; - ///创建一个新的从audioqueue到硬件层的通道 - // AudioQueueNewOutput(&audioDescription, AudioPlayerAQInputCallback, self, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);///使用当前线程播 - AudioQueueNewOutput(&audioDescription, AudioPlayerAQInputCallback, (__bridge void *)(self), nil, nil, 0, &audioQueue);//使用player的内部线程播 - - ////添加buffer区 - for(int i=0;i<QUEUE_BUFFER_SIZE;i++) { - int result = AudioQueueAllocateBuffer(audioQueue, MIN_SIZE_PER_FRAME, &audioQueueBuffers[i]);///创建buffer区,MIN_SIZE_PER_FRAME为每一侦所需要的最小的大小,该大小应该比每次往buffer里写的最大的一次还大 - NSLog(@"AudioQueueAllocateBuffer i = %d,result = %d",i,result); - } -} - -- (void)inputNewDataFromBuffer:(Byte *)buffer size:(int)bufferSize { - [synlock lock]; - [mPcmData appendBytes:buffer length:bufferSize]; - [synlock unlock]; - - if ([emptyAudioQueueBufferIndexs count] > 0) { //如果有空闲的audio queue buffer就尝试填入 - [self readPCMAndPlay:audioQueue buffer:audioQueueBuffers[[[emptyAudioQueueBufferIndexs objectAtIndex:0] intValue]]]; - } - -} - -- (void)setIsDataInputOver:(BOOL)dataInputOver { - isDataInputOver = dataInputOver; - if (dataInputOver) { - if ([emptyAudioQueueBufferIndexs count] == QUEUE_BUFFER_SIZE) { - NSLog(@"audio queue play over"); - [self stopPlay]; - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_PLAY_OVER object:nil]; - } - } -} - --(void)readPCMAndPlay:(AudioQueueRef)outQ buffer:(AudioQueueBufferRef)outQB -{ - [synlock lock]; - - NSUInteger lengthLeft = [mPcmData length] - readedBytes; //能够读取的数据长度 - if ((lengthLeft < EVERY_READ_LENGTH) && ( ! isDataInputOver)) { //数据不足以填充queue buffer - [self putEmptyBuffer:outQB]; - } - else { - if ([emptyAudioQueueBufferIndexs count] > 0) { - if (lengthLeft == 0 && isDataInputOver) { - //所有数据都输入并且读取完了 - if ([emptyAudioQueueBufferIndexs count] == QUEUE_BUFFER_SIZE) { - NSLog(@"audio queue play over"); - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_PLAY_OVER object:nil]; - } - } - else { - [self removeEmptyBuffer:outQB]; - - NSUInteger readLength = (lengthLeft > EVERY_READ_LENGTH) ? EVERY_READ_LENGTH : lengthLeft; - outQB->mAudioDataByteSize = readLength; - Byte *audioData = (Byte *)outQB->mAudioData; - memcpy(audioData, [mPcmData bytes] + readedBytes, readLength); - readedBytes += readLength; - /* - 将创建的buffer区添加到audioqueue里播放 - AudioQueueBufferRef用来缓存待播放的数据区,AudioQueueBufferRef有两个比较重要的参数,AudioQueueBufferRef->mAudioDataByteSize用来指示数据区大小,AudioQueueBufferRef->mAudioData用来保存数据区 - */ - AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL); - } - - } - } - [synlock unlock]; -} - -- (void)putEmptyBuffer:(AudioQueueBufferRef)buffer { - BOOL isInArray = NO; - int indexValue = [self checkUsedQueueBuffer:buffer]; - for (NSNumber *index in emptyAudioQueueBufferIndexs) { - if ([index intValue] == indexValue) { - isInArray = YES; - } - } - if ( ! isInArray) { - [emptyAudioQueueBufferIndexs addObject:[NSNumber numberWithInt:indexValue]]; - } -} - -- (void)removeEmptyBuffer:(AudioQueueBufferRef)buffer { - int indexValue = [self checkUsedQueueBuffer:buffer]; - for (NSNumber *index in emptyAudioQueueBufferIndexs) { - if ([index intValue] == indexValue) { - [emptyAudioQueueBufferIndexs removeObject:index]; - return; - } - } -} - --(int)checkUsedQueueBuffer:(AudioQueueBufferRef) qbuf { - int bufferIndex = 0; - if(qbuf == audioQueueBuffers[0]) { - bufferIndex = 0; - } - if(qbuf == audioQueueBuffers[1]) { - bufferIndex = 1; - } - if(qbuf == audioQueueBuffers[2]) { - bufferIndex = 2; - } - if(qbuf == audioQueueBuffers[3]) { - bufferIndex = 3; - } - return bufferIndex; -} - - -- (void)dealloc { - free(pcmDataBuffer); -} - -#pragma mark - -#pragma mark player call back -/* - 试了下其实可以不用静态函数,但是c写法的函数内是无法调用[self ***]这种格式的写法,所以还是用静态函数通过void *input来获取原类指针 - 这个回调存在的意义是为了重用缓冲buffer区,当通过AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);函数放入queue里面的音频文件播放完以后,通过这个函数通知 - 调用者,这样可以重新再使用回调传回的AudioQueueBufferRef - */ -static void AudioPlayerAQInputCallback(void *input, AudioQueueRef outQ, AudioQueueBufferRef outQB) { - @autoreleasepool { - RawAudioDataPlayer *player = (__bridge RawAudioDataPlayer *)input; - [player putEmptyBuffer:outQB]; - [player readPCMAndPlay:outQ buffer:outQB]; - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.h b/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.h deleted file mode 100755 index 6d99aa0..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// RecorderManager.h -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import <Foundation/Foundation.h> -//#import "AQRecorder.h" -#import "Encapsulator.h" - -@protocol RecordingDelegate <NSObject> - -- (void)recordingFinishedWithFileName:(NSString *)filePath time:(NSTimeInterval)interval; -- (void)recordingTimeout; -- (void)recordingStopped; //录音机停止采集声音 -- (void)recordingFailed:(NSString *)failureInfoString; - -@optional -- (void)levelMeterChanged:(float)levelMeter; - -@end - -@interface RecorderManager : NSObject <EncapsulatingDelegate> { - - Encapsulator *encapsulator; - NSString *filename; - NSDate *dateStartRecording; - NSDate *dateStopRecording; - NSTimer *timerLevelMeter; - NSTimer *timerTimeout; -} - -@property (nonatomic, weak) id<RecordingDelegate> delegate; -@property (nonatomic, strong) Encapsulator *encapsulator; -@property (nonatomic, strong) NSDate *dateStartRecording, *dateStopRecording; -@property (nonatomic, strong) NSTimer *timerLevelMeter; -@property (nonatomic, strong) NSTimer *timerTimeout; - -+ (RecorderManager *)sharedManager; - -- (void)startRecording; - -- (void)stopRecording; - -- (void)cancelRecording; - -- (NSTimeInterval)recordedTimeInterval; - -@end diff --git a/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.mm b/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.mm deleted file mode 100755 index 440ee64..0000000 --- a/TeamTalk/IOSDuoduo/Voice/manager/RecorderManager.mm +++ /dev/null @@ -1,236 +0,0 @@ -// -// RecorderManager.mm -// OggSpeex -// -// Created by Jiang Chuncheng on 6/25/13. -// Copyright (c) 2013 Sense Force. All rights reserved. -// - -#import "RecorderManager.h" -#import "AQRecorder.h" -#import <AVFoundation/AVFoundation.h> -#import <AudioToolbox/AudioToolbox.h> - -@interface RecorderManager() - -- (void)updateLevelMeter:(id)sender; -- (void)stopRecording:(BOOL)isCanceled; - -@end - -@implementation RecorderManager - -@synthesize dateStartRecording, dateStopRecording; -@synthesize encapsulator; -@synthesize timerLevelMeter; -@synthesize timerTimeout; - -static RecorderManager *mRecorderManager = nil; -AQRecorder *mAQRecorder; -AudioQueueLevelMeterState *levelMeterStates; - -+ (RecorderManager *)sharedManager { - @synchronized(self) { - if (mRecorderManager == nil) - { - mRecorderManager = [[self alloc] init]; - } - } - return mRecorderManager; -} - -+ (id)allocWithZone:(NSZone *)zone -{ - @synchronized(self) - { - if(mRecorderManager == nil) - { - mRecorderManager = [super allocWithZone:zone]; - return mRecorderManager; - } - } - - return nil; -} - -- (void)startRecording { - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; - if ( ! mAQRecorder) { - - mAQRecorder = new AQRecorder(); - - OSStatus error = AudioSessionInitialize(NULL, NULL, interruptionListener, (__bridge void *)self); - if (error) printf("ERROR INITIALIZING AUDIO SESSION! %d\n", (int)error); - else - { - UInt32 category = kAudioSessionCategory_PlayAndRecord; - error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category); - if (error) printf("couldn't set audio category!"); - - error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, (__bridge void *)self); - if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", (int)error); - UInt32 inputAvailable = 0; - UInt32 size = sizeof(inputAvailable); - - // we do not want to allow recording if input is not available - error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable); - if (error) printf("ERROR GETTING INPUT AVAILABILITY! %d\n", (int)error); - - // we also need to listen to see if input availability changes - error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, propListener, (__bridge void *)self); - if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", (int)error); - - error = AudioSessionSetActive(true); - if (error) printf("AudioSessionSetActive (true) failed"); - } - - } - - filename = [NSString stringWithString:[Encapsulator defaultFileName]]; - NSLog(@"filename:%@",filename); - -// if (self.encapsulator) { -// self.encapsulator.delegete = nil; -// [self.encapsulator release]; -// } -// self.encapsulator = [[[Encapsulator alloc] initWithFileName:filename] autorelease]; -// self.encapsulator.delegete = self; - - if ( ! self.encapsulator) { - self.encapsulator = [[Encapsulator alloc] initWithFileName:filename]; - self.encapsulator.delegete = self; - } - else { - [self.encapsulator resetWithFileName:filename]; - } - - if ( ! mAQRecorder->IsRunning()) { - NSLog(@"audio session category : %@", [[AVAudioSession sharedInstance] category]); - Boolean recordingWillBegin = mAQRecorder->StartRecord(encapsulator); - if ( ! recordingWillBegin) { - if ([self.delegate respondsToSelector:@selector(recordingFailed:)]) { - [self.delegate recordingFailed:@"程序错误,无法继续录音,请重启程序试试"]; - } - return; - } - } - - self.dateStartRecording = [NSDate date]; - - if (!levelMeterStates) - { - levelMeterStates = (AudioQueueLevelMeterState *)malloc(sizeof(AudioQueueLevelMeterState) * 1); - } - self.timerLevelMeter = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateLevelMeter:) userInfo:nil repeats:YES]; - self.timerTimeout = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(timeoutCheck:) userInfo:nil repeats:NO]; -} - -- (void)stopRecording { - [self stopRecording:NO]; -} - -- (void)cancelRecording { - [self stopRecording:YES]; -} - -- (void)stopRecording:(BOOL)isCanceled { - if (self.delegate) { - [self.delegate recordingStopped]; - } - if (isCanceled) { - if (self.encapsulator) { - [self.encapsulator stopEncapsulating:YES]; - } - } - [self.timerLevelMeter invalidate]; - [self.timerTimeout invalidate]; - self.timerLevelMeter = nil; -// free(levelMeterStates); - if (mAQRecorder) { - mAQRecorder->StopRecord(); - } - self.dateStopRecording = [NSDate date]; -} - -- (void)encapsulatingOver { - if (self.delegate) { - [self.delegate recordingFinishedWithFileName:filename time:[self recordedTimeInterval]]; - } -} - -- (NSTimeInterval)recordedTimeInterval { - return (dateStopRecording && dateStartRecording) ? [dateStopRecording timeIntervalSinceDate:dateStartRecording] : 0; -} - -- (void)updateLevelMeter:(id)sender { - if (self.delegate) { - UInt32 dataSize = sizeof(AudioQueueLevelMeterState); - AudioQueueGetProperty(mAQRecorder->Queue(), kAudioQueueProperty_CurrentLevelMeter, levelMeterStates, &dataSize); - if ([self.delegate respondsToSelector:@selector(levelMeterChanged:)]) { - [self.delegate levelMeterChanged:levelMeterStates[0].mPeakPower]; - } - - } -} - -- (void)timeoutCheck:(id)sender { - [[self delegate] recordingTimeout]; -} - -- (void)dealloc { - if (mAQRecorder) { - delete mAQRecorder; - } - if (levelMeterStates) - { - delete levelMeterStates; - } - self.encapsulator = nil; -} - -#pragma mark AudioSession listeners -void interruptionListener( void * inClientData, - UInt32 inInterruptionState) -{ - RecorderManager *THIS = (__bridge RecorderManager*)inClientData; - if (inInterruptionState == kAudioSessionBeginInterruption) - { - if (mAQRecorder->IsRunning()) { - [THIS stopRecording]; - } - } -} - -void propListener( void * inClientData, - AudioSessionPropertyID inID, - UInt32 inDataSize, - const void * inData) -{ - RecorderManager *THIS = (__bridge RecorderManager*)inClientData; - if (inID == kAudioSessionProperty_AudioRouteChange) - { - CFDictionaryRef routeDictionary = (CFDictionaryRef)inData; - //CFShow(routeDictionary); - CFNumberRef reason = (CFNumberRef)CFDictionaryGetValue(routeDictionary, CFSTR(kAudioSession_AudioRouteChangeKey_Reason)); - SInt32 reasonVal; - CFNumberGetValue(reason, kCFNumberSInt32Type, &reasonVal); - if (reasonVal != kAudioSessionRouteChangeReason_CategoryChange) - { - // stop the queue if we had a non-policy route change - if (mAQRecorder->IsRunning()) { - [THIS stopRecording]; - } - } - } - else if (inID == kAudioSessionProperty_AudioInputAvailable) - { - if (inDataSize == sizeof(UInt32)) - { -// UInt32 isAvailable = *(UInt32*)inData; - // disable recording if input is not available -// BOOL available = (isAvailable > 0) ? YES : NO; - } - } -} - -@end diff --git a/TeamTalk/IOSDuoduo/XLog.h b/TeamTalk/IOSDuoduo/XLog.h deleted file mode 100644 index 5b2e845..0000000 --- a/TeamTalk/IOSDuoduo/XLog.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// XLog.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - - -#import <Foundation/Foundation.h> -#define _XLOG - -#ifdef _XLOG -#define LogOut(format,...); DLog(@"[%s][%d]" format,__func__,__LINE__,##__VA_ARGS__); -#define LogOutMethodFun DLog( @"[%@] %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd) ); -#define LogError(format,...); DLog(@"[error][%s][%d]" format,__func__,__LINE__,##__VA_ARGS__); -#define LogWaring(format,...); DLog(@"[waring][%s][%d]" format,__func__,__LINE__,##__VA_ARGS__); -#define LogTeym(format,...); {} -#else -#define LogOut(format,...); {} -#define LogOutMethodFun {} -#define LogError(format,...); {} -#define LogWaring(format,...); {} -#define LogTeym(format,...); {} -#endif - - diff --git a/TeamTalk/IOSDuoduo/std.h b/TeamTalk/IOSDuoduo/std.h deleted file mode 100755 index ba391cb..0000000 --- a/TeamTalk/IOSDuoduo/std.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// std.h -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - - -#import <Foundation/Foundation.h> -#import "XLog.h" -#import "MD5.h" - - -#define objectOrNull(obj) ((obj) ? (obj) : [NSNull null]) -#define objectOrEmptyStr(obj) ((obj) ? (obj) : @"") - -#define isNull(x) (!x || [x isKindOfClass:[NSNull class]]) -#define toInt(x) (isNull(x) ? 0 : [x intValue]) -#define isEmptyString(x) (isNull(x) || [x isEqual:@""] || [x isEqual:@"(null)"]) - -#define sleep(s); [NSThread sleepForTimeInterval:s]; -#define Syn(x) @synthesize x = _##x - -#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] -#define RGB(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] -#define BoldSystemFont(size) [UIFont boldSystemFontOfSize:size] -#define systemFont(size) [UIFont systemFontOfSize:size] -#define beginAutoPool NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; { -#define endAutoPool } [pool release]; -#define skipspace(c) while (isspace(*c)) ++c -#define skipUntil(c,x) while (x != *c) ++c -#define TheWindowHeight ([UIDevice isAfterOS7] ? [UIScreen mainScreen].bounds.size.height : ([UIScreen mainScreen].bounds.size.height - 20)) -#define IntToNumber(int) ([NSNumber numberWithInt:int]) -#define isIOS7 [[UIDevice currentDevice].systemVersion doubleValue]>=7.0?YES:NO -#define SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] -#define STATUSBAR_HEIGHT [[UIApplication sharedApplication] statusBarFrame].size.height -#define NAVBAR_HEIGHT (44.f + ((SYSTEM_VERSION >= 7) ? STATUSBAR_HEIGHT : 0)) -#define FULL_WIDTH SCREEN_WIDTH -#define FULL_HEIGHT (SCREEN_HEIGHT - ((SYSTEM_VERSION >= 7) ? 0 : STATUSBAR_HEIGHT)) -#define CONTENT_HEIGHT (FULL_HEIGHT - NAVBAR_HEIGHT) -// 屏幕高度 -#define SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height - -// 屏幕宽度 -#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width -#define PhotosMessageDir ([[NSString documentPath] stringByAppendingPathComponent:@"/PhotosMessageDir/"]) -#define IPHONE4 ( [ [ UIScreen mainScreen ] bounds ].size.height == 480 ) -//字体颜色 -#define GRAYCOLOR RGB(137, 139, 144) - - - -#define FileManager ([NSFileManager defaultManager]) -#define TheUserDefaults ([NSUserDefaults standardUserDefaults]) -#define VoiceMessageDir ([[NSString documentPath] stringByAppendingPathComponent:@"/VoiceMessageDir/"]) -#define BlacklistDir ([[NSString documentPath] stringByAppendingPathComponent:@"/BlacklistDir/"]) -#define Departmentlist ([[NSString documentPath] stringByAppendingPathComponent:@"/department.plist"]) -#define fixedlist ([[NSString documentPath] stringByAppendingPathComponent:@"/fixed.plist"]) -#define shieldinglist ([[NSString documentPath] stringByAppendingPathComponent:@"/shieldingArray.plist"]) -#define TheBundleVerison (bundleVerison()) -#undef AS_SINGLETON -#define AS_SINGLETON( __class ) \ -+ (__class *)sharedInstance; - -#undef DEF_SINGLETON -#define DEF_SINGLETON( __class ) \ -+ (__class *)sharedInstance \ -{ \ -static dispatch_once_t once; \ -static __class * __singleton__; \ -dispatch_once( &once, ^{ __singleton__ = [[__class alloc] init]; } ); \ -return __singleton__; \ -} - -@protocol DDShareObjDelegate <NSObject> - -- (NSString*)shareTypeName; - -@end -char pinyinFirstLetter(unsigned short hanzi); -char getFirstChar(const NSString * str); diff --git a/TeamTalk/IOSDuoduo/std.m b/TeamTalk/IOSDuoduo/std.m deleted file mode 100755 index c81cc94..0000000 --- a/TeamTalk/IOSDuoduo/std.m +++ /dev/null @@ -1,257 +0,0 @@ -// -// std.m -// IOSDuoduo -// -// Created by 东邪 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "std.h" - -NSString *bundleVerison(){ - NSBundle * bundle=[NSBundle mainBundle]; - NSString * ver=[bundle.infoDictionary objectForKey:@"CFBundleShortVersionString"]; - return ver; -} - -#define HANZI_START 19968 -#define HANZI_COUNT 20902 -static char firstLetterArray[HANZI_COUNT] = -"ydkqsxnwzssxjbymgcczqpssqbycdscdqldylybssjgyqzjjfgcclzznwdwzjljpfyynnjjtmynzwzhflzppqhgccyynmjqyxxgd" -"nnsnsjnjnsnnmlnrxyfsngnnnnqzggllyjlnyzssecykyyhqwjssggyxyqyjtwktjhychmnxjtlhjyqbyxdldwrrjnwysrldzjpc" -"bzjjbrcfslnczstzfxxchtrqggddlyccssymmrjcyqzpwwjjyfcrwfdfzqpyddwyxkyjawjffxjbcftzyhhycyswccyxsclcxxwz" -"cxnbgnnxbxlzsqsbsjpysazdhmdzbqbscwdzzyytzhbtsyyfzgntnxjywqnknphhlxgybfmjnbjhhgqtjcysxstkzglyckglysmz" -"xyalmeldccxgzyrjxjzlnjzcqkcnnjwhjczccqljststbnhbtyxceqxkkwjyflzqlyhjxspsfxlmpbysxxxytccnylllsjxfhjxp" -"jbtffyabyxbcczbzyclwlczggbtssmdtjcxpthyqtgjjxcjfzkjzjqnlzwlslhdzbwjncjzyzsqnycqynzcjjwybrtwpyftwexcs" -"kdzctbyhyzqyyjxzcfbzzmjyxxsdczottbzljwfckscsxfyrlrygmbdthjxsqjccsbxyytswfbjdztnbcnzlcyzzpsacyzzsqqcs" -"hzqydxlbpjllmqxqydzxsqjtzpxlcglqdcwzfhctdjjsfxjejjtlbgxsxjmyjjqpfzasyjnsydjxkjcdjsznbartcclnjqmwnqnc" -"lllkbdbzzsyhqcltwlccrshllzntylnewyzyxczxxgdkdmtcedejtsyyssdqdfmxdbjlkrwnqlybglxnlgtgxbqjdznyjsjyjcjm" -"rnymgrcjczgjmzmgxmmryxkjnymsgmzzymknfxmbdtgfbhcjhkylpfmdxlxjjsmsqgzsjlqdldgjycalcmzcsdjllnxdjffffjcn" -"fnnffpfkhkgdpqxktacjdhhzdddrrcfqyjkqccwjdxhwjlyllzgcfcqjsmlzpbjjblsbcjggdckkdezsqcckjgcgkdjtjllzycxk" -"lqccgjcltfpcqczgwbjdqyzjjbyjhsjddwgfsjgzkcjctllfspkjgqjhzzljplgjgjjthjjyjzccmlzlyqbgjwmljkxzdznjqsyz" -"mljlljkywxmkjlhskjhbmclyymkxjqlbmllkmdxxkwyxwslmlpsjqqjqxyqfjtjdxmxxllcrqbsyjbgwynnggbcnxpjtgpapfgdj" -"qbhbncfjyzjkjkhxqfgqckfhygkhdkllsdjqxpqyaybnqsxqnszswhbsxwhxwbzzxdmndjbsbkbbzklylxgwxjjwaqzmywsjqlsj" -"xxjqwjeqxnchetlzalyyyszzpnkyzcptlshtzcfycyxyljsdcjqagyslcllyyysslqqqnldxzsccscadycjysfsgbfrsszqsbxjp" -"sjysdrckgjlgtkzjzbdktcsyqpyhstcldjnhmymcgxyzhjdctmhltxzhylamoxyjcltyfbqqjpfbdfehthsqhzywwcncxcdwhowg" -"yjlegmdqcwgfjhcsntmydolbygnqwesqpwnmlrydzszzlyqpzgcwxhnxpyxshmdqjgztdppbfbhzhhjyfdzwkgkzbldnzsxhqeeg" -"zxylzmmzyjzgszxkhkhtxexxgylyapsthxdwhzydpxagkydxbhnhnkdnjnmyhylpmgecslnzhkxxlbzzlbmlsfbhhgsgyyggbhsc" -"yajtxglxtzmcwzydqdqmngdnllszhngjzwfyhqswscelqajynytlsxthaznkzzsdhlaxxtwwcjhqqtddwzbcchyqzflxpslzqgpz" -"sznglydqtbdlxntctajdkywnsyzljhhdzckryyzywmhychhhxhjkzwsxhdnxlyscqydpslyzwmypnkxyjlkchtyhaxqsyshxasmc" -"hkdscrsgjpwqsgzjlwwschsjhsqnhnsngndantbaalczmsstdqjcjktscjnxplggxhhgoxzcxpdmmhldgtybynjmxhmrzplxjzck" -"zxshflqxxcdhxwzpckczcdytcjyxqhlxdhypjqxnlsyydzozjnhhqezysjyayxkypdgxddnsppyzndhthrhxydpcjjhtcnnctlhb" -"ynyhmhzllnnxmylllmdcppxhmxdkycyrdltxjchhznxclcclylnzsxnjzzlnnnnwhyqsnjhxynttdkyjpychhyegkcwtwlgjrlgg" -"tgtygyhpyhylqyqgcwyqkpyyettttlhyylltyttsylnyzwgywgpydqqzzdqnnkcqnmjjzzbxtqfjkdffbtkhzkbxdjjkdjjtlbwf" -"zpptkqtztgpdwntpjyfalqmkgxbcclzfhzcllllanpnxtjklcclgyhdzfgyddgcyyfgydxkssendhykdndknnaxxhbpbyyhxccga" -"pfqyjjdmlxcsjzllpcnbsxgjyndybwjspcwjlzkzddtacsbkzdyzypjzqsjnkktknjdjgyepgtlnyqnacdntcyhblgdzhbbydmjr" -"egkzyheyybjmcdtafzjzhgcjnlghldwxjjkytcyksssmtwcttqzlpbszdtwcxgzagyktywxlnlcpbclloqmmzsslcmbjcsdzkydc" -"zjgqjdsmcytzqqlnzqzxssbpkdfqmddzzsddtdmfhtdycnaqjqkypbdjyyxtljhdrqxlmhkydhrnlklytwhllrllrcxylbnsrnzz" -"symqzzhhkyhxksmzsyzgcxfbnbsqlfzxxnnxkxwymsddyqnggqmmyhcdzttfgyyhgsbttybykjdnkyjbelhdypjqnfxfdnkzhqks" -"byjtzbxhfdsbdaswpawajldyjsfhblcnndnqjtjnchxfjsrfwhzfmdrfjyxwzpdjkzyjympcyznynxfbytfyfwygdbnzzzdnytxz" -"emmqbsqehxfznbmflzzsrsyqjgsxwzjsprytjsjgskjjgljjynzjjxhgjkymlpyyycxycgqzswhwlyrjlpxslcxmnsmwklcdnkny" -"npsjszhdzeptxmwywxyysywlxjqcqxzdclaeelmcpjpclwbxsqhfwrtfnjtnqjhjqdxhwlbyccfjlylkyynldxnhycstyywncjtx" -"ywtrmdrqnwqcmfjdxzmhmayxnwmyzqtxtlmrspwwjhanbxtgzypxyyrrclmpamgkqjszycymyjsnxtplnbappypylxmyzkynldgy" -"jzcchnlmzhhanqnbgwqtzmxxmllhgdzxnhxhrxycjmffxywcfsbssqlhnndycannmtcjcypnxnytycnnymnmsxndlylysljnlxys" -"sqmllyzlzjjjkyzzcsfbzxxmstbjgnxnchlsnmcjscyznfzlxbrnnnylmnrtgzqysatswryhyjzmgdhzgzdwybsscskxsyhytsxg" -"cqgxzzbhyxjscrhmkkbsczjyjymkqhzjfnbhmqhysnjnzybknqmcjgqhwlsnzswxkhljhyybqcbfcdsxdldspfzfskjjzwzxsddx" -"jseeegjscssygclxxnwwyllymwwwgydkzjggggggsycknjwnjpcxbjjtqtjwdsspjxcxnzxnmelptfsxtllxcljxjjljsxctnswx" -"lennlyqrwhsycsqnybyaywjejqfwqcqqcjqgxaldbzzyjgkgxbltqyfxjltpydkyqhpmatlcndnkxmtxynhklefxdllegqtymsaw" -"hzmljtkynxlyjzljeeyybqqffnlyxhdsctgjhxywlkllxqkcctnhjlqmkkzgcyygllljdcgydhzwypysjbzjdzgyzzhywyfqdtyz" -"szyezklymgjjhtsmqwyzljyywzcsrkqyqltdxwcdrjalwsqzwbdcqyncjnnszjlncdcdtlzzzacqqzzddxyblxcbqjylzllljddz" -"jgyqyjzyxnyyyexjxksdaznyrdlzyyynjlslldyxjcykywnqcclddnyyynycgczhjxcclgzqjgnwnncqqjysbzzxyjxjnxjfzbsb" -"dsfnsfpzxhdwztdmpptflzzbzdmyypqjrsdzsqzsqxbdgcpzswdwcsqzgmdhzxmwwfybpngphdmjthzsmmbgzmbzjcfzhfcbbnmq" -"dfmbcmcjxlgpnjbbxgyhyyjgptzgzmqbqdcgybjxlwnkydpdymgcftpfxyztzxdzxtgkptybbclbjaskytssqyymscxfjhhlslls" -"jpqjjqaklyldlycctsxmcwfgngbqxllllnyxtyltyxytdpjhnhgnkbyqnfjyyzbyyessessgdyhfhwtcqbsdzjtfdmxhcnjzymqw" -"srxjdzjqbdqbbsdjgnfbknbxdkqhmkwjjjgdllthzhhyyyyhhsxztyyyccbdbpypzyccztjpzywcbdlfwzcwjdxxhyhlhwczxjtc" -"nlcdpxnqczczlyxjjcjbhfxwpywxzpcdzzbdccjwjhmlxbqxxbylrddgjrrctttgqdczwmxfytmmzcwjwxyywzzkybzcccttqnhx" -"nwxxkhkfhtswoccjybcmpzzykbnnzpbthhjdlszddytyfjpxyngfxbyqxzbhxcpxxtnzdnnycnxsxlhkmzxlthdhkghxxsshqyhh" -"cjyxglhzxcxnhekdtgqxqypkdhentykcnymyyjmkqyyyjxzlthhqtbyqhxbmyhsqckwwyllhcyylnneqxqwmcfbdccmljggxdqkt" -"lxkknqcdgcjwyjjlyhhqyttnwchhxcxwherzjydjccdbqcdgdnyxzdhcqrxcbhztqcbxwgqwyybxhmbymykdyecmqkyaqyngyzsl" -"fnkkqgyssqyshngjctxkzycssbkyxhyylstycxqthysmnscpmmgcccccmnztasmgqzjhklosjylswtmqzyqkdzljqqyplzycztcq" -"qpbbcjzclpkhqcyyxxdtdddsjcxffllchqxmjlwcjcxtspycxndtjshjwhdqqqckxyamylsjhmlalygxcyydmamdqmlmcznnyybz" -"xkyflmcncmlhxrcjjhsylnmtjggzgywjxsrxcwjgjqhqzdqjdcjjskjkgdzcgjjyjylxzxxcdqhhheslmhlfsbdjsyyshfyssczq" -"lpbdrfnztzdkykhsccgkwtqzckmsynbcrxqbjyfaxpzzedzcjykbcjwhyjbqzzywnyszptdkzpfpbaztklqnhbbzptpptyzzybhn" -"ydcpzmmcycqmcjfzzdcmnlfpbplngqjtbttajzpzbbdnjkljqylnbzqhksjznggqstzkcxchpzsnbcgzkddzqanzgjkdrtlzldwj" -"njzlywtxndjzjhxnatncbgtzcsskmljpjytsnwxcfjwjjtkhtzplbhsnjssyjbhbjyzlstlsbjhdnwqpslmmfbjdwajyzccjtbnn" -"nzwxxcdslqgdsdpdzgjtqqpsqlyyjzlgyhsdlctcbjtktyczjtqkbsjlgnnzdncsgpynjzjjyyknhrpwszxmtncszzyshbyhyzax" -"ywkcjtllckjjtjhgcssxyqyczbynnlwqcglzgjgqyqcczssbcrbcskydznxjsqgxssjmecnstjtpbdlthzwxqwqczexnqczgwesg" -"ssbybstscslccgbfsdqnzlccglllzghzcthcnmjgyzazcmsksstzmmzckbjygqljyjppldxrkzyxccsnhshhdznlzhzjjcddcbcj" -"xlbfqbczztpqdnnxljcthqzjgylklszzpcjdscqjhjqkdxgpbajynnsmjtzdxlcjyryynhjbngzjkmjxltbsllrzpylssznxjhll" -"hyllqqzqlsymrcncxsljmlzltzldwdjjllnzggqxppskyggggbfzbdkmwggcxmcgdxjmcjsdycabxjdlnbcddygskydqdxdjjyxh" -"saqazdzfslqxxjnqzylblxxwxqqzbjzlfbblylwdsljhxjyzjwtdjcyfqzqzzdzsxzzqlzcdzfxhwspynpqzmlpplffxjjnzzyls" -"jnyqzfpfzgsywjjjhrdjzzxtxxglghtdxcskyswmmtcwybazbjkshfhgcxmhfqhyxxyzftsjyzbxyxpzlchmzmbxhzzssyfdmncw" -"dabazlxktcshhxkxjjzjsthygxsxyyhhhjwxkzxssbzzwhhhcwtzzzpjxsyxqqjgzyzawllcwxznxgyxyhfmkhydwsqmnjnaycys" -"pmjkgwcqhylajgmzxhmmcnzhbhxclxdjpltxyjkdyylttxfqzhyxxsjbjnayrsmxyplckdnyhlxrlnllstycyyqygzhhsccsmcct" -"zcxhyqfpyyrpbflfqnntszlljmhwtcjqyzwtlnmlmdwmbzzsnzrbpdddlqjjbxtcsnzqqygwcsxfwzlxccrszdzmcyggdyqsgtnn" -"nlsmymmsyhfbjdgyxccpshxczcsbsjyygjmpbwaffyfnxhydxzylremzgzzyndsznlljcsqfnxxkptxzgxjjgbmyyssnbtylbnlh" -"bfzdcyfbmgqrrmzszxysjtznnydzzcdgnjafjbdknzblczszpsgcycjszlmnrznbzzldlnllysxsqzqlcxzlsgkbrxbrbzcycxzj" -"zeeyfgklzlnyhgzcgzlfjhgtgwkraajyzkzqtsshjjxdzyznynnzyrzdqqhgjzxsszbtkjbbfrtjxllfqwjgclqtymblpzdxtzag" -"bdhzzrbgjhwnjtjxlkscfsmwlldcysjtxkzscfwjlbnntzlljzllqblcqmqqcgcdfpbphzczjlpyyghdtgwdxfczqyyyqysrclqz" -"fklzzzgffcqnwglhjycjjczlqzzyjbjzzbpdcsnnjgxdqnknlznnnnpsntsdyfwwdjzjysxyyczcyhzwbbyhxrylybhkjksfxtjj" -"mmchhlltnyymsxxyzpdjjycsycwmdjjkqyrhllngpngtlyycljnnnxjyzfnmlrgjjtyzbsyzmsjyjhgfzqmsyxrszcytlrtqzsst" -"kxgqkgsptgxdnjsgcqcqhmxggztqydjjznlbznxqlhyqgggthqscbyhjhhkyygkggcmjdzllcclxqsftgjslllmlcskctbljszsz" -"mmnytpzsxqhjcnnqnyexzqzcpshkzzyzxxdfgmwqrllqxrfztlystctmjcsjjthjnxtnrztzfqrhcgllgcnnnnjdnlnnytsjtlny" -"xsszxcgjzyqpylfhdjsbbdczgjjjqzjqdybssllcmyttmqnbhjqmnygjyeqyqmzgcjkpdcnmyzgqllslnclmholzgdylfzslncnz" -"lylzcjeshnyllnxnjxlyjyyyxnbcljsswcqqnnyllzldjnllzllbnylnqchxyyqoxccqkyjxxxyklksxeyqhcqkkkkcsnyxxyqxy" -"gwtjohthxpxxhsnlcykychzzcbwqbbwjqcscszsslcylgddsjzmmymcytsdsxxscjpqqsqylyfzychdjynywcbtjsydchcyddjlb" -"djjsodzyqyskkyxdhhgqjyohdyxwgmmmazdybbbppbcmnnpnjzsmtxerxjmhqdntpjdcbsnmssythjtslmltrcplzszmlqdsdmjm" -"qpnqdxcfrnnfsdqqyxhyaykqyddlqyyysszbydslntfgtzqbzmchdhczcwfdxtmqqsphqwwxsrgjcwnntzcqmgwqjrjhtqjbbgwz" -"fxjhnqfxxqywyyhyscdydhhqmrmtmwctbszppzzglmzfollcfwhmmsjzttdhlmyffytzzgzyskjjxqyjzqbhmbzclyghgfmshpcf" -"zsnclpbqsnjyzslxxfpmtyjygbxlldlxpzjyzjyhhzcywhjylsjexfszzywxkzjlnadymlymqjpwxxhxsktqjezrpxxzghmhwqpw" -"qlyjjqjjzszcnhjlchhnxjlqwzjhbmzyxbdhhypylhlhlgfwlcfyytlhjjcwmscpxstkpnhjxsntyxxtestjctlsslstdlllwwyh" -"dnrjzsfgxssyczykwhtdhwjglhtzdqdjzxxqgghltzphcsqfclnjtclzpfstpdynylgmjllycqhynspchylhqyqtmzymbywrfqyk" -"jsyslzdnjmpxyyssrhzjnyqtqdfzbwwdwwrxcwggyhxmkmyyyhmxmzhnksepmlqqmtcwctmxmxjpjjhfxyyzsjzhtybmstsyjznq" -"jnytlhynbyqclcycnzwsmylknjxlggnnpjgtysylymzskttwlgsmzsylmpwlcwxwqcssyzsyxyrhssntsrwpccpwcmhdhhxzdzyf" -"jhgzttsbjhgyglzysmyclllxbtyxhbbzjkssdmalhhycfygmqypjyjqxjllljgclzgqlycjcctotyxmtmshllwlqfxymzmklpszz" -"cxhkjyclctyjcyhxsgyxnnxlzwpyjpxhjwpjpwxqqxlxsdhmrslzzydwdtcxknstzshbsccstplwsscjchjlcgchssphylhfhhxj" -"sxallnylmzdhzxylsxlmzykcldyahlcmddyspjtqjzlngjfsjshctsdszlblmssmnyymjqbjhrzwtyydchjljapzwbgqxbkfnbjd" -"llllyylsjydwhxpsbcmljpscgbhxlqhyrljxyswxhhzlldfhlnnymjljyflyjycdrjlfsyzfsllcqyqfgqyhnszlylmdtdjcnhbz" -"llnwlqxygyyhbmgdhxxnhlzzjzxczzzcyqzfngwpylcpkpykpmclgkdgxzgxwqbdxzzkzfbddlzxjtpjpttbythzzdwslcpnhslt" -"jxxqlhyxxxywzyswttzkhlxzxzpyhgzhknfsyhntjrnxfjcpjztwhplshfcrhnslxxjxxyhzqdxqwnnhyhmjdbflkhcxcwhjfyjc" -"fpqcxqxzyyyjygrpynscsnnnnchkzdyhflxxhjjbyzwttxnncyjjymswyxqrmhxzwfqsylznggbhyxnnbwttcsybhxxwxyhhxyxn" -"knyxmlywrnnqlxbbcljsylfsytjzyhyzawlhorjmnsczjxxxyxchcyqryxqzddsjfslyltsffyxlmtyjmnnyyyxltzcsxqclhzxl" -"wyxzhnnlrxkxjcdyhlbrlmbrdlaxksnlljlyxxlynrylcjtgncmtlzllcyzlpzpzyawnjjfybdyyzsepckzzqdqpbpsjpdyttbdb" -"bbyndycncpjmtmlrmfmmrwyfbsjgygsmdqqqztxmkqwgxllpjgzbqrdjjjfpkjkcxbljmswldtsjxldlppbxcwkcqqbfqbccajzg" -"mykbhyhhzykndqzybpjnspxthlfpnsygyjdbgxnhhjhzjhstrstldxskzysybmxjlxyslbzyslzxjhfybqnbylljqkygzmcyzzym" -"ccslnlhzhwfwyxzmwyxtynxjhbyymcysbmhysmydyshnyzchmjjmzcaahcbjbbhblytylsxsnxgjdhkxxtxxnbhnmlngsltxmrhn" -"lxqqxmzllyswqgdlbjhdcgjyqyymhwfmjybbbyjyjwjmdpwhxqldyapdfxxbcgjspckrssyzjmslbzzjfljjjlgxzgyxyxlszqkx" -"bexyxhgcxbpndyhwectwwcjmbtxchxyqqllxflyxlljlssnwdbzcmyjclwswdczpchqekcqbwlcgydblqppqzqfnqdjhymmcxtxd" -"rmzwrhxcjzylqxdyynhyyhrslnrsywwjjymtltllgtqcjzyabtckzcjyccqlysqxalmzynywlwdnzxqdllqshgpjfjljnjabcqzd" -"jgthhsstnyjfbswzlxjxrhgldlzrlzqzgsllllzlymxxgdzhgbdphzpbrlwnjqbpfdwonnnhlypcnjccndmbcpbzzncyqxldomzb" -"lzwpdwyygdstthcsqsccrsssyslfybnntyjszdfndpdhtqzmbqlxlcmyffgtjjqwftmnpjwdnlbzcmmcngbdzlqlpnfhyymjylsd" -"chdcjwjcctljcldtljjcbddpndsszycndbjlggjzxsxnlycybjjxxcbylzcfzppgkcxqdzfztjjfjdjxzbnzyjqctyjwhdyczhym" -"djxttmpxsplzcdwslshxypzgtfmlcjtacbbmgdewycyzxdszjyhflystygwhkjyylsjcxgywjcbllcsnddbtzbsclyzczzssqdll" -"mjyyhfllqllxfdyhabxggnywyypllsdldllbjcyxjznlhljdxyyqytdlllbngpfdfbbqbzzmdpjhgclgmjjpgaehhbwcqxajhhhz" -"chxyphjaxhlphjpgpzjqcqzgjjzzgzdmqyybzzphyhybwhazyjhykfgdpfqsdlzmljxjpgalxzdaglmdgxmmzqwtxdxxpfdmmssy" -"mpfmdmmkxksyzyshdzkjsysmmzzzmdydyzzczxbmlstmdyemxckjmztyymzmzzmsshhdccjewxxkljsthwlsqlyjzllsjssdppmh" -"nlgjczyhmxxhgncjmdhxtkgrmxfwmckmwkdcksxqmmmszzydkmsclcmpcjmhrpxqpzdsslcxkyxtwlkjyahzjgzjwcjnxyhmmbml" -"gjxmhlmlgmxctkzmjlyscjsyszhsyjzjcdajzhbsdqjzgwtkqxfkdmsdjlfmnhkzqkjfeypzyszcdpynffmzqykttdzzefmzlbnp" -"plplpbpszalltnlkckqzkgenjlwalkxydpxnhsxqnwqnkxqclhyxxmlnccwlymqyckynnlcjnszkpyzkcqzqljbdmdjhlasqlbyd" -"wqlwdgbqcryddztjybkbwszdxdtnpjdtcnqnfxqqmgnseclstbhpwslctxxlpwydzklnqgzcqapllkqcylbqmqczqcnjslqzdjxl" -"ddhpzqdljjxzqdjyzhhzlkcjqdwjppypqakjyrmpzbnmcxkllzllfqpylllmbsglzysslrsysqtmxyxzqzbscnysyztffmzzsmzq" -"hzssccmlyxwtpzgxzjgzgsjzgkddhtqggzllbjdzlsbzhyxyzhzfywxytymsdnzzyjgtcmtnxqyxjscxhslnndlrytzlryylxqht" -"xsrtzcgyxbnqqzfhykmzjbzymkbpnlyzpblmcnqyzzzsjztjctzhhyzzjrdyzhnfxklfzslkgjtctssyllgzrzbbjzzklpkbczys" -"nnyxbjfbnjzzxcdwlzyjxzzdjjgggrsnjkmsmzjlsjywqsnyhqjsxpjztnlsnshrnynjtwchglbnrjlzxwjqxqkysjycztlqzybb" -"ybyzjqdwgyzcytjcjxckcwdkkzxsnkdnywwyyjqyytlytdjlxwkcjnklccpzcqqdzzqlcsfqchqqgssmjzzllbjjzysjhtsjdysj" -"qjpdszcdchjkjzzlpycgmzndjxbsjzzsyzyhgxcpbjydssxdzncglqmbtsfcbfdzdlznfgfjgfsmpnjqlnblgqcyyxbqgdjjqsrf" -"kztjdhczklbsdzcfytplljgjhtxzcsszzxstjygkgckgynqxjplzbbbgcgyjzgczqszlbjlsjfzgkqqjcgycjbzqtldxrjnbsxxp" -"zshszycfwdsjjhxmfczpfzhqhqmqnknlyhtycgfrzgnqxcgpdlbzcsczqlljblhbdcypscppdymzzxgyhckcpzjgslzlnscnsldl" -"xbmsdlddfjmkdqdhslzxlsznpqpgjdlybdskgqlbzlnlkyyhzttmcjnqtzzfszqktlljtyyllnllqyzqlbdzlslyyzxmdfszsnxl" -"xznczqnbbwskrfbcylctnblgjpmczzlstlxshtzcyzlzbnfmqnlxflcjlyljqcbclzjgnsstbrmhxzhjzclxfnbgxgtqncztmsfz" -"kjmssncljkbhszjntnlzdntlmmjxgzjyjczxyhyhwrwwqnztnfjscpyshzjfyrdjsfscjzbjfzqzchzlxfxsbzqlzsgyftzdcszx" -"zjbjpszkjrhxjzcgbjkhcggtxkjqglxbxfgtrtylxqxhdtsjxhjzjjcmzlcqsbtxwqgxtxxhxftsdkfjhzyjfjxnzldlllcqsqqz" -"qwqxswqtwgwbzcgcllqzbclmqjtzgzyzxljfrmyzflxnsnxxjkxrmjdzdmmyxbsqbhgzmwfwygmjlzbyytgzyccdjyzxsngnyjyz" -"nbgpzjcqsyxsxrtfyzgrhztxszzthcbfclsyxzlzqmzlmplmxzjssfsbysmzqhxxnxrxhqzzzsslyflczjrcrxhhzxqndshxsjjh" -"qcjjbcynsysxjbqjpxzqplmlxzkyxlxcnlcycxxzzlxdlllmjyhzxhyjwkjrwyhcpsgnrzlfzwfzznsxgxflzsxzzzbfcsyjdbrj" -"krdhhjxjljjtgxjxxstjtjxlyxqfcsgswmsbctlqzzwlzzkxjmltmjyhsddbxgzhdlbmyjfrzfcgclyjbpmlysmsxlszjqqhjzfx" -"gfqfqbphngyyqxgztnqwyltlgwgwwhnlfmfgzjmgmgbgtjflyzzgzyzaflsspmlbflcwbjztljjmzlpjjlymqtmyyyfbgygqzgly" -"zdxqyxrqqqhsxyyqxygjtyxfsfsllgnqcygycwfhcccfxpylypllzqxxxxxqqhhsshjzcftsczjxspzwhhhhhapylqnlpqafyhxd" -"ylnkmzqgggddesrenzltzgchyppcsqjjhclljtolnjpzljlhymhezdydsqycddhgznndzclzywllznteydgnlhslpjjbdgwxpcnn" -"tycklkclwkllcasstknzdnnjttlyyzssysszzryljqkcgdhhyrxrzydgrgcwcgzqffbppjfzynakrgywyjpqxxfkjtszzxswzddf" -"bbqtbgtzkznpzfpzxzpjszbmqhkyyxyldkljnypkyghgdzjxxeaxpnznctzcmxcxmmjxnkszqnmnlwbwwqjjyhclstmcsxnjcxxt" -"pcnfdtnnpglllzcjlspblpgjcdtnjjlyarscffjfqwdpgzdwmrzzcgodaxnssnyzrestyjwjyjdbcfxnmwttbqlwstszgybljpxg" -"lbnclgpcbjftmxzljylzxcltpnclcgxtfzjshcrxsfysgdkntlbyjcyjllstgqcbxnhzxbxklylhzlqzlnzcqwgzlgzjncjgcmnz" -"zgjdzxtzjxycyycxxjyyxjjxsssjstsstdppghtcsxwzdcsynptfbchfbblzjclzzdbxgcjlhpxnfzflsyltnwbmnjhszbmdnbcy" -"sccldnycndqlyjjhmqllcsgljjsyfpyyccyltjantjjpwycmmgqyysxdxqmzhszxbftwwzqswqrfkjlzjqqyfbrxjhhfwjgzyqac" -"myfrhcyybynwlpexcczsyyrlttdmqlrkmpbgmyyjprkznbbsqyxbhyzdjdnghpmfsgbwfzmfqmmbzmzdcgjlnnnxyqgmlrygqccy" -"xzlwdkcjcggmcjjfyzzjhycfrrcmtznzxhkqgdjxccjeascrjthpljlrzdjrbcqhjdnrhylyqjsymhzydwcdfryhbbydtssccwbx" -"glpzmlzjdqsscfjmmxjcxjytycghycjwynsxlfemwjnmkllswtxhyyyncmmcyjdqdjzglljwjnkhpzggflccsczmcbltbhbqjxqd" -"jpdjztghglfjawbzyzjltstdhjhctcbchflqmpwdshyytqwcnntjtlnnmnndyyyxsqkxwyyflxxnzwcxypmaelyhgjwzzjbrxxaq" -"jfllpfhhhytzzxsgqjmhspgdzqwbwpjhzjdyjcqwxkthxsqlzyymysdzgnqckknjlwpnsyscsyzlnmhqsyljxbcxtlhzqzpcycyk" -"pppnsxfyzjjrcemhszmnxlxglrwgcstlrsxbygbzgnxcnlnjlclynymdxwtzpalcxpqjcjwtcyyjlblxbzlqmyljbghdslssdmxm" -"bdczsxyhamlczcpjmcnhjyjnsykchskqmczqdllkablwjqsfmocdxjrrlyqchjmybyqlrhetfjzfrfksryxfjdwtsxxywsqjysly" -"xwjhsdlxyyxhbhawhwjcxlmyljcsqlkydttxbzslfdxgxsjkhsxxybssxdpwncmrptqzczenygcxqfjxkjbdmljzmqqxnoxslyxx" -"lylljdzptymhbfsttqqwlhsgynlzzalzxclhtwrrqhlstmypyxjjxmnsjnnbryxyjllyqyltwylqyfmlkljdnlltfzwkzhljmlhl" -"jnljnnlqxylmbhhlnlzxqchxcfxxlhyhjjgbyzzkbxscqdjqdsndzsygzhhmgsxcsymxfepcqwwrbpyyjqryqcyjhqqzyhmwffhg" -"zfrjfcdbxntqyzpcyhhjlfrzgpbxzdbbgrqstlgdgylcqmgchhmfywlzyxkjlypjhsywmqqggzmnzjnsqxlqsyjtcbehsxfszfxz" -"wfllbcyyjdytdthwzsfjmqqyjlmqsxlldttkghybfpwdyysqqrnqwlgwdebzwcyygcnlkjxtmxmyjsxhybrwfymwfrxyymxysctz" -"ztfykmldhqdlgyjnlcryjtlpsxxxywlsbrrjwxhqybhtydnhhxmmywytycnnmnssccdalwztcpqpyjllqzyjswjwzzmmglmxclmx" -"nzmxmzsqtzppjqblpgxjzhfljjhycjsrxwcxsncdlxsyjdcqzxslqyclzxlzzxmxqrjmhrhzjbhmfljlmlclqnldxzlllfyprgjy" -"nxcqqdcmqjzzxhnpnxzmemmsxykynlxsxtljxyhwdcwdzhqyybgybcyscfgfsjnzdrzzxqxrzrqjjymcanhrjtldbpyzbstjhxxz" -"ypbdwfgzzrpymnnkxcqbyxnbnfyckrjjcmjegrzgyclnnzdnkknsjkcljspgyyclqqjybzssqlllkjftbgtylcccdblsppfylgyd" -"tzjqjzgkntsfcxbdkdxxhybbfytyhbclnnytgdhryrnjsbtcsnyjqhklllzslydxxwbcjqsbxnpjzjzjdzfbxxbrmladhcsnclbj" -"dstblprznswsbxbcllxxlzdnzsjpynyxxyftnnfbhjjjgbygjpmmmmsszljmtlyzjxswxtyledqpjmpgqzjgdjlqjwjqllsdgjgy" -"gmscljjxdtygjqjjjcjzcjgdzdshqgzjggcjhqxsnjlzzbxhsgzxcxyljxyxyydfqqjhjfxdhctxjyrxysqtjxyefyyssyxjxncy" -"zxfxcsxszxyyschshxzzzgzzzgfjdldylnpzgsjaztyqzpbxcbdztzczyxxyhhscjshcggqhjhgxhsctmzmehyxgebtclzkkwytj" -"zrslekestdbcyhqqsayxcjxwwgsphjszsdncsjkqcxswxfctynydpccczjqtcwjqjzzzqzljzhlsbhpydxpsxshhezdxfptjqyzc" -"xhyaxncfzyyhxgnqmywntzsjbnhhgymxmxqcnssbcqsjyxxtyyhybcqlmmszmjzzllcogxzaajzyhjmchhcxzsxsdznleyjjzjbh" -"zwjzsqtzpsxzzdsqjjjlnyazphhyysrnqzthzhnyjyjhdzxzlswclybzyecwcycrylchzhzydzydyjdfrjjhtrsqtxyxjrjhojyn" -"xelxsfsfjzghpzsxzszdzcqzbyyklsgsjhczshdgqgxyzgxchxzjwyqwgyhksseqzzndzfkwyssdclzstsymcdhjxxyweyxczayd" -"mpxmdsxybsqmjmzjmtjqlpjyqzcgqhyjhhhqxhlhdldjqcfdwbsxfzzyyschtytyjbhecxhjkgqfxbhyzjfxhwhbdzfyzbchpnpg" -"dydmsxhkhhmamlnbyjtmpxejmcthqbzyfcgtyhwphftgzzezsbzegpbmdskftycmhbllhgpzjxzjgzjyxzsbbqsczzlzscstpgxm" -"jsfdcczjzdjxsybzlfcjsazfgszlwbczzzbyztzynswyjgxzbdsynxlgzbzfygczxbzhzftpbgzgejbstgkdmfhyzzjhzllzzgjq" -"zlsfdjsscbzgpdlfzfzszyzyzsygcxsnxxchczxtzzljfzgqsqqxcjqccccdjcdszzyqjccgxztdlgscxzsyjjqtcclqdqztqchq" -"qyzynzzzpbkhdjfcjfztypqyqttynlmbdktjcpqzjdzfpjsbnjlgyjdxjdcqkzgqkxclbzjtcjdqbxdjjjstcxnxbxqmslyjcxnt" -"jqwwcjjnjjlllhjcwqtbzqqczczpzzdzyddcyzdzccjgtjfzdprntctjdcxtqzdtjnplzbcllctdsxkjzqdmzlbznbtjdcxfczdb" -"czjjltqqpldckztbbzjcqdcjwynllzlzccdwllxwzlxrxntqjczxkjlsgdnqtddglnlajjtnnynkqlldzntdnycygjwyxdxfrsqs" -"tcdenqmrrqzhhqhdldazfkapbggpzrebzzykyqspeqjjglkqzzzjlysyhyzwfqznlzzlzhwcgkypqgnpgblplrrjyxcccgyhsfzf" -"wbzywtgzxyljczwhncjzplfflgskhyjdeyxhlpllllcygxdrzelrhgklzzyhzlyqszzjzqljzflnbhgwlczcfjwspyxzlzlxgccp" -"zbllcxbbbbnbbcbbcrnnzccnrbbnnldcgqyyqxygmqzwnzytyjhyfwtehznjywlccntzyjjcdedpwdztstnjhtymbjnyjzlxtsst" -"phndjxxbyxqtzqddtjtdyztgwscszqflshlnzbcjbhdlyzjyckwtydylbnydsdsycctyszyyebgexhqddwnygyclxtdcystqnygz" -"ascsszzdzlcclzrqxyywljsbymxshzdembbllyyllytdqyshymrqnkfkbfxnnsbychxbwjyhtqbpbsbwdzylkgzskyghqzjxhxjx" -"gnljkzlyycdxlfwfghljgjybxblybxqpqgntzplncybxdjyqydymrbeyjyyhkxxstmxrczzjwxyhybmcflyzhqyzfwxdbxbcwzms" -"lpdmyckfmzklzcyqycclhxfzlydqzpzygyjyzmdxtzfnnyttqtzhgsfcdmlccytzxjcytjmkslpzhysnwllytpzctzccktxdhxxt" -"qcyfksmqccyyazhtjplylzlyjbjxtfnyljyynrxcylmmnxjsmybcsysslzylljjgyldzdlqhfzzblfndsqkczfyhhgqmjdsxyctt" -"xnqnjpyybfcjtyyfbnxejdgyqbjrcnfyyqpghyjsyzngrhtknlnndzntsmgklbygbpyszbydjzsstjztsxzbhbscsbzczptqfzlq" -"flypybbjgszmnxdjmtsyskkbjtxhjcegbsmjyjzcstmljyxrczqscxxqpyzhmkyxxxjcljyrmyygadyskqlnadhrskqxzxztcggz" -"dlmlwxybwsyctbhjhcfcwzsxwwtgzlxqshnyczjxemplsrcgltnzntlzjcyjgdtclglbllqpjmzpapxyzlaktkdwczzbncctdqqz" -"qyjgmcdxltgcszlmlhbglkznnwzndxnhlnmkydlgxdtwcfrjerctzhydxykxhwfzcqshknmqqhzhhymjdjskhxzjzbzzxympajnm" -"ctbxlsxlzynwrtsqgscbptbsgzwyhtlkssswhzzlyytnxjgmjrnsnnnnlskztxgxlsammlbwldqhylakqcqctmycfjbslxclzjcl" -"xxknbnnzlhjphqplsxsckslnhpsfqcytxjjzljldtzjjzdlydjntptnndskjfsljhylzqqzlbthydgdjfdbyadxdzhzjnthqbykn" -"xjjqczmlljzkspldsclbblnnlelxjlbjycxjxgcnlcqplzlznjtsljgyzdzpltqcssfdmnycxgbtjdcznbgbqyqjwgkfhtnbyqzq" -"gbkpbbyzmtjdytblsqmbsxtbnpdxklemyycjynzdtldykzzxtdxhqshygmzsjycctayrzlpwltlkxslzcggexclfxlkjrtlqjaqz" -"ncmbqdkkcxglczjzxjhptdjjmzqykqsecqzdshhadmlzfmmzbgntjnnlhbyjbrbtmlbyjdzxlcjlpldlpcqdhlhzlycblcxccjad" -"qlmzmmsshmybhbnkkbhrsxxjmxmdznnpklbbrhgghfchgmnklltsyyycqlcskymyehywxnxqywbawykqldnntndkhqcgdqktgpkx" -"hcpdhtwnmssyhbwcrwxhjmkmzngwtmlkfghkjyldyycxwhyyclqhkqhtdqkhffldxqwytyydesbpkyrzpjfyyzjceqdzzdlattpb" -"fjllcxdlmjsdxegwgsjqxcfbssszpdyzcxznyxppzydlyjccpltxlnxyzyrscyyytylwwndsahjsygyhgywwaxtjzdaxysrltdps" -"syxfnejdxyzhlxlllzhzsjnyqyqyxyjghzgjcyjchzlycdshhsgczyjscllnxzjjyyxnfsmwfpyllyllabmddhwzxjmcxztzpmlq" -"chsfwzynctlndywlslxhymmylmbwwkyxyaddxylldjpybpwnxjmmmllhafdllaflbnhhbqqjqzjcqjjdjtffkmmmpythygdrjrdd" -"wrqjxnbysrmzdbyytbjhpymyjtjxaahggdqtmystqxkbtzbkjlxrbyqqhxmjjbdjntgtbxpgbktlgqxjjjcdhxqdwjlwrfmjgwqh" -"cnrxswgbtgygbwhswdwrfhwytjjxxxjyzyslphyypyyxhydqpxshxyxgskqhywbdddpplcjlhqeewjgsyykdpplfjthkjltcyjhh" -"jttpltzzcdlyhqkcjqysteeyhkyzyxxyysddjkllpymqyhqgxqhzrhbxpllnqydqhxsxxwgdqbshyllpjjjthyjkyphthyyktyez" -"yenmdshlzrpqfbnfxzbsftlgxsjbswyysksflxlpplbbblnsfbfyzbsjssylpbbffffsscjdstjsxtryjcyffsyzyzbjtlctsbsd" -"hrtjjbytcxyyeylycbnebjdsysyhgsjzbxbytfzwgenhhhthjhhxfwgcstbgxklstyymtmbyxjskzscdyjrcythxzfhmymcxlzns" -"djtxtxrycfyjsbsdyerxhljxbbdeynjghxgckgscymblxjmsznskgxfbnbbthfjyafxwxfbxmyfhdttcxzzpxrsywzdlybbktyqw" -"qjbzypzjznjpzjlztfysbttslmptzrtdxqsjehbnylndxljsqmlhtxtjecxalzzspktlzkqqyfsyjywpcpqfhjhytqxzkrsgtksq" -"czlptxcdyyzsslzslxlzmacpcqbzyxhbsxlzdltztjtylzjyytbzypltxjsjxhlbmytxcqrblzssfjzztnjytxmyjhlhpblcyxqj" -"qqkzzscpzkswalqsplczzjsxgwwwygyatjbbctdkhqhkgtgpbkqyslbxbbckbmllndzstbklggqkqlzbkktfxrmdkbftpzfrtppm" -"ferqnxgjpzsstlbztpszqzsjdhljqlzbpmsmmsxlqqnhknblrddnhxdkddjcyyljfqgzlgsygmjqjkhbpmxyxlytqwlwjcpbmjxc" -"yzydrjbhtdjyeqshtmgsfyplwhlzffnynnhxqhpltbqpfbjwjdbygpnxtbfzjgnnntjshxeawtzylltyqbwjpgxghnnkndjtmszs" -"qynzggnwqtfhclssgmnnnnynzqqxncjdqgzdlfnykljcjllzlmzznnnnsshthxjlzjbbhqjwwycrdhlyqqjbeyfsjhthnrnwjhwp" -"slmssgzttygrqqwrnlalhmjtqjsmxqbjjzjqzyzkxbjqxbjxshzssfglxmxnxfghkzszggslcnnarjxhnlllmzxelglxydjytlfb" -"kbpnlyzfbbhptgjkwetzhkjjxzxxglljlstgshjjyqlqzfkcgnndjsszfdbctwwseqfhqjbsaqtgypjlbxbmmywxgslzhglsgnyf" -"ljbyfdjfngsfmbyzhqffwjsyfyjjphzbyyzffwotjnlmftwlbzgyzqxcdjygzyyryzynyzwegazyhjjlzrthlrmgrjxzclnnnljj" -"yhtbwjybxxbxjjtjteekhwslnnlbsfazpqqbdlqjjtyyqlyzkdksqjnejzldqcgjqnnjsncmrfqthtejmfctyhypymhydmjncfgy" -"yxwshctxrljgjzhzcyyyjltkttntmjlzclzzayyoczlrlbszywjytsjyhbyshfjlykjxxtmzyyltxxypslqyjzyzyypnhmymdyyl" -"blhlsyygqllnjjymsoycbzgdlyxylcqyxtszegxhzglhwbljheyxtwqmakbpqcgyshhegqcmwyywljyjhyyzlljjylhzyhmgsljl" -"jxcjjyclycjbcpzjzjmmwlcjlnqljjjlxyjmlszljqlycmmgcfmmfpqqmfxlqmcffqmmmmhnznfhhjgtthxkhslnchhyqzxtmmqd" -"cydyxyqmyqylddcyaytazdcymdydlzfffmmycqcwzzmabtbyctdmndzggdftypcgqyttssffwbdttqssystwnjhjytsxxylbyyhh" -"whxgzxwznnqzjzjjqjccchykxbzszcnjtllcqxynjnckycynccqnxyewyczdcjycchyjlbtzyycqwlpgpyllgktltlgkgqbgychj" -"xy"; -char pinyinFirstLetter(unsigned short hanzi) -{ - int index = hanzi - HANZI_START; - if (index >= 0 && index <= HANZI_COUNT) - { - return firstLetterArray[index]; - } - else - { - return '#'; - } -} - -char getFirstChar(const NSString * str) { - if (nil == str || 0 == [str length]) { - return '#'; - } - const char * firstChar = [str UTF8String]; - if ( ('a'<= *firstChar && *firstChar <= 'z') - || ('A' <= *firstChar && *firstChar <= 'Z')) { - return *firstChar; - } - else { - return pinyinFirstLetter([str characterAtIndex:0]); - } -} - - diff --git a/TeamTalk/IOSDuoduoTests/IOSDuoduoTests.m b/TeamTalk/IOSDuoduoTests/IOSDuoduoTests.m deleted file mode 100644 index f4d8ddb..0000000 --- a/TeamTalk/IOSDuoduoTests/IOSDuoduoTests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// IOSDuoduoTests.m -// IOSDuoduoTests -// -// Created by 独嘉 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <XCTest/XCTest.h> - -@interface IOSDuoduoTests : XCTestCase - -@end - -@implementation IOSDuoduoTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/TeamTalk/IOSDuoduoTests/TeamTalkTests-Info.plist b/TeamTalk/IOSDuoduoTests/TeamTalkTests-Info.plist deleted file mode 100644 index 0b484e4..0000000 --- a/TeamTalk/IOSDuoduoTests/TeamTalkTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>com.mogujie.${PRODUCT_NAME:rfc1034identifier}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>BNDL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/TeamTalk/IOSDuoduoTests/en.lproj/InfoPlist.strings b/TeamTalk/IOSDuoduoTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/TeamTalk/IOSDuoduoTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/TeamTalk/Images.xcassets/AppIcon.appiconset/Contents.json b/TeamTalk/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a396706..0000000 --- a/TeamTalk/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/Images.xcassets/LaunchImage.launchimage/Contents.json b/TeamTalk/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index c79ebd3..0000000 --- a/TeamTalk/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TeamTalk/LoginViewController.h b/TeamTalk/LoginViewController.h deleted file mode 100644 index 67c2b9e..0000000 --- a/TeamTalk/LoginViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDLoginViewController.h -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import <UIKit/UIKit.h> -#import "UIButton+JSMessagesView.h" -@interface LoginViewController : UIViewController<UITextFieldDelegate> -@property (assign)BOOL isAutoLogin; -@property (nonatomic,weak)IBOutlet UITextField* userNameTextField; -@property (weak)IBOutlet UIImageView *landspace; -@property (nonatomic,weak)IBOutlet UITextField* userPassTextField; -@property(assign)BOOL isRelogin; -- (IBAction)login:(UIButton*)button; --(IBAction)hiddenKeyboard:(id)sender; -@end diff --git a/TeamTalk/LoginViewController.m b/TeamTalk/LoginViewController.m deleted file mode 100644 index 65ee5db..0000000 --- a/TeamTalk/LoginViewController.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// DDLoginViewController.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-26. -// Copyright (c) 2014年 dujia. All rights reserved. -// - -#import "LoginViewController.h" -#import "ChattingMainViewController.h" -#import "RecentUsersViewController.h" -#import "DDClientStateMaintenanceManager.h" -#import "DDUserModule.h" -#import "DDMessageModule.h" -#import "LoginModule.h" -#import "DDNotificationHelp.h" -#import "std.h" -#import "DDAppDelegate.h" -#import "ContactsModule.h" -#import "RuntimeStatus.h" -#import "MainViewControll.h" -#import "DDDatabaseUtil.h" -#import "DDGroupModule.h" -#import "MBProgressHUD.h" -@interface LoginViewController () -@property(assign)CGPoint defaultCenter; -@end - -@implementation LoginViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - if ([[NSUserDefaults standardUserDefaults] objectForKey:@"username"]!=nil) { - _userNameTextField.text =[[NSUserDefaults standardUserDefaults] objectForKey:@"username"]; - } - if ([[NSUserDefaults standardUserDefaults] objectForKey:@"password"]!=nil) { - _userPassTextField.text=[[NSUserDefaults standardUserDefaults] objectForKey:@"password"]; - } - if(!self.isRelogin) - { - - if ([[NSUserDefaults standardUserDefaults] objectForKey:@"username"] && [[NSUserDefaults standardUserDefaults] objectForKey:@"password"]) - { - [self login:nil]; - }else{ - self.landspace.alpha=0.0; - } - - }else - { - self.landspace.alpha=0.0; - } - - self.defaultCenter=self.view.center; - self.userNameTextField.leftViewMode=UITextFieldViewModeAlways; - self.userPassTextField.leftViewMode=UITextFieldViewModeAlways; - UIImageView *usernameLeftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"username"]]; - usernameLeftView.contentMode = UIViewContentModeCenter; - usernameLeftView.frame=CGRectMake(0, 0, 19.5+15, 22.5); - UIImageView *pwdLeftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"password"]]; - pwdLeftView.contentMode = UIViewContentModeCenter; - pwdLeftView.frame=CGRectMake(0, 0, 19.5+15, 22.5); - self.userNameTextField.leftView=usernameLeftView; - self.userPassTextField.leftView=pwdLeftView; - [self.userNameTextField.layer setBorderColor:RGB(211, 211, 211).CGColor]; - [self.userNameTextField.layer setBorderWidth:0.5]; - [self.userNameTextField.layer setCornerRadius:3]; - [self.userPassTextField.layer setBorderColor:RGB(211, 211, 211).CGColor]; - [self.userPassTextField.layer setBorderWidth:0.5]; - [self.userPassTextField.layer setCornerRadius:3]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleWillShowKeyboard) - name:UIKeyboardWillShowNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleWillHideKeyboard) - name:UIKeyboardWillHideNotification - object:nil]; - - -} --(void)handleWillShowKeyboard -{ - [UIView animateWithDuration:0.2 animations:^{ - self.view.center=CGPointMake(self.defaultCenter.x, self.defaultCenter.y-(IPHONE4?120:40)); - }]; -} --(void)handleWillHideKeyboard -{ - [UIView animateWithDuration:0.2 animations:^{ - self.view.center=self.defaultCenter; - }]; -} -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} --(IBAction)hiddenKeyboard:(id)sender -{ - [_userNameTextField resignFirstResponder]; - [_userPassTextField resignFirstResponder]; -} - -- (IBAction)login:(UIButton*)button -{ - - NSString* userName = _userNameTextField.text; - NSString* password = _userPassTextField.text; - [[LoginModule instance] loginWithUsername:userName password:password success:^(DDUserEntity *user) { - if (user) { - [RuntimeStatus instance].user=user ; - - [self presentViewController:[MainViewControll new] animated:YES completion:^{ - - }]; - } - } failure:^(NSString *error) { - - }]; -} -- (BOOL)textFieldShouldReturn:(UITextField *)textField -{ - [textField resignFirstResponder]; - [self login:nil]; - return YES; -} -@end diff --git a/TeamTalk/LoginViewController.xib b/TeamTalk/LoginViewController.xib deleted file mode 100644 index 885ec9a..0000000 --- a/TeamTalk/LoginViewController.xib +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B17" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"> - <dependencies> - <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginViewController"> - <connections> - <outlet property="landspace" destination="CeS-gb-ghE" id="dvd-YB-b2i"/> - <outlet property="userNameTextField" destination="OJa-cj-8se" id="3jP-zL-9Tv"/> - <outlet property="userPassTextField" destination="qzu-xr-nVp" id="FAm-II-x1n"/> - <outlet property="view" destination="1" id="3"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view contentMode="scaleToFill" id="1"> - <rect key="frame" x="0.0" y="64" width="320" height="504"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="cui-GK-nTH"> - <rect key="frame" x="0.0" y="0.0" width="319" height="504"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="0.9803922176361084" green="0.9803922176361084" blue="0.9803922176361084" alpha="1" colorSpace="deviceRGB"/> - <state key="normal"> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="hiddenKeyboard:" destination="-1" eventType="touchUpInside" id="6Rt-4G-Mp4"/> - </connections> - </button> - <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="帐号 (中文花名)" minimumFontSize="17" id="OJa-cj-8se"> - <rect key="frame" x="24" y="241" width="270" height="45"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="deviceRGB"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <textInputTraits key="textInputTraits"/> - </textField> - <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请填写密码" minimumFontSize="17" id="qzu-xr-nVp"> - <rect key="frame" x="24" y="302" width="270" height="45"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="deviceRGB"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <textInputTraits key="textInputTraits" returnKeyType="go" secureTextEntry="YES"/> - <connections> - <outlet property="delegate" destination="-1" id="I6s-ub-FI1"/> - </connections> - </textField> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="zO8-09-BqU"> - <rect key="frame" x="71.5" y="376" width="175" height="42"/> - <autoresizingMask key="autoresizingMask"/> - <color key="backgroundColor" red="0.12156863510608673" green="0.69019609689712524" blue="0.94509810209274292" alpha="1" colorSpace="deviceRGB"/> - <state key="normal" title="登录"> - <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> - <color key="titleShadowColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="login:" destination="-1" eventType="touchDown" id="LAn-Un-13L"/> - </connections> - </button> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="loginlogo.png" id="1na-rl-GvH"> - <rect key="frame" x="41" y="136" width="219.5" height="50.5"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launchimage.png" id="CeS-gb-ghE"> - <rect key="frame" x="0.0" y="0.0" width="342" height="567"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - </imageView> - </subviews> - <color key="backgroundColor" red="0.9803922176361084" green="0.9803922176361084" blue="0.9803922176361084" alpha="1" colorSpace="deviceRGB"/> - <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" translucent="NO" prompted="NO"/> - </view> - </objects> - <resources> - <image name="launchimage.png" width="640" height="1136"/> - <image name="loginlogo.png" width="440" height="100"/> - </resources> - <simulatedMetricsContainer key="defaultSimulatedMetrics"> - <simulatedStatusBarMetrics key="statusBar"/> - <simulatedOrientationMetrics key="orientation"/> - <simulatedScreenMetrics key="destination" type="retina4"/> - </simulatedMetricsContainer> -</document> diff --git a/TeamTalk/Podfile b/TeamTalk/Podfile deleted file mode 100644 index c8a94f3..0000000 --- a/TeamTalk/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -platform:ios, "6.0" -pod 'FMDB', '~> 2.3' -pod 'SDWebImage', '~> 3.6' -pod "AFNetworking", "~> 2.3.0" -pod 'DACircularProgress', '~> 2.2.0' -pod 'MBProgressHUD', '~> 0.8' -pod 'PSTCollectionView', '~> 1.2.1' -pod 'HPGrowingTextView' , '~> 1.1' diff --git a/TeamTalk/Podfile.lock b/TeamTalk/Podfile.lock deleted file mode 100644 index ab8de8f..0000000 --- a/TeamTalk/Podfile.lock +++ /dev/null @@ -1,54 +0,0 @@ -PODS: - - AFNetworking (2.3.1): - - AFNetworking/NSURLConnection - - AFNetworking/NSURLSession - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/UIKit - - AFNetworking/NSURLConnection (2.3.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/NSURLSession (2.3.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/Reachability (2.3.1) - - AFNetworking/Security (2.3.1) - - AFNetworking/Serialization (2.3.1) - - AFNetworking/UIKit (2.3.1): - - AFNetworking/NSURLConnection - - AFNetworking/NSURLSession - - DACircularProgress (2.2.0) - - FMDB (2.3): - - FMDB/standard - - FMDB/common (2.3) - - FMDB/standard (2.3): - - FMDB/common - - HPGrowingTextView (1.1) - - MBProgressHUD (0.8) - - PSTCollectionView (1.2.1) - - SDWebImage (3.7.1): - - SDWebImage/Core - - SDWebImage/Core (3.7.1) - -DEPENDENCIES: - - AFNetworking (~> 2.3.0) - - DACircularProgress (~> 2.2.0) - - FMDB (~> 2.3) - - HPGrowingTextView (~> 1.1) - - MBProgressHUD (~> 0.8) - - PSTCollectionView (~> 1.2.1) - - SDWebImage (~> 3.6) - -SPEC CHECKSUMS: - AFNetworking: 6d7b76aa5d04c8c37daad3eef4b7e3f2a7620da3 - DACircularProgress: 3b41941891a56dc6aa17971f5322a9a38a6f446e - FMDB: 31ec26773c7f7b7890a6038235a1f2bbd933a7cb - HPGrowingTextView: 07d5ab1f1e867acfb7a6f498b819948c9e97d07c - MBProgressHUD: c356980b0cd097f19acec959b49dca5eb8ec31be - PSTCollectionView: a63299550ad566b579479d07cb5e2bf61148686b - SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d - -COCOAPODS: 0.33.1 diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h deleted file mode 100644 index dfa82f6..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +++ /dev/null @@ -1,67 +0,0 @@ -// AFHTTPRequestOperation.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import "AFURLConnectionOperation.h" - -/** - `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. - */ -@interface AFHTTPRequestOperation : AFURLConnectionOperation - -///------------------------------------------------ -/// @name Getting HTTP URL Connection Information -///------------------------------------------------ - -/** - The last HTTP response received by the operation's connection. - */ -@property (readonly, nonatomic, strong) NSHTTPURLResponse *response; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. - - @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value - */ -@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer; - -/** - An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error. - */ -@property (readonly, nonatomic, strong) id responseObject; - -///----------------------------------------------------------- -/// @name Setting Completion Block Success / Failure Callbacks -///----------------------------------------------------------- - -/** - Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed. - - This method should be overridden in subclasses in order to specify the response object passed into the success block. - - @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request. - @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request. - */ -- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m deleted file mode 100644 index 723a3b3..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +++ /dev/null @@ -1,206 +0,0 @@ -// AFHTTPRequestOperation.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFHTTPRequestOperation.h" - -static dispatch_queue_t http_request_operation_processing_queue() { - static dispatch_queue_t af_http_request_operation_processing_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_http_request_operation_processing_queue = dispatch_queue_create("com.alamofire.networking.http-request.processing", DISPATCH_QUEUE_CONCURRENT); - }); - - return af_http_request_operation_processing_queue; -} - -static dispatch_group_t http_request_operation_completion_group() { - static dispatch_group_t af_http_request_operation_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_http_request_operation_completion_group = dispatch_group_create(); - }); - - return af_http_request_operation_completion_group; -} - -#pragma mark - - -@interface AFURLConnectionOperation () -@property (readwrite, nonatomic, strong) NSURLRequest *request; -@property (readwrite, nonatomic, strong) NSURLResponse *response; -@end - -@interface AFHTTPRequestOperation () -@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; -@property (readwrite, nonatomic, strong) id responseObject; -@property (readwrite, nonatomic, strong) NSError *responseSerializationError; -@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; -@end - -@implementation AFHTTPRequestOperation -@dynamic lock; - -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { - self = [super initWithRequest:urlRequest]; - if (!self) { - return nil; - } - - self.responseSerializer = [AFHTTPResponseSerializer serializer]; - - return self; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer { - NSParameterAssert(responseSerializer); - - [self.lock lock]; - _responseSerializer = responseSerializer; - self.responseObject = nil; - self.responseSerializationError = nil; - [self.lock unlock]; -} - -- (id)responseObject { - [self.lock lock]; - if (!_responseObject && [self isFinished] && !self.error) { - NSError *error = nil; - self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; - if (error) { - self.responseSerializationError = error; - } - } - [self.lock unlock]; - - return _responseObject; -} - -- (NSError *)error { - if (_responseSerializationError) { - return _responseSerializationError; - } else { - return [super error]; - } -} - -#pragma mark - AFHTTPRequestOperation - -- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-retain-cycles" -#pragma clang diagnostic ignored "-Wgnu" - self.completionBlock = ^{ - if (self.completionGroup) { - dispatch_group_enter(self.completionGroup); - } - - dispatch_async(http_request_operation_processing_queue(), ^{ - if (self.error) { - if (failure) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(self, self.error); - }); - } - } else { - id responseObject = self.responseObject; - if (self.error) { - if (failure) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(self, self.error); - }); - } - } else { - if (success) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - success(self, responseObject); - }); - } - } - } - - if (self.completionGroup) { - dispatch_group_leave(self.completionGroup); - } - }); - }; -#pragma clang diagnostic pop -} - -#pragma mark - AFURLRequestOperation - -- (void)pause { - [super pause]; - - u_int64_t offset = 0; - if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { - offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; - } else { - offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length]; - } - - NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy]; - if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@"ETag"]) { - [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@"ETag"] forHTTPHeaderField:@"If-Range"]; - } - [mutableURLRequest setValue:[NSString stringWithFormat:@"bytes=%llu-", offset] forHTTPHeaderField:@"Range"]; - self.request = mutableURLRequest; -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestOperation *operation = [[[self class] allocWithZone:zone] initWithRequest:self.request]; - - operation.responseSerializer = [self.responseSerializer copyWithZone:zone]; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h deleted file mode 100644 index d7f6d42..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h +++ /dev/null @@ -1,308 +0,0 @@ -// AFHTTPRequestOperationManager.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <SystemConfiguration/SystemConfiguration.h> -#import <Availability.h> - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import <MobileCoreServices/MobileCoreServices.h> -#else -#import <CoreServices/CoreServices.h> -#endif - -#import "AFHTTPRequestOperation.h" -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" -#import "AFSecurityPolicy.h" -#import "AFNetworkReachabilityManager.h" - -/** - `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. - - ## Subclassing Notes - - Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. - - For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. - - ## Methods to Override - - To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`. - - ## Serialization - - Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to `<AFURLRequestSerialization>`. - - Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `<AFURLResponseSerialization>` - - ## URL Construction Using Relative Paths - - For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. - - Below are a few examples of how `baseURL` and relative paths interact: - - NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; - [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz - [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo - [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ - [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ - - Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. - - ## Network Reachability Monitoring - - Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. - - ## NSecureCoding & NSCopying Caveats - - `AFHTTPRequestOperationManager` conforms to the `NSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however: - - - Archives and copies of HTTP clients will be initialized with an empty operation queue. - - NSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set. - */ -@interface AFHTTPRequestOperationManager : NSObject <NSSecureCoding, NSCopying> - -/** - The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. - */ -@property (readonly, nonatomic, strong) NSURL *baseURL; - -/** - Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. - - @warning `requestSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer; - -/** - The operation queue on which request operations are scheduled and run. - */ -@property (nonatomic, strong) NSOperationQueue *operationQueue; - -///------------------------------- -/// @name Managing URL Credentials -///------------------------------- - -/** - Whether request operations should consult the credential storage for authenticating the connection. `YES` by default. - - @see AFURLConnectionOperation -shouldUseCredentialStorage - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - The credential used by request operations for authentication challenges. - - @see AFURLConnectionOperation -credential - */ -@property (nonatomic, strong) NSURLCredential *credential; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -///------------------------------------ -/// @name Managing Network Reachability -///------------------------------------ - -/** - The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default. - */ -@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; - -///------------------------------- -/// @name Managing Callback Queues -///------------------------------- - -/** - The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used. - */ -@property (nonatomic, strong) dispatch_queue_t completionQueue; - -/** - The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used. - */ -@property (nonatomic, strong) dispatch_group_t completionGroup; - -///--------------------------------------------- -/// @name Creating and Initializing HTTP Clients -///--------------------------------------------- - -/** - Creates and returns an `AFHTTPRequestOperationManager` object. - */ -+ (instancetype)manager; - -/** - Initializes an `AFHTTPRequestOperationManager` object with the specified base URL. - - This is the designated initializer. - - @param url The base URL for the HTTP client. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(NSURL *)url; - -///--------------------------------------- -/// @name Managing HTTP Request Operations -///--------------------------------------- - -/** - Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client. - - @param request The request object to be loaded asynchronously during execution of the operation. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred. - */ -- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -///--------------------------- -/// @name Making HTTP Requests -///--------------------------- - -/** - Creates and runs an `AFHTTPRequestOperation` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `PUT` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -@end - diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m deleted file mode 100644 index 03116cc..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m +++ /dev/null @@ -1,253 +0,0 @@ -// AFHTTPRequestOperationManager.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import "AFHTTPRequestOperationManager.h" -#import "AFHTTPRequestOperation.h" - -#import <Availability.h> -#import <Security/Security.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <UIKit/UIKit.h> -#endif - -@interface AFHTTPRequestOperationManager () -@property (readwrite, nonatomic, strong) NSURL *baseURL; -@end - -@implementation AFHTTPRequestOperationManager - -+ (instancetype)manager { - return [[self alloc] initWithBaseURL:nil]; -} - -- (instancetype)init { - return [self initWithBaseURL:nil]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url { - self = [super init]; - if (!self) { - return nil; - } - - // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected - if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { - url = [url URLByAppendingPathComponent:@""]; - } - - self.baseURL = url; - - self.requestSerializer = [AFHTTPRequestSerializer serializer]; - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - - self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; - - self.operationQueue = [[NSOperationQueue alloc] init]; - - self.shouldUseCredentialStorage = YES; - - return self; -} - -#pragma mark - - -#ifdef _SYSTEMCONFIGURATION_H -#endif - -- (void)setRequestSerializer:(AFHTTPRequestSerializer <AFURLRequestSerialization> *)requestSerializer { - NSParameterAssert(requestSerializer); - - _requestSerializer = requestSerializer; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer { - NSParameterAssert(responseSerializer); - - _responseSerializer = responseSerializer; -} - -#pragma mark - - -- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - operation.responseSerializer = self.responseSerializer; - operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; - operation.credential = self.credential; - operation.securityPolicy = self.securityPolicy; - - [operation setCompletionBlockWithSuccess:success failure:failure]; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -#pragma mark - - -- (AFHTTPRequestOperation *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"GET" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"HEAD" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) { - if (success) { - success(requestOperation); - } - } failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"PUT" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"PATCH" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"DELETE" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue]; -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))]; - - self = [self initWithBaseURL:baseURL]; - if (!self) { - return nil; - } - - self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; - [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL]; - - HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; - HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; - - return HTTPClient; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h deleted file mode 100644 index a84fcc5..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h +++ /dev/null @@ -1,238 +0,0 @@ -// AFHTTPSessionManager.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <SystemConfiguration/SystemConfiguration.h> -#import <Availability.h> - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import <MobileCoreServices/MobileCoreServices.h> -#else -#import <CoreServices/CoreServices.h> -#endif - -#import "AFURLSessionManager.h" - -/** - `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. - - ## Subclassing Notes - - Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. - - For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. - - ## Methods to Override - - To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. - - ## Serialization - - Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to `<AFURLRequestSerialization>`. - - Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `<AFURLResponseSerialization>` - - ## URL Construction Using Relative Paths - - For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. - - Below are a few examples of how `baseURL` and relative paths interact: - - NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; - [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz - [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo - [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ - [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ - - Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. - */ - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) - -@interface AFHTTPSessionManager : AFURLSessionManager <NSSecureCoding, NSCopying> - -/** - The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. - */ -@property (readonly, nonatomic, strong) NSURL *baseURL; - -/** - Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. - - @warning `requestSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns an `AFHTTPSessionManager` object. - */ -+ (instancetype)manager; - -/** - Initializes an `AFHTTPSessionManager` object with the specified base URL. - - @param url The base URL for the HTTP client. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(NSURL *)url; - -/** - Initializes an `AFHTTPSessionManager` object with the specified base URL. - - This is the designated initializer. - - @param url The base URL for the HTTP client. - @param configuration The configuration used to create the managed session. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(NSURL *)url - sessionConfiguration:(NSURLSessionConfiguration *)configuration; - -///--------------------------- -/// @name Making HTTP Requests -///--------------------------- - -/** - Creates and runs an `NSURLSessionDataTask` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `PUT` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m deleted file mode 100644 index 5abfe7e..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m +++ /dev/null @@ -1,339 +0,0 @@ -// AFHTTPSessionManager.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFHTTPSessionManager.h" - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) - -#import "AFURLRequestSerialization.h" -#import "AFURLResponseSerialization.h" - -#import <Availability.h> -#import <Security/Security.h> - -#ifdef _SYSTEMCONFIGURATION_H -#import <netinet/in.h> -#import <netinet6/in6.h> -#import <arpa/inet.h> -#import <ifaddrs.h> -#import <netdb.h> -#endif - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <UIKit/UIKit.h> -#endif - -@interface AFHTTPSessionManager () -@property (readwrite, nonatomic, strong) NSURL *baseURL; -@end - -@implementation AFHTTPSessionManager - -+ (instancetype)manager { - return [[[self class] alloc] initWithBaseURL:nil]; -} - -- (instancetype)init { - return [self initWithBaseURL:nil]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url { - return [self initWithBaseURL:url sessionConfiguration:nil]; -} - -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { - return [self initWithBaseURL:nil sessionConfiguration:configuration]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url - sessionConfiguration:(NSURLSessionConfiguration *)configuration -{ - self = [super initWithSessionConfiguration:configuration]; - if (!self) { - return nil; - } - - // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected - if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { - url = [url URLByAppendingPathComponent:@""]; - } - - self.baseURL = url; - - self.requestSerializer = [AFHTTPRequestSerializer serializer]; - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - return self; -} - -#pragma mark - - -#ifdef _SYSTEMCONFIGURATION_H -#endif - -- (void)setRequestSerializer:(AFHTTPRequestSerializer <AFURLRequestSerialization> *)requestSerializer { - NSParameterAssert(requestSerializer); - - _requestSerializer = requestSerializer; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer { - NSParameterAssert(responseSerializer); - - [super setResponseSerializer:responseSerializer]; -} - -#pragma mark - - -- (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"GET" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"HEAD" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id __unused responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:nil]; - - __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"PUT" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"PATCH" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"DELETE" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil]; - - __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; - NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; - if (!configuration) { - NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; - if (configurationIdentifier) { -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) - configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; -#else - configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; -#endif - } - } - - self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; - if (!self) { - return nil; - } - - self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; - if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { - [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; - } else { - [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; - } - [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; - - HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; - HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; - - return HTTPClient; -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h deleted file mode 100644 index 6320783..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h +++ /dev/null @@ -1,199 +0,0 @@ -// AFNetworkReachabilityManager.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <SystemConfiguration/SystemConfiguration.h> - -#import <netinet/in.h> -#import <netinet6/in6.h> -#import <arpa/inet.h> -#import <ifaddrs.h> -#import <netdb.h> - -typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { - AFNetworkReachabilityStatusUnknown = -1, - AFNetworkReachabilityStatusNotReachable = 0, - AFNetworkReachabilityStatusReachableViaWWAN = 1, - AFNetworkReachabilityStatusReachableViaWiFi = 2, -}; - -/** - `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. - - Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. - - See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/) - - @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. - */ -@interface AFNetworkReachabilityManager : NSObject - -/** - The current network reachability status. - */ -@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; - -/** - Whether or not the network is currently reachable. - */ -@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; - -/** - Whether or not the network is currently reachable via WWAN. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; - -/** - Whether or not the network is currently reachable via WiFi. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Returns the shared network reachability manager. - */ -+ (instancetype)sharedManager; - -/** - Creates and returns a network reachability manager for the specified domain. - - @param domain The domain used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified domain. - */ -+ (instancetype)managerForDomain:(NSString *)domain; - -/** - Creates and returns a network reachability manager for the socket address. - - @param address The socket address used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified socket address. - */ -+ (instancetype)managerForAddress:(const struct sockaddr_in *)address; - -/** - Initializes an instance of a network reachability manager from the specified reachability object. - - @param reachability The reachability object to monitor. - - @return An initialized network reachability manager, actively monitoring the specified reachability. - */ -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability; - -///-------------------------------------------------- -/// @name Starting & Stopping Reachability Monitoring -///-------------------------------------------------- - -/** - Starts monitoring for changes in network reachability status. - */ -- (void)startMonitoring; - -/** - Stops monitoring for changes in network reachability status. - */ -- (void)stopMonitoring; - -///------------------------------------------------- -/// @name Getting Localized Reachability Description -///------------------------------------------------- - -/** - Returns a localized string representation of the current network reachability status. - */ -- (NSString *)localizedNetworkReachabilityStatusString; - -///--------------------------------------------------- -/// @name Setting Network Reachability Change Callback -///--------------------------------------------------- - -/** - Sets a callback to be executed when the network availability of the `baseURL` host changes. - - @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. - */ -- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## Network Reachability - - The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. - - enum { - AFNetworkReachabilityStatusUnknown, - AFNetworkReachabilityStatusNotReachable, - AFNetworkReachabilityStatusReachableViaWWAN, - AFNetworkReachabilityStatusReachableViaWiFi, - } - - `AFNetworkReachabilityStatusUnknown` - The `baseURL` host reachability is not known. - - `AFNetworkReachabilityStatusNotReachable` - The `baseURL` host cannot be reached. - - `AFNetworkReachabilityStatusReachableViaWWAN` - The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. - - `AFNetworkReachabilityStatusReachableViaWiFi` - The `baseURL` host can be reached via a Wi-Fi connection. - - ### Keys for Notification UserInfo Dictionary - - Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. - - `AFNetworkingReachabilityNotificationStatusItem` - A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. - The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. - */ - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when network reachability changes. - This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. - - @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (`Prefix.pch`). - */ -extern NSString * const AFNetworkingReachabilityDidChangeNotification; -extern NSString * const AFNetworkingReachabilityNotificationStatusItem; - -///-------------------- -/// @name Functions -///-------------------- - -/** - Returns a localized string representation of an `AFNetworkReachabilityStatus` value. - */ -extern NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m deleted file mode 100644 index 71adaef..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m +++ /dev/null @@ -1,253 +0,0 @@ -// AFNetworkReachabilityManager.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFNetworkReachabilityManager.h" - -NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; -NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; - -typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); - -typedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) { - AFNetworkReachabilityForAddress = 1, - AFNetworkReachabilityForAddressPair = 2, - AFNetworkReachabilityForName = 3, -}; - -NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { - switch (status) { - case AFNetworkReachabilityStatusNotReachable: - return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); - case AFNetworkReachabilityStatusReachableViaWWAN: - return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); - case AFNetworkReachabilityStatusReachableViaWiFi: - return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); - case AFNetworkReachabilityStatusUnknown: - default: - return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); - } -} - -static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { - BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); - BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); - BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); - BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); - BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); - - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; - if (isNetworkReachable == NO) { - status = AFNetworkReachabilityStatusNotReachable; - } -#if TARGET_OS_IPHONE - else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { - status = AFNetworkReachabilityStatusReachableViaWWAN; - } -#endif - else { - status = AFNetworkReachabilityStatusReachableViaWiFi; - } - - return status; -} - -static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); - AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info; - if (block) { - block(status); - } - - - dispatch_async(dispatch_get_main_queue(), ^{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; - }); - -} - -static const void * AFNetworkReachabilityRetainCallback(const void *info) { - return Block_copy(info); -} - -static void AFNetworkReachabilityReleaseCallback(const void *info) { - if (info) { - Block_release(info); - } -} - -@interface AFNetworkReachabilityManager () -@property (readwrite, nonatomic, assign) SCNetworkReachabilityRef networkReachability; -@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation; -@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; -@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; -@end - -@implementation AFNetworkReachabilityManager - -+ (instancetype)sharedManager { - static AFNetworkReachabilityManager *_sharedManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - struct sockaddr_in address; - bzero(&address, sizeof(address)); - address.sin_len = sizeof(address); - address.sin_family = AF_INET; - - _sharedManager = [self managerForAddress:&address]; - }); - - return _sharedManager; -} - -+ (instancetype)managerForDomain:(NSString *)domain { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); - - AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - manager.networkReachabilityAssociation = AFNetworkReachabilityForName; - - return manager; -} - -+ (instancetype)managerForAddress:(const struct sockaddr_in *)address { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); - - AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress; - - return manager; -} - -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { - self = [super init]; - if (!self) { - return nil; - } - - self.networkReachability = reachability; - self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; - - return self; -} - -- (void)dealloc { - [self stopMonitoring]; - - if (_networkReachability) { - CFRelease(_networkReachability); - _networkReachability = NULL; - } -} - -#pragma mark - - -- (BOOL)isReachable { - return [self isReachableViaWWAN] || [self isReachableViaWiFi]; -} - -- (BOOL)isReachableViaWWAN { - return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; -} - -- (BOOL)isReachableViaWiFi { - return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; -} - -#pragma mark - - -- (void)startMonitoring { - [self stopMonitoring]; - - if (!self.networkReachability) { - return; - } - - __weak __typeof(self)weakSelf = self; - AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - - strongSelf.networkReachabilityStatus = status; - if (strongSelf.networkReachabilityStatusBlock) { - strongSelf.networkReachabilityStatusBlock(status); - } - - }; - - SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; - SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); - SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); - - switch (self.networkReachabilityAssociation) { - case AFNetworkReachabilityForName: - break; - case AFNetworkReachabilityForAddress: - case AFNetworkReachabilityForAddressPair: - default: { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ - SCNetworkReachabilityFlags flags; - SCNetworkReachabilityGetFlags(self.networkReachability, &flags); - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); - dispatch_async(dispatch_get_main_queue(), ^{ - callback(status); - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; - - - }); - }); - } - break; - } -} - -- (void)stopMonitoring { - if (!self.networkReachability) { - return; - } - - SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); -} - -#pragma mark - - -- (NSString *)localizedNetworkReachabilityStatusString { - return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); -} - -#pragma mark - - -- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { - self.networkReachabilityStatusBlock = block; -} - -#pragma mark - NSKeyValueObserving - -+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { - if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { - return [NSSet setWithObject:@"networkReachabilityStatus"]; - } - - return [super keyPathsForValuesAffectingValueForKey:key]; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworking.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworking.h deleted file mode 100644 index 68273da..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFNetworking.h +++ /dev/null @@ -1,44 +0,0 @@ -// AFNetworking.h -// -// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <Availability.h> - -#ifndef _AFNETWORKING_ - #define _AFNETWORKING_ - - #import "AFURLRequestSerialization.h" - #import "AFURLResponseSerialization.h" - #import "AFSecurityPolicy.h" - #import "AFNetworkReachabilityManager.h" - - #import "AFURLConnectionOperation.h" - #import "AFHTTPRequestOperation.h" - #import "AFHTTPRequestOperationManager.h" - -#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \ - ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) ) - #import "AFURLSessionManager.h" - #import "AFHTTPSessionManager.h" -#endif - -#endif /* _AFNETWORKING_ */ diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h deleted file mode 100644 index b86e76b..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h +++ /dev/null @@ -1,143 +0,0 @@ -// AFSecurity.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <Security/Security.h> - -typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { - AFSSLPinningModeNone, - AFSSLPinningModePublicKey, - AFSSLPinningModeCertificate, -}; - -/** - `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. - - Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. - */ -@interface AFSecurityPolicy : NSObject - -/** - The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. - */ -@property (nonatomic, assign) AFSSLPinningMode SSLPinningMode; - -/** - Whether to evaluate an entire SSL certificate chain, or just the leaf certificate. Defaults to `YES`. - */ -@property (nonatomic, assign) BOOL validatesCertificateChain; - -/** - The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. - */ -@property (nonatomic, strong) NSArray *pinnedCertificates; - -/** - Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. - */ -@property (nonatomic, assign) BOOL allowInvalidCertificates; - -/** - Whether or not to validate the domain name in the certificates CN field. Defaults to `YES` for `AFSSLPinningModePublicKey` or `AFSSLPinningModeCertificate`, otherwise `NO`. - */ -@property (nonatomic, assign) BOOL validatesDomainName; - -///----------------------------------------- -/// @name Getting Specific Security Policies -///----------------------------------------- - -/** - Returns the shared default security policy, which does not accept invalid certificates, and does not validate against pinned certificates or public keys. - - @return The default security policy. - */ -+ (instancetype)defaultPolicy; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns a security policy with the specified pinning mode. - - @param pinningMode The SSL pinning mode. - - @return A new security policy. - */ -+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; - -///------------------------------ -/// @name Evaluating Server Trust -///------------------------------ - -/** - Whether or not the specified server trust should be accepted, based on the security policy. - - This method should be used when responding to an authentication challenge from a server. - - @param serverTrust The X.509 certificate trust of the server. - - @return Whether or not to trust the server. - - @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`. - */ -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE; - -/** - Whether or not the specified server trust should be accepted, based on the security policy. - - This method should be used when responding to an authentication challenge from a server. - - @param serverTrust The X.509 certificate trust of the server. - @param domain The domain of serverTrust. If `nil`, the domain will not be validated. - - @return Whether or not to trust the server. - */ -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust - forDomain:(NSString *)domain; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## SSL Pinning Modes - - The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. - - enum { - AFSSLPinningModeNone, - AFSSLPinningModePublicKey, - AFSSLPinningModeCertificate, - } - - `AFSSLPinningModeNone` - Do not used pinned certificates to validate servers. - - `AFSSLPinningModePublicKey` - Validate host certificates against public keys of pinned certificates. - - `AFSSLPinningModeCertificate` - Validate host certificates against pinned certificates. -*/ diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m deleted file mode 100644 index f11caaa..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m +++ /dev/null @@ -1,320 +0,0 @@ -// AFSecurity.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFSecurityPolicy.h" - -// Equivalent of macro in <AssertMacros.h>, without causing compiler warning: -// "'DebugAssert' is deprecated: first deprecated in OS X 10.8" -#ifndef AF_Require - #define AF_Require(assertion, exceptionLabel) \ - do { \ - if (__builtin_expect(!(assertion), 0)) { \ - goto exceptionLabel; \ - } \ - } while (0) -#endif - -#ifndef AF_Require_noErr - #define AF_Require_noErr(errorCode, exceptionLabel) \ - do { \ - if (__builtin_expect(0 != (errorCode), 0)) { \ - goto exceptionLabel; \ - } \ - } while (0) -#endif - -#if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -static NSData * AFSecKeyGetData(SecKeyRef key) { - CFDataRef data = NULL; - - AF_Require_noErr(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); - - return (__bridge_transfer NSData *)data; - -_out: - if (data) { - CFRelease(data); - } - - return nil; -} -#endif - -static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - return [(__bridge id)key1 isEqual:(__bridge id)key2]; -#else - return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; -#endif -} - -static id AFPublicKeyForCertificate(NSData *certificate) { - id allowedPublicKey = nil; - SecCertificateRef allowedCertificate; - SecCertificateRef allowedCertificates[1]; - CFArrayRef tempCertificates = nil; - SecPolicyRef policy = nil; - SecTrustRef allowedTrust = nil; - SecTrustResultType result; - - allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); - AF_Require(allowedCertificate != NULL, _out); - - allowedCertificates[0] = allowedCertificate; - tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); - - policy = SecPolicyCreateBasicX509(); - AF_Require_noErr(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); - AF_Require_noErr(SecTrustEvaluate(allowedTrust, &result), _out); - - allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); - -_out: - if (allowedTrust) { - CFRelease(allowedTrust); - } - - if (policy) { - CFRelease(policy); - } - - if (tempCertificates) { - CFRelease(tempCertificates); - } - - if (allowedCertificate) { - CFRelease(allowedCertificate); - } - - return allowedPublicKey; -} - -static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { - BOOL isValid = NO; - SecTrustResultType result; - AF_Require_noErr(SecTrustEvaluate(serverTrust, &result), _out); - - isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); - -_out: - return isValid; -} - -static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { - CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); - NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; - - for (CFIndex i = 0; i < certificateCount; i++) { - SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); - [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; - } - - return [NSArray arrayWithArray:trustChain]; -} - -static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { - SecPolicyRef policy = SecPolicyCreateBasicX509(); - CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); - NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; - for (CFIndex i = 0; i < certificateCount; i++) { - SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); - - SecCertificateRef someCertificates[] = {certificate}; - CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); - - SecTrustRef trust; - AF_Require_noErr(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); - - SecTrustResultType result; - AF_Require_noErr(SecTrustEvaluate(trust, &result), _out); - - [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; - - _out: - if (trust) { - CFRelease(trust); - } - - if (certificates) { - CFRelease(certificates); - } - - continue; - } - CFRelease(policy); - - return [NSArray arrayWithArray:trustChain]; -} - -#pragma mark - - -@interface AFSecurityPolicy() -@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys; -@end - -@implementation AFSecurityPolicy - -+ (NSArray *)defaultPinnedCertificates { - static NSArray *_defaultPinnedCertificates = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; - - NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]]; - for (NSString *path in paths) { - NSData *certificateData = [NSData dataWithContentsOfFile:path]; - [certificates addObject:certificateData]; - } - - _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates]; - }); - - return _defaultPinnedCertificates; -} - -+ (instancetype)defaultPolicy { - AFSecurityPolicy *securityPolicy = [[self alloc] init]; - securityPolicy.SSLPinningMode = AFSSLPinningModeNone; - - return securityPolicy; -} - -+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { - AFSecurityPolicy *securityPolicy = [[self alloc] init]; - securityPolicy.SSLPinningMode = pinningMode; - securityPolicy.validatesDomainName = YES; - [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]]; - - return securityPolicy; -} - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - self.validatesCertificateChain = YES; - - return self; -} - -#pragma mark - - -- (void)setPinnedCertificates:(NSArray *)pinnedCertificates { - _pinnedCertificates = pinnedCertificates; - - if (self.pinnedCertificates) { - NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]]; - for (NSData *certificate in self.pinnedCertificates) { - id publicKey = AFPublicKeyForCertificate(certificate); - if (!publicKey) { - continue; - } - [mutablePinnedPublicKeys addObject:publicKey]; - } - self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys]; - } else { - self.pinnedPublicKeys = nil; - } -} - -#pragma mark - - -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust { - return [self evaluateServerTrust:serverTrust forDomain:nil]; -} - -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust - forDomain:(NSString *)domain -{ - NSMutableArray *policies = [NSMutableArray array]; - if (self.validatesDomainName) { - [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; - } else { - [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; - } - - SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); - - if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { - return NO; - } - - NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); - switch (self.SSLPinningMode) { - case AFSSLPinningModeNone: - return YES; - case AFSSLPinningModeCertificate: { - NSMutableArray *pinnedCertificates = [NSMutableArray array]; - for (NSData *certificateData in self.pinnedCertificates) { - [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; - } - SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); - - if (!AFServerTrustIsValid(serverTrust)) { - return NO; - } - - if (!self.validatesCertificateChain) { - return YES; - } - - NSUInteger trustedCertificateCount = 0; - for (NSData *trustChainCertificate in serverCertificates) { - if ([self.pinnedCertificates containsObject:trustChainCertificate]) { - trustedCertificateCount++; - } - } - - return trustedCertificateCount == [serverCertificates count]; - } - case AFSSLPinningModePublicKey: { - NSUInteger trustedPublicKeyCount = 0; - NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); - if (!self.validatesCertificateChain && [publicKeys count] > 0) { - publicKeys = @[[publicKeys firstObject]]; - } - - for (id trustChainPublicKey in publicKeys) { - for (id pinnedPublicKey in self.pinnedPublicKeys) { - if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { - trustedPublicKeyCount += 1; - } - } - } - - return trustedPublicKeyCount > 0 && ((self.validatesCertificateChain && trustedPublicKeyCount == [serverCertificates count]) || (!self.validatesCertificateChain && trustedPublicKeyCount >= 1)); - } - } - - return NO; -} - -#pragma mark - NSKeyValueObserving - -+ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { - return [NSSet setWithObject:@"pinnedCertificates"]; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h deleted file mode 100644 index 8543556..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +++ /dev/null @@ -1,328 +0,0 @@ -// AFURLConnectionOperation.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> -#import "AFURLRequestSerialization.h" -#import "AFURLResponseSerialization.h" -#import "AFSecurityPolicy.h" - -/** - `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods. - - ## Subclassing Notes - - This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see "`NSURLConnection` Delegate Methods" below), or to provide additional properties and/or class constructors. - - If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes. - - ## NSURLConnection Delegate Methods - - `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods: - - - `connection:didReceiveResponse:` - - `connection:didReceiveData:` - - `connectionDidFinishLoading:` - - `connection:didFailWithError:` - - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:` - - `connection:willCacheResponse:` - - `connectionShouldUseCredentialStorage:` - - `connection:needNewBodyStream:` - - `connection:willSendRequestForAuthenticationChallenge:` - - If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. - - ## Callbacks and Completion Blocks - - The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this. - - Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as ["The Deallocation Problem"](http://developer.apple.com/library/ios/#technotes/tn2109/). - - ## SSL Pinning - - Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle. - - SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice. - - Connections will be validated on all matching certificates with a `.cer` extension in the bundle root. - - ## App Extensions - - When using AFNetworking in an App Extension, `#define AF_APP_EXTENSIONS` to avoid using unavailable APIs. - - ## NSCoding & NSCopying Conformance - - `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind: - - ### NSCoding Caveats - - - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`. - - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged. - - ### NSCopying Caveats - - - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations. - - A copy of an operation will not include the `outputStream` of the original. - - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied. - */ - -@interface AFURLConnectionOperation : NSOperation <NSURLConnectionDelegate, NSURLConnectionDataDelegate, NSSecureCoding, NSCopying> - -///------------------------------- -/// @name Accessing Run Loop Modes -///------------------------------- - -/** - The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`. - */ -@property (nonatomic, strong) NSSet *runLoopModes; - -///----------------------------------------- -/// @name Getting URL Connection Information -///----------------------------------------- - -/** - The request used by the operation's connection. - */ -@property (readonly, nonatomic, strong) NSURLRequest *request; - -/** - The last response received by the operation's connection. - */ -@property (readonly, nonatomic, strong) NSURLResponse *response; - -/** - The error, if any, that occurred in the lifecycle of the request. - */ -@property (readonly, nonatomic, strong) NSError *error; - -///---------------------------- -/// @name Getting Response Data -///---------------------------- - -/** - The data received during the request. - */ -@property (readonly, nonatomic, strong) NSData *responseData; - -/** - The string representation of the response data. - */ -@property (readonly, nonatomic, copy) NSString *responseString; - -/** - The string encoding of the response. - - If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`. - */ -@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding; - -///------------------------------- -/// @name Managing URL Credentials -///------------------------------- - -/** - Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. - - This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. - - This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. - */ -@property (nonatomic, strong) NSURLCredential *credential; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used to evaluate server trust for secure connections. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -///------------------------ -/// @name Accessing Streams -///------------------------ - -/** - The input stream used to read data to be sent during the request. - - This property acts as a proxy to the `HTTPBodyStream` property of `request`. - */ -@property (nonatomic, strong) NSInputStream *inputStream; - -/** - The output stream that is used to write data received until the request is finished. - - By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set. - */ -@property (nonatomic, strong) NSOutputStream *outputStream; - -///--------------------------------- -/// @name Managing Callback Queues -///--------------------------------- - -/** - The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. - */ -@property (nonatomic, strong) dispatch_queue_t completionQueue; - -/** - The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. - */ -@property (nonatomic, strong) dispatch_group_t completionGroup; - -///--------------------------------------------- -/// @name Managing Request Operation Information -///--------------------------------------------- - -/** - The user info dictionary for the receiver. - */ -@property (nonatomic, strong) NSDictionary *userInfo; - -///------------------------------------------------------ -/// @name Initializing an AFURLConnectionOperation Object -///------------------------------------------------------ - -/** - Initializes and returns a newly allocated operation object with a url connection configured with the specified url request. - - This is the designated initializer. - - @param urlRequest The request object to be used by the operation connection. - */ -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest; - -///---------------------------------- -/// @name Pausing / Resuming Requests -///---------------------------------- - -/** - Pauses the execution of the request operation. - - A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect. - */ -- (void)pause; - -/** - Whether the request operation is currently paused. - - @return `YES` if the operation is currently paused, otherwise `NO`. - */ -- (BOOL)isPaused; - -/** - Resumes the execution of the paused request operation. - - Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request. - */ -- (void)resume; - -///---------------------------------------------- -/// @name Configuring Backgrounding Task Behavior -///---------------------------------------------- - -/** - Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task. - - @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified. - */ -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) -- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler; -#endif - -///--------------------------------- -/// @name Setting Progress Callbacks -///--------------------------------- - -/** - Sets a callback to be called when an undetermined number of bytes have been uploaded to the server. - - @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block; - -/** - Sets a callback to be called when an undetermined number of bytes have been downloaded from the server. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; - -///------------------------------------------------- -/// @name Setting NSURLConnection Delegate Callbacks -///------------------------------------------------- - -/** - Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`. - - @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol). - - If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates. - */ -- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block; - -/** - Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`. - - @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect. - */ -- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block; - - -/** - Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`. - - @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request. - */ -- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block; - -/// - -/** - - */ -+ (NSArray *)batchOfRequestOperations:(NSArray *)operations - progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock - completionBlock:(void (^)(NSArray *operations))completionBlock; - -@end - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when an operation begins executing. - */ -extern NSString * const AFNetworkingOperationDidStartNotification; - -/** - Posted when an operation finishes. - */ -extern NSString * const AFNetworkingOperationDidFinishNotification; diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m deleted file mode 100644 index e5e6839..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +++ /dev/null @@ -1,789 +0,0 @@ -// AFURLConnectionOperation.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLConnectionOperation.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <UIKit/UIKit.h> -#endif - -#if !__has_feature(objc_arc) -#error AFNetworking must be built with ARC. -// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files. -#endif - -typedef NS_ENUM(NSInteger, AFOperationState) { - AFOperationPausedState = -1, - AFOperationReadyState = 1, - AFOperationExecutingState = 2, - AFOperationFinishedState = 3, -}; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) -typedef UIBackgroundTaskIdentifier AFBackgroundTaskIdentifier; -#else -typedef id AFBackgroundTaskIdentifier; -#endif - -static dispatch_group_t url_request_operation_completion_group() { - static dispatch_group_t af_url_request_operation_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_request_operation_completion_group = dispatch_group_create(); - }); - - return af_url_request_operation_completion_group; -} - -static dispatch_queue_t url_request_operation_completion_queue() { - static dispatch_queue_t af_url_request_operation_completion_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_request_operation_completion_queue = dispatch_queue_create("com.alamofire.networking.operation.queue", DISPATCH_QUEUE_CONCURRENT ); - }); - - return af_url_request_operation_completion_queue; -} - -static NSString * const kAFNetworkingLockName = @"com.alamofire.networking.operation.lock"; - -NSString * const AFNetworkingOperationDidStartNotification = @"com.alamofire.networking.operation.start"; -NSString * const AFNetworkingOperationDidFinishNotification = @"com.alamofire.networking.operation.finish"; - -typedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -typedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge); -typedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse); -typedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse); - -static inline NSString * AFKeyPathFromOperationState(AFOperationState state) { - switch (state) { - case AFOperationReadyState: - return @"isReady"; - case AFOperationExecutingState: - return @"isExecuting"; - case AFOperationFinishedState: - return @"isFinished"; - case AFOperationPausedState: - return @"isPaused"; - default: { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code" - return @"state"; -#pragma clang diagnostic pop - } - } -} - -static inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) { - switch (fromState) { - case AFOperationReadyState: - switch (toState) { - case AFOperationPausedState: - case AFOperationExecutingState: - return YES; - case AFOperationFinishedState: - return isCancelled; - default: - return NO; - } - case AFOperationExecutingState: - switch (toState) { - case AFOperationPausedState: - case AFOperationFinishedState: - return YES; - default: - return NO; - } - case AFOperationFinishedState: - return NO; - case AFOperationPausedState: - return toState == AFOperationReadyState; - default: { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code" - switch (toState) { - case AFOperationPausedState: - case AFOperationReadyState: - case AFOperationExecutingState: - case AFOperationFinishedState: - return YES; - default: - return NO; - } - } -#pragma clang diagnostic pop - } -} - -@interface AFURLConnectionOperation () -@property (readwrite, nonatomic, assign) AFOperationState state; -@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; -@property (readwrite, nonatomic, strong) NSURLConnection *connection; -@property (readwrite, nonatomic, strong) NSURLRequest *request; -@property (readwrite, nonatomic, strong) NSURLResponse *response; -@property (readwrite, nonatomic, strong) NSError *error; -@property (readwrite, nonatomic, strong) NSData *responseData; -@property (readwrite, nonatomic, copy) NSString *responseString; -@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding; -@property (readwrite, nonatomic, assign) long long totalBytesRead; -@property (readwrite, nonatomic, assign) AFBackgroundTaskIdentifier backgroundTaskIdentifier; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse; - -- (void)operationDidStart; -- (void)finish; -- (void)cancelConnection; -@end - -@implementation AFURLConnectionOperation -@synthesize outputStream = _outputStream; - -+ (void)networkRequestThreadEntryPoint:(id)__unused object { - @autoreleasepool { - [[NSThread currentThread] setName:@"AFNetworking"]; - - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; - [runLoop run]; - } -} - -+ (NSThread *)networkRequestThread { - static NSThread *_networkRequestThread = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; - [_networkRequestThread start]; - }); - - return _networkRequestThread; -} - -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { - NSParameterAssert(urlRequest); - - self = [super init]; - if (!self) { - return nil; - } - - _state = AFOperationReadyState; - - self.lock = [[NSRecursiveLock alloc] init]; - self.lock.name = kAFNetworkingLockName; - - self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes]; - - self.request = urlRequest; - - self.shouldUseCredentialStorage = YES; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - - return self; -} - -- (void)dealloc { - if (_outputStream) { - [_outputStream close]; - _outputStream = nil; - } - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) - if (_backgroundTaskIdentifier) { - [[UIApplication sharedApplication] endBackgroundTask:_backgroundTaskIdentifier]; - _backgroundTaskIdentifier = UIBackgroundTaskInvalid; - } -#endif -} - -#pragma mark - - -- (void)setResponseData:(NSData *)responseData { - [self.lock lock]; - if (!responseData) { - _responseData = nil; - } else { - _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length]; - } - [self.lock unlock]; -} - -- (NSString *)responseString { - [self.lock lock]; - if (!_responseString && self.response && self.responseData) { - self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding]; - } - [self.lock unlock]; - - return _responseString; -} - -- (NSStringEncoding)responseStringEncoding { - [self.lock lock]; - if (!_responseStringEncoding && self.response) { - NSStringEncoding stringEncoding = NSUTF8StringEncoding; - if (self.response.textEncodingName) { - CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName); - if (IANAEncoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding); - } - } - - self.responseStringEncoding = stringEncoding; - } - [self.lock unlock]; - - return _responseStringEncoding; -} - -- (NSInputStream *)inputStream { - return self.request.HTTPBodyStream; -} - -- (void)setInputStream:(NSInputStream *)inputStream { - NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; - mutableRequest.HTTPBodyStream = inputStream; - self.request = mutableRequest; -} - -- (NSOutputStream *)outputStream { - if (!_outputStream) { - self.outputStream = [NSOutputStream outputStreamToMemory]; - } - - return _outputStream; -} - -- (void)setOutputStream:(NSOutputStream *)outputStream { - [self.lock lock]; - if (outputStream != _outputStream) { - if (_outputStream) { - [_outputStream close]; - } - - _outputStream = outputStream; - } - [self.lock unlock]; -} - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) -- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler { - [self.lock lock]; - if (!self.backgroundTaskIdentifier) { - UIApplication *application = [UIApplication sharedApplication]; - __weak __typeof(self)weakSelf = self; - self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ - __strong __typeof(weakSelf)strongSelf = weakSelf; - - if (handler) { - handler(); - } - - if (strongSelf) { - [strongSelf cancel]; - - [application endBackgroundTask:strongSelf.backgroundTaskIdentifier]; - strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid; - } - }]; - } - [self.lock unlock]; -} -#endif - -#pragma mark - - -- (void)setState:(AFOperationState)state { - if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) { - return; - } - - [self.lock lock]; - NSString *oldStateKey = AFKeyPathFromOperationState(self.state); - NSString *newStateKey = AFKeyPathFromOperationState(state); - - [self willChangeValueForKey:newStateKey]; - [self willChangeValueForKey:oldStateKey]; - _state = state; - [self didChangeValueForKey:oldStateKey]; - [self didChangeValueForKey:newStateKey]; - [self.lock unlock]; -} - -- (void)pause { - if ([self isPaused] || [self isFinished] || [self isCancelled]) { - return; - } - - [self.lock lock]; - - if ([self isExecuting]) { - [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - - dispatch_async(dispatch_get_main_queue(), ^{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; - }); - } - - self.state = AFOperationPausedState; - - [self.lock unlock]; -} - -- (void)operationDidPause { - [self.lock lock]; - [self.connection cancel]; - [self.lock unlock]; -} - -- (BOOL)isPaused { - return self.state == AFOperationPausedState; -} - -- (void)resume { - if (![self isPaused]) { - return; - } - - [self.lock lock]; - self.state = AFOperationReadyState; - - [self start]; - [self.lock unlock]; -} - -#pragma mark - - -- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block { - self.uploadProgress = block; -} - -- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block { - self.downloadProgress = block; -} - -- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block { - self.authenticationChallenge = block; -} - -- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block { - self.cacheResponse = block; -} - -- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block { - self.redirectResponse = block; -} - -#pragma mark - NSOperation - -- (void)setCompletionBlock:(void (^)(void))block { - [self.lock lock]; - if (!block) { - [super setCompletionBlock:nil]; - } else { - __weak __typeof(self)weakSelf = self; - [super setCompletionBlock:^ { - __strong __typeof(weakSelf)strongSelf = weakSelf; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group(); - dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue(); -#pragma clang diagnostic pop - - dispatch_group_async(group, queue, ^{ - block(); - }); - - dispatch_group_notify(group, url_request_operation_completion_queue(), ^{ - [strongSelf setCompletionBlock:nil]; - }); - }]; - } - [self.lock unlock]; -} - -- (BOOL)isReady { - return self.state == AFOperationReadyState && [super isReady]; -} - -- (BOOL)isExecuting { - return self.state == AFOperationExecutingState; -} - -- (BOOL)isFinished { - return self.state == AFOperationFinishedState; -} - -- (BOOL)isConcurrent { - return YES; -} - -- (void)start { - [self.lock lock]; - if ([self isCancelled]) { - [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } else if ([self isReady]) { - self.state = AFOperationExecutingState; - - [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } - [self.lock unlock]; -} - -- (void)operationDidStart { - [self.lock lock]; - if (![self isCancelled]) { - self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; - - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - for (NSString *runLoopMode in self.runLoopModes) { - [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode]; - [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode]; - } - - [self.connection start]; - } - [self.lock unlock]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self]; - }); -} - -- (void)finish { - [self.lock lock]; - self.state = AFOperationFinishedState; - [self.lock unlock]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; - }); -} - -- (void)cancel { - [self.lock lock]; - if (![self isFinished] && ![self isCancelled]) { - [super cancel]; - - if ([self isExecuting]) { - [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } - } - [self.lock unlock]; -} - -- (void)cancelConnection { - NSDictionary *userInfo = nil; - if ([self.request URL]) { - userInfo = [NSDictionary dictionaryWithObject:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; - } - NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; - - if (![self isFinished]) { - if (self.connection) { - [self.connection cancel]; - [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error]; - } else { - // Accomodate race condition where `self.connection` has not yet been set before cancellation - self.error = error; - [self finish]; - } - } -} - -#pragma mark - - -+ (NSArray *)batchOfRequestOperations:(NSArray *)operations - progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock - completionBlock:(void (^)(NSArray *operations))completionBlock -{ - if (!operations || [operations count] == 0) { - return @[[NSBlockOperation blockOperationWithBlock:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(@[]); - } - }); - }]]; - } - - __block dispatch_group_t group = dispatch_group_create(); - NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{ - dispatch_group_notify(group, dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(operations); - } - }); - }]; - - for (AFURLConnectionOperation *operation in operations) { - operation.completionGroup = group; - void (^originalCompletionBlock)(void) = [operation.completionBlock copy]; - __weak __typeof(operation)weakOperation = operation; - operation.completionBlock = ^{ - __strong __typeof(weakOperation)strongOperation = weakOperation; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue(); -#pragma clang diagnostic pop - dispatch_group_async(group, queue, ^{ - if (originalCompletionBlock) { - originalCompletionBlock(); - } - - NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx, BOOL __unused *stop) { - return [op isFinished]; - }] count]; - - if (progressBlock) { - progressBlock(numberOfFinishedOperations, [operations count]); - } - - dispatch_group_leave(group); - }); - }; - - dispatch_group_enter(group); - [batchedOperation addDependency:operation]; - } - - return [operations arrayByAddingObject:batchedOperation]; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @"YES" : @"NO"), self.request, self.response]; -} - -#pragma mark - NSURLConnectionDelegate - -- (void)connection:(NSURLConnection *)connection -willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - if (self.authenticationChallenge) { - self.authenticationChallenge(connection, challenge); - return; - } - - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] cancelAuthenticationChallenge:challenge]; - } - } else { - if ([challenge previousFailureCount] == 0) { - if (self.credential) { - [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } -} - -- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { - return self.shouldUseCredentialStorage; -} - -- (NSURLRequest *)connection:(NSURLConnection *)connection - willSendRequest:(NSURLRequest *)request - redirectResponse:(NSURLResponse *)redirectResponse -{ - if (self.redirectResponse) { - return self.redirectResponse(connection, request, redirectResponse); - } else { - return request; - } -} - -- (void)connection:(NSURLConnection __unused *)connection - didSendBodyData:(NSInteger)bytesWritten - totalBytesWritten:(NSInteger)totalBytesWritten -totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.uploadProgress) { - self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } - }); -} - -- (void)connection:(NSURLConnection __unused *)connection -didReceiveResponse:(NSURLResponse *)response -{ - self.response = response; - - [self.outputStream open]; -} - -- (void)connection:(NSURLConnection __unused *)connection - didReceiveData:(NSData *)data -{ - NSUInteger length = [data length]; - while (YES) { - NSInteger totalNumberOfBytesWritten = 0; - if ([self.outputStream hasSpaceAvailable]) { - const uint8_t *dataBuffer = (uint8_t *)[data bytes]; - - NSInteger numberOfBytesWritten = 0; - while (totalNumberOfBytesWritten < (NSInteger)length) { - numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)]; - if (numberOfBytesWritten == -1) { - break; - } - - totalNumberOfBytesWritten += numberOfBytesWritten; - } - - break; - } - - if (self.outputStream.streamError) { - [self.connection cancel]; - [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError]; - return; - } - } - - dispatch_async(dispatch_get_main_queue(), ^{ - self.totalBytesRead += (long long)length; - - if (self.downloadProgress) { - self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength); - } - }); -} - -- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection { - self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; - - [self.outputStream close]; - if (self.responseData) { - self.outputStream = nil; - } - - self.connection = nil; - - [self finish]; -} - -- (void)connection:(NSURLConnection __unused *)connection - didFailWithError:(NSError *)error -{ - self.error = error; - - [self.outputStream close]; - if (self.responseData) { - self.outputStream = nil; - } - - self.connection = nil; - - [self finish]; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection - willCacheResponse:(NSCachedURLResponse *)cachedResponse -{ - if (self.cacheResponse) { - return self.cacheResponse(connection, cachedResponse); - } else { - if ([self isCancelled]) { - return nil; - } - - return cachedResponse; - } -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))]; - - self = [self initWithRequest:request]; - if (!self) { - return nil; - } - - self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue]; - self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))]; - self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))]; - self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))]; - self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [self pause]; - - [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))]; - - switch (self.state) { - case AFOperationExecutingState: - case AFOperationPausedState: - [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))]; - break; - default: - [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))]; - break; - } - - [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))]; - [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))]; - [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))]; - [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request]; - - operation.uploadProgress = self.uploadProgress; - operation.downloadProgress = self.downloadProgress; - operation.authenticationChallenge = self.authenticationChallenge; - operation.cacheResponse = self.cacheResponse; - operation.redirectResponse = self.redirectResponse; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h deleted file mode 100644 index 161b551..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h +++ /dev/null @@ -1,444 +0,0 @@ -// AFSerialization.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <UIKit/UIKit.h> -#endif - -/** - The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. - - For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. - */ -@protocol AFURLRequestSerialization <NSObject, NSSecureCoding, NSCopying> - -/** - Returns a request with the specified parameters encoded into a copy of the original request. - - @param request The original request. - @param parameters The parameters to be encoded. - @param error The error that occurred while attempting to encode the request parameters. - - @return A serialized request. - */ -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError * __autoreleasing *)error; - -@end - -#pragma mark - - -/** - - */ -typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { - AFHTTPRequestQueryStringDefaultStyle = 0, -}; - -@protocol AFMultipartFormData; - -/** - `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. - - Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. - */ -@interface AFHTTPRequestSerializer : NSObject <AFURLRequestSerialization> - -/** - The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. - */ -@property (nonatomic, assign) NSStringEncoding stringEncoding; - -/** - Whether created requests can use the device’s cellular radio (if present). `YES` by default. - - @see NSMutableURLRequest -setAllowsCellularAccess: - */ -@property (nonatomic, assign) BOOL allowsCellularAccess; - -/** - The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. - - @see NSMutableURLRequest -setCachePolicy: - */ -@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; - -/** - Whether created requests should use the default cookie handling. `YES` by default. - - @see NSMutableURLRequest -setHTTPShouldHandleCookies: - */ -@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; - -/** - Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default - - @see NSMutableURLRequest -setHTTPShouldUsePipelining: - */ -@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; - -/** - The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. - - @see NSMutableURLRequest -setNetworkServiceType: - */ -@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; - -/** - The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. - - @see NSMutableURLRequest -setTimeoutInterval: - */ -@property (nonatomic, assign) NSTimeInterval timeoutInterval; - -///--------------------------------------- -/// @name Configuring HTTP Request Headers -///--------------------------------------- - -/** - Default HTTP header field values to be applied to serialized requests. - */ -@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; - -/** - Creates and returns a serializer with default configuration. - */ -+ (instancetype)serializer; - -/** - Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. - - @param field The HTTP header to set a default value for - @param value The value set as default for the specified header, or `nil` - */ -- (void)setValue:(NSString *)value -forHTTPHeaderField:(NSString *)field; - -/** - Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. - - @param username The HTTP basic auth username - @param password The HTTP basic auth password - */ -- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username - password:(NSString *)password; - -/** - @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead. - */ -- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE; - - -/** - Clears any existing value for the "Authorization" HTTP header. - */ -- (void)clearAuthorizationHeader; - -///------------------------------------------------------- -/// @name Configuring Query String Parameter Serialization -///------------------------------------------------------- - -/** - HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. - */ -@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; - -/** - Set the method of query string serialization according to one of the pre-defined styles. - - @param style The serialization style. - - @see AFHTTPRequestQueryStringSerializationStyle - */ -- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; - -/** - Set the a custom method of query string serialization according to the specified block. - - @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. - */ -- (void)setQueryStringSerializationWithBlock:(NSString * (^)(NSURLRequest *request, NSDictionary *parameters, NSError * __autoreleasing *error))block; - -///------------------------------- -/// @name Creating Request Objects -///------------------------------- - -/** - @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead. - */ -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters DEPRECATED_ATTRIBUTE; - -/** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. - - If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. - - @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. - @param error The error that occured while constructing the request. - - @return An `NSMutableURLRequest` object. - */ -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters - error:(NSError * __autoreleasing *)error; - -/** - @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead. - */ -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block DEPRECATED_ATTRIBUTE; - -/** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 - - Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. - - @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded and set in the request HTTP body. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param error The error that occured while constructing the request. - - @return An `NSMutableURLRequest` object - */ -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - error:(NSError * __autoreleasing *)error; - -/** - Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. - - @param request The multipart form request. - @param fileURL The file URL to write multipart form contents to. - @param handler A handler block to execute. - - @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. - - @see https://github.com/AFNetworking/AFNetworking/issues/1398 - */ -- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request - writingStreamContentsToFile:(NSURL *)fileURL - completionHandler:(void (^)(NSError *error))handler; - -@end - -#pragma mark - - -/** - The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. - */ -@protocol AFMultipartFormData - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. - - The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. - - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. - - @return `YES` if the file data was successfully appended, otherwise `NO`. - */ -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - error:(NSError * __autoreleasing *)error; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. - - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. - @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. - - @return `YES` if the file data was successfully appended otherwise `NO`. - */ -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - error:(NSError * __autoreleasing *)error; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. - - @param inputStream The input stream to be appended to the form data - @param name The name to be associated with the specified input stream. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. - @param length The length of the specified input stream in bytes. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. - */ -- (void)appendPartWithInputStream:(NSInputStream *)inputStream - name:(NSString *)name - fileName:(NSString *)fileName - length:(int64_t)length - mimeType:(NSString *)mimeType; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. - - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. - */ -- (void)appendPartWithFileData:(NSData *)data - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType; - -/** - Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. - - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - */ - -- (void)appendPartWithFormData:(NSData *)data - name:(NSString *)name; - - -/** - Appends HTTP headers, followed by the encoded data and the multipart form boundary. - - @param headers The HTTP headers to be appended to the form data. - @param body The data to be encoded and appended to the form data. - */ -- (void)appendPartWithHeaders:(NSDictionary *)headers - body:(NSData *)body; - -/** - Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. - - When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. - - @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. - @param delay Duration of delay each time a packet is read. By default, no delay is set. - */ -- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes - delay:(NSTimeInterval)delay; - -@end - -#pragma mark - - -@interface AFJSONRequestSerializer : AFHTTPRequestSerializer - -/** - Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. - */ -@property (nonatomic, assign) NSJSONWritingOptions writingOptions; - -/** - Creates and returns a JSON serializer with specified reading and writing options. - - @param writingOptions The specified JSON writing options. - */ -+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; - -@end - -@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer - -/** - The property list format. Possible values are described in "NSPropertyListFormat". - */ -@property (nonatomic, assign) NSPropertyListFormat format; - -/** - @warning The `writeOptions` property is currently unused. - */ -@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; - -/** - Creates and returns a property list serializer with a specified format, read options, and write options. - - @param format The property list format. - @param writeOptions The property list write options. - - @warning The `writeOptions` property is currently unused. - */ -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - writeOptions:(NSPropertyListWriteOptions)writeOptions; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## Error Domains - - The following error domain is predefined. - - - `NSString * const AFURLRequestSerializationErrorDomain` - - ### Constants - - `AFURLRequestSerializationErrorDomain` - AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. - */ -extern NSString * const AFURLRequestSerializationErrorDomain; - -/** - ## User info dictionary keys - - These keys may exist in the user info dictionary, in addition to those defined for NSError. - - - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` - - ### Constants - - `AFNetworkingOperationFailingURLRequestErrorKey` - The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. - */ -extern NSString * const AFNetworkingOperationFailingURLRequestErrorKey; - -/** - ## Throttling Bandwidth for HTTP Request Input Streams - - @see -throttleBandwidthWithPacketSize:delay: - - ### Constants - - `kAFUploadStream3GSuggestedPacketSize` - Maximum packet size, in number of bytes. Equal to 16kb. - - `kAFUploadStream3GSuggestedDelay` - Duration of delay each time a packet is read. Equal to 0.2 seconds. - */ -extern NSUInteger const kAFUploadStream3GSuggestedPacketSize; -extern NSTimeInterval const kAFUploadStream3GSuggestedDelay; diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m deleted file mode 100644 index 45df7a0..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m +++ /dev/null @@ -1,1281 +0,0 @@ -// AFSerialization.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLRequestSerialization.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import <MobileCoreServices/MobileCoreServices.h> -#else -#import <CoreServices/CoreServices.h> -#endif - -NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; -NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; - -typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error); - -static NSString * AFBase64EncodedStringFromString(NSString *string) { - NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; - NSUInteger length = [data length]; - NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; - - uint8_t *input = (uint8_t *)[data bytes]; - uint8_t *output = (uint8_t *)[mutableData mutableBytes]; - - for (NSUInteger i = 0; i < length; i += 3) { - NSUInteger value = 0; - for (NSUInteger j = i; j < (i + 3); j++) { - value <<= 8; - if (j < length) { - value |= (0xFF & input[j]); - } - } - - static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - NSUInteger idx = (i / 3) * 4; - output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; - output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; - output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; - output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; - } - - return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; -} - -static NSString * const kAFCharactersToBeEscapedInQueryString = @":/?&=;+!@#$()',*"; - -static NSString * AFPercentEscapedQueryStringKeyFromStringWithEncoding(NSString *string, NSStringEncoding encoding) { - static NSString * const kAFCharactersToLeaveUnescapedInQueryStringPairKey = @"[]."; - - return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kAFCharactersToLeaveUnescapedInQueryStringPairKey, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding)); -} - -static NSString * AFPercentEscapedQueryStringValueFromStringWithEncoding(NSString *string, NSStringEncoding encoding) { - return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding)); -} - -#pragma mark - - -@interface AFQueryStringPair : NSObject -@property (readwrite, nonatomic, strong) id field; -@property (readwrite, nonatomic, strong) id value; - -- (id)initWithField:(id)field value:(id)value; - -- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding; -@end - -@implementation AFQueryStringPair - -- (id)initWithField:(id)field value:(id)value { - self = [super init]; - if (!self) { - return nil; - } - - self.field = field; - self.value = value; - - return self; -} - -- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding { - if (!self.value || [self.value isEqual:[NSNull null]]) { - return AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding); - } else { - return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding), AFPercentEscapedQueryStringValueFromStringWithEncoding([self.value description], stringEncoding)]; - } -} - -@end - -#pragma mark - - -extern NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); -extern NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); - -static NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) { - NSMutableArray *mutablePairs = [NSMutableArray array]; - for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { - [mutablePairs addObject:[pair URLEncodedStringValueWithEncoding:stringEncoding]]; - } - - return [mutablePairs componentsJoinedByString:@"&"]; -} - -NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { - return AFQueryStringPairsFromKeyAndValue(nil, dictionary); -} - -NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { - NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; - - if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dictionary = value; - // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries - for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { - id nestedValue = [dictionary objectForKey:nestedKey]; - if (nestedValue) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; - } - } - } else if ([value isKindOfClass:[NSArray class]]) { - NSArray *array = value; - for (id nestedValue in array) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; - } - } else if ([value isKindOfClass:[NSSet class]]) { - NSSet *set = value; - for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; - } - } else { - [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; - } - - return mutableQueryStringComponents; -} - -#pragma mark - - -@interface AFStreamingMultipartFormData : NSObject <AFMultipartFormData> -- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest - stringEncoding:(NSStringEncoding)encoding; - -- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; -@end - -#pragma mark - - -@interface AFHTTPRequestSerializer () -@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; -@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; -@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; -@end - -@implementation AFHTTPRequestSerializer - -+ (instancetype)serializer { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = NSUTF8StringEncoding; - self.allowsCellularAccess = YES; - self.cachePolicy = NSURLRequestUseProtocolCachePolicy; - self.HTTPShouldHandleCookies = YES; - self.HTTPShouldUsePipelining = NO; - self.networkServiceType = NSURLNetworkServiceTypeDefault; - self.timeoutInterval = 60; - - self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; - - // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 - NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; - [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - float q = 1.0f - (idx * 0.1f); - [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; - *stop = q <= 0.5f; - }]; - [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; - - NSString *userAgent = nil; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) - userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; -#endif -#pragma clang diagnostic pop - if (userAgent) { - if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { - NSMutableString *mutableUserAgent = [userAgent mutableCopy]; - if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { - userAgent = mutableUserAgent; - } - } - [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; - } - - // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; - - return self; -} - -#pragma mark - - -- (NSDictionary *)HTTPRequestHeaders { - return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; -} - -- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { - [self.mutableHTTPRequestHeaders setValue:value forKey:field]; -} - -- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username password:(NSString *)password { - NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", username, password]; - [self setValue:[NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@"Authorization"]; -} - -- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token { - [self setValue:[NSString stringWithFormat:@"Token token=\"%@\"", token] forHTTPHeaderField:@"Authorization"]; -} - -- (void)clearAuthorizationHeader { - [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; -} - -#pragma mark - - -- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { - self.queryStringSerializationStyle = style; - self.queryStringSerialization = nil; -} - -- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, NSDictionary *, NSError *__autoreleasing *))block { - self.queryStringSerialization = block; -} - -#pragma mark - - -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters -{ - return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil]; -} - -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(method); - NSParameterAssert(URLString); - - NSURL *url = [NSURL URLWithString:URLString]; - - NSParameterAssert(url); - - NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; - mutableRequest.HTTPMethod = method; - mutableRequest.allowsCellularAccess = self.allowsCellularAccess; - mutableRequest.cachePolicy = self.cachePolicy; - mutableRequest.HTTPShouldHandleCookies = self.HTTPShouldHandleCookies; - mutableRequest.HTTPShouldUsePipelining = self.HTTPShouldUsePipelining; - mutableRequest.networkServiceType = self.networkServiceType; - mutableRequest.timeoutInterval = self.timeoutInterval; - - mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; - - return mutableRequest; -} - -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block -{ - return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil]; -} - -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(method); - NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); - - NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; - - __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; - - if (parameters) { - for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { - NSData *data = nil; - if ([pair.value isKindOfClass:[NSData class]]) { - data = pair.value; - } else if ([pair.value isEqual:[NSNull null]]) { - data = [NSData data]; - } else { - data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; - } - - if (data) { - [formData appendPartWithFormData:data name:[pair.field description]]; - } - } - } - - if (block) { - block(formData); - } - - return [formData requestByFinalizingMultipartFormData]; -} - -- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request - writingStreamContentsToFile:(NSURL *)fileURL - completionHandler:(void (^)(NSError *error))handler -{ - if (!request.HTTPBodyStream) { - return [request mutableCopy]; - } - - NSParameterAssert([fileURL isFileURL]); - - NSInputStream *inputStream = request.HTTPBodyStream; - NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; - __block NSError *error = nil; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - - [inputStream open]; - [outputStream open]; - - while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { - uint8_t buffer[1024]; - - NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; - if (inputStream.streamError || bytesRead < 0) { - error = inputStream.streamError; - break; - } - - NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; - if (outputStream.streamError || bytesWritten < 0) { - error = outputStream.streamError; - break; - } - - if (bytesRead == 0 && bytesWritten == 0) { - break; - } - } - - [outputStream close]; - [inputStream close]; - - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(error); - }); - } - }); - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - mutableRequest.HTTPBodyStream = nil; - - return mutableRequest; -} - -#pragma mark - AFURLRequestSerialization - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - if (parameters) { - NSString *query = nil; - if (self.queryStringSerialization) { - query = self.queryStringSerialization(request, parameters, error); - } else { - switch (self.queryStringSerializationStyle) { - case AFHTTPRequestQueryStringDefaultStyle: - query = AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding); - break; - } - } - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; - } else { - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding)); - [mutableRequest setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%@", charset] forHTTPHeaderField:@"Content-Type"]; - } - [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; - } - } - - return mutableRequest; -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [self init]; - if (!self) { - return nil; - } - - self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; - self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; - [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; - serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; - serializer.queryStringSerialization = self.queryStringSerialization; - - return serializer; -} - -@end - -#pragma mark - - -static NSString * AFCreateMultipartFormBoundary() { - return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; -} - -static NSString * const kAFMultipartFormCRLF = @"\r\n"; - -static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFContentTypeForPathExtension(NSString *extension) { -#ifdef __UTTYPE__ - NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); - NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); - if (!contentType) { - return @"application/octet-stream"; - } else { - return contentType; - } -#else -#pragma unused (extension) - return @"application/octet-stream"; -#endif -} - -NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; -NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; - -@interface AFHTTPBodyPart : NSObject -@property (nonatomic, assign) NSStringEncoding stringEncoding; -@property (nonatomic, strong) NSDictionary *headers; -@property (nonatomic, copy) NSString *boundary; -@property (nonatomic, strong) id body; -@property (nonatomic, assign) unsigned long long bodyContentLength; -@property (nonatomic, strong) NSInputStream *inputStream; - -@property (nonatomic, assign) BOOL hasInitialBoundary; -@property (nonatomic, assign) BOOL hasFinalBoundary; - -@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; -@property (readonly, nonatomic, assign) unsigned long long contentLength; - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length; -@end - -@interface AFMultipartBodyStream : NSInputStream <NSStreamDelegate> -@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; -@property (nonatomic, assign) NSTimeInterval delay; -@property (nonatomic, strong) NSInputStream *inputStream; -@property (readonly, nonatomic, assign) unsigned long long contentLength; -@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; - -- (id)initWithStringEncoding:(NSStringEncoding)encoding; -- (void)setInitialAndFinalBoundaries; -- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; -@end - -#pragma mark - - -@interface AFStreamingMultipartFormData () -@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; -@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; -@property (readwrite, nonatomic, copy) NSString *boundary; -@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; -@end - -@implementation AFStreamingMultipartFormData - -- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest - stringEncoding:(NSStringEncoding)encoding -{ - self = [super init]; - if (!self) { - return nil; - } - - self.request = urlRequest; - self.stringEncoding = encoding; - self.boundary = AFCreateMultipartFormBoundary(); - self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; - - return self; -} - -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - error:(NSError * __autoreleasing *)error -{ - NSParameterAssert(fileURL); - NSParameterAssert(name); - - NSString *fileName = [fileURL lastPathComponent]; - NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); - - return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; -} - -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - error:(NSError * __autoreleasing *)error -{ - NSParameterAssert(fileURL); - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - if (![fileURL isFileURL]) { - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; - if (error) { - *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; - } - - return NO; - } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; - if (error) { - *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; - } - - return NO; - } - - NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; - if (!fileAttributes) { - return NO; - } - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = mutableHeaders; - bodyPart.boundary = self.boundary; - bodyPart.body = fileURL; - bodyPart.bodyContentLength = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; - [self.bodyStream appendHTTPBodyPart:bodyPart]; - - return YES; -} - -- (void)appendPartWithInputStream:(NSInputStream *)inputStream - name:(NSString *)name - fileName:(NSString *)fileName - length:(int64_t)length - mimeType:(NSString *)mimeType -{ - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = mutableHeaders; - bodyPart.boundary = self.boundary; - bodyPart.body = inputStream; - - bodyPart.bodyContentLength = (unsigned long long)length; - - [self.bodyStream appendHTTPBodyPart:bodyPart]; -} - -- (void)appendPartWithFileData:(NSData *)data - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType -{ - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - [self appendPartWithHeaders:mutableHeaders body:data]; -} - -- (void)appendPartWithFormData:(NSData *)data - name:(NSString *)name -{ - NSParameterAssert(name); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; - - [self appendPartWithHeaders:mutableHeaders body:data]; -} - -- (void)appendPartWithHeaders:(NSDictionary *)headers - body:(NSData *)body -{ - NSParameterAssert(body); - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = headers; - bodyPart.boundary = self.boundary; - bodyPart.bodyContentLength = [body length]; - bodyPart.body = body; - - [self.bodyStream appendHTTPBodyPart:bodyPart]; -} - -- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes - delay:(NSTimeInterval)delay -{ - self.bodyStream.numberOfBytesInPacket = numberOfBytes; - self.bodyStream.delay = delay; -} - -- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { - if ([self.bodyStream isEmpty]) { - return self.request; - } - - // Reset the initial and final boundaries to ensure correct Content-Length - [self.bodyStream setInitialAndFinalBoundaries]; - [self.request setHTTPBodyStream:self.bodyStream]; - - [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; - [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; - - return self.request; -} - -@end - -#pragma mark - - -@interface NSStream () -@property (readwrite) NSStreamStatus streamStatus; -@property (readwrite, copy) NSError *streamError; -@end - -@interface AFMultipartBodyStream () <NSCopying> -@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; -@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; -@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; -@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; -@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; -@property (readwrite, nonatomic, strong) NSMutableData *buffer; -@end - -@implementation AFMultipartBodyStream -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" -@synthesize streamStatus; -@synthesize streamError; -#pragma clang diagnostic pop - -- (id)initWithStringEncoding:(NSStringEncoding)encoding { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = encoding; - self.HTTPBodyParts = [NSMutableArray array]; - self.numberOfBytesInPacket = NSIntegerMax; - - return self; -} - -- (void)setInitialAndFinalBoundaries { - if ([self.HTTPBodyParts count] > 0) { - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - bodyPart.hasInitialBoundary = NO; - bodyPart.hasFinalBoundary = NO; - } - - [[self.HTTPBodyParts objectAtIndex:0] setHasInitialBoundary:YES]; - [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; - } -} - -- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { - [self.HTTPBodyParts addObject:bodyPart]; -} - -- (BOOL)isEmpty { - return [self.HTTPBodyParts count] == 0; -} - -#pragma mark - NSInputStream - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ - if ([self streamStatus] == NSStreamStatusClosed) { - return 0; - } - - NSInteger totalNumberOfBytesRead = 0; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { - if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { - if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { - break; - } - } else { - NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead; - NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; - if (numberOfBytesRead == -1) { - self.streamError = self.currentHTTPBodyPart.inputStream.streamError; - break; - } else { - totalNumberOfBytesRead += numberOfBytesRead; - - if (self.delay > 0.0f) { - [NSThread sleepForTimeInterval:self.delay]; - } - } - } - } -#pragma clang diagnostic pop - - return totalNumberOfBytesRead; -} - -- (BOOL)getBuffer:(__unused uint8_t **)buffer - length:(__unused NSUInteger *)len -{ - return NO; -} - -- (BOOL)hasBytesAvailable { - return [self streamStatus] == NSStreamStatusOpen; -} - -#pragma mark - NSStream - -- (void)open { - if (self.streamStatus == NSStreamStatusOpen) { - return; - } - - self.streamStatus = NSStreamStatusOpen; - - [self setInitialAndFinalBoundaries]; - self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; -} - -- (void)close { - self.streamStatus = NSStreamStatusClosed; -} - -- (id)propertyForKey:(__unused NSString *)key { - return nil; -} - -- (BOOL)setProperty:(__unused id)property - forKey:(__unused NSString *)key -{ - return NO; -} - -- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop - forMode:(__unused NSString *)mode -{} - -- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop - forMode:(__unused NSString *)mode -{} - -- (unsigned long long)contentLength { - unsigned long long length = 0; - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - length += [bodyPart contentLength]; - } - - return length; -} - -#pragma mark - Undocumented CFReadStream Bridged Methods - -- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop - forMode:(__unused CFStringRef)aMode -{} - -- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop - forMode:(__unused CFStringRef)aMode -{} - -- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags - callback:(__unused CFReadStreamClientCallBack)inCallback - context:(__unused CFStreamClientContext *)inContext { - return NO; -} - -#pragma mark - NSCopying - --(id)copyWithZone:(NSZone *)zone { - AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; - - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; - } - - [bodyStreamCopy setInitialAndFinalBoundaries]; - - return bodyStreamCopy; -} - -@end - -#pragma mark - - -typedef enum { - AFEncapsulationBoundaryPhase = 1, - AFHeaderPhase = 2, - AFBodyPhase = 3, - AFFinalBoundaryPhase = 4, -} AFHTTPBodyPartReadPhase; - -@interface AFHTTPBodyPart () <NSCopying> { - AFHTTPBodyPartReadPhase _phase; - NSInputStream *_inputStream; - unsigned long long _phaseReadOffset; -} - -- (BOOL)transitionToNextPhase; -- (NSInteger)readData:(NSData *)data - intoBuffer:(uint8_t *)buffer - maxLength:(NSUInteger)length; -@end - -@implementation AFHTTPBodyPart - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - [self transitionToNextPhase]; - - return self; -} - -- (void)dealloc { - if (_inputStream) { - [_inputStream close]; - _inputStream = nil; - } -} - -- (NSInputStream *)inputStream { - if (!_inputStream) { - if ([self.body isKindOfClass:[NSData class]]) { - _inputStream = [NSInputStream inputStreamWithData:self.body]; - } else if ([self.body isKindOfClass:[NSURL class]]) { - _inputStream = [NSInputStream inputStreamWithURL:self.body]; - } else if ([self.body isKindOfClass:[NSInputStream class]]) { - _inputStream = self.body; - } - } - - return _inputStream; -} - -- (NSString *)stringForHeaders { - NSMutableString *headerString = [NSMutableString string]; - for (NSString *field in [self.headers allKeys]) { - [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; - } - [headerString appendString:kAFMultipartFormCRLF]; - - return [NSString stringWithString:headerString]; -} - -- (unsigned long long)contentLength { - unsigned long long length = 0; - - NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; - length += [encapsulationBoundaryData length]; - - NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; - length += [headersData length]; - - length += _bodyContentLength; - - NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); - length += [closingBoundaryData length]; - - return length; -} - -- (BOOL)hasBytesAvailable { - // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer - if (_phase == AFFinalBoundaryPhase) { - return YES; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcovered-switch-default" - switch (self.inputStream.streamStatus) { - case NSStreamStatusNotOpen: - case NSStreamStatusOpening: - case NSStreamStatusOpen: - case NSStreamStatusReading: - case NSStreamStatusWriting: - return YES; - case NSStreamStatusAtEnd: - case NSStreamStatusClosed: - case NSStreamStatusError: - default: - return NO; - } -#pragma clang diagnostic pop -} - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ - NSInteger totalNumberOfBytesRead = 0; - - if (_phase == AFEncapsulationBoundaryPhase) { - NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; - totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - if (_phase == AFHeaderPhase) { - NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; - totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - if (_phase == AFBodyPhase) { - NSInteger numberOfBytesRead = 0; - - numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - if (numberOfBytesRead == -1) { - return -1; - } else { - totalNumberOfBytesRead += numberOfBytesRead; - - if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { - [self transitionToNextPhase]; - } - } - } - - if (_phase == AFFinalBoundaryPhase) { - NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); - totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - return totalNumberOfBytesRead; -} - -- (NSInteger)readData:(NSData *)data - intoBuffer:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); - [data getBytes:buffer range:range]; -#pragma clang diagnostic pop - - _phaseReadOffset += range.length; - - if (((NSUInteger)_phaseReadOffset) >= [data length]) { - [self transitionToNextPhase]; - } - - return (NSInteger)range.length; -} - -- (BOOL)transitionToNextPhase { - if (![[NSThread currentThread] isMainThread]) { - [self performSelectorOnMainThread:@selector(transitionToNextPhase) withObject:nil waitUntilDone:YES]; - return YES; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcovered-switch-default" - switch (_phase) { - case AFEncapsulationBoundaryPhase: - _phase = AFHeaderPhase; - break; - case AFHeaderPhase: - [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; - [self.inputStream open]; - _phase = AFBodyPhase; - break; - case AFBodyPhase: - [self.inputStream close]; - _phase = AFFinalBoundaryPhase; - break; - case AFFinalBoundaryPhase: - default: - _phase = AFEncapsulationBoundaryPhase; - break; - } - _phaseReadOffset = 0; -#pragma clang diagnostic pop - - return YES; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; - - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = self.headers; - bodyPart.bodyContentLength = self.bodyContentLength; - bodyPart.body = self.body; - bodyPart.boundary = self.boundary; - - return bodyPart; -} - -@end - -#pragma mark - - -@implementation AFJSONRequestSerializer - -+ (instancetype)serializer { - return [self serializerWithWritingOptions:0]; -} - -+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions -{ - AFJSONRequestSerializer *serializer = [[self alloc] init]; - serializer.writingOptions = writingOptions; - - return serializer; -} - -#pragma mark - AFURLRequestSerialization - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - return [super requestBySerializingRequest:request withParameters:parameters error:error]; - } - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - if (parameters) { - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); - [mutableRequest setValue:[NSString stringWithFormat:@"application/json; charset=%@", charset] forHTTPHeaderField:@"Content-Type"]; - } - - [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; - } - - return mutableRequest; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; - serializer.writingOptions = self.writingOptions; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFPropertyListRequestSerializer - -+ (instancetype)serializer { - return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; -} - -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - writeOptions:(NSPropertyListWriteOptions)writeOptions -{ - AFPropertyListRequestSerializer *serializer = [[self alloc] init]; - serializer.format = format; - serializer.writeOptions = writeOptions; - - return serializer; -} - -#pragma mark - AFURLRequestSerializer - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - return [super requestBySerializingRequest:request withParameters:parameters error:error]; - } - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - if (parameters) { - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); - [mutableRequest setValue:[NSString stringWithFormat:@"application/x-plist; charset=%@", charset] forHTTPHeaderField:@"Content-Type"]; - } - - [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; - } - - return mutableRequest; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; - self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; - [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; - serializer.format = self.format; - serializer.writeOptions = self.writeOptions; - - return serializer; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h deleted file mode 100644 index 36ed33e..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h +++ /dev/null @@ -1,294 +0,0 @@ -// AFSerialization.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <CoreGraphics/CoreGraphics.h> - -/** - The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. - - For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. - */ -@protocol AFURLResponseSerialization <NSObject, NSSecureCoding, NSCopying> - -/** - The response object decoded from the data associated with a specified response. - - @param response The response to be processed. - @param data The response data to be decoded. - @param error The error that occurred while attempting to decode the response data. - - @return The object decoded from the specified response data. - */ -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error; - -@end - -#pragma mark - - -/** - `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. - - Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. - */ -@interface AFHTTPResponseSerializer : NSObject <AFURLResponseSerialization> - -/** - The string encoding used to serialize parameters. - */ -@property (nonatomic, assign) NSStringEncoding stringEncoding; - -/** - Creates and returns a serializer with default configuration. - */ -+ (instancetype)serializer; - -///----------------------------------------- -/// @name Configuring Response Serialization -///----------------------------------------- - -/** - The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. - - See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html - */ -@property (nonatomic, copy) NSIndexSet *acceptableStatusCodes; - -/** - The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. - */ -@property (nonatomic, copy) NSSet *acceptableContentTypes; - -/** - Validates the specified response and data. - - In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. - - @param response The response to be validated. - @param data The data associated with the response. - @param error The error that occurred while attempting to validate the response. - - @return `YES` if the response is valid, otherwise `NO`. - */ -- (BOOL)validateResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error; - -@end - -#pragma mark - - - -/** - `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. - - By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: - - - `application/json` - - `text/json` - - `text/javascript` - */ -@interface AFJSONResponseSerializer : AFHTTPResponseSerializer - -/** - Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. - */ -@property (nonatomic, assign) NSJSONReadingOptions readingOptions; - -/** - Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. - */ -@property (nonatomic, assign) BOOL removesKeysWithNullValues; - -/** - Creates and returns a JSON serializer with specified reading and writing options. - - @param readingOptions The specified JSON reading options. - */ -+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; - -@end - -#pragma mark - - -/** - `AFXMLParserSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. - - By default, `AFXMLParserSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: - - - `application/xml` - - `text/xml` - */ -@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer - -@end - -#pragma mark - - -#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED - -/** - `AFXMLDocumentSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. - - By default, `AFXMLDocumentSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: - - - `application/xml` - - `text/xml` - */ -@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer - -/** - Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. - */ -@property (nonatomic, assign) NSUInteger options; - -/** - Creates and returns an XML document serializer with the specified options. - - @param mask The XML document options. - */ -+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; - -@end - -#endif - -#pragma mark - - -/** - `AFPropertyListSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. - - By default, `AFPropertyListSerializer` accepts the following MIME types: - - - `application/x-plist` - */ -@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer - -/** - The property list format. Possible values are described in "NSPropertyListFormat". - */ -@property (nonatomic, assign) NSPropertyListFormat format; - -/** - The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." - */ -@property (nonatomic, assign) NSPropertyListReadOptions readOptions; - -/** - Creates and returns a property list serializer with a specified format, read options, and write options. - - @param format The property list format. - @param readOptions The property list reading options. - */ -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - readOptions:(NSPropertyListReadOptions)readOptions; - -@end - -#pragma mark - - -/** - `AFImageSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. - - By default, `AFImageSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: - - - `image/tiff` - - `image/jpeg` - - `image/gif` - - `image/png` - - `image/ico` - - `image/x-icon` - - `image/bmp` - - `image/x-bmp` - - `image/x-xbitmap` - - `image/x-win-bitmap` - */ -@interface AFImageResponseSerializer : AFHTTPResponseSerializer - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -/** - The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. - */ -@property (nonatomic, assign) CGFloat imageScale; - -/** - Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. - */ -@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; -#endif - -@end - -#pragma mark - - -/** - `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. - */ -@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer - -/** - The component response serializers. - */ -@property (readonly, nonatomic, copy) NSArray *responseSerializers; - -/** - Creates and returns a compound serializer comprised of the specified response serializers. - - @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. - */ -+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## Error Domains - - The following error domain is predefined. - - - `NSString * const AFURLResponseSerializationErrorDomain` - - ### Constants - - `AFURLResponseSerializationErrorDomain` - AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. - */ -extern NSString * const AFURLResponseSerializationErrorDomain; - -/** - ## User info dictionary keys - - These keys may exist in the user info dictionary, in addition to those defined for NSError. - - - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` - - ### Constants - - `AFNetworkingOperationFailingURLResponseErrorKey` - The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. - */ -extern NSString * const AFNetworkingOperationFailingURLResponseErrorKey; diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m deleted file mode 100644 index cc1e00b..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m +++ /dev/null @@ -1,779 +0,0 @@ -// AFSerialization.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLResponseSerialization.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <UIKit/UIKit.h> -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#import <Cocoa/Cocoa.h> -#endif - -NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; -NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; - -static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { - if (!error) { - return underlyingError; - } - - if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { - return error; - } - - NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; - mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; - - return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; -} - -static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { - if ([error.domain isEqualToString:domain] && error.code == code) { - return YES; - } else if (error.userInfo[NSUnderlyingErrorKey]) { - return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); - } - - return NO; -} - -static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { - if ([JSONObject isKindOfClass:[NSArray class]]) { - NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; - for (id value in (NSArray *)JSONObject) { - [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; - } - - return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; - } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; - for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) { - id value = [(NSDictionary *)JSONObject objectForKey:key]; - if (!value || [value isEqual:[NSNull null]]) { - [mutableDictionary removeObjectForKey:key]; - } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { - [mutableDictionary setObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions) forKey:key]; - } - } - - return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; - } - - return JSONObject; -} - -@implementation AFHTTPResponseSerializer - -+ (instancetype)serializer { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = NSUTF8StringEncoding; - - self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; - self.acceptableContentTypes = nil; - - return self; -} - -#pragma mark - - -- (BOOL)validateResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError * __autoreleasing *)error -{ - BOOL responseIsValid = YES; - NSError *validationError = nil; - - if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { - if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { - if ([data length] > 0) { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], - NSURLErrorFailingURLErrorKey:[response URL], - AFNetworkingOperationFailingURLResponseErrorKey: response - }; - - validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo], validationError); - } - - responseIsValid = NO; - } - - if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode]) { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], - NSURLErrorFailingURLErrorKey:[response URL], - AFNetworkingOperationFailingURLResponseErrorKey: response - }; - - validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:userInfo], validationError); - - responseIsValid = NO; - } - } - - if (error && !responseIsValid) { - *error = validationError; - } - - return responseIsValid; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; - - return data; -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [self init]; - if (!self) { - return nil; - } - - self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; - self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; - [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; - serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFJSONResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithReadingOptions:0]; -} - -+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { - AFJSONResponseSerializer *serializer = [[self alloc] init]; - serializer.readingOptions = readingOptions; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. - // See https://github.com/rails/rails/issues/1742 - NSStringEncoding stringEncoding = self.stringEncoding; - if (response.textEncodingName) { - CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); - if (encoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); - } - } - - id responseObject = nil; - NSError *serializationError = nil; - @autoreleasepool { - NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding]; - if (responseString && ![responseString isEqualToString:@" "]) { - // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character - // See http://stackoverflow.com/a/12843465/157142 - data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; - - if (data) { - if ([data length] > 0) { - responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; - } else { - return nil; - } - } else { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@"Data failed decoding as a UTF-8 string", nil, @"AFNetworking"), - NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Could not decode string: %@", nil, @"AFNetworking"), responseString] - }; - - serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo]; - } - } - } - - if (self.removesKeysWithNullValues && responseObject) { - responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); - } - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error);; - } - - return responseObject; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.readingOptions = self.readingOptions; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFXMLParserResponseSerializer - -+ (instancetype)serializer { - AFXMLParserResponseSerializer *serializer = [[self alloc] init]; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - return [[NSXMLParser alloc] initWithData:data]; -} - -@end - -#pragma mark - - -#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED - -@implementation AFXMLDocumentResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithXMLDocumentOptions:0]; -} - -+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { - AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; - serializer.options = mask; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - NSError *serializationError = nil; - NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error); - } - - return document; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.options = self.options; - - return serializer; -} - -@end - -#endif - -#pragma mark - - -@implementation AFPropertyListResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; -} - -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - readOptions:(NSPropertyListReadOptions)readOptions -{ - AFPropertyListResponseSerializer *serializer = [[self alloc] init]; - serializer.format = format; - serializer.readOptions = readOptions; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - id responseObject; - NSError *serializationError = nil; - - if (data) { - responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; - } - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error); - } - - return responseObject; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; - self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; - [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.format = self.format; - serializer.readOptions = self.readOptions; - - return serializer; -} - -@end - -#pragma mark - - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import <CoreGraphics/CoreGraphics.h> - -static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { - UIImage *image = [[UIImage alloc] initWithData:data]; - - return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; -} - -static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { - if (!data || [data length] == 0) { - return nil; - } - - CGImageRef imageRef = NULL; - CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); - - if ([response.MIMEType isEqualToString:@"image/png"]) { - imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); - } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { - imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); - - // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so if so, fall back to AFImageWithDataAtScale - if (imageRef) { - CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); - CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); - if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { - CGImageRelease(imageRef); - imageRef = NULL; - } - } - } - - CGDataProviderRelease(dataProvider); - - UIImage *image = AFImageWithDataAtScale(data, scale); - if (!imageRef) { - if (image.images || !image) { - return image; - } - - imageRef = CGImageCreateCopy([image CGImage]); - if (!imageRef) { - return nil; - } - } - - size_t width = CGImageGetWidth(imageRef); - size_t height = CGImageGetHeight(imageRef); - size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - - if (width * height > 1024 * 1024 || bitsPerComponent > 8) { - CGImageRelease(imageRef); - - return image; - } - - size_t bytesPerRow = 0; // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - if (colorSpaceModel == kCGColorSpaceModelRGB) { - uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); - if (alpha == kCGImageAlphaNone) { - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaNoneSkipFirst; - } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaPremultipliedFirst; - } - } - - CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); - - CGColorSpaceRelease(colorSpace); - - if (!context) { - CGImageRelease(imageRef); - - return image; - } - - CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); - CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); - - CGContextRelease(context); - - UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; - - CGImageRelease(inflatedImageRef); - CGImageRelease(imageRef); - - return inflatedImage; -} -#endif - - -@implementation AFImageResponseSerializer - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - self.imageScale = [[UIScreen mainScreen] scale]; - self.automaticallyInflatesResponseImage = YES; -#endif - - return self; -} - -#pragma mark - AFURLResponseSerializer - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - if (self.automaticallyInflatesResponseImage) { - return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); - } else { - return AFImageWithDataAtScale(data, self.imageScale); - } -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) - // Ensure that the image is set to it's correct pixel width and height - NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; - NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; - [image addRepresentation:bitimage]; - - return image; -#endif - - return nil; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; -#if CGFLOAT_IS_DOUBLE - self.imageScale = [imageScale doubleValue]; -#else - self.imageScale = [imageScale floatValue]; -#endif - - self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; -#endif - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; - [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; -#endif -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - serializer.imageScale = self.imageScale; - serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; -#endif - - return serializer; -} - -@end - -#pragma mark - - -@interface AFCompoundResponseSerializer () -@property (readwrite, nonatomic, copy) NSArray *responseSerializers; -@end - -@implementation AFCompoundResponseSerializer - -+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { - AFCompoundResponseSerializer *serializer = [[self alloc] init]; - serializer.responseSerializers = responseSerializers; - - return serializer; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - for (id <AFURLResponseSerialization> serializer in self.responseSerializers) { - if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { - continue; - } - - NSError *serializerError = nil; - id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; - if (responseObject) { - if (error) { - *error = AFErrorWithUnderlyingError(serializerError, *error); - } - - return responseObject; - } - } - - return [super responseObjectForResponse:response data:data error:error]; -} - -#pragma mark - NSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.responseSerializers = self.responseSerializers; - - return serializer; -} - -@end diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h deleted file mode 100644 index 6432027..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h +++ /dev/null @@ -1,529 +0,0 @@ -// AFURLSessionManager.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" -#import "AFSecurityPolicy.h" -#import "AFNetworkReachabilityManager.h" - -/** - `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to `<NSURLSessionTaskDelegate>`, `<NSURLSessionDataDelegate>`, `<NSURLSessionDownloadDelegate>`, and `<NSURLSessionDelegate>`. - - ## Subclassing Notes - - This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. - - ## NSURLSession & NSURLSessionTask Delegate Methods - - `AFURLSessionManager` implements the following delegate methods: - - ### `NSURLSessionDelegate` - - - `URLSession:didBecomeInvalidWithError:` - - `URLSession:didReceiveChallenge:completionHandler:` - - ### `NSURLSessionTaskDelegate` - - - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` - - `URLSession:task:didReceiveChallenge:completionHandler:` - - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` - - `URLSession:task:didCompleteWithError:` - - ### `NSURLSessionDataDelegate` - - - `URLSession:dataTask:didReceiveResponse:completionHandler:` - - `URLSession:dataTask:didBecomeDownloadTask:` - - `URLSession:dataTask:didReceiveData:` - - `URLSession:dataTask:willCacheResponse:completionHandler:` - - `URLSessionDidFinishEventsForBackgroundURLSession:` - - ### `NSURLSessionDownloadDelegate` - - - `URLSession:downloadTask:didFinishDownloadingToURL:` - - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` - - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` - - If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. - - ## Network Reachability Monitoring - - Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. - - ## NSCoding Caveats - - - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. - - ## NSCopying Caveats - - - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. - - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. - */ - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) - -@interface AFURLSessionManager : NSObject <NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NSSecureCoding, NSCopying> - -/** - The managed session. - */ -@property (readonly, nonatomic, strong) NSURLSession *session; - -/** - The operation queue on which delegate callbacks are run. - */ -@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) id <AFURLResponseSerialization> responseSerializer; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -///-------------------------------------- -/// @name Monitoring Network Reachability -///-------------------------------------- - -/** - The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. - */ -@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; - -///---------------------------- -/// @name Getting Session Tasks -///---------------------------- - -/** - The data, upload, and download tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *tasks; - -/** - The data tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *dataTasks; - -/** - The upload tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *uploadTasks; - -/** - The download tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *downloadTasks; - -///------------------------------- -/// @name Managing Callback Queues -///------------------------------- - -/** - The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. - */ -@property (nonatomic, strong) dispatch_queue_t completionQueue; - -/** - The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. - */ -@property (nonatomic, strong) dispatch_group_t completionGroup; - -///--------------------------------- -/// @name Working Around System Bugs -///--------------------------------- - -/** - Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. - - @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. - - @see https://github.com/AFNetworking/AFNetworking/issues/1675 - */ -@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. - - @param configuration The configuration used to create the managed session. - - @return A manager for a newly-created session. - */ -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration; - -/** - Invalidates the managed session, optionally canceling pending tasks. - - @param cancelPendingTasks Whether or not to cancel pending tasks. - */ -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; - -///------------------------- -/// @name Running Data Tasks -///------------------------- - -/** - Creates an `NSURLSessionDataTask` with the specified request. - - @param request The HTTP request for the request. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; - -///--------------------------- -/// @name Running Upload Tasks -///--------------------------- - -/** - Creates an `NSURLSessionUploadTask` with the specified request for a local file. - - @param request The HTTP request for the request. - @param fileURL A URL to the local file to be uploaded. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - - @see `attemptsToRecreateUploadTasksForBackgroundSessions` - */ -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; - -/** - Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. - - @param request The HTTP request for the request. - @param bodyData A data object containing the HTTP body to be uploaded. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromData:(NSData *)bodyData - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; - -/** - Creates an `NSURLSessionUploadTask` with the specified streaming request. - - @param request The HTTP request for the request. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; - -///----------------------------- -/// @name Running Download Tasks -///----------------------------- - -/** - Creates an `NSURLSessionDownloadTask` with the specified request. - - @param request The HTTP request for the request. - @param progress A progress object monitoring the current download progress. - @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. - @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. - - @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. - */ -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; - -/** - Creates an `NSURLSessionDownloadTask` with the specified resume data. - - @param resumeData The data used to resume downloading. - @param progress A progress object monitoring the current download progress. - @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. - @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. - */ -- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; - -///--------------------------------- -/// @name Getting Progress for Tasks -///--------------------------------- - -/** - Returns the upload progress of the specified task. - - @param uploadTask The session upload task. Must not be `nil`. - - @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. - */ -- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask; - -/** - Returns the download progress of the specified task. - - @param downloadTask The session download task. Must not be `nil`. - - @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. - */ -- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask; - -///----------------------------------------- -/// @name Setting Session Delegate Callbacks -///----------------------------------------- - -/** - Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. - - @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. - */ -- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block; - -/** - Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. - - @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. - */ -- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block; - -///-------------------------------------- -/// @name Setting Task Delegate Callbacks -///-------------------------------------- - -/** - Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. - - @param block A block object to be executed when a task requires a new request body stream. - */ -- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; - -/** - Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. - - @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. - */ -- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; - -/** - Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. - - @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. - */ -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block; - -/** - Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. - - @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; - -/** - Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. - - @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. - */ -- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block; - -///------------------------------------------- -/// @name Setting Data Task Delegate Callbacks -///------------------------------------------- - -/** - Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. - - @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. - */ -- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; - -/** - Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. - - @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. - */ -- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; - -/** - Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. - */ -- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; - -/** - Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. - - @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. - */ -- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; - -/** - Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. - - @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. - */ -- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block; - -///----------------------------------------------- -/// @name Setting Download Task Delegate Callbacks -///----------------------------------------------- - -/** - Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. - - @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. - */ -- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; - -/** - Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. - */ -- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; - -/** - Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. - - @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. - */ -- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; - -@end - -#endif - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when a task begins executing. - - @deprecated Use `AFNetworkingTaskDidResumeNotification` instead. - */ -extern NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE; - -/** - Posted when a task resumes. - */ -extern NSString * const AFNetworkingTaskDidResumeNotification; - -/** - Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. - - @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE; - -/** - Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. - */ -extern NSString * const AFNetworkingTaskDidCompleteNotification; - -/** - Posted when a task suspends its execution. - */ -extern NSString * const AFNetworkingTaskDidSuspendNotification; - -/** - Posted when a session is invalidated. - */ -extern NSString * const AFURLSessionDidInvalidateNotification; - -/** - Posted when a session download task encountered an error when moving the temporary download file to a specified destination. - */ -extern NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; - -/** - The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. - - @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE; - -/** - The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. - */ -extern NSString * const AFNetworkingTaskDidCompleteResponseDataKey; - -/** - The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. - - @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE; - -/** - The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. - */ -extern NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; - -/** - The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. - - @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE; - -/** - The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. - */ -extern NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; - -/** - The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. - - @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE; - -/** - The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. - */ -extern NSString * const AFNetworkingTaskDidCompleteAssetPathKey; - -/** - Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. - - @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead. - */ -extern NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE; - -/** - Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. - */ -extern NSString * const AFNetworkingTaskDidCompleteErrorKey; diff --git a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m deleted file mode 100644 index 194cdfa..0000000 --- a/TeamTalk/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m +++ /dev/null @@ -1,1005 +0,0 @@ -// AFURLSessionManager.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLSessionManager.h" - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) - -static dispatch_queue_t url_session_manager_processing_queue() { - static dispatch_queue_t af_url_session_manager_processing_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); - }); - - return af_url_session_manager_processing_queue; -} - -static dispatch_group_t url_session_manager_completion_group() { - static dispatch_group_t af_url_session_manager_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_completion_group = dispatch_group_create(); - }); - - return af_url_session_manager_completion_group; -} - -NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; -NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; -NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; -NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; -NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; - -NSString * const AFNetworkingTaskDidStartNotification = @"com.alamofire.networking.task.resume"; // Deprecated -NSString * const AFNetworkingTaskDidFinishNotification = @"com.alamofire.networking.task.complete"; // Deprecated - -NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; -NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; -NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; -NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; -NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; - -NSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; // Deprecated -NSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; // Deprecated -NSString * const AFNetworkingTaskDidFinishResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; // Deprecated -NSString * const AFNetworkingTaskDidFinishErrorKey = @"com.alamofire.networking.task.complete.error"; // Deprecated -NSString * const AFNetworkingTaskDidFinishAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; // Deprecated - -static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; - -static NSUInteger const AFMaximumNumberOfToRecreateBackgroundSessionUploadTask = 3; - -static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; - -typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); -typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); - -typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); -typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); - -typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); -typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); -typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); - -typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); -typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); -typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); -typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); -typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); - -typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); -typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); -typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); - -typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); - -#pragma mark - - -@interface AFURLSessionManagerTaskDelegate : NSObject <NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate> -@property (nonatomic, weak) AFURLSessionManager *manager; -@property (nonatomic, strong) NSMutableData *mutableData; -@property (nonatomic, strong) NSProgress *progress; -@property (nonatomic, copy) NSURL *downloadFileURL; -@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; -@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; -@end - -@implementation AFURLSessionManagerTaskDelegate - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.mutableData = [NSMutableData data]; - - self.progress = [NSProgress progressWithTotalUnitCount:0]; - - return self; -} - -#pragma mark - NSURLSessionTaskDelegate - -- (void)URLSession:(__unused NSURLSession *)session - task:(__unused NSURLSessionTask *)task - didSendBodyData:(__unused int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend -{ - self.progress.totalUnitCount = totalBytesExpectedToSend; - self.progress.completedUnitCount = totalBytesSent; -} - -- (void)URLSession:(__unused NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(NSError *)error -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - __strong AFURLSessionManager *manager = self.manager; - - __block id responseObject = nil; - - __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; - - if (self.downloadFileURL) { - userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; - } else if (self.mutableData) { - userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = [NSData dataWithData:self.mutableData]; - } - - if (error) { - userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; - - dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ - if (self.completionHandler) { - self.completionHandler(task.response, responseObject, error); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; - }); - }); - } else { - dispatch_async(url_session_manager_processing_queue(), ^{ - NSError *serializationError = nil; - responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:[NSData dataWithData:self.mutableData] error:&serializationError]; - - if (self.downloadFileURL) { - responseObject = self.downloadFileURL; - } - - if (responseObject) { - userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; - } - - if (serializationError) { - userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; - } - - dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ - if (self.completionHandler) { - self.completionHandler(task.response, responseObject, serializationError); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; - }); - }); - }); - } -#pragma clang diagnostic pop -} - -#pragma mark - NSURLSessionDataTaskDelegate - -- (void)URLSession:(__unused NSURLSession *)session - dataTask:(__unused NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data -{ - [self.mutableData appendData:data]; -} - -#pragma mark - NSURLSessionDownloadTaskDelegate - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask -didFinishDownloadingToURL:(NSURL *)location -{ - NSError *fileManagerError = nil; - self.downloadFileURL = nil; - - if (self.downloadTaskDidFinishDownloading) { - self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); - if (self.downloadFileURL) { - [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; - - if (fileManagerError) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; - } - } - } -} - -- (void)URLSession:(__unused NSURLSession *)session - downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask - didWriteData:(__unused int64_t)bytesWritten - totalBytesWritten:(int64_t)totalBytesWritten -totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite -{ - self.progress.totalUnitCount = totalBytesExpectedToWrite; - self.progress.completedUnitCount = totalBytesWritten; -} - -- (void)URLSession:(__unused NSURLSession *)session - downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask - didResumeAtOffset:(int64_t)fileOffset -expectedTotalBytes:(int64_t)expectedTotalBytes { - self.progress.totalUnitCount = expectedTotalBytes; - self.progress.completedUnitCount = fileOffset; -} - -@end - -#pragma mark - - -@interface AFURLSessionManager () -@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; -@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; -@property (readwrite, nonatomic, strong) NSURLSession *session; -@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; -@property (readwrite, nonatomic, strong) NSLock *lock; -@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; -@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; -@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; -@end - -@implementation AFURLSessionManager - -- (instancetype)init { - return [self initWithSessionConfiguration:nil]; -} - -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { - self = [super init]; - if (!self) { - return nil; - } - - if (!configuration) { - configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; - } - - self.operationQueue = [[NSOperationQueue alloc] init]; - self.operationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - self.sessionConfiguration = configuration; - self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; - - self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - - self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; - - self.lock = [[NSLock alloc] init]; - self.lock.name = AFURLSessionManagerLockName; - - [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - for (NSURLSessionDataTask *task in dataTasks) { - [self addDelegateForDataTask:task completionHandler:nil]; - } - - for (NSURLSessionUploadTask *uploadTask in uploadTasks) { - [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; - } - - for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { - [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; - } - }]; - - return self; -} - -#pragma mark - - -- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { - NSParameterAssert(task); - - AFURLSessionManagerTaskDelegate *delegate = nil; - [self.lock lock]; - delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; - [self.lock unlock]; - - return delegate; -} - -- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate - forTask:(NSURLSessionTask *)task -{ - NSParameterAssert(task); - NSParameterAssert(delegate); - - [self.lock lock]; - [task addObserver:self forKeyPath:NSStringFromSelector(@selector(state)) options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:AFTaskStateChangedContext]; - self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; - [self.lock unlock]; -} - -- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - [self setDelegate:delegate forTask:dataTask]; -} - -- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend; - if(totalUnitCount == NSURLSessionTransferSizeUnknown) { - NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@"Content-Length"]; - if(contentLength) { - totalUnitCount = (int64_t) [contentLength longLongValue]; - } - } - - delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount]; - delegate.progress.pausingHandler = ^{ - [uploadTask suspend]; - }; - delegate.progress.cancellationHandler = ^{ - [uploadTask cancel]; - }; - - if (progress) { - *progress = delegate.progress; - } - - [self setDelegate:delegate forTask:uploadTask]; -} - -- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { - if (destination) { - return destination(location, task.response); - } - - return location; - }; - - if (progress) { - *progress = delegate.progress; - } - - [self setDelegate:delegate forTask:downloadTask]; -} - -- (void)removeDelegateForTask:(NSURLSessionTask *)task { - NSParameterAssert(task); - - [self.lock lock]; - [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(state)) context:AFTaskStateChangedContext]; - [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; - [self.lock unlock]; -} - -- (void)removeAllDelegates { - [self.lock lock]; - [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects]; - [self.lock unlock]; -} - -#pragma mark - - -- (NSArray *)tasksForKeyPath:(NSString *)keyPath { - __block NSArray *tasks = nil; - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { - tasks = dataTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { - tasks = uploadTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { - tasks = downloadTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { - tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; - } - - dispatch_semaphore_signal(semaphore); - }]; - - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - - return tasks; -} - -- (NSArray *)tasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)dataTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)uploadTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)downloadTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -#pragma mark - - -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { - if (cancelPendingTasks) { - [self.session invalidateAndCancel]; - } else { - [self.session finishTasksAndInvalidate]; - } -} - -#pragma mark - - -- (void)setResponseSerializer:(id <AFURLResponseSerialization>)responseSerializer { - NSParameterAssert(responseSerializer); - - _responseSerializer = responseSerializer; -} - -#pragma mark - - -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request]; - - [self addDelegateForDataTask:dataTask completionHandler:completionHandler]; - - return dataTask; -} - -#pragma mark - - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { - for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfToRecreateBackgroundSessionUploadTask; attempts++) { - uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - } - } - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromData:(NSData *)bodyData - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithStreamedRequest:request]; - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -#pragma mark - - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request]; - - [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; - - return downloadTask; -} - -- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithResumeData:resumeData]; - - [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; - - return downloadTask; -} - -#pragma mark - - -- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask { - return [[self delegateForTask:uploadTask] progress]; -} - -- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask { - return [[self delegateForTask:downloadTask] progress]; -} - -#pragma mark - - -- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { - self.sessionDidBecomeInvalid = block; -} - -- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { - self.sessionDidReceiveAuthenticationChallenge = block; -} - -#pragma mark - - -- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { - self.taskNeedNewBodyStream = block; -} - -- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { - self.taskWillPerformHTTPRedirection = block; -} - -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { - self.taskDidReceiveAuthenticationChallenge = block; -} - -- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { - self.taskDidSendBodyData = block; -} - -- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { - self.taskDidComplete = block; -} - -#pragma mark - - -- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { - self.dataTaskDidReceiveResponse = block; -} - -- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { - self.dataTaskDidBecomeDownloadTask = block; -} - -- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { - self.dataTaskDidReceiveData = block; -} - -- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { - self.dataTaskWillCacheResponse = block; -} - -- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { - self.didFinishEventsForBackgroundURLSession = block; -} - -#pragma mark - - -- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { - self.downloadTaskDidFinishDownloading = block; -} - -- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { - self.downloadTaskDidWriteData = block; -} - -- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { - self.downloadTaskDidResume = block; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; -} - -- (BOOL)respondsToSelector:(SEL)selector { - if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { - return self.taskWillPerformHTTPRedirection != nil; - } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { - return self.dataTaskDidReceiveResponse != nil; - } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { - return self.dataTaskWillCacheResponse != nil; - } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { - return self.didFinishEventsForBackgroundURLSession != nil; - } - - return [[self class] instancesRespondToSelector:selector]; -} - -#pragma mark - NSKeyValueObserving - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context -{ - if (context == AFTaskStateChangedContext && [keyPath isEqualToString:@"state"]) { - if (change[NSKeyValueChangeOldKey] && change[NSKeyValueChangeNewKey] && [change[NSKeyValueChangeNewKey] isEqual:change[NSKeyValueChangeOldKey]]) { - return; - } - - NSString *notificationName = nil; - switch ([(NSURLSessionTask *)object state]) { - case NSURLSessionTaskStateRunning: - notificationName = AFNetworkingTaskDidResumeNotification; - break; - case NSURLSessionTaskStateSuspended: - notificationName = AFNetworkingTaskDidSuspendNotification; - break; - case NSURLSessionTaskStateCompleted: - // AFNetworkingTaskDidFinishNotification posted by task completion handlers - default: - break; - } - - if (notificationName) { - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:object]; - }); - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark - NSURLSessionDelegate - -- (void)URLSession:(NSURLSession *)session -didBecomeInvalidWithError:(NSError *)error -{ - if (self.sessionDidBecomeInvalid) { - self.sessionDidBecomeInvalid(session, error); - } - - [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - NSArray *tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; - for (NSURLSessionTask *task in tasks) { - [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(state)) context:AFTaskStateChangedContext]; - } - - [self removeAllDelegates]; - }]; - - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; -} - -- (void)URLSession:(NSURLSession *)session -didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler -{ - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; - - if (self.sessionDidReceiveAuthenticationChallenge) { - disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); - } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - if (credential) { - disposition = NSURLSessionAuthChallengeUseCredential; - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } - - if (completionHandler) { - completionHandler(disposition, credential); - } -} - -#pragma mark - NSURLSessionTaskDelegate - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest *))completionHandler -{ - NSURLRequest *redirectRequest = request; - - if (self.taskWillPerformHTTPRedirection) { - redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); - } - - if (completionHandler) { - completionHandler(redirectRequest); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler -{ - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; - - if (self.taskDidReceiveAuthenticationChallenge) { - disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); - } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - disposition = NSURLSessionAuthChallengeUseCredential; - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } - - if (completionHandler) { - completionHandler(disposition, credential); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler -{ - NSInputStream *inputStream = nil; - - if (self.taskNeedNewBodyStream) { - inputStream = self.taskNeedNewBodyStream(session, task); - } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { - inputStream = [task.originalRequest.HTTPBodyStream copy]; - } - - if (completionHandler) { - completionHandler(inputStream); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend -{ - - int64_t totalUnitCount = totalBytesExpectedToSend; - if(totalUnitCount == NSURLSessionTransferSizeUnknown) { - NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; - if(contentLength) { - totalUnitCount = (int64_t) [contentLength longLongValue]; - } - } - - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; - [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount]; - - if (self.taskDidSendBodyData) { - self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(NSError *)error -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; - - // delegate may be nil when completing a task in the background - if (delegate) { - [delegate URLSession:session task:task didCompleteWithError:error]; - - [self removeDelegateForTask:task]; - } - - if (self.taskDidComplete) { - self.taskDidComplete(session, task, error); - } - -} - -#pragma mark - NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler -{ - NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; - - if (self.dataTaskDidReceiveResponse) { - disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); - } - - if (completionHandler) { - completionHandler(disposition); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; - if (delegate) { - [self removeDelegateForTask:dataTask]; - [self setDelegate:delegate forTask:downloadTask]; - } - - if (self.dataTaskDidBecomeDownloadTask) { - self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; - [delegate URLSession:session dataTask:dataTask didReceiveData:data]; - - if (self.dataTaskDidReceiveData) { - self.dataTaskDidReceiveData(session, dataTask, data); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - willCacheResponse:(NSCachedURLResponse *)proposedResponse - completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler -{ - NSCachedURLResponse *cachedResponse = proposedResponse; - - if (self.dataTaskWillCacheResponse) { - cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); - } - - if (completionHandler) { - completionHandler(cachedResponse); - } -} - -- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { - if (self.didFinishEventsForBackgroundURLSession) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.didFinishEventsForBackgroundURLSession(session); - }); - } -} - -#pragma mark - NSURLSessionDownloadDelegate - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask -didFinishDownloadingToURL:(NSURL *)location -{ - if (self.downloadTaskDidFinishDownloading) { - NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); - if (fileURL) { - NSError *error = nil; - [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; - if (error) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; - } - return; - } - } - - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - if (delegate) { - [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; - } -} - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask - didWriteData:(int64_t)bytesWritten - totalBytesWritten:(int64_t)totalBytesWritten -totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; - - if (self.downloadTaskDidWriteData) { - self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } -} - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask - didResumeAtOffset:(int64_t)fileOffset -expectedTotalBytes:(int64_t)expectedTotalBytes -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes]; - - if (self.downloadTaskDidResume) { - self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); - } -} - -#pragma mark - NSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; - - self = [self initWithSessionConfiguration:configuration]; - if (!self) { - return nil; - } - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/LICENSE b/TeamTalk/Pods/AFNetworking/LICENSE deleted file mode 100644 index 0616192..0000000 --- a/TeamTalk/Pods/AFNetworking/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/TeamTalk/Pods/AFNetworking/README.md b/TeamTalk/Pods/AFNetworking/README.md deleted file mode 100644 index aac6b2b..0000000 --- a/TeamTalk/Pods/AFNetworking/README.md +++ /dev/null @@ -1,381 +0,0 @@ -<p align="center" > - <img src="https://raw.github.com/AFNetworking/AFNetworking/assets/afnetworking-logo.png" alt="AFNetworking" title="AFNetworking"> -</p> - -[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) - -AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. - -Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. - -Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! - -## How To Get Started - -- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps -- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) -- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/2.0.0/) for a comprehensive look at all of the APIs available in AFNetworking -- Read the [AFNetworking 2.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide) for an overview of the architectural changes from 1.0. - -## Communication - -- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') -- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). -- If you **found a bug**, open an issue. -- If you **have a feature request**, open an issue. -- If you **want to contribute**, submit a pull request. - -### Installation with CocoaPods - -[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). - -#### Podfile - -```ruby -platform :ios, '7.0' -pod "AFNetworking", "~> 2.0" -``` - -## Requirements - -| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Notes | -|:--------------------:|:---------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| -| 2.x | iOS 6 | OS X 10.8 | Xcode 5 is required. `AFHTTPSessionManager` requires iOS 7 or OS X 10.9. | -| [1.x](https://github.com/AFNetworking/AFNetworking/tree/1.x) | iOS 5 | Mac OS X 10.7 | | -| [0.10.x](https://github.com/AFNetworking/AFNetworking/tree/0.10.x) | iOS 4 | Mac OS X 10.6 | | - -(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). - -## Architecture - -### NSURLConnection - -- `AFURLConnectionOperation` -- `AFHTTPRequestOperation` -- `AFHTTPRequestOperationManager` - -### NSURLSession _(iOS 7 / Mac OS X 10.9)_ - -- `AFURLSessionManager` -- `AFHTTPSessionManager` - -### Serialization - -* `<AFURLRequestSerialization>` - - `AFHTTPRequestSerializer` - - `AFJSONRequestSerializer` - - `AFPropertyListRequestSerializer` -* `<AFURLResponseSerialization>` - - `AFHTTPResponseSerializer` - - `AFJSONResponseSerializer` - - `AFXMLParserResponseSerializer` - - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ - - `AFPropertyListResponseSerializer` - - `AFImageResponseSerializer` - - `AFCompoundResponseSerializer` - -### Additional Functionality - -- `AFSecurityPolicy` -- `AFNetworkReachabilityManager` - -## Usage - -### HTTP Request Operation Manager - -`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. - -#### `GET` Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - -#### `POST` URL-Form-Encoded Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -NSDictionary *parameters = @{@"foo": @"bar"}; -[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - -#### `POST` Multi-Part Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -NSDictionary *parameters = @{@"foo": @"bar"}; -NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; -[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { - [formData appendPartWithFileURL:filePath name:@"image" error:nil]; -} success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"Success: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - ---- - -### AFURLSessionManager - -`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to `<NSURLSessionTaskDelegate>`, `<NSURLSessionDataDelegate>`, `<NSURLSessionDownloadDelegate>`, and `<NSURLSessionDelegate>`. - -#### Creating a Download Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { - NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; - return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; -} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { - NSLog(@"File downloaded to: %@", filePath); -}]; -[downloadTask resume]; -``` - -#### Creating an Upload Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; -NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"Success: %@ %@", response, responseObject); - } -}]; -[uploadTask resume]; -``` - -#### Creating an Upload Task for a Multi-Part Request, with Progress - -```objective-c -NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { - [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; - } error:nil]; - -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; -NSProgress *progress = nil; - -NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"%@ %@", response, responseObject); - } -}]; - -[uploadTask resume]; -``` - -#### Creating a Data Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"%@ %@", response, responseObject); - } -}]; -[dataTask resume]; -``` - ---- - -### Request Serialization - -Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. - -```objective-c -NSString *URLString = @"http://example.com/"; -NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; -``` - -#### Query String Parameter Encoding - -```objective-c -[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; -``` - - GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 - -#### URL Form Parameter Encoding - -```objective-c -[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; -``` - - POST http://example.com/ - Content-Type: application/x-www-form-urlencoded - - foo=bar&baz[]=1&baz[]=2&baz[]=3 - -#### JSON Parameter Encoding - -```objective-c -[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; -``` - - POST http://example.com/ - Content-Type: application/json - - {"foo": "bar", "baz": [1,2,3]} - ---- - -### Network Reachability Manager - -`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. - -#### Shared Network Reachability - -```objective-c -[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { - NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); -}]; -``` - -#### HTTP Manager Reachability - -```objective-c -NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; -AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; - -NSOperationQueue *operationQueue = manager.operationQueue; -[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { - switch (status) { - case AFNetworkReachabilityStatusReachableViaWWAN: - case AFNetworkReachabilityStatusReachableViaWiFi: - [operationQueue setSuspended:NO]; - break; - case AFNetworkReachabilityStatusNotReachable: - default: - [operationQueue setSuspended:YES]; - break; - } -}]; -``` - ---- - -### Security Policy - -`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. - -Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. - -#### Allowing Invalid SSL Certificates - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production -``` - ---- - -### AFHTTPRequestOperation - -`AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. - -Although `AFHTTPRequestOperationManager` is usually the best way to go about making requests, `AFHTTPRequestOperation` can be used by itself. - -#### `GET` with `AFHTTPRequestOperation` - -```objective-c -NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; -AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; -op.responseSerializer = [AFJSONResponseSerializer serializer]; -[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -[[NSOperationQueue mainQueue] addOperation:op]; -``` - -#### Batch of Operations - -```objective-c -NSMutableArray *mutableOperations = [NSMutableArray array]; -for (NSURL *fileURL in filesToUpload) { - NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { - [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; - }]; - - AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - - [mutableOperations addObject:operation]; -} - -NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { - NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations); -} completionBlock:^(NSArray *operations) { - NSLog(@"All operations in batch complete"); -}]; -[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; -``` - -## Unit Tests - -AFNetworking includes a suite of unit tests within the Tests subdirectory. In order to run the unit tests, you must install the testing dependencies via [CocoaPods](http://cocoapods.org/): - - $ cd Tests - $ pod install - -Once testing dependencies are installed, you can execute the test suite via the 'iOS Tests' and 'OS X Tests' schemes within Xcode. - -### Running Tests from the Command Line - -Tests can also be run from the command line or within a continuous integration environment. The [`xcpretty`](https://github.com/mneorr/xcpretty) utility needs to be installed before running the tests from the command line: - - $ gem install xcpretty - -Once `xcpretty` is installed, you can execute the suite via `rake test`. - -## Credits - -AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). - -AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). - -And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). - -## Contact - -Follow AFNetworking on Twitter ([@AFNetworking](https://twitter.com/AFNetworking)) - -### Maintainers - -- [Mattt Thompson](http://github.com/mattt) ([@mattt](https://twitter.com/mattt)) - -## License - -AFNetworking is available under the MIT license. See the LICENSE file for more info. diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h deleted file mode 100644 index 312d680..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1,76 +0,0 @@ -// AFNetworkActivityIndicatorManager.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -/** - `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a network request operation has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. - - You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: - - [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; - - By setting `isNetworkActivityIndicatorVisible` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. - - See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: - http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 - */ -@interface AFNetworkActivityIndicatorManager : NSObject - -/** - A Boolean value indicating whether the manager is enabled. - - If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. - */ -@property (nonatomic, assign, getter = isEnabled) BOOL enabled; - -/** - A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. - */ -@property (readonly, nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; - -/** - Returns the shared network activity indicator manager object for the system. - - @return The systemwide network activity indicator manager. - */ -+ (instancetype)sharedManager; - -/** - Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. - */ -- (void)incrementActivityCount; - -/** - Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. - */ -- (void)decrementActivityCount; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m deleted file mode 100644 index c2d855a..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m +++ /dev/null @@ -1,171 +0,0 @@ -// AFNetworkActivityIndicatorManager.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFNetworkActivityIndicatorManager.h" - -#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.17; - -static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { - if ([[notification object] isKindOfClass:[AFURLConnectionOperation class]]) { - return [(AFURLConnectionOperation *)[notification object] request]; - } - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 - if ([[notification object] respondsToSelector:@selector(originalRequest)]) { - return [(NSURLSessionTask *)[notification object] originalRequest]; - } -#endif - - return nil; -} - -@interface AFNetworkActivityIndicatorManager () -@property (readwrite, nonatomic, assign) NSInteger activityCount; -@property (readwrite, nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; -@property (readonly, nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; - -- (void)updateNetworkActivityIndicatorVisibility; -- (void)updateNetworkActivityIndicatorVisibilityDelayed; -@end - -@implementation AFNetworkActivityIndicatorManager -@dynamic networkActivityIndicatorVisible; - -+ (instancetype)sharedManager { - static AFNetworkActivityIndicatorManager *_sharedManager = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _sharedManager = [[self alloc] init]; - }); - - return _sharedManager; -} - -+ (NSSet *)keyPathsForValuesAffectingIsNetworkActivityIndicatorVisible { - return [NSSet setWithObject:@"activityCount"]; -} - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil]; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; -#endif - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [_activityIndicatorVisibilityTimer invalidate]; -} - -- (void)updateNetworkActivityIndicatorVisibilityDelayed { - if (self.enabled) { - // Delay hiding of activity indicator for a short interval, to avoid flickering - if (![self isNetworkActivityIndicatorVisible]) { - [self.activityIndicatorVisibilityTimer invalidate]; - self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; - [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; - } else { - [self performSelectorOnMainThread:@selector(updateNetworkActivityIndicatorVisibility) withObject:nil waitUntilDone:NO modes:@[NSRunLoopCommonModes]]; - } - } -} - -- (BOOL)isNetworkActivityIndicatorVisible { - return self.activityCount > 0; -} - -- (void)updateNetworkActivityIndicatorVisibility { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; -} - -- (void)setActivityCount:(NSInteger)activityCount { - @synchronized(self) { - _activityCount = activityCount; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)incrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { - _activityCount++; - } - [self didChangeValueForKey:@"activityCount"]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)decrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - _activityCount = MAX(_activityCount - 1, 0); -#pragma clang diagnostic pop - } - [self didChangeValueForKey:@"activityCount"]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)networkRequestDidStart:(NSNotification *)notification { - if ([AFNetworkRequestFromNotification(notification) URL]) { - [self incrementActivityCount]; - } -} - -- (void)networkRequestDidFinish:(NSNotification *)notification { - if ([AFNetworkRequestFromNotification(notification) URL]) { - [self decrementActivityCount]; - } -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h deleted file mode 100644 index 1c1f8dd..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h +++ /dev/null @@ -1,64 +0,0 @@ -// UIActivityIndicatorView+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task. - */ -@interface UIActivityIndicatorView (AFNetworking) - -///---------------------------------- -/// @name Animating for Session Tasks -///---------------------------------- - -/** - Binds the animating state to the state of the specified task. - - @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; -#endif - -///--------------------------------------- -/// @name Animating for Request Operations -///--------------------------------------- - -/** - Binds the animating state to the execution state of the specified operation. - - @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m deleted file mode 100644 index 6627dbb..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m +++ /dev/null @@ -1,97 +0,0 @@ -// UIActivityIndicatorView+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIActivityIndicatorView+AFNetworking.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -@implementation UIActivityIndicatorView (AFNetworking) - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - - if (task) { - if (task.state != NSURLSessionTaskStateCompleted) { - if (task.state == NSURLSessionTaskStateRunning) { - [self startAnimating]; - } else { - [self stopAnimating]; - } - - [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; - } - } -} -#endif - -#pragma mark - - -- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; - - if (operation) { - if (![operation isFinished]) { - if ([operation isExecuting]) { - [self startAnimating]; - } else { - [self stopAnimating]; - } - - [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingOperationDidStartNotification object:operation]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingOperationDidFinishNotification object:operation]; - } - } -} - -#pragma mark - - -- (void)af_startAnimating { - dispatch_async(dispatch_get_main_queue(), ^{ - [self startAnimating]; - }); -} - -- (void)af_stopAnimating { - dispatch_async(dispatch_get_main_queue(), ^{ - [self stopAnimating]; - }); -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h deleted file mode 100644 index b94f1cb..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h +++ /dev/null @@ -1,96 +0,0 @@ -// UIAlertView+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIAlertView` class. The methods in this category provide support for automatically showing an alert if a session task or request operation finishes with an error. Alert title and message are filled from the corresponding `localizedDescription` & `localizedRecoverySuggestion` or `localizedFailureReason` of the error. - */ -@interface UIAlertView (AFNetworking) - -///------------------------------------- -/// @name Showing Alert for Session Task -///------------------------------------- - -/** - Shows an alert view with the error of the specified session task, if any. - - @param task The session task. - @param delegate The alert view delegate. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate; -#endif - -/** - Shows an alert view with the error of the specified session task, if any, with a custom cancel button title and other button titles. - - @param task The session task. - @param delegate The alert view delegate. - @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. - @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; -#endif - -///------------------------------------------ -/// @name Showing Alert for Request Operation -///------------------------------------------ - -/** - Shows an alert view with the error of the specified request operation, if any. - - @param operation The request operation. - @param delegate The alert view delegate. - */ -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate; - -/** - Shows an alert view with the error of the specified request operation, if any, with a custom cancel button title and other button titles. - - @param operation The request operation. - @param delegate The alert view delegate. - @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. - @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. - */ -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m deleted file mode 100644 index b7e2a26..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m +++ /dev/null @@ -1,111 +0,0 @@ -// UIAlertView+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIAlertView+AFNetworking.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFURLConnectionOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static void AFGetAlertViewTitleAndMessageFromError(NSError *error, NSString * __autoreleasing *title, NSString * __autoreleasing *message) { - if (error.localizedDescription && (error.localizedRecoverySuggestion || error.localizedFailureReason)) { - *title = error.localizedDescription; - - if (error.localizedRecoverySuggestion) { - *message = error.localizedRecoverySuggestion; - } else { - *message = error.localizedFailureReason; - } - } else if (error.localizedDescription) { - *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); - *message = error.localizedDescription; - } else { - *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); - *message = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ Error: %ld", @"AFNetworking", @"Fallback Error Failure Reason Format"), error.domain, (long)error.code]; - } -} - -@implementation UIAlertView (AFNetworking) - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate -{ - [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; -} - -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION -{ - __block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { - - NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey]; - if (error) { - NSString *title, *message; - AFGetAlertViewTitleAndMessageFromError(error, &title, &message); - - [[[UIAlertView alloc] initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil] show]; - } - - [[NSNotificationCenter defaultCenter] removeObserver:observer name:AFNetworkingTaskDidCompleteNotification object:notification.object]; - }]; -} -#endif - -#pragma mark - - -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate -{ - [self showAlertViewForRequestOperationWithErrorOnCompletion:operation delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlert View Cancel Button Title") otherButtonTitles:nil, nil]; -} - -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION -{ - __block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { - - if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) { - NSError *error = [(AFURLConnectionOperation *)notification.object error]; - if (error) { - NSString *title, *message; - AFGetAlertViewTitleAndMessageFromError(error, &title, &message); - - [[[UIAlertView alloc] initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil] show]; - } - } - - [[NSNotificationCenter defaultCenter] removeObserver:observer name:AFNetworkingOperationDidFinishNotification object:notification.object]; - }]; -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h deleted file mode 100644 index fd89ecd..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h +++ /dev/null @@ -1,146 +0,0 @@ -// UIButton+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -/** - This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. - */ -@interface UIButton (AFNetworking) - -///-------------------- -/// @name Setting Image -///-------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the image request. - */ -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. - */ -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. - - @param state The control state. - @param urlRequest The URL request used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. - @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the request and response parameters will be `nil`. - @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)setImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSError *error))failure; - - -///------------------------------- -/// @name Setting Background Image -///------------------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. - - If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the background image request. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the background image request. - @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. - - @param state The control state. - @param urlRequest The URL request used for the image request. - @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSError *error))failure; - - -///------------------------------ -/// @name Canceling Image Loading -///------------------------------ - -/** - Cancels any executing image operation for the receiver, if one exists. - */ -- (void)cancelImageRequestOperation; - -/** - Cancels any executing background image operation for the receiver, if one exists. - */ -- (void)cancelBackgroundImageRequestOperation; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m deleted file mode 100644 index 689ae9a..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m +++ /dev/null @@ -1,185 +0,0 @@ -// UIButton+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIButton+AFNetworking.h" - -#import <objc/runtime.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -@interface UIButton (_AFNetworking) -@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; -@property (readwrite, nonatomic, strong, setter = af_setBackgroundImageRequestOperation:) AFHTTPRequestOperation *af_backgroundImageRequestOperation; -@end - -@implementation UIButton (_AFNetworking) - -+ (NSOperationQueue *)af_sharedImageRequestOperationQueue { - static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; - _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - }); - - return _af_sharedImageRequestOperationQueue; -} - -- (AFHTTPRequestOperation *)af_imageRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); -} - -- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { - objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (AFHTTPRequestOperation *)af_backgroundImageRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_backgroundImageRequestOperation)); -} - -- (void)af_setBackgroundImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { - objc_setAssociatedObject(self, @selector(af_backgroundImageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIButton (AFNetworking) - -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url -{ - [self setImageForState:state withURL:url placeholderImage:nil]; -} - -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSError *error))failure -{ - [self cancelImageRequestOperation]; - - [self setImage:placeholderImage forState:state]; - - __weak __typeof(self)weakSelf = self; - self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - self.af_imageRequestOperation.responseSerializer = [AFImageResponseSerializer serializer]; - [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (success) { - success(operation.response, responseObject); - } else if (responseObject) { - [strongSelf setImage:responseObject forState:state]; - } - } - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if ([[urlRequest URL] isEqual:[operation.response URL]]) { - if (failure) { - failure(error); - } - } - }]; - - [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; -} - -#pragma mark - - -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url -{ - [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; -} - -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setBackgroundImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSError *error))failure -{ - [self cancelBackgroundImageRequestOperation]; - - [self setBackgroundImage:placeholderImage forState:state]; - - __weak __typeof(self)weakSelf = self; - self.af_backgroundImageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - self.af_backgroundImageRequestOperation.responseSerializer = [AFImageResponseSerializer serializer]; - [self.af_backgroundImageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (success) { - success(operation.response, responseObject); - } else if (responseObject) { - [strongSelf setBackgroundImage:responseObject forState:state]; - } - } - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if ([[urlRequest URL] isEqual:[operation.response URL]]) { - if (failure) { - failure(error); - } - } - }]; - - [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_backgroundImageRequestOperation]; -} - -#pragma mark - - -- (void)cancelImageRequestOperation { - [self.af_imageRequestOperation cancel]; - self.af_imageRequestOperation = nil; -} - -- (void)cancelBackgroundImageRequestOperation { - [self.af_backgroundImageRequestOperation cancel]; - self.af_backgroundImageRequestOperation = nil; -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h deleted file mode 100644 index a983d98..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h +++ /dev/null @@ -1,143 +0,0 @@ -// UIImageView+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@protocol AFURLResponseSerialization, AFImageCache; - -/** - This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. - */ -@interface UIImageView (AFNetworking) - -///---------------------------- -/// @name Accessing Image Cache -///---------------------------- - -/** - The image cache used to improve image loadiing performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly. -*/ -+ (id <AFImageCache>)sharedImageCache; - -/** - Set the cache used for image loading. - - @param imageCache The image cache. - */ -+ (void)setSharedImageCache:(id <AFImageCache>)imageCache; - -///------------------------------------ -/// @name Accessing Response Serializer -///------------------------------------ - -/** - The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. - - @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer - */ -@property (nonatomic, strong) id <AFURLResponseSerialization> imageResponseSerializer; - -///-------------------- -/// @name Setting Image -///-------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` - - @param url The URL used for the image request. - */ -- (void)setImageWithURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` - - @param url The URL used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. - */ -- (void)setImageWithURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. - - @param urlRequest The URL request used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. - @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the request and response parameters will be `nil`. - @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. - */ -- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure; - -/** - Cancels any executing image operation for the receiver, if one exists. - */ -- (void)cancelImageRequestOperation; - -@end - -#pragma mark - - -/** - The `AFImageCache` protocol is adopted by an object used to cache images loaded by the AFNetworking category on `UIImageView`. - */ -@protocol AFImageCache - -/** - Returns a cached image for the specififed request, if available. - - @param request The image request. - - @return The cached image. - */ -- (UIImage *)cachedImageForRequest:(NSURLRequest *)request; - -/** - Caches a particular image for the specified request. - - @param image The image to cache. - @param request The request to be used as a cache key. - */ -- (void)cacheImage:(UIImage *)image - forRequest:(NSURLRequest *)request; -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m deleted file mode 100644 index 64c0943..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m +++ /dev/null @@ -1,214 +0,0 @@ -// UIImageView+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIImageView+AFNetworking.h" - -#import <objc/runtime.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -@interface AFImageCache : NSCache <AFImageCache> -@end - -#pragma mark - - -@interface UIImageView (_AFNetworking) -@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; -@end - -@implementation UIImageView (_AFNetworking) - -+ (NSOperationQueue *)af_sharedImageRequestOperationQueue { - static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; - _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - }); - - return _af_sharedImageRequestOperationQueue; -} - -- (AFHTTPRequestOperation *)af_imageRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); -} - -- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { - objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIImageView (AFNetworking) -@dynamic imageResponseSerializer; - -+ (id <AFImageCache>)sharedImageCache { - static AFImageCache *_af_defaultImageCache = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _af_defaultImageCache = [[AFImageCache alloc] init]; - - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) { - [_af_defaultImageCache removeAllObjects]; - }]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache; -#pragma clang diagnostic pop -} - -+ (void)setSharedImageCache:(id<AFImageCache>)imageCache { - objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (id <AFURLResponseSerialization>)imageResponseSerializer { - static id <AFURLResponseSerialization> _af_defaultImageResponseSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; -#pragma clang diagnostic pop -} - -- (void)setImageResponseSerializer:(id <AFURLResponseSerialization>)serializer { - objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (void)setImageWithURL:(NSURL *)url { - [self setImageWithURL:url placeholderImage:nil]; -} - -- (void)setImageWithURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success - failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure -{ - [self cancelImageRequestOperation]; - - UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; - if (cachedImage) { - if (success) { - success(nil, nil, cachedImage); - } else { - self.image = cachedImage; - } - - self.af_imageRequestOperation = nil; - } else { - if (placeholderImage) { - self.image = placeholderImage; - } - - __weak __typeof(self)weakSelf = self; - self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - self.af_imageRequestOperation.responseSerializer = self.imageResponseSerializer; - [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { - if (success) { - success(urlRequest, operation.response, responseObject); - } else if (responseObject) { - strongSelf.image = responseObject; - } - - if (operation == strongSelf.af_imageRequestOperation){ - strongSelf.af_imageRequestOperation = nil; - } - } - - [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { - if (failure) { - failure(urlRequest, operation.response, error); - } - - if (operation == strongSelf.af_imageRequestOperation){ - strongSelf.af_imageRequestOperation = nil; - } - } - }]; - - [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; - } -} - -- (void)cancelImageRequestOperation { - [self.af_imageRequestOperation cancel]; - self.af_imageRequestOperation = nil; -} - -@end - -#pragma mark - - -static inline NSString * AFImageCacheKeyFromURLRequest(NSURLRequest *request) { - return [[request URL] absoluteString]; -} - -@implementation AFImageCache - -- (UIImage *)cachedImageForRequest:(NSURLRequest *)request { - switch ([request cachePolicy]) { - case NSURLRequestReloadIgnoringCacheData: - case NSURLRequestReloadIgnoringLocalAndRemoteCacheData: - return nil; - default: - break; - } - - return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; -} - -- (void)cacheImage:(UIImage *)image - forRequest:(NSURLRequest *)request -{ - if (image && request) { - [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)]; - } -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h deleted file mode 100644 index 94082f6..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h +++ /dev/null @@ -1,38 +0,0 @@ -// UIKit+AFNetworking.h -// -// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <UIKit/UIKit.h> - -#ifndef _UIKIT_AFNETWORKING_ - #define _UIKIT_AFNETWORKING_ - - #import "AFNetworkActivityIndicatorManager.h" - - #import "UIActivityIndicatorView+AFNetworking.h" - #import "UIAlertView+AFNetworking.h" - #import "UIButton+AFNetworking.h" - #import "UIImageView+AFNetworking.h" - #import "UIKit+AFNetworking.h" - #import "UIProgressView+AFNetworking.h" - #import "UIRefreshControl+AFNetworking.h" - #import "UIWebView+AFNetworking.h" -#endif /* _UIKIT_AFNETWORKING_ */ diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h deleted file mode 100644 index 3f1bc08..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h +++ /dev/null @@ -1,88 +0,0 @@ -// UIProgressView+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation. - */ -@interface UIProgressView (AFNetworking) - -///------------------------------------ -/// @name Setting Session Task Progress -///------------------------------------ - -/** - Binds the progress to the upload progress of the specified session task. - - @param task The session task. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task - animated:(BOOL)animated; -#endif - -/** - Binds the progress to the download progress of the specified session task. - - @param task The session task. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task - animated:(BOOL)animated; -#endif - -///------------------------------------ -/// @name Setting Session Task Progress -///------------------------------------ - -/** - Binds the progress to the upload progress of the specified request operation. - - @param operation The request operation. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated; - -/** - Binds the progress to the download progress of the specified request operation. - - @param operation The request operation. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m deleted file mode 100644 index 7281149..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m +++ /dev/null @@ -1,183 +0,0 @@ -// UIProgressView+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIProgressView+AFNetworking.h" - -#import <objc/runtime.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFURLConnectionOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; -static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; - -@interface AFURLConnectionOperation (_UIProgressView) -@property (readwrite, nonatomic, copy) void (^uploadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -@property (readwrite, nonatomic, assign, setter = af_setUploadProgressAnimated:) BOOL af_uploadProgressAnimated; - -@property (readwrite, nonatomic, copy) void (^downloadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -@property (readwrite, nonatomic, assign, setter = af_setDownloadProgressAnimated:) BOOL af_downloadProgressAnimated; -@end - -@implementation AFURLConnectionOperation (_UIProgressView) -@dynamic uploadProgress; // Implemented in AFURLConnectionOperation -@dynamic af_uploadProgressAnimated; - -@dynamic downloadProgress; // Implemented in AFURLConnectionOperation -@dynamic af_downloadProgressAnimated; -@end - -#pragma mark - - -@implementation UIProgressView (AFNetworking) - -- (BOOL)af_uploadProgressAnimated { - return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; -} - -- (void)af_setUploadProgressAnimated:(BOOL)animated { - objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (BOOL)af_downloadProgressAnimated { - return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; -} - -- (void)af_setDownloadProgressAnimated:(BOOL)animated { - objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task - animated:(BOOL)animated -{ - [task addObserver:self forKeyPath:@"state" options:0 context:AFTaskCountOfBytesSentContext]; - [task addObserver:self forKeyPath:@"countOfBytesSent" options:0 context:AFTaskCountOfBytesSentContext]; - - [self af_setUploadProgressAnimated:animated]; -} - -- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task - animated:(BOOL)animated -{ - [task addObserver:self forKeyPath:@"state" options:0 context:AFTaskCountOfBytesReceivedContext]; - [task addObserver:self forKeyPath:@"countOfBytesReceived" options:0 context:AFTaskCountOfBytesReceivedContext]; - - [self af_setDownloadProgressAnimated:animated]; -} -#endif - -#pragma mark - - -- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated -{ - __weak __typeof(self)weakSelf = self; - void (^original)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) = [operation.uploadProgress copy]; - [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { - if (original) { - original(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if (totalBytesExpectedToWrite > 0) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - [strongSelf setProgress:(totalBytesWritten / (totalBytesExpectedToWrite * 1.0f)) animated:animated]; - } - }); - }]; -} - -- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated -{ - __weak __typeof(self)weakSelf = self; - void (^original)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) = [operation.downloadProgress copy]; - [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { - if (original) { - original(bytesRead, totalBytesRead, totalBytesExpectedToRead); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if (totalBytesExpectedToRead > 0) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - [strongSelf setProgress:(totalBytesRead / (totalBytesExpectedToRead * 1.0f)) animated:animated]; - } - }); - }]; -} - -#pragma mark - NSKeyValueObserving - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(__unused NSDictionary *)change - context:(void *)context -{ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { - if ([object countOfBytesExpectedToSend] > 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; - }); - } - } - - if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { - if ([object countOfBytesExpectedToReceive] > 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; - }); - } - } - - if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { - if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { - @try { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; - - if (context == AFTaskCountOfBytesSentContext) { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; - } - - if (context == AFTaskCountOfBytesReceivedContext) { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; - } - } - @catch (NSException * __unused exception) {} - } - } - } -#endif -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h deleted file mode 100644 index 37ce772..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h +++ /dev/null @@ -1,64 +0,0 @@ -// UIRefreshControl+AFNetworking.m -// -// Copyright (c) 2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically begining and ending refreshing depending on the loading state of a request operation or session task. - */ -@interface UIRefreshControl (AFNetworking) - -///----------------------------------- -/// @name Refreshing for Session Tasks -///----------------------------------- - -/** - Binds the refreshing state to the state of the specified task. - - @param task The task. If `nil`, automatic updating from any previously specified operation will be diabled. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; -#endif - -///---------------------------------------- -/// @name Refreshing for Request Operations -///---------------------------------------- - -/** - Binds the refreshing state to the execution state of the specified operation. - - @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m deleted file mode 100644 index ba28157..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m +++ /dev/null @@ -1,95 +0,0 @@ -// UIRefreshControl+AFNetworking.m -// -// Copyright (c) 2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIRefreshControl+AFNetworking.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -@implementation UIRefreshControl (AFNetworking) - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - - if (task) { - if (task.state != NSURLSessionTaskStateCompleted) { - if (task.state == NSURLSessionTaskStateRunning) { - [self beginRefreshing]; - } else { - [self endRefreshing]; - } - - [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; - } - } -} -#endif - -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; - - if (operation) { - if (![operation isFinished]) { - if ([operation isExecuting]) { - [self beginRefreshing]; - } else { - [self endRefreshing]; - } - - [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation]; - } - } -} - -#pragma mark - - -- (void)af_beginRefreshing { - dispatch_async(dispatch_get_main_queue(), ^{ - [self beginRefreshing]; - }); -} - -- (void)af_endRefreshing { - dispatch_async(dispatch_get_main_queue(), ^{ - [self endRefreshing]; - }); -} - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h deleted file mode 100644 index 202e8f4..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h +++ /dev/null @@ -1,83 +0,0 @@ -// UIWebView+AFNetworking.h -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -#import <Availability.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import <UIKit/UIKit.h> - -@class AFHTTPRequestSerializer, AFHTTPResponseSerializer; -@protocol AFURLRequestSerialization, AFURLResponseSerialization; - -/** - This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. - - @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. - */ -@interface UIWebView (AFNetworking) - -/** - The request serializer used to serialize requests made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPRequestSerializer`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer; - -/** - The response serializer used to serialize responses made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPResponseSerializer`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer; - -/** - Asynchronously loads the specified request. - - @param request A URL request identifying the location of the content to load. This must not be `nil`. - @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)loadRequest:(NSURLRequest *)request - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success - failure:(void (^)(NSError *error))failure; - -/** - Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. - - @param request A URL request identifying the location of the content to load. This must not be `nil`. - @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. - @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. - @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)loadRequest:(NSURLRequest *)request - MIMEType:(NSString *)MIMEType - textEncodingName:(NSString *)textEncodingName - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success - failure:(void (^)(NSError *error))failure; - -@end - -#endif diff --git a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m deleted file mode 100644 index 525d02a..0000000 --- a/TeamTalk/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m +++ /dev/null @@ -1,151 +0,0 @@ -// UIWebView+AFNetworking.m -// -// Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIWebView+AFNetworking.h" - -#import <objc/runtime.h> - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" - -@interface UIWebView (_AFNetworking) -@property (readwrite, nonatomic, strong, setter = af_setHTTPRequestOperation:) AFHTTPRequestOperation *af_HTTPRequestOperation; -@end - -@implementation UIWebView (_AFNetworking) - -- (AFHTTPRequestOperation *)af_HTTPRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_HTTPRequestOperation)); -} - -- (void)af_setHTTPRequestOperation:(AFHTTPRequestOperation *)operation { - objc_setAssociatedObject(self, @selector(af_HTTPRequestOperation), operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIWebView (AFNetworking) - -- (AFHTTPRequestSerializer <AFURLRequestSerialization> *)requestSerializer { - static AFHTTPRequestSerializer <AFURLRequestSerialization> *_af_defaultRequestSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultRequestSerializer = [AFHTTPRequestSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(requestSerializer)) ?: _af_defaultRequestSerializer; -#pragma clang diagnostic pop -} - -- (void)setRequestSerializer:(AFHTTPRequestSerializer<AFURLRequestSerialization> *)requestSerializer { - objc_setAssociatedObject(self, @selector(requestSerializer), requestSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer { - static AFHTTPResponseSerializer <AFURLResponseSerialization> *_af_defaultResponseSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; -#pragma clang diagnostic pop -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer<AFURLResponseSerialization> *)responseSerializer { - objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (void)loadRequest:(NSURLRequest *)request - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success - failure:(void (^)(NSError *error))failure -{ - [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { - NSStringEncoding stringEncoding = NSUTF8StringEncoding; - if (response.textEncodingName) { - CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); - if (encoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); - } - } - - NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; - if (success) { - string = success(response, string); - } - - return [string dataUsingEncoding:stringEncoding]; - } failure:failure]; -} - -- (void)loadRequest:(NSURLRequest *)request - MIMEType:(NSString *)MIMEType - textEncodingName:(NSString *)textEncodingName - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success - failure:(void (^)(NSError *error))failure -{ - NSParameterAssert(request); - - if (self.af_HTTPRequestOperation) { - [self.af_HTTPRequestOperation cancel]; - } - - request = [self.requestSerializer requestBySerializingRequest:request withParameters:nil error:nil]; - - self.af_HTTPRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - self.af_HTTPRequestOperation.responseSerializer = self.responseSerializer; - - __weak __typeof(self)weakSelf = self; - [self.af_HTTPRequestOperation setDownloadProgressBlock:progress]; - [self.af_HTTPRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id __unused responseObject) { - NSData *data = success ? success(operation.response, operation.responseData) : operation.responseData; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - __strong __typeof(weakSelf) strongSelf = weakSelf; - [strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]]; -#pragma clang diagnostic pop - } failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) { - if (failure) { - failure(error); - } - }]; - - [self.af_HTTPRequestOperation start]; -} - -@end - -#endif diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h deleted file mode 120000 index d51daed..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperationManager.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperationManager.h deleted file mode 120000 index 6a7fa3a..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPSessionManager.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPSessionManager.h deleted file mode 120000 index dda87e6..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFHTTPSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h deleted file mode 120000 index 2d0d400..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkReachabilityManager.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkReachabilityManager.h deleted file mode 120000 index 14fd177..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworkReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworking.h deleted file mode 120000 index 83dd518..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFSecurityPolicy.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFSecurityPolicy.h deleted file mode 120000 index 6a54dc3..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFSecurityPolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h deleted file mode 120000 index 360459d..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLRequestSerialization.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLRequestSerialization.h deleted file mode 120000 index 32572ec..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLRequestSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLResponseSerialization.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLResponseSerialization.h deleted file mode 120000 index 4b70627..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLResponseSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLSessionManager.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLSessionManager.h deleted file mode 120000 index a206011..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/AFURLSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIActivityIndicatorView+AFNetworking.h deleted file mode 120000 index 8634d2d..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIActivityIndicatorView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIAlertView+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIAlertView+AFNetworking.h deleted file mode 120000 index 3eb67fb..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIAlertView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIButton+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIButton+AFNetworking.h deleted file mode 120000 index 32c242d..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIButton+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h deleted file mode 120000 index d3fab3c..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIKit+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIKit+AFNetworking.h deleted file mode 120000 index 6d1d448..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIKit+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIProgressView+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIProgressView+AFNetworking.h deleted file mode 120000 index f32234c..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIProgressView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIRefreshControl+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIRefreshControl+AFNetworking.h deleted file mode 120000 index fdc7eb4..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIRefreshControl+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIWebView+AFNetworking.h b/TeamTalk/Pods/BuildHeaders/AFNetworking/UIWebView+AFNetworking.h deleted file mode 120000 index 776285f..0000000 --- a/TeamTalk/Pods/BuildHeaders/AFNetworking/UIWebView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/DACircularProgress/DACircularProgressView.h b/TeamTalk/Pods/BuildHeaders/DACircularProgress/DACircularProgressView.h deleted file mode 120000 index 6643808..0000000 --- a/TeamTalk/Pods/BuildHeaders/DACircularProgress/DACircularProgressView.h +++ /dev/null @@ -1 +0,0 @@ -../../DACircularProgress/DACircularProgress/DACircularProgressView.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMDB.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMDB.h deleted file mode 120000 index 0bac013..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMDB.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDB.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabase.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabase.h deleted file mode 120000 index db4c661..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabase.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabase.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseAdditions.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseAdditions.h deleted file mode 120000 index 51c62d6..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabaseAdditions.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabasePool.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabasePool.h deleted file mode 120000 index 4b061c5..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabasePool.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabasePool.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseQueue.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseQueue.h deleted file mode 120000 index a815d10..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMDatabaseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabaseQueue.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/FMDB/FMResultSet.h b/TeamTalk/Pods/BuildHeaders/FMDB/FMResultSet.h deleted file mode 120000 index 6f2d587..0000000 --- a/TeamTalk/Pods/BuildHeaders/FMDB/FMResultSet.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMResultSet.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPGrowingTextView.h b/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPGrowingTextView.h deleted file mode 120000 index 61c2d3a..0000000 --- a/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPGrowingTextView.h +++ /dev/null @@ -1 +0,0 @@ -../../HPGrowingTextView/class/HPGrowingTextView.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPTextViewInternal.h b/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPTextViewInternal.h deleted file mode 120000 index 0a7d194..0000000 --- a/TeamTalk/Pods/BuildHeaders/HPGrowingTextView/HPTextViewInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../HPGrowingTextView/class/HPTextViewInternal.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/MBProgressHUD/MBProgressHUD.h b/TeamTalk/Pods/BuildHeaders/MBProgressHUD/MBProgressHUD.h deleted file mode 120000 index 6a8f158..0000000 --- a/TeamTalk/Pods/BuildHeaders/MBProgressHUD/MBProgressHUD.h +++ /dev/null @@ -1 +0,0 @@ -../../MBProgressHUD/MBProgressHUD.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h deleted file mode 120000 index e7a9d6e..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionView.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionView.h deleted file mode 120000 index dbe4e65..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionView.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCell.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCell.h deleted file mode 120000 index 2115a68..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCommon.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCommon.h deleted file mode 120000 index bd4238f..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewCommon.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewController.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewController.h deleted file mode 120000 index 2684c6b..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewData.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewData.h deleted file mode 120000 index 2e56de1..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewData.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewFlowLayout.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewFlowLayout.h deleted file mode 120000 index 16902ec..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewFlowLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewItemKey.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewItemKey.h deleted file mode 120000 index 6c53e38..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewItemKey.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout+Internals.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout+Internals.h deleted file mode 120000 index 536b195..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout+Internals.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout.h deleted file mode 120000 index 25a2274..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewUpdateItem.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewUpdateItem.h deleted file mode 120000 index 0de4708..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTCollectionViewUpdateItem.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutInfo.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutInfo.h deleted file mode 120000 index 54f983f..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutItem.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutItem.h deleted file mode 120000 index 9d51f15..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutItem.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutRow.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutRow.h deleted file mode 120000 index 2ed78b4..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutRow.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutSection.h b/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutSection.h deleted file mode 120000 index 844f955..0000000 --- a/TeamTalk/Pods/BuildHeaders/PSTCollectionView/PSTGridLayoutSection.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h deleted file mode 120000 index db1cbe7..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDImageCache.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDImageCache.h deleted file mode 120000 index 9893ccc..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDImageCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageCompat.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageCompat.h deleted file mode 120000 index 088c749..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageCompat.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageCompat.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDecoder.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDecoder.h deleted file mode 120000 index b4d0b05..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDecoder.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDecoder.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloader.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloader.h deleted file mode 120000 index 501f4ff..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloader.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDownloader.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloaderOperation.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloaderOperation.h deleted file mode 120000 index a864736..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageManager.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageManager.h deleted file mode 120000 index f9d2aa2..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageManager.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageOperation.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageOperation.h deleted file mode 120000 index a0769c4..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImageOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImagePrefetcher.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImagePrefetcher.h deleted file mode 120000 index fcc0b60..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/SDWebImagePrefetcher.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIButton+WebCache.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIButton+WebCache.h deleted file mode 120000 index 5586e49..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIButton+WebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+GIF.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+GIF.h deleted file mode 120000 index 44cfed5..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+GIF.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImage+GIF.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+MultiFormat.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+MultiFormat.h deleted file mode 120000 index 185c480..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImage+MultiFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImage+MultiFormat.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+HighlightedWebCache.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+HighlightedWebCache.h deleted file mode 120000 index b05c09f..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+WebCache.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+WebCache.h deleted file mode 120000 index 336b44b..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImageView+WebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIView+WebCacheOperation.h b/TeamTalk/Pods/BuildHeaders/SDWebImage/UIView+WebCacheOperation.h deleted file mode 120000 index 3486fa4..0000000 --- a/TeamTalk/Pods/BuildHeaders/SDWebImage/UIView+WebCacheOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.h b/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.h deleted file mode 100644 index 7814688..0000000 --- a/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// DACircularProgressView.h -// DACircularProgress -// -// Created by Daniel Amitay on 2/6/12. -// Copyright (c) 2012 Daniel Amitay. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface DACircularProgressView : UIView - -@property(nonatomic, strong) UIColor *trackTintColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong) UIColor *progressTintColor UI_APPEARANCE_SELECTOR; -@property(nonatomic) NSInteger roundedCorners UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-( -@property(nonatomic) CGFloat thicknessRatio UI_APPEARANCE_SELECTOR; -@property(nonatomic) NSInteger clockwiseProgress UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-( -@property(nonatomic) CGFloat progress; - -@property(nonatomic) CGFloat indeterminateDuration UI_APPEARANCE_SELECTOR; -@property(nonatomic) NSInteger indeterminate UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-( - -- (void)setProgress:(CGFloat)progress animated:(BOOL)animated; - -@end diff --git a/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.m b/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.m deleted file mode 100644 index 928206c..0000000 --- a/TeamTalk/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.m +++ /dev/null @@ -1,271 +0,0 @@ -// -// DACircularProgressView.m -// DACircularProgress -// -// Created by Daniel Amitay on 2/6/12. -// Copyright (c) 2012 Daniel Amitay. All rights reserved. -// - -#import "DACircularProgressView.h" - -#import <QuartzCore/QuartzCore.h> - -@interface DACircularProgressLayer : CALayer - -@property(nonatomic, strong) UIColor *trackTintColor; -@property(nonatomic, strong) UIColor *progressTintColor; -@property(nonatomic) NSInteger roundedCorners; -@property(nonatomic) CGFloat thicknessRatio; -@property(nonatomic) CGFloat progress; -@property(nonatomic) NSInteger clockwiseProgress; - -@end - -@implementation DACircularProgressLayer - -@dynamic trackTintColor; -@dynamic progressTintColor; -@dynamic roundedCorners; -@dynamic thicknessRatio; -@dynamic progress; -@dynamic clockwiseProgress; - -+ (BOOL)needsDisplayForKey:(NSString *)key -{ - if ([key isEqualToString:@"progress"]) { - return YES; - } else { - return [super needsDisplayForKey:key]; - } -} - -- (void)drawInContext:(CGContextRef)context -{ - CGRect rect = self.bounds; - CGPoint centerPoint = CGPointMake(rect.size.width / 2.0f, rect.size.height / 2.0f); - CGFloat radius = MIN(rect.size.height, rect.size.width) / 2.0f; - - BOOL clockwise = (self.clockwiseProgress != 0); - - CGFloat progress = MIN(self.progress, 1.0f - FLT_EPSILON); - CGFloat radians = 0; - if (clockwise) - { - radians = (float)((progress * 2.0f * M_PI) - M_PI_2); - } - else - { - radians = (float)(3 * M_PI_2 - (progress * 2.0f * M_PI)); - } - - CGContextSetFillColorWithColor(context, self.trackTintColor.CGColor); - CGMutablePathRef trackPath = CGPathCreateMutable(); - CGPathMoveToPoint(trackPath, NULL, centerPoint.x, centerPoint.y); - CGPathAddArc(trackPath, NULL, centerPoint.x, centerPoint.y, radius, (float)(2.0f * M_PI), 0.0f, TRUE); - CGPathCloseSubpath(trackPath); - CGContextAddPath(context, trackPath); - CGContextFillPath(context); - CGPathRelease(trackPath); - - if (progress > 0.0f) { - CGContextSetFillColorWithColor(context, self.progressTintColor.CGColor); - CGMutablePathRef progressPath = CGPathCreateMutable(); - CGPathMoveToPoint(progressPath, NULL, centerPoint.x, centerPoint.y); - CGPathAddArc(progressPath, NULL, centerPoint.x, centerPoint.y, radius, (float)(3.0f * M_PI_2), radians, !clockwise); - CGPathCloseSubpath(progressPath); - CGContextAddPath(context, progressPath); - CGContextFillPath(context); - CGPathRelease(progressPath); - } - - if (progress > 0.0f && self.roundedCorners) { - CGFloat pathWidth = radius * self.thicknessRatio; - CGFloat xOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * cosf(radians))); - CGFloat yOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * sinf(radians))); - CGPoint endPoint = CGPointMake(xOffset, yOffset); - - CGRect startEllipseRect = (CGRect) { - .origin.x = centerPoint.x - pathWidth / 2.0f, - .origin.y = 0.0f, - .size.width = pathWidth, - .size.height = pathWidth - }; - CGContextAddEllipseInRect(context, startEllipseRect); - CGContextFillPath(context); - - CGRect endEllipseRect = (CGRect) { - .origin.x = endPoint.x - pathWidth / 2.0f, - .origin.y = endPoint.y - pathWidth / 2.0f, - .size.width = pathWidth, - .size.height = pathWidth - }; - CGContextAddEllipseInRect(context, endEllipseRect); - CGContextFillPath(context); - } - - CGContextSetBlendMode(context, kCGBlendModeClear); - CGFloat innerRadius = radius * (1.0f - self.thicknessRatio); - CGRect clearRect = (CGRect) { - .origin.x = centerPoint.x - innerRadius, - .origin.y = centerPoint.y - innerRadius, - .size.width = innerRadius * 2.0f, - .size.height = innerRadius * 2.0f - }; - CGContextAddEllipseInRect(context, clearRect); - CGContextFillPath(context); -} - -@end - -@interface DACircularProgressView () - -@end - -@implementation DACircularProgressView - -+ (void) initialize -{ - if (self == [DACircularProgressView class]) { - DACircularProgressView *circularProgressViewAppearance = [DACircularProgressView appearance]; - [circularProgressViewAppearance setTrackTintColor:[[UIColor whiteColor] colorWithAlphaComponent:0.3f]]; - [circularProgressViewAppearance setProgressTintColor:[UIColor whiteColor]]; - [circularProgressViewAppearance setBackgroundColor:[UIColor clearColor]]; - [circularProgressViewAppearance setThicknessRatio:0.3f]; - [circularProgressViewAppearance setRoundedCorners:NO]; - [circularProgressViewAppearance setClockwiseProgress:YES]; - - [circularProgressViewAppearance setIndeterminateDuration:2.0f]; - [circularProgressViewAppearance setIndeterminate:NO]; - } -} - -+ (Class)layerClass -{ - return [DACircularProgressLayer class]; -} - -- (DACircularProgressLayer *)circularProgressLayer -{ - return (DACircularProgressLayer *)self.layer; -} - -- (id)init -{ - return [super initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 40.0f)]; -} - -- (void)didMoveToWindow -{ - CGFloat windowContentsScale = self.window.screen.scale; - self.circularProgressLayer.contentsScale = windowContentsScale; - [self.circularProgressLayer setNeedsDisplay]; -} - -#pragma mark - Progress - -- (CGFloat)progress -{ - return self.circularProgressLayer.progress; -} - -- (void)setProgress:(CGFloat)progress -{ - [self setProgress:progress animated:NO]; -} - -- (void)setProgress:(CGFloat)progress animated:(BOOL)animated -{ - [self.layer removeAnimationForKey:@"indeterminateAnimation"]; - [self.circularProgressLayer removeAnimationForKey:@"progress"]; - - CGFloat pinnedProgress = MIN(MAX(progress, 0.0f), 1.0f); - if (animated) { - CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"progress"]; - animation.duration = fabsf(self.progress - pinnedProgress); // Same duration as UIProgressView animation - animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - animation.fromValue = [NSNumber numberWithFloat:self.progress]; - animation.toValue = [NSNumber numberWithFloat:pinnedProgress]; - [self.circularProgressLayer addAnimation:animation forKey:@"progress"]; - } else { - [self.circularProgressLayer setNeedsDisplay]; - } - self.circularProgressLayer.progress = pinnedProgress; -} - -#pragma mark - UIAppearance methods - -- (UIColor *)trackTintColor -{ - return self.circularProgressLayer.trackTintColor; -} - -- (void)setTrackTintColor:(UIColor *)trackTintColor -{ - self.circularProgressLayer.trackTintColor = trackTintColor; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (UIColor *)progressTintColor -{ - return self.circularProgressLayer.progressTintColor; -} - -- (void)setProgressTintColor:(UIColor *)progressTintColor -{ - self.circularProgressLayer.progressTintColor = progressTintColor; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (NSInteger)roundedCorners -{ - return self.roundedCorners; -} - -- (void)setRoundedCorners:(NSInteger)roundedCorners -{ - self.circularProgressLayer.roundedCorners = roundedCorners; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (CGFloat)thicknessRatio -{ - return self.circularProgressLayer.thicknessRatio; -} - -- (void)setThicknessRatio:(CGFloat)thicknessRatio -{ - self.circularProgressLayer.thicknessRatio = MIN(MAX(thicknessRatio, 0.f), 1.f); - [self.circularProgressLayer setNeedsDisplay]; -} - -- (NSInteger)indeterminate -{ - CAAnimation *spinAnimation = [self.layer animationForKey:@"indeterminateAnimation"]; - return (spinAnimation == nil ? 0 : 1); -} - -- (void)setIndeterminate:(NSInteger)indeterminate -{ - if (indeterminate && !self.indeterminate) { - CABasicAnimation *spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; - spinAnimation.byValue = [NSNumber numberWithFloat:indeterminate > 0 ? 2.0f*M_PI : -2.0f*M_PI]; - spinAnimation.duration = self.indeterminateDuration; - spinAnimation.repeatCount = HUGE_VALF; - [self.layer addAnimation:spinAnimation forKey:@"indeterminateAnimation"]; - } else { - [self.layer removeAnimationForKey:@"indeterminateAnimation"]; - } -} - -- (NSInteger)clockwiseProgress -{ - return self.circularProgressLayer.clockwiseProgress; -} - -- (void)setClockwiseProgress:(NSInteger)clockwiseProgres -{ - self.circularProgressLayer.clockwiseProgress = clockwiseProgres; - [self.circularProgressLayer setNeedsDisplay]; -} - -@end diff --git a/TeamTalk/Pods/DACircularProgress/LICENSE.md b/TeamTalk/Pods/DACircularProgress/LICENSE.md deleted file mode 100755 index 94d0610..0000000 --- a/TeamTalk/Pods/DACircularProgress/LICENSE.md +++ /dev/null @@ -1,23 +0,0 @@ -# License - -## MIT License - -Copyright (c) 2013 Daniel Amitay (http://danielamitay.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/TeamTalk/Pods/DACircularProgress/README.md b/TeamTalk/Pods/DACircularProgress/README.md deleted file mode 100755 index 3c40031..0000000 --- a/TeamTalk/Pods/DACircularProgress/README.md +++ /dev/null @@ -1,77 +0,0 @@ -## DACircularProgress - -`DACircularProgress` is a `UIView` subclass with circular `UIProgressView` properties. - -It was originally built to be an imitation of Facebook's photo progress indicator. - -View the included example project for a demonstration. - -![Screenshot](https://github.com/danielamitay/DACircularProgress/raw/master/screenshot.png) - -## Installation - -To use `DACircularProgress`: - -- Copy over the `DACircularProgress` folder to your project folder. -- Make sure that your project includes `<QuartzCore.framework>`. -- `#import "DACircularProgressView.h"` - -### Example Code - -```objective-c - -self.progressView = [[DACircularProgressView alloc] initWithFrame:CGRectMake(140.0f, 30.0f, 40.0f, 40.0f)]; -self.progressView.roundedCorners = YES; -self.progressView.trackTintColor = [UIColor clearColor]; -[self.view addSubview:self.progressView]; -``` - -- You can also use Interface Builder by adding a `UIView` element and setting its class to `DACircularProgress` - -## Notes - -### Compatibility - -iOS5.0+ - -### Automatic Reference Counting (ARC) support - -`DACircularProgress` was made with ARC enabled by default. - -## Contact - -- [Personal website](http://danielamitay.com) -- [GitHub](http://github.com/danielamitay) -- [Twitter](http://twitter.com/danielamitay) -- [LinkedIn](http://www.linkedin.com/in/danielamitay) -- [Email](hello@danielamitay.com) - -If you use/enjoy `DACircularProgress`, let me know! - -## Credits - -`DACircularProgress` is brought to you by [Daniel Amitay](http://www.amitay.us) and [contributors to the project](https://github.com/danielamitay/DACircularProgress/contributors). A special thanks to [Cédric Luthi](https://github.com/0xced) for a significant amount of changes. If you have feature suggestions or bug reports, feel free to help out by sending pull requests or by [creating new issues](https://github.com/danielamitay/DACircularProgress/issues/new). - -## License - -### MIT License - -Copyright (c) 2013 Daniel Amitay (http://danielamitay.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/TeamTalk/Pods/FMDB/LICENSE.txt b/TeamTalk/Pods/FMDB/LICENSE.txt deleted file mode 100644 index 1cf79ee..0000000 --- a/TeamTalk/Pods/FMDB/LICENSE.txt +++ /dev/null @@ -1,24 +0,0 @@ -If you are using fmdb in your project, I'd love to hear about it. Let me -know at gus@flyingmeat.com. - -In short, this is the MIT License. - -Copyright (c) 2008 Flying Meat Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/TeamTalk/Pods/FMDB/README.markdown b/TeamTalk/Pods/FMDB/README.markdown deleted file mode 100644 index 927bb72..0000000 --- a/TeamTalk/Pods/FMDB/README.markdown +++ /dev/null @@ -1,253 +0,0 @@ -# FMDB v2.3 -This is an Objective-C wrapper around SQLite: http://sqlite.org/ - -## The FMDB Mailing List: -http://groups.google.com/group/fmdb - -## Read the SQLite FAQ: -http://www.sqlite.org/faq.html - -Since FMDB is built on top of SQLite, you're going to want to read this page top to bottom at least once. And while you're there, make sure to bookmark the SQLite Documentation page: http://www.sqlite.org/docs.html - -## CocoaPods - -FMDB can be installed using [CocoaPods](http://cocoapods.org/). - -``` -pod 'FMDB' -# pod 'FMDB/SQLCipher' # If using FMDB with SQLCipher -``` - -**If using FMDB with [SQLCipher](http://sqlcipher.net/) you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the `-DSQLITE_HAS_CODEC` flag.** - -## FMDB Class Reference: -http://ccgus.github.io/fmdb/html/index.html - -## Automatic Reference Counting (ARC) or Manual Memory Management? -You can use either style in your Cocoa project. FMDB Will figure out which you are using at compile time and do the right thing. - -## Usage -There are three main classes in FMDB: - -1. `FMDatabase` - Represents a single SQLite database. Used for executing SQL statements. -2. `FMResultSet` - Represents the results of executing a query on an `FMDatabase`. -3. `FMDatabaseQueue` - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below. - -### Database Creation -An `FMDatabase` is created with a path to a SQLite database file. This path can be one of these three: - -1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you. -2. An empty string (`@""`). An empty database is created at a temporary location. This database is deleted with the `FMDatabase` connection is closed. -3. `NULL`. An in-memory database is created. This database will be destroyed with the `FMDatabase` connection is closed. - -(For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html) - - FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; - -### Opening - -Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database. - - if (![db open]) { - [db release]; - return; - } - -### Executing Updates - -Any sort of SQL statement which is not a `SELECT` statement qualifies as an update. This includes `CREATE`, `UPDATE`, `INSERT`, `ALTER`, `COMMIT`, `BEGIN`, `DETACH`, `DELETE`, `DROP`, `END`, `EXPLAIN`, `VACUUM`, and `REPLACE` statements (plus many more). Basically, if your SQL statement does not begin with `SELECT`, it is an update statement. - -Executing updates returns a single value, a `BOOL`. A return value of `YES` means the update was successfully executed, and a return value of `NO` means that some error was encountered. You may invoke the `-lastErrorMessage` and `-lastErrorCode` methods to retrieve more information. - -### Executing Queries - -A `SELECT` statement is a query and is executed via one of the `-executeQuery...` methods. - -Executing queries returns an `FMResultSet` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `-lastErrorMessage` and `-lastErrorCode` methods to determine why a query failed. - -In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" from one record to the other. With FMDB, the easiest way to do that is like this: - - FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"]; - while ([s next]) { - //retrieve values for each record - } - -You must always invoke `-[FMResultSet next]` before attempting to access the values returned in a query, even if you're only expecting one: - - FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"]; - if ([s next]) { - int totalCount = [s intForColumnIndex:0]; - } - -`FMResultSet` has many methods to retrieve data in an appropriate format: - -- `intForColumn:` -- `longForColumn:` -- `longLongIntForColumn:` -- `boolForColumn:` -- `doubleForColumn:` -- `stringForColumn:` -- `dateForColumn:` -- `dataForColumn:` -- `dataNoCopyForColumn:` -- `UTF8StringForColumnName:` -- `objectForColumnName:` - -Each of these methods also has a `{type}ForColumnIndex:` variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column's name. - -Typically, there's no need to `-close` an `FMResultSet` yourself, since that happens when either the result set is deallocated, or the parent database is closed. - -### Closing - -When you have finished executing queries and updates on the database, you should `-close` the `FMDatabase` connection so that SQLite will relinquish any resources it has acquired during the course of its operation. - - [db close]; - -### Transactions - -`FMDatabase` can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement. - -### Multiple Statements and Batch Stuff - -You can use `FMDatabase`'s executeStatements:withResultBlock: to do multiple statements in a string: - -``` -NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);" - "create table bulktest2 (id integer primary key autoincrement, y text);" - "create table bulktest3 (id integer primary key autoincrement, z text);" - "insert into bulktest1 (x) values ('XXX');" - "insert into bulktest2 (y) values ('YYY');" - "insert into bulktest3 (z) values ('ZZZ');"; - -success = [db executeStatements:sql]; - -sql = @"select count(*) as count from bulktest1;" - "select count(*) as count from bulktest2;" - "select count(*) as count from bulktest3;"; - -success = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dictionary) { - NSInteger count = [dictionary[@"count"] integerValue]; - XCTAssertEqual(count, 1, @"expected one record for dictionary %@", dictionary); - return 0; -}]; - -``` - -### Data Sanitization - -When providing a SQL statement to FMDB, you should not attempt to "sanitize" any values before insertion. Instead, you should use the standard SQLite binding syntax: - - INSERT INTO myTable VALUES (?, ?, ?) - -The `?` character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an `NSArray`, `NSDictionary`, or a `va_list`), which are properly escaped for you. - -Alternatively, you may use named parameters syntax: - - INSERT INTO myTable VALUES (:id, :name, :value) - -The parameters *must* start with a colon. SQLite itself supports other characters, but internally the Dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys. - - NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", nil]; - [db executeUpdate:@"INSERT INTO myTable (name) VALUES (:name)" withParameterDictionary:argsDict]; - -Thus, you SHOULD NOT do this (or anything like this): - - [db executeUpdate:[NSString stringWithFormat:@"INSERT INTO myTable VALUES (%@)", @"this has \" lots of ' bizarre \" quotes '"]]; - -Instead, you SHOULD do: - - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @"this has \" lots of ' bizarre \" quotes '"]; - -All arguments provided to the `-executeUpdate:` method (or any of the variants that accept a `va_list` as a parameter) must be objects. The following will not work (and will result in a crash): - - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", 42]; - -The proper way to insert a number is to box it in an `NSNumber` object: - - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:42]]; - -Alternatively, you can use the `-execute*WithFormat:` variant to use `NSString`-style substitution: - - [db executeUpdateWithFormat:@"INSERT INTO myTable VALUES (%d)", 42]; - -Internally, the `-execute*WithFormat:` methods are properly boxing things for you. The following percent modifiers are recognized: `%@`, `%c`, `%s`, `%d`, `%D`, `%i`, `%u`, `%U`, `%hi`, `%hu`, `%qi`, `%qu`, `%f`, `%g`, `%ld`, `%lu`, `%lld`, and `%llu`. Using a modifier other than those will have unpredictable results. If, for some reason, you need the `%` character to appear in your SQL statement, you should use `%%`. - - -<h2 id="threads">Using FMDatabaseQueue and Thread Safety.</h2> - -Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. *This would suck*. - -**So don't instantiate a single FMDatabase object and use it across multiple threads.** - -Instead, use FMDatabaseQueue. It's your friend and it's here to help. Here's how to use it: - -First, make your queue. - - FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; - -Then use it like so: - - [queue inDatabase:^(FMDatabase *db) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; - - FMResultSet *rs = [db executeQuery:@"select * from foo"]; - while ([rs next]) { - … - } - }]; - -An easy way to wrap things up in a transaction can be done like this: - - [queue inTransaction:^(FMDatabase *db, BOOL *rollback) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; - - if (whoopsSomethingWrongHappened) { - *rollback = YES; - return; - } - // etc… - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; - }]; - - -FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue's methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy. - -**Note:** The calls to FMDatabaseQueue's methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread. - -## Making custom sqlite functions, based on blocks. - -You can do this! For an example, look for "makeFunctionNamed:" in main.m - -## History - -The history and changes are availbe on its [GitHub page](https://github.com/ccgus/fmdb) and are summarized in the "CHANGES_AND_TODO_LIST.txt" file. - -## Contributors - -The contributors to FMDB are contained in the "Contributors.txt" file. - -## Reporting bugs - -Reduce your bug down to the smallest amount of code possible. You want to make it super easy for the developers to see and reproduce your bug. If it helps, pretend that the person who can fix your bug is active on shipping 3 major products, works on a handful of open source projects, has a newborn baby, and is generally very very busy. - -And we've even added a template function to main.m (FMDBReportABugFunction) in the FMDB distribution to help you out: - -* Open up fmdb project in Xcode. -* Open up main.m and modify the FMDBReportABugFunction to reproduce your bug. - * Setup your table(s) in the code. - * Make your query or update(s). - * Add some assertions which demonstrate the bug. - -Then you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter. - -**Optional:** - -Figure out where the bug is, fix it, and send a patch in or bring that up on the mailing list. Make sure all the other tests run after your modifications. - -## License - -The license for FMDB is contained in the "License.txt" file. diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDB.h b/TeamTalk/Pods/FMDB/src/fmdb/FMDB.h deleted file mode 100644 index 39e2f43..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDB.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "FMDatabase.h" -#import "FMResultSet.h" -#import "FMDatabaseAdditions.h" -#import "FMDatabaseQueue.h" -#import "FMDatabasePool.h" diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.h b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.h deleted file mode 100644 index 96be64a..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.h +++ /dev/null @@ -1,1057 +0,0 @@ -#import <Foundation/Foundation.h> -#import "sqlite3.h" -#import "FMResultSet.h" -#import "FMDatabasePool.h" - - -#if ! __has_feature(objc_arc) - #define FMDBAutorelease(__v) ([__v autorelease]); - #define FMDBReturnAutoreleased FMDBAutorelease - - #define FMDBRetain(__v) ([__v retain]); - #define FMDBReturnRetained FMDBRetain - - #define FMDBRelease(__v) ([__v release]); - - #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v)); -#else - // -fobjc-arc - #define FMDBAutorelease(__v) - #define FMDBReturnAutoreleased(__v) (__v) - - #define FMDBRetain(__v) - #define FMDBReturnRetained(__v) (__v) - - #define FMDBRelease(__v) - -// If OS_OBJECT_USE_OBJC=1, then the dispatch objects will be treated like ObjC objects -// and will participate in ARC. -// See the section on "Dispatch Queues and Automatic Reference Counting" in "Grand Central Dispatch (GCD) Reference" for details. - #if OS_OBJECT_USE_OBJC - #define FMDBDispatchQueueRelease(__v) - #else - #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v)); - #endif -#endif - -#if !__has_feature(objc_instancetype) - #define instancetype id -#endif - - -typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary); - - -/** A SQLite ([http://sqlite.org/](http://sqlite.org/)) Objective-C wrapper. - - ### Usage - The three main classes in FMDB are: - - - `FMDatabase` - Represents a single SQLite database. Used for executing SQL statements. - - `<FMResultSet>` - Represents the results of executing a query on an `FMDatabase`. - - `<FMDatabaseQueue>` - If you want to perform queries and updates on multiple threads, you'll want to use this class. - - ### See also - - - `<FMDatabasePool>` - A pool of `FMDatabase` objects. - - `<FMStatement>` - A wrapper for `sqlite_stmt`. - - ### External links - - - [FMDB on GitHub](https://github.com/ccgus/fmdb) including introductory documentation - - [SQLite web site](http://sqlite.org/) - - [FMDB mailing list](http://groups.google.com/group/fmdb) - - [SQLite FAQ](http://www.sqlite.org/faq.html) - - @warning Do not instantiate a single `FMDatabase` object and use it across multiple threads. Instead, use `<FMDatabaseQueue>`. - - */ - -@interface FMDatabase : NSObject { - - sqlite3* _db; - NSString* _databasePath; - BOOL _logsErrors; - BOOL _crashOnErrors; - BOOL _traceExecution; - BOOL _checkedOut; - BOOL _shouldCacheStatements; - BOOL _isExecutingStatement; - BOOL _inTransaction; - NSTimeInterval _maxBusyRetryTimeInterval; - NSTimeInterval _startBusyRetryTime; - - NSMutableDictionary *_cachedStatements; - NSMutableSet *_openResultSets; - NSMutableSet *_openFunctions; - - NSDateFormatter *_dateFormat; -} - -///----------------- -/// @name Properties -///----------------- - -/** Whether should trace execution */ - -@property (atomic, assign) BOOL traceExecution; - -/** Whether checked out or not */ - -@property (atomic, assign) BOOL checkedOut; - -/** Crash on errors */ - -@property (atomic, assign) BOOL crashOnErrors; - -/** Logs errors */ - -@property (atomic, assign) BOOL logsErrors; - -/** Dictionary of cached statements */ - -@property (atomic, retain) NSMutableDictionary *cachedStatements; - -///--------------------- -/// @name Initialization -///--------------------- - -/** Create a `FMDatabase` object. - - An `FMDatabase` is created with a path to a SQLite database file. This path can be one of these three: - - 1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you. - 2. An empty string (`@""`). An empty database is created at a temporary location. This database is deleted with the `FMDatabase` connection is closed. - 3. `nil`. An in-memory database is created. This database will be destroyed with the `FMDatabase` connection is closed. - - For example, to create/open a database in your Mac OS X `tmp` folder: - - FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; - - Or, in iOS, you might open a database in the app's `Documents` directory: - - NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; - NSString *dbPath = [docsPath stringByAppendingPathComponent:@"test.db"]; - FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; - - (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html)) - - @param inPath Path of database file - - @return `FMDatabase` object if successful; `nil` if failure. - - */ - -+ (instancetype)databaseWithPath:(NSString*)inPath; - -/** Initialize a `FMDatabase` object. - - An `FMDatabase` is created with a path to a SQLite database file. This path can be one of these three: - - 1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you. - 2. An empty string (`@""`). An empty database is created at a temporary location. This database is deleted with the `FMDatabase` connection is closed. - 3. `nil`. An in-memory database is created. This database will be destroyed with the `FMDatabase` connection is closed. - - For example, to create/open a database in your Mac OS X `tmp` folder: - - FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; - - Or, in iOS, you might open a database in the app's `Documents` directory: - - NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; - NSString *dbPath = [docsPath stringByAppendingPathComponent:@"test.db"]; - FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; - - (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html)) - - @param inPath Path of database file - - @return `FMDatabase` object if successful; `nil` if failure. - - */ - -- (instancetype)initWithPath:(NSString*)inPath; - - -///----------------------------------- -/// @name Opening and closing database -///----------------------------------- - -/** Opening a new database connection - - The database is opened for reading and writing, and is created if it does not already exist. - - @return `YES` if successful, `NO` on error. - - @see [sqlite3_open()](http://sqlite.org/c3ref/open.html) - @see openWithFlags: - @see close - */ - -- (BOOL)open; - -/** Opening a new database connection with flags - - @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags: - - `SQLITE_OPEN_READONLY` - - The database is opened in read-only mode. If the database does not already exist, an error is returned. - - `SQLITE_OPEN_READWRITE` - - The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned. - - `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE` - - The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method. - - @return `YES` if successful, `NO` on error. - - @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html) - @see open - @see close - */ - -#if SQLITE_VERSION_NUMBER >= 3005000 -- (BOOL)openWithFlags:(int)flags; -#endif - -/** Closing a database connection - - @return `YES` if success, `NO` on error. - - @see [sqlite3_close()](http://sqlite.org/c3ref/close.html) - @see open - @see openWithFlags: - */ - -- (BOOL)close; - -/** Test to see if we have a good connection to the database. - - This will confirm whether: - - - is database open - - if open, it will try a simple SELECT statement and confirm that it succeeds. - - @return `YES` if everything succeeds, `NO` on failure. - */ - -- (BOOL)goodConnection; - - -///---------------------- -/// @name Perform updates -///---------------------- - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html), [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) to bind values to `?` placeholders in the SQL with the optional list of parameters, and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. - - The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. - - @param sql The SQL to be performed, with optional `?` placeholders. - - @param outErr A reference to the `NSError` pointer to be updated with an auto released `NSError` object if an error if an error occurs. If `nil`, no `NSError` object will be returned. - - @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.). - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see lastError - @see lastErrorCode - @see lastErrorMessage - @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) - */ - -- (BOOL)executeUpdate:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ...; - -/** Execute single update statement - - @see executeUpdate:withErrorAndBindings: - - @warning **Deprecated**: Please use `<executeUpdate:withErrorAndBindings>` instead. - */ - -- (BOOL)update:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ... __attribute__ ((deprecated)); - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html), [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) to bind values to `?` placeholders in the SQL with the optional list of parameters, and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. - - The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. - - @param sql The SQL to be performed, with optional `?` placeholders. - - @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.). - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see lastError - @see lastErrorCode - @see lastErrorMessage - @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) - - @note This technique supports the use of `?` placeholders in the SQL, automatically binding any supplied value parameters to those placeholders. This approach is more robust than techniques that entail using `stringWithFormat` to manually build SQL statements, which can be problematic if the values happened to include any characters that needed to be quoted. - */ - -- (BOOL)executeUpdate:(NSString*)sql, ...; - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL. Do not use `?` placeholders in the SQL if you use this method. - - @param format The SQL to be performed, with `printf`-style escape sequences. - - @param ... Optional parameters to bind to use in conjunction with the `printf`-style escape sequences in the SQL statement. - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see executeUpdate: - @see lastError - @see lastErrorCode - @see lastErrorMessage - - @warning This should be used with great care. Generally, instead of this method, you should use `<executeUpdate:>` (with `?` placeholders in the SQL), which properly escapes quotation marks encountered inside the values (minimizing errors and protecting against SQL injection attack) and handles a wider variety of data types. See `<executeUpdate:>` for more information. - */ - -- (BOOL)executeUpdateWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters. - - The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. - - @param sql The SQL to be performed, with optional `?` placeholders. - - @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see lastError - @see lastErrorCode - @see lastErrorMessage - */ - -- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments; - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL. - - The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. - - @param sql The SQL to be performed, with optional `?` placeholders. - - @param arguments A `NSDictionary` of objects keyed by column names that will be used when binding values to the `?` placeholders in the SQL statement. - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see lastError - @see lastErrorCode - @see lastErrorMessage -*/ - -- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments; - - -/** Execute single update statement - - This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL. - - The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. - - @param sql The SQL to be performed, with optional `?` placeholders. - - @param args A `va_list` of arguments. - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see lastError - @see lastErrorCode - @see lastErrorMessage - */ - -- (BOOL)executeUpdate:(NSString*)sql withVAList: (va_list)args; - -/** Execute multiple SQL statements - - This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`. - - @param sql The SQL to be performed - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see executeStatements:withResultBlock: - @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html) - - */ - -- (BOOL)executeStatements:(NSString *)sql; - -/** Execute multiple SQL statements with callback handler - - This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`. - - @param sql The SQL to be performed. - @param block A block that will be called for any result sets returned by any SQL statements. - Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK), - non-zero value upon failure (which will stop the bulk execution of the SQL). If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary. - This may be `nil` if you don't care to receive any results. - - @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, - `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see executeStatements: - @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html) - - */ - -- (BOOL)executeStatements:(NSString *)sql withResultBlock:(FMDBExecuteStatementsCallbackBlock)block; - -/** Last insert rowid - - Each entry in an SQLite table has a unique 64-bit signed integer key called the "rowid". The rowid is always available as an undeclared column named `ROWID`, `OID`, or `_ROWID_` as long as those names are not also used by explicitly declared columns. If the table has a column of type `INTEGER PRIMARY KEY` then that column is another alias for the rowid. - - This routine returns the rowid of the most recent successful `INSERT` into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful `INSERT`s have ever occurred on that database connection, zero is returned. - - @return The rowid of the last inserted row. - - @see [sqlite3_last_insert_rowid()](http://sqlite.org/c3ref/last_insert_rowid.html) - - */ - -- (sqlite_int64)lastInsertRowId; - -/** The number of rows changed by prior SQL statement. - - This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT, UPDATE, or DELETE statement are counted. - - @return The number of rows changed by prior SQL statement. - - @see [sqlite3_changes()](http://sqlite.org/c3ref/changes.html) - - */ - -- (int)changes; - - -///------------------------- -/// @name Retrieving results -///------------------------- - -/** Execute select statement - - Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed. - - In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" (via `<[FMResultSet next]>`) from one record to the other. - - This method employs [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) for any optional value parameters. This properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects. All other object types will be interpreted as text values using the object's `description` method. - - @param sql The SELECT statement to be performed, with optional `?` placeholders. - - @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.). - - @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see FMResultSet - @see [`FMResultSet next`](<[FMResultSet next]>) - @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) - */ - -- (FMResultSet *)executeQuery:(NSString*)sql, ...; - -/** Execute select statement - - Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed. - - In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" (via `<[FMResultSet next]>`) from one record to the other. - - @param format The SQL to be performed, with `printf`-style escape sequences. - - @param ... Optional parameters to bind to use in conjunction with the `printf`-style escape sequences in the SQL statement. - - @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see executeQuery: - @see FMResultSet - @see [`FMResultSet next`](<[FMResultSet next]>) - - @warning This should be used with great care. Generally, instead of this method, you should use `<executeQuery:>` (with `?` placeholders in the SQL), which properly escapes quotation marks encountered inside the values (minimizing errors and protecting against SQL injection attack) and handles a wider variety of data types. See `<executeQuery:>` for more information. - - */ - -- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2); - -/** Execute select statement - - Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed. - - In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" (via `<[FMResultSet next]>`) from one record to the other. - - @param sql The SELECT statement to be performed, with optional `?` placeholders. - - @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. - - @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see FMResultSet - @see [`FMResultSet next`](<[FMResultSet next]>) - */ - -- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments; - -/** Execute select statement - - Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed. - - In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" (via `<[FMResultSet next]>`) from one record to the other. - - @param sql The SELECT statement to be performed, with optional `?` placeholders. - - @param arguments A `NSDictionary` of objects keyed by column names that will be used when binding values to the `?` placeholders in the SQL statement. - - @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see FMResultSet - @see [`FMResultSet next`](<[FMResultSet next]>) - */ - -- (FMResultSet *)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments; - - -// Documentation forthcoming. -- (FMResultSet *)executeQuery:(NSString*)sql withVAList: (va_list)args; - -///------------------- -/// @name Transactions -///------------------- - -/** Begin a transaction - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see commit - @see rollback - @see beginDeferredTransaction - @see inTransaction - */ - -- (BOOL)beginTransaction; - -/** Begin a deferred transaction - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see commit - @see rollback - @see beginTransaction - @see inTransaction - */ - -- (BOOL)beginDeferredTransaction; - -/** Commit a transaction - - Commit a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`. - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see beginTransaction - @see beginDeferredTransaction - @see rollback - @see inTransaction - */ - -- (BOOL)commit; - -/** Rollback a transaction - - Rollback a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`. - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see beginTransaction - @see beginDeferredTransaction - @see commit - @see inTransaction - */ - -- (BOOL)rollback; - -/** Identify whether currently in a transaction or not - - @return `YES` if currently within transaction; `NO` if not. - - @see beginTransaction - @see beginDeferredTransaction - @see commit - @see rollback - */ - -- (BOOL)inTransaction; - - -///---------------------------------------- -/// @name Cached statements and result sets -///---------------------------------------- - -/** Clear cached statements */ - -- (void)clearCachedStatements; - -/** Close all open result sets */ - -- (void)closeOpenResultSets; - -/** Whether database has any open result sets - - @return `YES` if there are open result sets; `NO` if not. - */ - -- (BOOL)hasOpenResultSets; - -/** Return whether should cache statements or not - - @return `YES` if should cache statements; `NO` if not. - */ - -- (BOOL)shouldCacheStatements; - -/** Set whether should cache statements or not - - @param value `YES` if should cache statements; `NO` if not. - */ - -- (void)setShouldCacheStatements:(BOOL)value; - - -///------------------------- -/// @name Encryption methods -///------------------------- - -/** Set encryption key. - - @param key The key to be used. - - @return `YES` if success, `NO` on error. - - @see http://www.sqlite-encrypt.com/develop-guide.htm - - @warning You need to have purchased the sqlite encryption extensions for this method to work. - */ - -- (BOOL)setKey:(NSString*)key; - -/** Reset encryption key - - @param key The key to be used. - - @return `YES` if success, `NO` on error. - - @see http://www.sqlite-encrypt.com/develop-guide.htm - - @warning You need to have purchased the sqlite encryption extensions for this method to work. - */ - -- (BOOL)rekey:(NSString*)key; - -/** Set encryption key using `keyData`. - - @param keyData The `NSData` to be used. - - @return `YES` if success, `NO` on error. - - @see http://www.sqlite-encrypt.com/develop-guide.htm - - @warning You need to have purchased the sqlite encryption extensions for this method to work. - */ - -- (BOOL)setKeyWithData:(NSData *)keyData; - -/** Reset encryption key using `keyData`. - - @param keyData The `NSData` to be used. - - @return `YES` if success, `NO` on error. - - @see http://www.sqlite-encrypt.com/develop-guide.htm - - @warning You need to have purchased the sqlite encryption extensions for this method to work. - */ - -- (BOOL)rekeyWithData:(NSData *)keyData; - - -///------------------------------ -/// @name General inquiry methods -///------------------------------ - -/** The path of the database file - - @return path of database. - - */ - -- (NSString *)databasePath; - -/** The underlying SQLite handle - - @return The `sqlite3` pointer. - - */ - -- (sqlite3*)sqliteHandle; - - -///----------------------------- -/// @name Retrieving error codes -///----------------------------- - -/** Last error message - - Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined. - - @return `NSString` of the last error message. - - @see [sqlite3_errmsg()](http://sqlite.org/c3ref/errcode.html) - @see lastErrorCode - @see lastError - - */ - -- (NSString*)lastErrorMessage; - -/** Last error code - - Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined. - - @return Integer value of the last error code. - - @see [sqlite3_errcode()](http://sqlite.org/c3ref/errcode.html) - @see lastErrorMessage - @see lastError - - */ - -- (int)lastErrorCode; - -/** Had error - - @return `YES` if there was an error, `NO` if no error. - - @see lastError - @see lastErrorCode - @see lastErrorMessage - - */ - -- (BOOL)hadError; - -/** Last error - - @return `NSError` representing the last error. - - @see lastErrorCode - @see lastErrorMessage - - */ - -- (NSError*)lastError; - - -// description forthcoming -- (void)setMaxBusyRetryTimeInterval:(NSTimeInterval)timeoutInSeconds; -- (NSTimeInterval)maxBusyRetryTimeInterval; - - -#if SQLITE_VERSION_NUMBER >= 3007000 - -///------------------ -/// @name Save points -///------------------ - -/** Start save point - - @param name Name of save point. - - @param outErr A `NSError` object to receive any error object (if any). - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see releaseSavePointWithName:error: - @see rollbackToSavePointWithName:error: - */ - -- (BOOL)startSavePointWithName:(NSString*)name error:(NSError**)outErr; - -/** Release save point - - @param name Name of save point. - - @param outErr A `NSError` object to receive any error object (if any). - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see startSavePointWithName:error: - @see rollbackToSavePointWithName:error: - - */ - -- (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError**)outErr; - -/** Roll back to save point - - @param name Name of save point. - @param outErr A `NSError` object to receive any error object (if any). - - @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure. - - @see startSavePointWithName:error: - @see releaseSavePointWithName:error: - - */ - -- (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError**)outErr; - -/** Start save point - - @param block Block of code to perform from within save point. - - @return The NSError corresponding to the error, if any. If no error, returns `nil`. - - @see startSavePointWithName:error: - @see releaseSavePointWithName:error: - @see rollbackToSavePointWithName:error: - - */ - -- (NSError*)inSavePoint:(void (^)(BOOL *rollback))block; - -#endif - -///---------------------------- -/// @name SQLite library status -///---------------------------- - -/** Test to see if the library is threadsafe - - @return `NO` if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0. - - @see [sqlite3_threadsafe()](http://sqlite.org/c3ref/threadsafe.html) - */ - -+ (BOOL)isSQLiteThreadSafe; - -/** Run-time library version numbers - - @return The sqlite library version string. - - @see [sqlite3_libversion()](http://sqlite.org/c3ref/libversion.html) - */ - -+ (NSString*)sqliteLibVersion; - - -+ (NSString*)FMDBUserVersion; - -+ (SInt32)FMDBVersion; - - -///------------------------ -/// @name Make SQL function -///------------------------ - -/** Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates. - - For example: - - [queue inDatabase:^(FMDatabase *adb) { - - [adb executeUpdate:@"create table ftest (foo text)"]; - [adb executeUpdate:@"insert into ftest values ('hello')"]; - [adb executeUpdate:@"insert into ftest values ('hi')"]; - [adb executeUpdate:@"insert into ftest values ('not h!')"]; - [adb executeUpdate:@"insert into ftest values ('definitely not h!')"]; - - [adb makeFunctionNamed:@"StringStartsWithH" maximumArguments:1 withBlock:^(sqlite3_context *context, int aargc, sqlite3_value **aargv) { - if (sqlite3_value_type(aargv[0]) == SQLITE_TEXT) { - @autoreleasepool { - const char *c = (const char *)sqlite3_value_text(aargv[0]); - NSString *s = [NSString stringWithUTF8String:c]; - sqlite3_result_int(context, [s hasPrefix:@"h"]); - } - } - else { - NSLog(@"Unknown formart for StringStartsWithH (%d) %s:%d", sqlite3_value_type(aargv[0]), __FUNCTION__, __LINE__); - sqlite3_result_null(context); - } - }]; - - int rowCount = 0; - FMResultSet *ars = [adb executeQuery:@"select * from ftest where StringStartsWithH(foo)"]; - while ([ars next]) { - rowCount++; - NSLog(@"Does %@ start with 'h'?", [rs stringForColumnIndex:0]); - } - FMDBQuickCheck(rowCount == 2); - }]; - - @param name Name of function - - @param count Maximum number of parameters - - @param block The block of code for the function - - @see [sqlite3_create_function()](http://sqlite.org/c3ref/create_function.html) - */ - -- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(sqlite3_context *context, int argc, sqlite3_value **argv))block; - - -///--------------------- -/// @name Date formatter -///--------------------- - -/** Generate an `NSDateFormatter` that won't be broken by permutations of timezones or locales. - - Use this method to generate values to set the dateFormat property. - - Example: - - myDB.dateFormat = [FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"]; - - @param format A valid NSDateFormatter format string. - - @return A `NSDateFormatter` that can be used for converting dates to strings and vice versa. - - @see hasDateFormatter - @see setDateFormat: - @see dateFromString: - @see stringFromDate: - @see storeableDateFormat: - - @warning Note that `NSDateFormatter` is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes. - - */ - -+ (NSDateFormatter *)storeableDateFormat:(NSString *)format; - -/** Test whether the database has a date formatter assigned. - - @return `YES` if there is a date formatter; `NO` if not. - - @see hasDateFormatter - @see setDateFormat: - @see dateFromString: - @see stringFromDate: - @see storeableDateFormat: - */ - -- (BOOL)hasDateFormatter; - -/** Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps. - - @param format Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase::storeableDateFormat. - - @see hasDateFormatter - @see setDateFormat: - @see dateFromString: - @see stringFromDate: - @see storeableDateFormat: - - @warning Note there is no direct getter for the `NSDateFormatter`, and you should not use the formatter you pass to FMDB for other purposes, as `NSDateFormatter` is not thread-safe. - */ - -- (void)setDateFormat:(NSDateFormatter *)format; - -/** Convert the supplied NSString to NSDate, using the current database formatter. - - @param s `NSString` to convert to `NSDate`. - - @return The `NSDate` object; or `nil` if no formatter is set. - - @see hasDateFormatter - @see setDateFormat: - @see dateFromString: - @see stringFromDate: - @see storeableDateFormat: - */ - -- (NSDate *)dateFromString:(NSString *)s; - -/** Convert the supplied NSDate to NSString, using the current database formatter. - - @param date `NSDate` of date to convert to `NSString`. - - @return The `NSString` representation of the date; `nil` if no formatter is set. - - @see hasDateFormatter - @see setDateFormat: - @see dateFromString: - @see stringFromDate: - @see storeableDateFormat: - */ - -- (NSString *)stringFromDate:(NSDate *)date; - -@end - - -/** Objective-C wrapper for `sqlite3_stmt` - - This is a wrapper for a SQLite `sqlite3_stmt`. Generally when using FMDB you will not need to interact directly with `FMStatement`, but rather with `<FMDatabase>` and `<FMResultSet>` only. - - ### See also - - - `<FMDatabase>` - - `<FMResultSet>` - - [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html) - */ - -@interface FMStatement : NSObject { - sqlite3_stmt *_statement; - NSString *_query; - long _useCount; - BOOL _inUse; -} - -///----------------- -/// @name Properties -///----------------- - -/** Usage count */ - -@property (atomic, assign) long useCount; - -/** SQL statement */ - -@property (atomic, retain) NSString *query; - -/** SQLite sqlite3_stmt - - @see [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html) - */ - -@property (atomic, assign) sqlite3_stmt *statement; - -/** Indication of whether the statement is in use */ - -@property (atomic, assign) BOOL inUse; - -///---------------------------- -/// @name Closing and Resetting -///---------------------------- - -/** Close statement */ - -- (void)close; - -/** Reset statement */ - -- (void)reset; - -@end - diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.m b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.m deleted file mode 100644 index f94c86d..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabase.m +++ /dev/null @@ -1,1413 +0,0 @@ -#import "FMDatabase.h" -#import "unistd.h" -#import <objc/runtime.h> - -@interface FMDatabase () - -- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args; -- (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args; - -@end - -@implementation FMDatabase -@synthesize cachedStatements=_cachedStatements; -@synthesize logsErrors=_logsErrors; -@synthesize crashOnErrors=_crashOnErrors; -@synthesize checkedOut=_checkedOut; -@synthesize traceExecution=_traceExecution; - -#pragma mark FMDatabase instantiation and deallocation - -+ (instancetype)databaseWithPath:(NSString*)aPath { - return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath]); -} - -- (instancetype)init { - return [self initWithPath:nil]; -} - -- (instancetype)initWithPath:(NSString*)aPath { - - assert(sqlite3_threadsafe()); // whoa there big boy- gotta make sure sqlite it happy with what we're going to do. - - self = [super init]; - - if (self) { - _databasePath = [aPath copy]; - _openResultSets = [[NSMutableSet alloc] init]; - _db = nil; - _logsErrors = YES; - _crashOnErrors = NO; - _maxBusyRetryTimeInterval = 2; - } - - return self; -} - -- (void)finalize { - [self close]; - [super finalize]; -} - -- (void)dealloc { - [self close]; - FMDBRelease(_openResultSets); - FMDBRelease(_cachedStatements); - FMDBRelease(_dateFormat); - FMDBRelease(_databasePath); - FMDBRelease(_openFunctions); - -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - -- (NSString *)databasePath { - return _databasePath; -} - -+ (NSString*)FMDBUserVersion { - return @"2.3"; -} - -// returns 0x0230 for version 2.3. This makes it super easy to do things like: -// /* need to make sure to do X with FMDB version 2.3 or later */ -// if ([FMDatabase FMDBVersion] >= 0x0230) { … } - -+ (SInt32)FMDBVersion { - - // we go through these hoops so that we only have to change the version number in a single spot. - static dispatch_once_t once; - static SInt32 FMDBVersionVal = 0; - - dispatch_once(&once, ^{ - NSString *prodVersion = [self FMDBUserVersion]; - - if ([[prodVersion componentsSeparatedByString:@"."] count] < 3) { - prodVersion = [prodVersion stringByAppendingString:@".0"]; - } - - NSString *junk = [prodVersion stringByReplacingOccurrencesOfString:@"." withString:@""]; - - char *e = nil; - FMDBVersionVal = (int) strtoul([junk UTF8String], &e, 16); - - }); - - - return FMDBVersionVal; -} - -#pragma mark SQLite information - -+ (NSString*)sqliteLibVersion { - return [NSString stringWithFormat:@"%s", sqlite3_libversion()]; -} - -+ (BOOL)isSQLiteThreadSafe { - // make sure to read the sqlite headers on this guy! - return sqlite3_threadsafe() != 0; -} - -- (sqlite3*)sqliteHandle { - return _db; -} - -- (const char*)sqlitePath { - - if (!_databasePath) { - return ":memory:"; - } - - if ([_databasePath length] == 0) { - return ""; // this creates a temporary database (it's an sqlite thing). - } - - return [_databasePath fileSystemRepresentation]; - -} - -#pragma mark Open and close database - -- (BOOL)open { - if (_db) { - return YES; - } - - int err = sqlite3_open([self sqlitePath], &_db ); - if(err != SQLITE_OK) { - NSLog(@"error opening!: %d", err); - return NO; - } - - if (_maxBusyRetryTimeInterval > 0.0) { - // set the handler - [self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval]; - } - - - return YES; -} - -#if SQLITE_VERSION_NUMBER >= 3005000 -- (BOOL)openWithFlags:(int)flags { - if (_db) { - return YES; - } - - int err = sqlite3_open_v2([self sqlitePath], &_db, flags, NULL /* Name of VFS module to use */); - if(err != SQLITE_OK) { - NSLog(@"error opening!: %d", err); - return NO; - } - - if (_maxBusyRetryTimeInterval > 0.0) { - // set the handler - [self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval]; - } - - return YES; -} -#endif - - -- (BOOL)close { - - [self clearCachedStatements]; - [self closeOpenResultSets]; - - if (!_db) { - return YES; - } - - int rc; - BOOL retry; - BOOL triedFinalizingOpenStatements = NO; - - do { - retry = NO; - rc = sqlite3_close(_db); - if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) { - if (!triedFinalizingOpenStatements) { - triedFinalizingOpenStatements = YES; - sqlite3_stmt *pStmt; - while ((pStmt = sqlite3_next_stmt(_db, nil)) !=0) { - NSLog(@"Closing leaked statement"); - sqlite3_finalize(pStmt); - retry = YES; - } - } - } - else if (SQLITE_OK != rc) { - NSLog(@"error closing!: %d", rc); - } - } - while (retry); - - _db = nil; - return YES; -} - -#pragma mark Busy handler routines - -// NOTE: appledoc seems to choke on this function for some reason; -// so when generating documentation, you might want to ignore the -// .m files so that it only documents the public interfaces outlined -// in the .h files. -// -// This is a known appledoc bug that it has problems with C functions -// within a class implementation, but for some reason, only this -// C function causes problems; the rest don't. Anyway, ignoring the .m -// files with appledoc will prevent this problem from occurring. - -static int FMDBDatabaseBusyHandler(void *f, int count) { - FMDatabase *self = (__bridge FMDatabase*)f; - - if (count == 0) { - self->_startBusyRetryTime = [NSDate timeIntervalSinceReferenceDate]; - return 1; - } - - NSTimeInterval delta = [NSDate timeIntervalSinceReferenceDate] - (self->_startBusyRetryTime); - - if (delta < [self maxBusyRetryTimeInterval]) { - sqlite3_sleep(50); // milliseconds - return 1; - } - - return 0; -} - -- (void)setMaxBusyRetryTimeInterval:(NSTimeInterval)timeout { - - _maxBusyRetryTimeInterval = timeout; - - if (!_db) { - return; - } - - if (timeout > 0) { - sqlite3_busy_handler(_db, &FMDBDatabaseBusyHandler, (__bridge void *)(self)); - } - else { - // turn it off otherwise - sqlite3_busy_handler(_db, nil, nil); - } -} - -- (NSTimeInterval)maxBusyRetryTimeInterval { - return _maxBusyRetryTimeInterval; -} - - -// we no longer make busyRetryTimeout public -// but for folks who don't bother noticing that the interface to FMDatabase changed, -// we'll still implement the method so they don't get suprise crashes -- (int)busyRetryTimeout { - NSLog(@"%s:%d", __FUNCTION__, __LINE__); - NSLog(@"FMDB: busyRetryTimeout no longer works, please use maxBusyRetryTimeInterval"); - return -1; -} - -- (void)setBusyRetryTimeout:(int)i { - NSLog(@"%s:%d", __FUNCTION__, __LINE__); - NSLog(@"FMDB: setBusyRetryTimeout does nothing, please use setMaxBusyRetryTimeInterval:"); -} - -#pragma mark Result set functions - -- (BOOL)hasOpenResultSets { - return [_openResultSets count] > 0; -} - -- (void)closeOpenResultSets { - - //Copy the set so we don't get mutation errors - NSSet *openSetCopy = FMDBReturnAutoreleased([_openResultSets copy]); - for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) { - FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue]; - - [rs setParentDB:nil]; - [rs close]; - - [_openResultSets removeObject:rsInWrappedInATastyValueMeal]; - } -} - -- (void)resultSetDidClose:(FMResultSet *)resultSet { - NSValue *setValue = [NSValue valueWithNonretainedObject:resultSet]; - - [_openResultSets removeObject:setValue]; -} - -#pragma mark Cached statements - -- (void)clearCachedStatements { - - for (NSMutableSet *statements in [_cachedStatements objectEnumerator]) { - [statements makeObjectsPerformSelector:@selector(close)]; - } - - [_cachedStatements removeAllObjects]; -} - -- (FMStatement*)cachedStatementForQuery:(NSString*)query { - - NSMutableSet* statements = [_cachedStatements objectForKey:query]; - - return [[statements objectsPassingTest:^BOOL(FMStatement* statement, BOOL *stop) { - - *stop = ![statement inUse]; - return *stop; - - }] anyObject]; -} - - -- (void)setCachedStatement:(FMStatement*)statement forQuery:(NSString*)query { - - query = [query copy]; // in case we got handed in a mutable string... - [statement setQuery:query]; - - NSMutableSet* statements = [_cachedStatements objectForKey:query]; - if (!statements) { - statements = [NSMutableSet set]; - } - - [statements addObject:statement]; - - [_cachedStatements setObject:statements forKey:query]; - - FMDBRelease(query); -} - -#pragma mark Key routines - -- (BOOL)rekey:(NSString*)key { - NSData *keyData = [NSData dataWithBytes:(void *)[key UTF8String] length:(NSUInteger)strlen([key UTF8String])]; - - return [self rekeyWithData:keyData]; -} - -- (BOOL)rekeyWithData:(NSData *)keyData { -#ifdef SQLITE_HAS_CODEC - if (!keyData) { - return NO; - } - - int rc = sqlite3_rekey(_db, [keyData bytes], (int)[keyData length]); - - if (rc != SQLITE_OK) { - NSLog(@"error on rekey: %d", rc); - NSLog(@"%@", [self lastErrorMessage]); - } - - return (rc == SQLITE_OK); -#else - return NO; -#endif -} - -- (BOOL)setKey:(NSString*)key { - NSData *keyData = [NSData dataWithBytes:[key UTF8String] length:(NSUInteger)strlen([key UTF8String])]; - - return [self setKeyWithData:keyData]; -} - -- (BOOL)setKeyWithData:(NSData *)keyData { -#ifdef SQLITE_HAS_CODEC - if (!keyData) { - return NO; - } - - int rc = sqlite3_key(_db, [keyData bytes], (int)[keyData length]); - - return (rc == SQLITE_OK); -#else - return NO; -#endif -} - -#pragma mark Date routines - -+ (NSDateFormatter *)storeableDateFormat:(NSString *)format { - - NSDateFormatter *result = FMDBReturnAutoreleased([[NSDateFormatter alloc] init]); - result.dateFormat = format; - result.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; - result.locale = FMDBReturnAutoreleased([[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]); - return result; -} - - -- (BOOL)hasDateFormatter { - return _dateFormat != nil; -} - -- (void)setDateFormat:(NSDateFormatter *)format { - FMDBAutorelease(_dateFormat); - _dateFormat = FMDBReturnRetained(format); -} - -- (NSDate *)dateFromString:(NSString *)s { - return [_dateFormat dateFromString:s]; -} - -- (NSString *)stringFromDate:(NSDate *)date { - return [_dateFormat stringFromDate:date]; -} - -#pragma mark State of database - -- (BOOL)goodConnection { - - if (!_db) { - return NO; - } - - FMResultSet *rs = [self executeQuery:@"select name from sqlite_master where type='table'"]; - - if (rs) { - [rs close]; - return YES; - } - - return NO; -} - -- (void)warnInUse { - NSLog(@"The FMDatabase %@ is currently in use.", self); - -#ifndef NS_BLOCK_ASSERTIONS - if (_crashOnErrors) { - NSAssert(false, @"The FMDatabase %@ is currently in use.", self); - abort(); - } -#endif -} - -- (BOOL)databaseExists { - - if (!_db) { - - NSLog(@"The FMDatabase %@ is not open.", self); - - #ifndef NS_BLOCK_ASSERTIONS - if (_crashOnErrors) { - NSAssert(false, @"The FMDatabase %@ is not open.", self); - abort(); - } - #endif - - return NO; - } - - return YES; -} - -#pragma mark Error routines - -- (NSString*)lastErrorMessage { - return [NSString stringWithUTF8String:sqlite3_errmsg(_db)]; -} - -- (BOOL)hadError { - int lastErrCode = [self lastErrorCode]; - - return (lastErrCode > SQLITE_OK && lastErrCode < SQLITE_ROW); -} - -- (int)lastErrorCode { - return sqlite3_errcode(_db); -} - -- (NSError*)errorWithMessage:(NSString*)message { - NSDictionary* errorMessage = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey]; - - return [NSError errorWithDomain:@"FMDatabase" code:sqlite3_errcode(_db) userInfo:errorMessage]; -} - -- (NSError*)lastError { - return [self errorWithMessage:[self lastErrorMessage]]; -} - -#pragma mark Update information routines - -- (sqlite_int64)lastInsertRowId { - - if (_isExecutingStatement) { - [self warnInUse]; - return NO; - } - - _isExecutingStatement = YES; - - sqlite_int64 ret = sqlite3_last_insert_rowid(_db); - - _isExecutingStatement = NO; - - return ret; -} - -- (int)changes { - if (_isExecutingStatement) { - [self warnInUse]; - return 0; - } - - _isExecutingStatement = YES; - - int ret = sqlite3_changes(_db); - - _isExecutingStatement = NO; - - return ret; -} - -#pragma mark SQL manipulation - -- (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt { - - if ((!obj) || ((NSNull *)obj == [NSNull null])) { - sqlite3_bind_null(pStmt, idx); - } - - // FIXME - someday check the return codes on these binds. - else if ([obj isKindOfClass:[NSData class]]) { - const void *bytes = [obj bytes]; - if (!bytes) { - // it's an empty NSData object, aka [NSData data]. - // Don't pass a NULL pointer, or sqlite will bind a SQL null instead of a blob. - bytes = ""; - } - sqlite3_bind_blob(pStmt, idx, bytes, (int)[obj length], SQLITE_STATIC); - } - else if ([obj isKindOfClass:[NSDate class]]) { - if (self.hasDateFormatter) - sqlite3_bind_text(pStmt, idx, [[self stringFromDate:obj] UTF8String], -1, SQLITE_STATIC); - else - sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]); - } - else if ([obj isKindOfClass:[NSNumber class]]) { - - if (strcmp([obj objCType], @encode(BOOL)) == 0) { - sqlite3_bind_int(pStmt, idx, ([obj boolValue] ? 1 : 0)); - } - else if (strcmp([obj objCType], @encode(char)) == 0) { - sqlite3_bind_int(pStmt, idx, [obj charValue]); - } - else if (strcmp([obj objCType], @encode(unsigned char)) == 0) { - sqlite3_bind_int(pStmt, idx, [obj unsignedCharValue]); - } - else if (strcmp([obj objCType], @encode(short)) == 0) { - sqlite3_bind_int(pStmt, idx, [obj shortValue]); - } - else if (strcmp([obj objCType], @encode(unsigned short)) == 0) { - sqlite3_bind_int(pStmt, idx, [obj unsignedShortValue]); - } - else if (strcmp([obj objCType], @encode(int)) == 0) { - sqlite3_bind_int(pStmt, idx, [obj intValue]); - } - else if (strcmp([obj objCType], @encode(unsigned int)) == 0) { - sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedIntValue]); - } - else if (strcmp([obj objCType], @encode(long)) == 0) { - sqlite3_bind_int64(pStmt, idx, [obj longValue]); - } - else if (strcmp([obj objCType], @encode(unsigned long)) == 0) { - sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedLongValue]); - } - else if (strcmp([obj objCType], @encode(long long)) == 0) { - sqlite3_bind_int64(pStmt, idx, [obj longLongValue]); - } - else if (strcmp([obj objCType], @encode(unsigned long long)) == 0) { - sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedLongLongValue]); - } - else if (strcmp([obj objCType], @encode(float)) == 0) { - sqlite3_bind_double(pStmt, idx, [obj floatValue]); - } - else if (strcmp([obj objCType], @encode(double)) == 0) { - sqlite3_bind_double(pStmt, idx, [obj doubleValue]); - } - else { - sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC); - } - } - else { - sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC); - } -} - -- (void)extractSQL:(NSString *)sql argumentsList:(va_list)args intoString:(NSMutableString *)cleanedSQL arguments:(NSMutableArray *)arguments { - - NSUInteger length = [sql length]; - unichar last = '\0'; - for (NSUInteger i = 0; i < length; ++i) { - id arg = nil; - unichar current = [sql characterAtIndex:i]; - unichar add = current; - if (last == '%') { - switch (current) { - case '@': - arg = va_arg(args, id); - break; - case 'c': - // warning: second argument to 'va_arg' is of promotable type 'char'; this va_arg has undefined behavior because arguments will be promoted to 'int' - arg = [NSString stringWithFormat:@"%c", va_arg(args, int)]; - break; - case 's': - arg = [NSString stringWithUTF8String:va_arg(args, char*)]; - break; - case 'd': - case 'D': - case 'i': - arg = [NSNumber numberWithInt:va_arg(args, int)]; - break; - case 'u': - case 'U': - arg = [NSNumber numberWithUnsignedInt:va_arg(args, unsigned int)]; - break; - case 'h': - i++; - if (i < length && [sql characterAtIndex:i] == 'i') { - // warning: second argument to 'va_arg' is of promotable type 'short'; this va_arg has undefined behavior because arguments will be promoted to 'int' - arg = [NSNumber numberWithShort:(short)(va_arg(args, int))]; - } - else if (i < length && [sql characterAtIndex:i] == 'u') { - // warning: second argument to 'va_arg' is of promotable type 'unsigned short'; this va_arg has undefined behavior because arguments will be promoted to 'int' - arg = [NSNumber numberWithUnsignedShort:(unsigned short)(va_arg(args, uint))]; - } - else { - i--; - } - break; - case 'q': - i++; - if (i < length && [sql characterAtIndex:i] == 'i') { - arg = [NSNumber numberWithLongLong:va_arg(args, long long)]; - } - else if (i < length && [sql characterAtIndex:i] == 'u') { - arg = [NSNumber numberWithUnsignedLongLong:va_arg(args, unsigned long long)]; - } - else { - i--; - } - break; - case 'f': - arg = [NSNumber numberWithDouble:va_arg(args, double)]; - break; - case 'g': - // warning: second argument to 'va_arg' is of promotable type 'float'; this va_arg has undefined behavior because arguments will be promoted to 'double' - arg = [NSNumber numberWithFloat:(float)(va_arg(args, double))]; - break; - case 'l': - i++; - if (i < length) { - unichar next = [sql characterAtIndex:i]; - if (next == 'l') { - i++; - if (i < length && [sql characterAtIndex:i] == 'd') { - //%lld - arg = [NSNumber numberWithLongLong:va_arg(args, long long)]; - } - else if (i < length && [sql characterAtIndex:i] == 'u') { - //%llu - arg = [NSNumber numberWithUnsignedLongLong:va_arg(args, unsigned long long)]; - } - else { - i--; - } - } - else if (next == 'd') { - //%ld - arg = [NSNumber numberWithLong:va_arg(args, long)]; - } - else if (next == 'u') { - //%lu - arg = [NSNumber numberWithUnsignedLong:va_arg(args, unsigned long)]; - } - else { - i--; - } - } - else { - i--; - } - break; - default: - // something else that we can't interpret. just pass it on through like normal - break; - } - } - else if (current == '%') { - // percent sign; skip this character - add = '\0'; - } - - if (arg != nil) { - [cleanedSQL appendString:@"?"]; - [arguments addObject:arg]; - } - else if (add == (unichar)'@' && last == (unichar) '%') { - [cleanedSQL appendFormat:@"NULL"]; - } - else if (add != '\0') { - [cleanedSQL appendFormat:@"%C", add]; - } - last = current; - } -} - -#pragma mark Execute queries - -- (FMResultSet *)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments { - return [self executeQuery:sql withArgumentsInArray:nil orDictionary:arguments orVAList:nil]; -} - -- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args { - - if (![self databaseExists]) { - return 0x00; - } - - if (_isExecutingStatement) { - [self warnInUse]; - return 0x00; - } - - _isExecutingStatement = YES; - - int rc = 0x00; - sqlite3_stmt *pStmt = 0x00; - FMStatement *statement = 0x00; - FMResultSet *rs = 0x00; - - if (_traceExecution && sql) { - NSLog(@"%@ executeQuery: %@", self, sql); - } - - if (_shouldCacheStatements) { - statement = [self cachedStatementForQuery:sql]; - pStmt = statement ? [statement statement] : 0x00; - [statement reset]; - } - - if (!pStmt) { - - rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0); - - if (SQLITE_OK != rc) { - if (_logsErrors) { - NSLog(@"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]); - NSLog(@"DB Query: %@", sql); - NSLog(@"DB Path: %@", _databasePath); - } - - if (_crashOnErrors) { - NSAssert(false, @"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]); - abort(); - } - - sqlite3_finalize(pStmt); - _isExecutingStatement = NO; - return nil; - } - } - - id obj; - int idx = 0; - int queryCount = sqlite3_bind_parameter_count(pStmt); // pointed out by Dominic Yu (thanks!) - - // If dictionaryArgs is passed in, that means we are using sqlite's named parameter support - if (dictionaryArgs) { - - for (NSString *dictionaryKey in [dictionaryArgs allKeys]) { - - // Prefix the key with a colon. - NSString *parameterName = [[NSString alloc] initWithFormat:@":%@", dictionaryKey]; - - // Get the index for the parameter name. - int namedIdx = sqlite3_bind_parameter_index(pStmt, [parameterName UTF8String]); - - FMDBRelease(parameterName); - - if (namedIdx > 0) { - // Standard binding from here. - [self bindObject:[dictionaryArgs objectForKey:dictionaryKey] toColumn:namedIdx inStatement:pStmt]; - // increment the binding count, so our check below works out - idx++; - } - else { - NSLog(@"Could not find index for %@", dictionaryKey); - } - } - } - else { - - while (idx < queryCount) { - - if (arrayArgs && idx < (int)[arrayArgs count]) { - obj = [arrayArgs objectAtIndex:(NSUInteger)idx]; - } - else if (args) { - obj = va_arg(args, id); - } - else { - //We ran out of arguments - break; - } - - if (_traceExecution) { - if ([obj isKindOfClass:[NSData class]]) { - NSLog(@"data: %ld bytes", (unsigned long)[(NSData*)obj length]); - } - else { - NSLog(@"obj: %@", obj); - } - } - - idx++; - - [self bindObject:obj toColumn:idx inStatement:pStmt]; - } - } - - if (idx != queryCount) { - NSLog(@"Error: the bind count is not correct for the # of variables (executeQuery)"); - sqlite3_finalize(pStmt); - _isExecutingStatement = NO; - return nil; - } - - FMDBRetain(statement); // to balance the release below - - if (!statement) { - statement = [[FMStatement alloc] init]; - [statement setStatement:pStmt]; - - if (_shouldCacheStatements && sql) { - [self setCachedStatement:statement forQuery:sql]; - } - } - - // the statement gets closed in rs's dealloc or [rs close]; - rs = [FMResultSet resultSetWithStatement:statement usingParentDatabase:self]; - [rs setQuery:sql]; - - NSValue *openResultSet = [NSValue valueWithNonretainedObject:rs]; - [_openResultSets addObject:openResultSet]; - - [statement setUseCount:[statement useCount] + 1]; - - FMDBRelease(statement); - - _isExecutingStatement = NO; - - return rs; -} - -- (FMResultSet *)executeQuery:(NSString*)sql, ... { - va_list args; - va_start(args, sql); - - id result = [self executeQuery:sql withArgumentsInArray:nil orDictionary:nil orVAList:args]; - - va_end(args); - return result; -} - -- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... { - va_list args; - va_start(args, format); - - NSMutableString *sql = [NSMutableString stringWithCapacity:[format length]]; - NSMutableArray *arguments = [NSMutableArray array]; - [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; - - va_end(args); - - return [self executeQuery:sql withArgumentsInArray:arguments]; -} - -- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments { - return [self executeQuery:sql withArgumentsInArray:arguments orDictionary:nil orVAList:nil]; -} - -- (FMResultSet *)executeQuery:(NSString*)sql withVAList:(va_list)args { - return [self executeQuery:sql withArgumentsInArray:nil orDictionary:nil orVAList:args]; -} - -#pragma mark Execute updates - -- (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args { - - if (![self databaseExists]) { - return NO; - } - - if (_isExecutingStatement) { - [self warnInUse]; - return NO; - } - - _isExecutingStatement = YES; - - int rc = 0x00; - sqlite3_stmt *pStmt = 0x00; - FMStatement *cachedStmt = 0x00; - - if (_traceExecution && sql) { - NSLog(@"%@ executeUpdate: %@", self, sql); - } - - if (_shouldCacheStatements) { - cachedStmt = [self cachedStatementForQuery:sql]; - pStmt = cachedStmt ? [cachedStmt statement] : 0x00; - [cachedStmt reset]; - } - - if (!pStmt) { - rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0); - - if (SQLITE_OK != rc) { - if (_logsErrors) { - NSLog(@"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]); - NSLog(@"DB Query: %@", sql); - NSLog(@"DB Path: %@", _databasePath); - } - - if (_crashOnErrors) { - NSAssert(false, @"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]); - abort(); - } - - sqlite3_finalize(pStmt); - - if (outErr) { - *outErr = [self errorWithMessage:[NSString stringWithUTF8String:sqlite3_errmsg(_db)]]; - } - - _isExecutingStatement = NO; - return NO; - } - } - - id obj; - int idx = 0; - int queryCount = sqlite3_bind_parameter_count(pStmt); - - // If dictionaryArgs is passed in, that means we are using sqlite's named parameter support - if (dictionaryArgs) { - - for (NSString *dictionaryKey in [dictionaryArgs allKeys]) { - - // Prefix the key with a colon. - NSString *parameterName = [[NSString alloc] initWithFormat:@":%@", dictionaryKey]; - - // Get the index for the parameter name. - int namedIdx = sqlite3_bind_parameter_index(pStmt, [parameterName UTF8String]); - - FMDBRelease(parameterName); - - if (namedIdx > 0) { - // Standard binding from here. - [self bindObject:[dictionaryArgs objectForKey:dictionaryKey] toColumn:namedIdx inStatement:pStmt]; - - // increment the binding count, so our check below works out - idx++; - } - else { - NSLog(@"Could not find index for %@", dictionaryKey); - } - } - } - else { - - while (idx < queryCount) { - - if (arrayArgs && idx < (int)[arrayArgs count]) { - obj = [arrayArgs objectAtIndex:(NSUInteger)idx]; - } - else if (args) { - obj = va_arg(args, id); - } - else { - //We ran out of arguments - break; - } - - if (_traceExecution) { - if ([obj isKindOfClass:[NSData class]]) { - NSLog(@"data: %ld bytes", (unsigned long)[(NSData*)obj length]); - } - else { - NSLog(@"obj: %@", obj); - } - } - - idx++; - - [self bindObject:obj toColumn:idx inStatement:pStmt]; - } - } - - - if (idx != queryCount) { - NSLog(@"Error: the bind count (%d) is not correct for the # of variables in the query (%d) (%@) (executeUpdate)", idx, queryCount, sql); - sqlite3_finalize(pStmt); - _isExecutingStatement = NO; - return NO; - } - - /* Call sqlite3_step() to run the virtual machine. Since the SQL being - ** executed is not a SELECT statement, we assume no data will be returned. - */ - - rc = sqlite3_step(pStmt); - - if (SQLITE_DONE == rc) { - // all is well, let's return. - } - else if (SQLITE_ERROR == rc) { - if (_logsErrors) { - NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_ERROR", rc, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); - } - } - else if (SQLITE_MISUSE == rc) { - // uh oh. - if (_logsErrors) { - NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_MISUSE", rc, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); - } - } - else { - // wtf? - if (_logsErrors) { - NSLog(@"Unknown error calling sqlite3_step (%d: %s) eu", rc, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); - } - } - - if (rc == SQLITE_ROW) { - NSAssert(NO, @"A executeUpdate is being called with a query string '%@'", sql); - } - - if (_shouldCacheStatements && !cachedStmt) { - cachedStmt = [[FMStatement alloc] init]; - - [cachedStmt setStatement:pStmt]; - - [self setCachedStatement:cachedStmt forQuery:sql]; - - FMDBRelease(cachedStmt); - } - - int closeErrorCode; - - if (cachedStmt) { - [cachedStmt setUseCount:[cachedStmt useCount] + 1]; - closeErrorCode = sqlite3_reset(pStmt); - } - else { - /* Finalize the virtual machine. This releases all memory and other - ** resources allocated by the sqlite3_prepare() call above. - */ - closeErrorCode = sqlite3_finalize(pStmt); - } - - if (closeErrorCode != SQLITE_OK) { - if (_logsErrors) { - NSLog(@"Unknown error finalizing or resetting statement (%d: %s)", closeErrorCode, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); - } - } - - _isExecutingStatement = NO; - return (rc == SQLITE_DONE || rc == SQLITE_OK); -} - - -- (BOOL)executeUpdate:(NSString*)sql, ... { - va_list args; - va_start(args, sql); - - BOOL result = [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:nil orVAList:args]; - - va_end(args); - return result; -} - -- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments { - return [self executeUpdate:sql error:nil withArgumentsInArray:arguments orDictionary:nil orVAList:nil]; -} - -- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments { - return [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:arguments orVAList:nil]; -} - -- (BOOL)executeUpdate:(NSString*)sql withVAList:(va_list)args { - return [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:nil orVAList:args]; -} - -- (BOOL)executeUpdateWithFormat:(NSString*)format, ... { - va_list args; - va_start(args, format); - - NSMutableString *sql = [NSMutableString stringWithCapacity:[format length]]; - NSMutableArray *arguments = [NSMutableArray array]; - - [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; - - va_end(args); - - return [self executeUpdate:sql withArgumentsInArray:arguments]; -} - - -int FMDBExecuteBulkSQLCallback(void *theBlockAsVoid, int columns, char **values, char **names); // shhh clang. -int FMDBExecuteBulkSQLCallback(void *theBlockAsVoid, int columns, char **values, char **names) { - - if (!theBlockAsVoid) { - return SQLITE_OK; - } - - int (^execCallbackBlock)(NSDictionary *resultsDictionary) = (__bridge int (^)(NSDictionary *__strong))(theBlockAsVoid); - - NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:(NSUInteger)columns]; - - for (NSInteger i = 0; i < columns; i++) { - NSString *key = [NSString stringWithUTF8String:names[i]]; - id value = values[i] ? [NSString stringWithUTF8String:values[i]] : [NSNull null]; - [dictionary setObject:value forKey:key]; - } - - return execCallbackBlock(dictionary); -} - -- (BOOL)executeStatements:(NSString *)sql { - return [self executeStatements:sql withResultBlock:nil]; -} - -- (BOOL)executeStatements:(NSString *)sql withResultBlock:(FMDBExecuteStatementsCallbackBlock)block { - - int rc; - char *errmsg = nil; - - rc = sqlite3_exec([self sqliteHandle], [sql UTF8String], block ? FMDBExecuteBulkSQLCallback : nil, (__bridge void *)(block), &errmsg); - - if (errmsg && [self logsErrors]) { - NSLog(@"Error inserting batch: %s", errmsg); - sqlite3_free(errmsg); - } - - return (rc == SQLITE_OK); -} - -- (BOOL)executeUpdate:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ... { - - va_list args; - va_start(args, outErr); - - BOOL result = [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:args]; - - va_end(args); - return result; -} - - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (BOOL)update:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ... { - va_list args; - va_start(args, outErr); - - BOOL result = [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:args]; - - va_end(args); - return result; -} - -#pragma clang diagnostic pop - -#pragma mark Transactions - -- (BOOL)rollback { - BOOL b = [self executeUpdate:@"rollback transaction"]; - - if (b) { - _inTransaction = NO; - } - - return b; -} - -- (BOOL)commit { - BOOL b = [self executeUpdate:@"commit transaction"]; - - if (b) { - _inTransaction = NO; - } - - return b; -} - -- (BOOL)beginDeferredTransaction { - - BOOL b = [self executeUpdate:@"begin deferred transaction"]; - if (b) { - _inTransaction = YES; - } - - return b; -} - -- (BOOL)beginTransaction { - - BOOL b = [self executeUpdate:@"begin exclusive transaction"]; - if (b) { - _inTransaction = YES; - } - - return b; -} - -- (BOOL)inTransaction { - return _inTransaction; -} - -#if SQLITE_VERSION_NUMBER >= 3007000 - -static NSString *FMDBEscapeSavePointName(NSString *savepointName) { - return [savepointName stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; -} - -- (BOOL)startSavePointWithName:(NSString*)name error:(NSError**)outErr { - - NSParameterAssert(name); - - NSString *sql = [NSString stringWithFormat:@"savepoint '%@';", FMDBEscapeSavePointName(name)]; - - if (![self executeUpdate:sql]) { - - if (outErr) { - *outErr = [self lastError]; - } - - return NO; - } - - return YES; -} - -- (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError**)outErr { - - NSParameterAssert(name); - - NSString *sql = [NSString stringWithFormat:@"release savepoint '%@';", FMDBEscapeSavePointName(name)]; - BOOL worked = [self executeUpdate:sql]; - - if (!worked && outErr) { - *outErr = [self lastError]; - } - - return worked; -} - -- (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError**)outErr { - - NSParameterAssert(name); - - NSString *sql = [NSString stringWithFormat:@"rollback transaction to savepoint '%@';", FMDBEscapeSavePointName(name)]; - BOOL worked = [self executeUpdate:sql]; - - if (!worked && outErr) { - *outErr = [self lastError]; - } - - return worked; -} - -- (NSError*)inSavePoint:(void (^)(BOOL *rollback))block { - static unsigned long savePointIdx = 0; - - NSString *name = [NSString stringWithFormat:@"dbSavePoint%ld", savePointIdx++]; - - BOOL shouldRollback = NO; - - NSError *err = 0x00; - - if (![self startSavePointWithName:name error:&err]) { - return err; - } - - block(&shouldRollback); - - if (shouldRollback) { - // We need to rollback and release this savepoint to remove it - [self rollbackToSavePointWithName:name error:&err]; - } - [self releaseSavePointWithName:name error:&err]; - - return err; -} - -#endif - -#pragma mark Cache statements - -- (BOOL)shouldCacheStatements { - return _shouldCacheStatements; -} - -- (void)setShouldCacheStatements:(BOOL)value { - - _shouldCacheStatements = value; - - if (_shouldCacheStatements && !_cachedStatements) { - [self setCachedStatements:[NSMutableDictionary dictionary]]; - } - - if (!_shouldCacheStatements) { - [self setCachedStatements:nil]; - } -} - -#pragma mark Callback function - -void FMDBBlockSQLiteCallBackFunction(sqlite3_context *context, int argc, sqlite3_value **argv); // -Wmissing-prototypes -void FMDBBlockSQLiteCallBackFunction(sqlite3_context *context, int argc, sqlite3_value **argv) { -#if ! __has_feature(objc_arc) - void (^block)(sqlite3_context *context, int argc, sqlite3_value **argv) = (id)sqlite3_user_data(context); -#else - void (^block)(sqlite3_context *context, int argc, sqlite3_value **argv) = (__bridge id)sqlite3_user_data(context); -#endif - block(context, argc, argv); -} - - -- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(sqlite3_context *context, int argc, sqlite3_value **argv))block { - - if (!_openFunctions) { - _openFunctions = [NSMutableSet new]; - } - - id b = FMDBReturnAutoreleased([block copy]); - - [_openFunctions addObject:b]; - - /* I tried adding custom functions to release the block when the connection is destroyed- but they seemed to never be called, so we use _openFunctions to store the values instead. */ -#if ! __has_feature(objc_arc) - sqlite3_create_function([self sqliteHandle], [name UTF8String], count, SQLITE_UTF8, (void*)b, &FMDBBlockSQLiteCallBackFunction, 0x00, 0x00); -#else - sqlite3_create_function([self sqliteHandle], [name UTF8String], count, SQLITE_UTF8, (__bridge void*)b, &FMDBBlockSQLiteCallBackFunction, 0x00, 0x00); -#endif -} - -@end - - - -@implementation FMStatement -@synthesize statement=_statement; -@synthesize query=_query; -@synthesize useCount=_useCount; -@synthesize inUse=_inUse; - -- (void)finalize { - [self close]; - [super finalize]; -} - -- (void)dealloc { - [self close]; - FMDBRelease(_query); -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - -- (void)close { - if (_statement) { - sqlite3_finalize(_statement); - _statement = 0x00; - } - - _inUse = NO; -} - -- (void)reset { - if (_statement) { - sqlite3_reset(_statement); - } - - _inUse = NO; -} - -- (NSString*)description { - return [NSString stringWithFormat:@"%@ %ld hit(s) for query %@", [super description], _useCount, _query]; -} - - -@end - diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h deleted file mode 100644 index e35df93..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h +++ /dev/null @@ -1,267 +0,0 @@ -// -// FMDatabaseAdditions.h -// fmdb -// -// Created by August Mueller on 10/30/05. -// Copyright 2005 Flying Meat Inc.. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "FMDatabase.h" - - -/** Category of additions for `<FMDatabase>` class. - - ### See also - - - `<FMDatabase>` - */ - -@interface FMDatabase (FMDatabaseAdditions) - -///---------------------------------------- -/// @name Return results of SQL to variable -///---------------------------------------- - -/** Return `int` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `int` value. - */ - -- (int)intForQuery:(NSString*)query, ...; - -/** Return `long` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `long` value. - */ - -- (long)longForQuery:(NSString*)query, ...; - -/** Return `BOOL` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `BOOL` value. - */ - -- (BOOL)boolForQuery:(NSString*)query, ...; - -/** Return `double` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `double` value. - */ - -- (double)doubleForQuery:(NSString*)query, ...; - -/** Return `NSString` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `NSString` value. - */ - -- (NSString*)stringForQuery:(NSString*)query, ...; - -/** Return `NSData` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `NSData` value. - */ - -- (NSData*)dataForQuery:(NSString*)query, ...; - -/** Return `NSDate` value for query - - @param query The SQL query to be performed. - @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query. - - @return `NSDate` value. - */ - -- (NSDate*)dateForQuery:(NSString*)query, ...; - - -// Notice that there's no dataNoCopyForQuery:. -// That would be a bad idea, because we close out the result set, and then what -// happens to the data that we just didn't copy? Who knows, not I. - - -///-------------------------------- -/// @name Schema related operations -///-------------------------------- - -/** Does table exist in database? - - @param tableName The name of the table being looked for. - - @return `YES` if table found; `NO` if not found. - */ - -- (BOOL)tableExists:(NSString*)tableName; - -/** The schema of the database. - - This will be the schema for the entire database. For each entity, each row of the result set will include the following fields: - - - `type` - The type of entity (e.g. table, index, view, or trigger) - - `name` - The name of the object - - `tbl_name` - The name of the table to which the object references - - `rootpage` - The page number of the root b-tree page for tables and indices - - `sql` - The SQL that created the entity - - @return `FMResultSet` of schema; `nil` on error. - - @see [SQLite File Format](http://www.sqlite.org/fileformat.html) - */ - -- (FMResultSet*)getSchema; - -/** The schema of the database. - - This will be the schema for a particular table as report by SQLite `PRAGMA`, for example: - - PRAGMA table_info('employees') - - This will report: - - - `cid` - The column ID number - - `name` - The name of the column - - `type` - The data type specified for the column - - `notnull` - whether the field is defined as NOT NULL (i.e. values required) - - `dflt_value` - The default value for the column - - `pk` - Whether the field is part of the primary key of the table - - @param tableName The name of the table for whom the schema will be returned. - - @return `FMResultSet` of schema; `nil` on error. - - @see [table_info](http://www.sqlite.org/pragma.html#pragma_table_info) - */ - -- (FMResultSet*)getTableSchema:(NSString*)tableName; - -/** Test to see if particular column exists for particular table in database - - @param columnName The name of the column. - - @param tableName The name of the table. - - @return `YES` if column exists in table in question; `NO` otherwise. - */ - -- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName; - -/** Test to see if particular column exists for particular table in database - - @param columnName The name of the column. - - @param tableName The name of the table. - - @return `YES` if column exists in table in question; `NO` otherwise. - - @see columnExists:inTableWithName: - - @warning Deprecated - use `<columnExists:inTableWithName:>` instead. - */ - -- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __attribute__ ((deprecated)); - - -/** Validate SQL statement - - This validates SQL statement by performing `sqlite3_prepare_v2`, but not returning the results, but instead immediately calling `sqlite3_finalize`. - - @param sql The SQL statement being validated. - - @param error This is a pointer to a `NSError` object that will receive the autoreleased `NSError` object if there was any error. If this is `nil`, no `NSError` result will be returned. - - @return `YES` if validation succeeded without incident; `NO` otherwise. - - */ - -- (BOOL)validateSQL:(NSString*)sql error:(NSError**)error; - - -#if SQLITE_VERSION_NUMBER >= 3007017 - -///----------------------------------- -/// @name Application identifier tasks -///----------------------------------- - -/** Retrieve application ID - - @return The `uint32_t` numeric value of the application ID. - - @see setApplicationID: - */ - -- (uint32_t)applicationID; - -/** Set the application ID - - @param appID The `uint32_t` numeric value of the application ID. - - @see applicationID - */ - -- (void)setApplicationID:(uint32_t)appID; - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE -/** Retrieve application ID string - - @return The `NSString` value of the application ID. - - @see setApplicationIDString: - */ - - -- (NSString*)applicationIDString; - -/** Set the application ID string - - @param string The `NSString` value of the application ID. - - @see applicationIDString - */ - -- (void)setApplicationIDString:(NSString*)string; -#endif - -#endif - -///----------------------------------- -/// @name user version identifier tasks -///----------------------------------- - -/** Retrieve user version - - @return The `uint32_t` numeric value of the user version. - - @see setUserVersion: - */ - -- (uint32_t)userVersion; - -/** Set the user-version - - @param version The `uint32_t` numeric value of the user version. - - @see userVersion - */ - -- (void)setUserVersion:(uint32_t)version; - -@end diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m deleted file mode 100644 index 4ab35fa..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m +++ /dev/null @@ -1,224 +0,0 @@ -// -// FMDatabaseAdditions.m -// fmdb -// -// Created by August Mueller on 10/30/05. -// Copyright 2005 Flying Meat Inc.. All rights reserved. -// - -#import "FMDatabase.h" -#import "FMDatabaseAdditions.h" -#import "TargetConditionals.h" - -@interface FMDatabase (PrivateStuff) -- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args; -@end - -@implementation FMDatabase (FMDatabaseAdditions) - -#define RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(type, sel) \ -va_list args; \ -va_start(args, query); \ -FMResultSet *resultSet = [self executeQuery:query withArgumentsInArray:0x00 orDictionary:0x00 orVAList:args]; \ -va_end(args); \ -if (![resultSet next]) { return (type)0; } \ -type ret = [resultSet sel:0]; \ -[resultSet close]; \ -[resultSet setParentDB:nil]; \ -return ret; - - -- (NSString*)stringForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSString *, stringForColumnIndex); -} - -- (int)intForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(int, intForColumnIndex); -} - -- (long)longForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(long, longForColumnIndex); -} - -- (BOOL)boolForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(BOOL, boolForColumnIndex); -} - -- (double)doubleForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(double, doubleForColumnIndex); -} - -- (NSData*)dataForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSData *, dataForColumnIndex); -} - -- (NSDate*)dateForQuery:(NSString*)query, ... { - RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSDate *, dateForColumnIndex); -} - - -- (BOOL)tableExists:(NSString*)tableName { - - tableName = [tableName lowercaseString]; - - FMResultSet *rs = [self executeQuery:@"select [sql] from sqlite_master where [type] = 'table' and lower(name) = ?", tableName]; - - //if at least one next exists, table exists - BOOL returnBool = [rs next]; - - //close and free object - [rs close]; - - return returnBool; -} - -/* - get table with list of tables: result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING] - check if table exist in database (patch from OZLB) -*/ -- (FMResultSet*)getSchema { - - //result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING] - FMResultSet *rs = [self executeQuery:@"SELECT type, name, tbl_name, rootpage, sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type != 'meta' AND name NOT LIKE 'sqlite_%' ORDER BY tbl_name, type DESC, name"]; - - return rs; -} - -/* - get table schema: result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER] -*/ -- (FMResultSet*)getTableSchema:(NSString*)tableName { - - //result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER] - FMResultSet *rs = [self executeQuery:[NSString stringWithFormat: @"pragma table_info('%@')", tableName]]; - - return rs; -} - -- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName { - - BOOL returnBool = NO; - - tableName = [tableName lowercaseString]; - columnName = [columnName lowercaseString]; - - FMResultSet *rs = [self getTableSchema:tableName]; - - //check if column is present in table schema - while ([rs next]) { - if ([[[rs stringForColumn:@"name"] lowercaseString] isEqualToString:columnName]) { - returnBool = YES; - break; - } - } - - //If this is not done FMDatabase instance stays out of pool - [rs close]; - - return returnBool; -} - - -#if SQLITE_VERSION_NUMBER >= 3007017 - -- (uint32_t)applicationID { - - uint32_t r = 0; - - FMResultSet *rs = [self executeQuery:@"pragma application_id"]; - - if ([rs next]) { - r = (uint32_t)[rs longLongIntForColumnIndex:0]; - } - - [rs close]; - - return r; -} - -- (void)setApplicationID:(uint32_t)appID { - NSString *query = [NSString stringWithFormat:@"pragma application_id=%d", appID]; - FMResultSet *rs = [self executeQuery:query]; - [rs next]; - [rs close]; -} - - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE -- (NSString*)applicationIDString { - NSString *s = NSFileTypeForHFSTypeCode([self applicationID]); - - assert([s length] == 6); - - s = [s substringWithRange:NSMakeRange(1, 4)]; - - - return s; - -} - -- (void)setApplicationIDString:(NSString*)s { - - if ([s length] != 4) { - NSLog(@"setApplicationIDString: string passed is not exactly 4 chars long. (was %ld)", [s length]); - } - - [self setApplicationID:NSHFSTypeCodeFromFileType([NSString stringWithFormat:@"'%@'", s])]; -} - - -#endif - -#endif - -- (uint32_t)userVersion { - uint32_t r = 0; - - FMResultSet *rs = [self executeQuery:@"pragma user_version"]; - - if ([rs next]) { - r = (uint32_t)[rs longLongIntForColumnIndex:0]; - } - - [rs close]; - return r; -} - -- (void)setUserVersion:(uint32_t)version { - NSString *query = [NSString stringWithFormat:@"pragma user_version = %d", version]; - FMResultSet *rs = [self executeQuery:query]; - [rs next]; - [rs close]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" - -- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __attribute__ ((deprecated)) { - return [self columnExists:columnName inTableWithName:tableName]; -} - -#pragma clang diagnostic pop - - -- (BOOL)validateSQL:(NSString*)sql error:(NSError**)error { - sqlite3_stmt *pStmt = NULL; - BOOL validationSucceeded = YES; - - int rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0); - if (rc != SQLITE_OK) { - validationSucceeded = NO; - if (error) { - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:[self lastErrorCode] - userInfo:[NSDictionary dictionaryWithObject:[self lastErrorMessage] - forKey:NSLocalizedDescriptionKey]]; - } - } - - sqlite3_finalize(pStmt); - - return validationSucceeded; -} - -@end diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.h b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.h deleted file mode 100644 index 692b8ae..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.h +++ /dev/null @@ -1,204 +0,0 @@ -// -// FMDatabasePool.h -// fmdb -// -// Created by August Mueller on 6/22/11. -// Copyright 2011 Flying Meat Inc. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "sqlite3.h" - -@class FMDatabase; - -/** Pool of `<FMDatabase>` objects. - - ### See also - - - `<FMDatabaseQueue>` - - `<FMDatabase>` - - @warning Before using `FMDatabasePool`, please consider using `<FMDatabaseQueue>` instead. - - If you really really really know what you're doing and `FMDatabasePool` is what - you really really need (ie, you're using a read only database), OK you can use - it. But just be careful not to deadlock! - - For an example on deadlocking, search for: - `ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD` - in the main.m file. - */ - -@interface FMDatabasePool : NSObject { - NSString *_path; - - dispatch_queue_t _lockQueue; - - NSMutableArray *_databaseInPool; - NSMutableArray *_databaseOutPool; - - __unsafe_unretained id _delegate; - - NSUInteger _maximumNumberOfDatabasesToCreate; - int _openFlags; -} - -/** Database path */ - -@property (atomic, retain) NSString *path; - -/** Delegate object */ - -@property (atomic, assign) id delegate; - -/** Maximum number of databases to create */ - -@property (atomic, assign) NSUInteger maximumNumberOfDatabasesToCreate; - -/** Open flags */ - -@property (atomic, readonly) int openFlags; - - -///--------------------- -/// @name Initialization -///--------------------- - -/** Create pool using path. - - @param aPath The file path of the database. - - @return The `FMDatabasePool` object. `nil` on error. - */ - -+ (instancetype)databasePoolWithPath:(NSString*)aPath; - -/** Create pool using path and specified flags - - @param aPath The file path of the database. - @param openFlags Flags passed to the openWithFlags method of the database - - @return The `FMDatabasePool` object. `nil` on error. - */ - -+ (instancetype)databasePoolWithPath:(NSString*)aPath flags:(int)openFlags; - -/** Create pool using path. - - @param aPath The file path of the database. - - @return The `FMDatabasePool` object. `nil` on error. - */ - -- (instancetype)initWithPath:(NSString*)aPath; - -/** Create pool using path and specified flags. - - @param aPath The file path of the database. - @param openFlags Flags passed to the openWithFlags method of the database - - @return The `FMDatabasePool` object. `nil` on error. - */ - -- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags; - -///------------------------------------------------ -/// @name Keeping track of checked in/out databases -///------------------------------------------------ - -/** Number of checked-in databases in pool - - @returns Number of databases - */ - -- (NSUInteger)countOfCheckedInDatabases; - -/** Number of checked-out databases in pool - - @returns Number of databases - */ - -- (NSUInteger)countOfCheckedOutDatabases; - -/** Total number of databases in pool - - @returns Number of databases - */ - -- (NSUInteger)countOfOpenDatabases; - -/** Release all databases in pool */ - -- (void)releaseAllDatabases; - -///------------------------------------------ -/// @name Perform database operations in pool -///------------------------------------------ - -/** Synchronously perform database operations in pool. - - @param block The code to be run on the `FMDatabasePool` pool. - */ - -- (void)inDatabase:(void (^)(FMDatabase *db))block; - -/** Synchronously perform database operations in pool using transaction. - - @param block The code to be run on the `FMDatabasePool` pool. - */ - -- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; - -/** Synchronously perform database operations in pool using deferred transaction. - - @param block The code to be run on the `FMDatabasePool` pool. - */ - -- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; - -#if SQLITE_VERSION_NUMBER >= 3007000 - -/** Synchronously perform database operations in pool using save point. - - @param block The code to be run on the `FMDatabasePool` pool. - - @return `NSError` object if error; `nil` if successful. - - @warning You can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. If you need to nest, use `<[FMDatabase startSavePointWithName:error:]>` instead. -*/ - -- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block; -#endif - -@end - - -/** FMDatabasePool delegate category - - This is a category that defines the protocol for the FMDatabasePool delegate - */ - -@interface NSObject (FMDatabasePoolDelegate) - -/** Asks the delegate whether database should be added to the pool. - - @param pool The `FMDatabasePool` object. - @param database The `FMDatabase` object. - - @return `YES` if it should add database to pool; `NO` if not. - - */ - -- (BOOL)databasePool:(FMDatabasePool*)pool shouldAddDatabaseToPool:(FMDatabase*)database; - -/** Tells the delegate that database was added to the pool. - - @param pool The `FMDatabasePool` object. - @param database The `FMDatabase` object. - - */ - -- (void)databasePool:(FMDatabasePool*)pool didAddDatabase:(FMDatabase*)database; - -@end - diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.m b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.m deleted file mode 100644 index 38114a9..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabasePool.m +++ /dev/null @@ -1,273 +0,0 @@ -// -// FMDatabasePool.m -// fmdb -// -// Created by August Mueller on 6/22/11. -// Copyright 2011 Flying Meat Inc. All rights reserved. -// - -#import "FMDatabasePool.h" -#import "FMDatabase.h" - -@interface FMDatabasePool() - -- (void)pushDatabaseBackInPool:(FMDatabase*)db; -- (FMDatabase*)db; - -@end - - -@implementation FMDatabasePool -@synthesize path=_path; -@synthesize delegate=_delegate; -@synthesize maximumNumberOfDatabasesToCreate=_maximumNumberOfDatabasesToCreate; -@synthesize openFlags=_openFlags; - - -+ (instancetype)databasePoolWithPath:(NSString*)aPath { - return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath]); -} - -+ (instancetype)databasePoolWithPath:(NSString*)aPath flags:(int)openFlags { - return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath flags:openFlags]); -} - -- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { - - self = [super init]; - - if (self != nil) { - _path = [aPath copy]; - _lockQueue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL); - _databaseInPool = FMDBReturnRetained([NSMutableArray array]); - _databaseOutPool = FMDBReturnRetained([NSMutableArray array]); - _openFlags = openFlags; - } - - return self; -} - -- (instancetype)initWithPath:(NSString*)aPath -{ - // default flags for sqlite3_open - return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE]; -} - -- (instancetype)init { - return [self initWithPath:nil]; -} - - -- (void)dealloc { - - _delegate = 0x00; - FMDBRelease(_path); - FMDBRelease(_databaseInPool); - FMDBRelease(_databaseOutPool); - - if (_lockQueue) { - FMDBDispatchQueueRelease(_lockQueue); - _lockQueue = 0x00; - } -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - - -- (void)executeLocked:(void (^)(void))aBlock { - dispatch_sync(_lockQueue, aBlock); -} - -- (void)pushDatabaseBackInPool:(FMDatabase*)db { - - if (!db) { // db can be null if we set an upper bound on the # of databases to create. - return; - } - - [self executeLocked:^() { - - if ([_databaseInPool containsObject:db]) { - [[NSException exceptionWithName:@"Database already in pool" reason:@"The FMDatabase being put back into the pool is already present in the pool" userInfo:nil] raise]; - } - - [_databaseInPool addObject:db]; - [_databaseOutPool removeObject:db]; - - }]; -} - -- (FMDatabase*)db { - - __block FMDatabase *db; - - - [self executeLocked:^() { - db = [_databaseInPool lastObject]; - - BOOL shouldNotifyDelegate = NO; - - if (db) { - [_databaseOutPool addObject:db]; - [_databaseInPool removeLastObject]; - } - else { - - if (_maximumNumberOfDatabasesToCreate) { - NSUInteger currentCount = [_databaseOutPool count] + [_databaseInPool count]; - - if (currentCount >= _maximumNumberOfDatabasesToCreate) { - NSLog(@"Maximum number of databases (%ld) has already been reached!", (long)currentCount); - return; - } - } - - db = [FMDatabase databaseWithPath:_path]; - shouldNotifyDelegate = YES; - } - - //This ensures that the db is opened before returning -#if SQLITE_VERSION_NUMBER >= 3005000 - BOOL success = [db openWithFlags:_openFlags]; -#else - BOOL success = [db open]; -#endif - if (success) { - if ([_delegate respondsToSelector:@selector(databasePool:shouldAddDatabaseToPool:)] && ![_delegate databasePool:self shouldAddDatabaseToPool:db]) { - [db close]; - db = 0x00; - } - else { - //It should not get added in the pool twice if lastObject was found - if (![_databaseOutPool containsObject:db]) { - [_databaseOutPool addObject:db]; - - if (shouldNotifyDelegate && [_delegate respondsToSelector:@selector(databasePool:didAddDatabase:)]) { - [_delegate databasePool:self didAddDatabase:db]; - } - } - } - } - else { - NSLog(@"Could not open up the database at path %@", _path); - db = 0x00; - } - }]; - - return db; -} - -- (NSUInteger)countOfCheckedInDatabases { - - __block NSUInteger count; - - [self executeLocked:^() { - count = [_databaseInPool count]; - }]; - - return count; -} - -- (NSUInteger)countOfCheckedOutDatabases { - - __block NSUInteger count; - - [self executeLocked:^() { - count = [_databaseOutPool count]; - }]; - - return count; -} - -- (NSUInteger)countOfOpenDatabases { - __block NSUInteger count; - - [self executeLocked:^() { - count = [_databaseOutPool count] + [_databaseInPool count]; - }]; - - return count; -} - -- (void)releaseAllDatabases { - [self executeLocked:^() { - [_databaseOutPool removeAllObjects]; - [_databaseInPool removeAllObjects]; - }]; -} - -- (void)inDatabase:(void (^)(FMDatabase *db))block { - - FMDatabase *db = [self db]; - - block(db); - - [self pushDatabaseBackInPool:db]; -} - -- (void)beginTransaction:(BOOL)useDeferred withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block { - - BOOL shouldRollback = NO; - - FMDatabase *db = [self db]; - - if (useDeferred) { - [db beginDeferredTransaction]; - } - else { - [db beginTransaction]; - } - - - block(db, &shouldRollback); - - if (shouldRollback) { - [db rollback]; - } - else { - [db commit]; - } - - [self pushDatabaseBackInPool:db]; -} - -- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { - [self beginTransaction:YES withBlock:block]; -} - -- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { - [self beginTransaction:NO withBlock:block]; -} -#if SQLITE_VERSION_NUMBER >= 3007000 -- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { - - static unsigned long savePointIdx = 0; - - NSString *name = [NSString stringWithFormat:@"savePoint%ld", savePointIdx++]; - - BOOL shouldRollback = NO; - - FMDatabase *db = [self db]; - - NSError *err = 0x00; - - if (![db startSavePointWithName:name error:&err]) { - [self pushDatabaseBackInPool:db]; - return err; - } - - block(db, &shouldRollback); - - if (shouldRollback) { - // We need to rollback and release this savepoint to remove it - [db rollbackToSavePointWithName:name error:&err]; - } - [db releaseSavePointWithName:name error:&err]; - - [self pushDatabaseBackInPool:db]; - - return err; -} -#endif - -@end diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.h b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.h deleted file mode 100644 index 34c0750..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.h +++ /dev/null @@ -1,174 +0,0 @@ -// -// FMDatabaseQueue.h -// fmdb -// -// Created by August Mueller on 6/22/11. -// Copyright 2011 Flying Meat Inc. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import "sqlite3.h" - -@class FMDatabase; - -/** To perform queries and updates on multiple threads, you'll want to use `FMDatabaseQueue`. - - Using a single instance of `<FMDatabase>` from multiple threads at once is a bad idea. It has always been OK to make a `<FMDatabase>` object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. - - Instead, use `FMDatabaseQueue`. Here's how to use it: - - First, make your queue. - - FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; - - Then use it like so: - - [queue inDatabase:^(FMDatabase *db) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; - - FMResultSet *rs = [db executeQuery:@"select * from foo"]; - while ([rs next]) { - //… - } - }]; - - An easy way to wrap things up in a transaction can be done like this: - - [queue inTransaction:^(FMDatabase *db, BOOL *rollback) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; - - if (whoopsSomethingWrongHappened) { - *rollback = YES; - return; - } - // etc… - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; - }]; - - `FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class). So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy. - - ### See also - - - `<FMDatabase>` - - @warning Do not instantiate a single `<FMDatabase>` object and use it across multiple threads. Use `FMDatabaseQueue` instead. - - @warning The calls to `FMDatabaseQueue`'s methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread. - - */ - -@interface FMDatabaseQueue : NSObject { - NSString *_path; - dispatch_queue_t _queue; - FMDatabase *_db; - int _openFlags; -} - -/** Path of database */ - -@property (atomic, retain) NSString *path; - -/** Open flags */ - -@property (atomic, readonly) int openFlags; - -///---------------------------------------------------- -/// @name Initialization, opening, and closing of queue -///---------------------------------------------------- - -/** Create queue using path. - - @param aPath The file path of the database. - - @return The `FMDatabaseQueue` object. `nil` on error. - */ - -+ (instancetype)databaseQueueWithPath:(NSString*)aPath; - -/** Create queue using path and specified flags. - - @param aPath The file path of the database. - @param openFlags Flags passed to the openWithFlags method of the database - - @return The `FMDatabaseQueue` object. `nil` on error. - */ -+ (instancetype)databaseQueueWithPath:(NSString*)aPath flags:(int)openFlags; - -/** Create queue using path. - - @param aPath The file path of the database. - - @return The `FMDatabaseQueue` object. `nil` on error. - */ - -- (instancetype)initWithPath:(NSString*)aPath; - -/** Create queue using path and specified flags. - - @param aPath The file path of the database. - @param openFlags Flags passed to the openWithFlags method of the database - - @return The `FMDatabaseQueue` object. `nil` on error. - */ - -- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags; - -/** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object. - - Subclasses can override this method to return specified Class of 'FMDatabase' subclass. - - @return The Class of 'FMDatabase' subclass, that will be used to instantiate database object. - */ - -+ (Class)databaseClass; - -/** Close database used by queue. */ - -- (void)close; - -///----------------------------------------------- -/// @name Dispatching database operations to queue -///----------------------------------------------- - -/** Synchronously perform database operations on queue. - - @param block The code to be run on the queue of `FMDatabaseQueue` - */ - -- (void)inDatabase:(void (^)(FMDatabase *db))block; - -/** Synchronously perform database operations on queue, using transactions. - - @param block The code to be run on the queue of `FMDatabaseQueue` - */ - -- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; - -/** Synchronously perform database operations on queue, using deferred transactions. - - @param block The code to be run on the queue of `FMDatabaseQueue` - */ - -- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; - -///----------------------------------------------- -/// @name Dispatching database operations to queue -///----------------------------------------------- - -/** Synchronously perform database operations using save point. - - @param block The code to be run on the queue of `FMDatabaseQueue` - */ - -#if SQLITE_VERSION_NUMBER >= 3007000 -// NOTE: you can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. -// If you need to nest, use FMDatabase's startSavePointWithName:error: instead. -- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block; -#endif - -@end - diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.m b/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.m deleted file mode 100644 index 46a84ea..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMDatabaseQueue.m +++ /dev/null @@ -1,232 +0,0 @@ -// -// FMDatabaseQueue.m -// fmdb -// -// Created by August Mueller on 6/22/11. -// Copyright 2011 Flying Meat Inc. All rights reserved. -// - -#import "FMDatabaseQueue.h" -#import "FMDatabase.h" - -/* - - Note: we call [self retain]; before using dispatch_sync, just incase - FMDatabaseQueue is released on another thread and we're in the middle of doing - something in dispatch_sync - - */ - -/* - * A key used to associate the FMDatabaseQueue object with the dispatch_queue_t it uses. - * This in turn is used for deadlock detection by seeing if inDatabase: is called on - * the queue's dispatch queue, which should not happen and causes a deadlock. - */ -static const void * const kDispatchQueueSpecificKey = &kDispatchQueueSpecificKey; - -@implementation FMDatabaseQueue - -@synthesize path = _path; -@synthesize openFlags = _openFlags; - -+ (instancetype)databaseQueueWithPath:(NSString*)aPath { - - FMDatabaseQueue *q = [[self alloc] initWithPath:aPath]; - - FMDBAutorelease(q); - - return q; -} - -+ (instancetype)databaseQueueWithPath:(NSString*)aPath flags:(int)openFlags { - - FMDatabaseQueue *q = [[self alloc] initWithPath:aPath flags:openFlags]; - - FMDBAutorelease(q); - - return q; -} - -+ (Class)databaseClass { - return [FMDatabase class]; -} - -- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { - - self = [super init]; - - if (self != nil) { - - _db = [[[self class] databaseClass] databaseWithPath:aPath]; - FMDBRetain(_db); - -#if SQLITE_VERSION_NUMBER >= 3005000 - BOOL success = [_db openWithFlags:openFlags]; -#else - BOOL success = [_db open]; -#endif - if (!success) { - NSLog(@"Could not create database queue for path %@", aPath); - FMDBRelease(self); - return 0x00; - } - - _path = FMDBReturnRetained(aPath); - - _queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL); - dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL); - _openFlags = openFlags; - } - - return self; -} - -- (instancetype)initWithPath:(NSString*)aPath { - - // default flags for sqlite3_open - return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE]; -} - -- (instancetype)init { - return [self initWithPath:nil]; -} - - -- (void)dealloc { - - FMDBRelease(_db); - FMDBRelease(_path); - - if (_queue) { - FMDBDispatchQueueRelease(_queue); - _queue = 0x00; - } -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - -- (void)close { - FMDBRetain(self); - dispatch_sync(_queue, ^() { - [_db close]; - FMDBRelease(_db); - _db = 0x00; - }); - FMDBRelease(self); -} - -- (FMDatabase*)database { - if (!_db) { - _db = FMDBReturnRetained([FMDatabase databaseWithPath:_path]); - -#if SQLITE_VERSION_NUMBER >= 3005000 - BOOL success = [_db openWithFlags:_openFlags]; -#else - BOOL success = [db open]; -#endif - if (!success) { - NSLog(@"FMDatabaseQueue could not reopen database for path %@", _path); - FMDBRelease(_db); - _db = 0x00; - return 0x00; - } - } - - return _db; -} - -- (void)inDatabase:(void (^)(FMDatabase *db))block { - /* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue - * and then check it against self to make sure we're not about to deadlock. */ - FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey); - assert(currentSyncQueue != self && "inDatabase: was called reentrantly on the same queue, which would lead to a deadlock"); - - FMDBRetain(self); - - dispatch_sync(_queue, ^() { - - FMDatabase *db = [self database]; - block(db); - - if ([db hasOpenResultSets]) { - NSLog(@"Warning: there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]"); - -#ifdef DEBUG - NSSet *openSetCopy = FMDBReturnAutoreleased([[db valueForKey:@"_openResultSets"] copy]); - for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) { - FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue]; - NSLog(@"query: '%@'", [rs query]); - } -#endif - } - }); - - FMDBRelease(self); -} - - -- (void)beginTransaction:(BOOL)useDeferred withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block { - FMDBRetain(self); - dispatch_sync(_queue, ^() { - - BOOL shouldRollback = NO; - - if (useDeferred) { - [[self database] beginDeferredTransaction]; - } - else { - [[self database] beginTransaction]; - } - - block([self database], &shouldRollback); - - if (shouldRollback) { - [[self database] rollback]; - } - else { - [[self database] commit]; - } - }); - - FMDBRelease(self); -} - -- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { - [self beginTransaction:YES withBlock:block]; -} - -- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { - [self beginTransaction:NO withBlock:block]; -} - -#if SQLITE_VERSION_NUMBER >= 3007000 -- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { - - static unsigned long savePointIdx = 0; - __block NSError *err = 0x00; - FMDBRetain(self); - dispatch_sync(_queue, ^() { - - NSString *name = [NSString stringWithFormat:@"savePoint%ld", savePointIdx++]; - - BOOL shouldRollback = NO; - - if ([[self database] startSavePointWithName:name error:&err]) { - - block([self database], &shouldRollback); - - if (shouldRollback) { - // We need to rollback and release this savepoint to remove it - [[self database] rollbackToSavePointWithName:name error:&err]; - } - [[self database] releaseSavePointWithName:name error:&err]; - - } - }); - FMDBRelease(self); - return err; -} -#endif - -@end diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.h b/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.h deleted file mode 100644 index 8585a69..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.h +++ /dev/null @@ -1,456 +0,0 @@ -#import <Foundation/Foundation.h> -#import "sqlite3.h" - -#ifndef __has_feature // Optional. -#define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif - -#ifndef NS_RETURNS_NOT_RETAINED -#if __has_feature(attribute_ns_returns_not_retained) -#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) -#else -#define NS_RETURNS_NOT_RETAINED -#endif -#endif - -@class FMDatabase; -@class FMStatement; - -/** Represents the results of executing a query on an `<FMDatabase>`. - - ### See also - - - `<FMDatabase>` - */ - -@interface FMResultSet : NSObject { - FMDatabase *_parentDB; - FMStatement *_statement; - - NSString *_query; - NSMutableDictionary *_columnNameToIndexMap; -} - -///----------------- -/// @name Properties -///----------------- - -/** Executed query */ - -@property (atomic, retain) NSString *query; - -/** `NSMutableDictionary` mapping column names to numeric index */ - -@property (readonly) NSMutableDictionary *columnNameToIndexMap; - -/** `FMStatement` used by result set. */ - -@property (atomic, retain) FMStatement *statement; - -///------------------------------------ -/// @name Creating and closing database -///------------------------------------ - -/** Create result set from `<FMStatement>` - - @param statement A `<FMStatement>` to be performed - - @param aDB A `<FMDatabase>` to be used - - @return A `FMResultSet` on success; `nil` on failure - */ - -+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB; - -/** Close result set */ - -- (void)close; - -- (void)setParentDB:(FMDatabase *)newDb; - -///--------------------------------------- -/// @name Iterating through the result set -///--------------------------------------- - -/** Retrieve next row for result set. - - You must always invoke `next` before attempting to access the values returned in a query, even if you're only expecting one. - - @return `YES` if row successfully retrieved; `NO` if end of result set reached - - @see hasAnotherRow - */ - -- (BOOL)next; - -/** Did the last call to `<next>` succeed in retrieving another row? - - @return `YES` if the last call to `<next>` succeeded in retrieving another record; `NO` if not. - - @see next - - @warning The `hasAnotherRow` method must follow a call to `<next>`. If the previous database interaction was something other than a call to `next`, then this method may return `NO`, whether there is another row of data or not. - */ - -- (BOOL)hasAnotherRow; - -///--------------------------------------------- -/// @name Retrieving information from result set -///--------------------------------------------- - -/** How many columns in result set - - @return Integer value of the number of columns. - */ - -- (int)columnCount; - -/** Column index for column name - - @param columnName `NSString` value of the name of the column. - - @return Zero-based index for column. - */ - -- (int)columnIndexForName:(NSString*)columnName; - -/** Column name for column index - - @param columnIdx Zero-based index for column. - - @return columnName `NSString` value of the name of the column. - */ - -- (NSString*)columnNameForIndex:(int)columnIdx; - -/** Result set integer value for column. - - @param columnName `NSString` value of the name of the column. - - @return `int` value of the result set's column. - */ - -- (int)intForColumn:(NSString*)columnName; - -/** Result set integer value for column. - - @param columnIdx Zero-based index for column. - - @return `int` value of the result set's column. - */ - -- (int)intForColumnIndex:(int)columnIdx; - -/** Result set `long` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `long` value of the result set's column. - */ - -- (long)longForColumn:(NSString*)columnName; - -/** Result set long value for column. - - @param columnIdx Zero-based index for column. - - @return `long` value of the result set's column. - */ - -- (long)longForColumnIndex:(int)columnIdx; - -/** Result set `long long int` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `long long int` value of the result set's column. - */ - -- (long long int)longLongIntForColumn:(NSString*)columnName; - -/** Result set `long long int` value for column. - - @param columnIdx Zero-based index for column. - - @return `long long int` value of the result set's column. - */ - -- (long long int)longLongIntForColumnIndex:(int)columnIdx; - -/** Result set `unsigned long long int` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `unsigned long long int` value of the result set's column. - */ - -- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName; - -/** Result set `unsigned long long int` value for column. - - @param columnIdx Zero-based index for column. - - @return `unsigned long long int` value of the result set's column. - */ - -- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx; - -/** Result set `BOOL` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `BOOL` value of the result set's column. - */ - -- (BOOL)boolForColumn:(NSString*)columnName; - -/** Result set `BOOL` value for column. - - @param columnIdx Zero-based index for column. - - @return `BOOL` value of the result set's column. - */ - -- (BOOL)boolForColumnIndex:(int)columnIdx; - -/** Result set `double` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `double` value of the result set's column. - - */ - -- (double)doubleForColumn:(NSString*)columnName; - -/** Result set `double` value for column. - - @param columnIdx Zero-based index for column. - - @return `double` value of the result set's column. - - */ - -- (double)doubleForColumnIndex:(int)columnIdx; - -/** Result set `NSString` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `NSString` value of the result set's column. - - */ - -- (NSString*)stringForColumn:(NSString*)columnName; - -/** Result set `NSString` value for column. - - @param columnIdx Zero-based index for column. - - @return `NSString` value of the result set's column. - */ - -- (NSString*)stringForColumnIndex:(int)columnIdx; - -/** Result set `NSDate` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `NSDate` value of the result set's column. - */ - -- (NSDate*)dateForColumn:(NSString*)columnName; - -/** Result set `NSDate` value for column. - - @param columnIdx Zero-based index for column. - - @return `NSDate` value of the result set's column. - - */ - -- (NSDate*)dateForColumnIndex:(int)columnIdx; - -/** Result set `NSData` value for column. - - This is useful when storing binary data in table (such as image or the like). - - @param columnName `NSString` value of the name of the column. - - @return `NSData` value of the result set's column. - - */ - -- (NSData*)dataForColumn:(NSString*)columnName; - -/** Result set `NSData` value for column. - - @param columnIdx Zero-based index for column. - - @return `NSData` value of the result set's column. - */ - -- (NSData*)dataForColumnIndex:(int)columnIdx; - -/** Result set `(const unsigned char *)` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `(const unsigned char *)` value of the result set's column. - */ - -- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName; - -/** Result set `(const unsigned char *)` value for column. - - @param columnIdx Zero-based index for column. - - @return `(const unsigned char *)` value of the result set's column. - */ - -- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx; - -/** Result set object for column. - - @param columnName `NSString` value of the name of the column. - - @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object. - - @see objectForKeyedSubscript: - */ - -- (id)objectForColumnName:(NSString*)columnName; - -/** Result set object for column. - - @param columnIdx Zero-based index for column. - - @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object. - - @see objectAtIndexedSubscript: - */ - -- (id)objectForColumnIndex:(int)columnIdx; - -/** Result set object for column. - - This method allows the use of the "boxed" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported: - - id result = rs[@"employee_name"]; - - This simplified syntax is equivalent to calling: - - id result = [rs objectForKeyedSubscript:@"employee_name"]; - - which is, it turns out, equivalent to calling: - - id result = [rs objectForColumnName:@"employee_name"]; - - @param columnName `NSString` value of the name of the column. - - @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object. - */ - -- (id)objectForKeyedSubscript:(NSString *)columnName; - -/** Result set object for column. - - This method allows the use of the "boxed" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported: - - id result = rs[0]; - - This simplified syntax is equivalent to calling: - - id result = [rs objectForKeyedSubscript:0]; - - which is, it turns out, equivalent to calling: - - id result = [rs objectForColumnName:0]; - - @param columnIdx Zero-based index for column. - - @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object. - */ - -- (id)objectAtIndexedSubscript:(int)columnIdx; - -/** Result set `NSData` value for column. - - @param columnName `NSString` value of the name of the column. - - @return `NSData` value of the result set's column. - - @warning If you are going to use this data after you iterate over the next row, or after you close the -result set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`) -If you don't, you're going to be in a world of hurt when you try and use the data. - - */ - -- (NSData*)dataNoCopyForColumn:(NSString*)columnName NS_RETURNS_NOT_RETAINED; - -/** Result set `NSData` value for column. - - @param columnIdx Zero-based index for column. - - @return `NSData` value of the result set's column. - - @warning If you are going to use this data after you iterate over the next row, or after you close the - result set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`) - If you don't, you're going to be in a world of hurt when you try and use the data. - - */ - -- (NSData*)dataNoCopyForColumnIndex:(int)columnIdx NS_RETURNS_NOT_RETAINED; - -/** Is the column `NULL`? - - @param columnIdx Zero-based index for column. - - @return `YES` if column is `NULL`; `NO` if not `NULL`. - */ - -- (BOOL)columnIndexIsNull:(int)columnIdx; - -/** Is the column `NULL`? - - @param columnName `NSString` value of the name of the column. - - @return `YES` if column is `NULL`; `NO` if not `NULL`. - */ - -- (BOOL)columnIsNull:(NSString*)columnName; - - -/** Returns a dictionary of the row results mapped to case sensitive keys of the column names. - - @returns `NSDictionary` of the row results. - - @warning The keys to the dictionary are case sensitive of the column names. - */ - -- (NSDictionary*)resultDictionary; - -/** Returns a dictionary of the row results - - @see resultDictionary - - @warning **Deprecated**: Please use `<resultDictionary>` instead. Also, beware that `<resultDictionary>` is case sensitive! - */ - -- (NSDictionary*)resultDict __attribute__ ((deprecated)); - -///----------------------------- -/// @name Key value coding magic -///----------------------------- - -/** Performs `setValue` to yield support for key value observing. - - @param object The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe. - - */ - -- (void)kvcMagic:(id)object; - - -@end - diff --git a/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.m b/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.m deleted file mode 100644 index 6bc9622..0000000 --- a/TeamTalk/Pods/FMDB/src/fmdb/FMResultSet.m +++ /dev/null @@ -1,390 +0,0 @@ -#import "FMResultSet.h" -#import "FMDatabase.h" -#import "unistd.h" - -@interface FMDatabase () -- (void)resultSetDidClose:(FMResultSet *)resultSet; -@end - - -@implementation FMResultSet -@synthesize query=_query; -@synthesize statement=_statement; - -+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB { - - FMResultSet *rs = [[FMResultSet alloc] init]; - - [rs setStatement:statement]; - [rs setParentDB:aDB]; - - NSParameterAssert(![statement inUse]); - [statement setInUse:YES]; // weak reference - - return FMDBReturnAutoreleased(rs); -} - -- (void)finalize { - [self close]; - [super finalize]; -} - -- (void)dealloc { - [self close]; - - FMDBRelease(_query); - _query = nil; - - FMDBRelease(_columnNameToIndexMap); - _columnNameToIndexMap = nil; - -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - -- (void)close { - [_statement reset]; - FMDBRelease(_statement); - _statement = nil; - - // we don't need this anymore... (i think) - //[_parentDB setInUse:NO]; - [_parentDB resultSetDidClose:self]; - _parentDB = nil; -} - -- (int)columnCount { - return sqlite3_column_count([_statement statement]); -} - -- (NSMutableDictionary *)columnNameToIndexMap { - if (!_columnNameToIndexMap) { - int columnCount = sqlite3_column_count([_statement statement]); - _columnNameToIndexMap = [[NSMutableDictionary alloc] initWithCapacity:(NSUInteger)columnCount]; - int columnIdx = 0; - for (columnIdx = 0; columnIdx < columnCount; columnIdx++) { - [_columnNameToIndexMap setObject:[NSNumber numberWithInt:columnIdx] - forKey:[[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)] lowercaseString]]; - } - } - return _columnNameToIndexMap; -} - -- (void)kvcMagic:(id)object { - - int columnCount = sqlite3_column_count([_statement statement]); - - int columnIdx = 0; - for (columnIdx = 0; columnIdx < columnCount; columnIdx++) { - - const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx); - - // check for a null row - if (c) { - NSString *s = [NSString stringWithUTF8String:c]; - - [object setValue:s forKey:[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)]]; - } - } -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" - -- (NSDictionary*)resultDict { - - NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]); - - if (num_cols > 0) { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols]; - - NSEnumerator *columnNames = [[self columnNameToIndexMap] keyEnumerator]; - NSString *columnName = nil; - while ((columnName = [columnNames nextObject])) { - id objectValue = [self objectForColumnName:columnName]; - [dict setObject:objectValue forKey:columnName]; - } - - return FMDBReturnAutoreleased([dict copy]); - } - else { - NSLog(@"Warning: There seem to be no columns in this set."); - } - - return nil; -} - -#pragma clang diagnostic pop - -- (NSDictionary*)resultDictionary { - - NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]); - - if (num_cols > 0) { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols]; - - int columnCount = sqlite3_column_count([_statement statement]); - - int columnIdx = 0; - for (columnIdx = 0; columnIdx < columnCount; columnIdx++) { - - NSString *columnName = [NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)]; - id objectValue = [self objectForColumnIndex:columnIdx]; - [dict setObject:objectValue forKey:columnName]; - } - - return dict; - } - else { - NSLog(@"Warning: There seem to be no columns in this set."); - } - - return nil; -} - - - - -- (BOOL)next { - - int rc = sqlite3_step([_statement statement]); - - if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) { - NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [_parentDB databasePath]); - NSLog(@"Database busy"); - } - else if (SQLITE_DONE == rc || SQLITE_ROW == rc) { - // all is well, let's return. - } - else if (SQLITE_ERROR == rc) { - NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle])); - } - else if (SQLITE_MISUSE == rc) { - // uh oh. - NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle])); - } - else { - // wtf? - NSLog(@"Unknown error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle])); - } - - - if (rc != SQLITE_ROW) { - [self close]; - } - - return (rc == SQLITE_ROW); -} - -- (BOOL)hasAnotherRow { - return sqlite3_errcode([_parentDB sqliteHandle]) == SQLITE_ROW; -} - -- (int)columnIndexForName:(NSString*)columnName { - columnName = [columnName lowercaseString]; - - NSNumber *n = [[self columnNameToIndexMap] objectForKey:columnName]; - - if (n) { - return [n intValue]; - } - - NSLog(@"Warning: I could not find the column named '%@'.", columnName); - - return -1; -} - - - -- (int)intForColumn:(NSString*)columnName { - return [self intForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (int)intForColumnIndex:(int)columnIdx { - return sqlite3_column_int([_statement statement], columnIdx); -} - -- (long)longForColumn:(NSString*)columnName { - return [self longForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (long)longForColumnIndex:(int)columnIdx { - return (long)sqlite3_column_int64([_statement statement], columnIdx); -} - -- (long long int)longLongIntForColumn:(NSString*)columnName { - return [self longLongIntForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (long long int)longLongIntForColumnIndex:(int)columnIdx { - return sqlite3_column_int64([_statement statement], columnIdx); -} - -- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName { - return [self unsignedLongLongIntForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx { - return (unsigned long long int)[self longLongIntForColumnIndex:columnIdx]; -} - -- (BOOL)boolForColumn:(NSString*)columnName { - return [self boolForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (BOOL)boolForColumnIndex:(int)columnIdx { - return ([self intForColumnIndex:columnIdx] != 0); -} - -- (double)doubleForColumn:(NSString*)columnName { - return [self doubleForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (double)doubleForColumnIndex:(int)columnIdx { - return sqlite3_column_double([_statement statement], columnIdx); -} - -- (NSString*)stringForColumnIndex:(int)columnIdx { - - if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) { - return nil; - } - - const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx); - - if (!c) { - // null row. - return nil; - } - - return [NSString stringWithUTF8String:c]; -} - -- (NSString*)stringForColumn:(NSString*)columnName { - return [self stringForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSDate*)dateForColumn:(NSString*)columnName { - return [self dateForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSDate*)dateForColumnIndex:(int)columnIdx { - - if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) { - return nil; - } - - return [_parentDB hasDateFormatter] ? [_parentDB dateFromString:[self stringForColumnIndex:columnIdx]] : [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIdx]]; -} - - -- (NSData*)dataForColumn:(NSString*)columnName { - return [self dataForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSData*)dataForColumnIndex:(int)columnIdx { - - if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) { - return nil; - } - - int dataSize = sqlite3_column_bytes([_statement statement], columnIdx); - - NSMutableData *data = [NSMutableData dataWithLength:(NSUInteger)dataSize]; - - memcpy([data mutableBytes], sqlite3_column_blob([_statement statement], columnIdx), dataSize); - - return data; -} - - -- (NSData*)dataNoCopyForColumn:(NSString*)columnName { - return [self dataNoCopyForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSData*)dataNoCopyForColumnIndex:(int)columnIdx { - - if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) { - return nil; - } - - int dataSize = sqlite3_column_bytes([_statement statement], columnIdx); - - NSData *data = [NSData dataWithBytesNoCopy:(void *)sqlite3_column_blob([_statement statement], columnIdx) length:(NSUInteger)dataSize freeWhenDone:NO]; - - return data; -} - - -- (BOOL)columnIndexIsNull:(int)columnIdx { - return sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL; -} - -- (BOOL)columnIsNull:(NSString*)columnName { - return [self columnIndexIsNull:[self columnIndexForName:columnName]]; -} - -- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx { - - if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) { - return nil; - } - - return sqlite3_column_text([_statement statement], columnIdx); -} - -- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName { - return [self UTF8StringForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (id)objectForColumnIndex:(int)columnIdx { - int columnType = sqlite3_column_type([_statement statement], columnIdx); - - id returnValue = nil; - - if (columnType == SQLITE_INTEGER) { - returnValue = [NSNumber numberWithLongLong:[self longLongIntForColumnIndex:columnIdx]]; - } - else if (columnType == SQLITE_FLOAT) { - returnValue = [NSNumber numberWithDouble:[self doubleForColumnIndex:columnIdx]]; - } - else if (columnType == SQLITE_BLOB) { - returnValue = [self dataForColumnIndex:columnIdx]; - } - else { - //default to a string for everything else - returnValue = [self stringForColumnIndex:columnIdx]; - } - - if (returnValue == nil) { - returnValue = [NSNull null]; - } - - return returnValue; -} - -- (id)objectForColumnName:(NSString*)columnName { - - return [self objectForColumnIndex:[self columnIndexForName:columnName]]; -} - -// returns autoreleased NSString containing the name of the column in the result set -- (NSString*)columnNameForIndex:(int)columnIdx { - return [NSString stringWithUTF8String: sqlite3_column_name([_statement statement], columnIdx)]; -} - -- (void)setParentDB:(FMDatabase *)newDb { - _parentDB = newDb; -} - -- (id)objectAtIndexedSubscript:(int)columnIdx { - return [self objectForColumnIndex:columnIdx]; -} - -- (id)objectForKeyedSubscript:(NSString *)columnName { - return [self objectForColumnName:columnName]; -} - - -@end diff --git a/TeamTalk/Pods/HPGrowingTextView/LICENSE.txt b/TeamTalk/Pods/HPGrowingTextView/LICENSE.txt deleted file mode 100644 index 954f712..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2011 Hans Pinckaers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/TeamTalk/Pods/HPGrowingTextView/README.md b/TeamTalk/Pods/HPGrowingTextView/README.md deleted file mode 100644 index ca281ca..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/README.md +++ /dev/null @@ -1,59 +0,0 @@ -HPGrowingTextView -================= - -Multi-line/Autoresizing UITextView similar as in the SMS-app. The example project mimicks the look of Apple's SMS-app. - -![Screenshot](http://f.cl.ly/items/270f2F3q3d3q142m140A/ss.png) - -Properties ----------- - -```objective-c -int maxNumberOfLines; // Stops growing at this amount of lines. -int minNumberOfLines; // Starts growing at this amount of lines. -int maxHeight; // Specify the maximum height in points instead of lines. -int minHeight; // Specify the minimum height in points instead of lines. -BOOL animateHeightChange; // Animate the growing -NSTimeInterval animationDuration; // Adjust the duration of the growth animation. -``` - -UITextView borrowed properties ----------------- - -```objective-c -NSString *text; -UIFont *font; -UIColor *textColor; -NSTextAlignment textAlignment; -NSRange selectedRange; -BOOL editable; -UIDataDetectorTypes dataDetectorTypes; -UIReturnKeyType returnKeyType; -``` - -If you want to set other UITextView properties, use .internalTextView - -Delegate methods ---------------- - -```objective-c --(BOOL)growingTextViewShouldBeginEditing:(HPGrowingTextView *)growingTextView; --(BOOL)growingTextViewShouldEndEditing:(HPGrowingTextView *)growingTextView; - --(void)growingTextViewDidBeginEditing:(HPGrowingTextView *)growingTextView; --(void)growingTextViewDidEndEditing:(HPGrowingTextView *)growingTextView; - --(BOOL)growingTextView:(HPGrowingTextView *)growingTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; --(void)growingTextViewDidChange:(HPGrowingTextView *)growingTextView; - -// Called WITHIN animation block! --(void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height; - -// Called after animation --(void)growingTextView:(HPGrowingTextView *)growingTextView didChangeHeight:(float)height; - --(void)growingTextViewDidChangeSelection:(HPGrowingTextView *)growingTextView; --(BOOL)growingTextViewShouldReturn:(HPGrowingTextView *)growingTextView; -``` - -For more info, see blogpost: http://www.hanspinckaers.com/multi-line-uitextview-similar-to-sms diff --git a/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.h b/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.h deleted file mode 100644 index 8b343c5..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.h +++ /dev/null @@ -1,126 +0,0 @@ -// -// HPTextView.h -// -// Created by Hans Pinckaers on 29-06-10. -// -// MIT License -// -// Copyright (c) 2011 Hans Pinckaers -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <UIKit/UIKit.h> - -#if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000 - // UITextAlignment is deprecated in iOS 6.0+, use NSTextAlignment instead. - // Reference: https://developer.apple.com/library/ios/documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html - #define NSTextAlignment UITextAlignment -#endif - -@class HPGrowingTextView; -@class HPTextViewInternal; - -@protocol HPGrowingTextViewDelegate - -@optional -- (BOOL)growingTextViewShouldBeginEditing:(HPGrowingTextView *)growingTextView; -- (BOOL)growingTextViewShouldEndEditing:(HPGrowingTextView *)growingTextView; - -- (void)growingTextViewDidBeginEditing:(HPGrowingTextView *)growingTextView; -- (void)growingTextViewDidEndEditing:(HPGrowingTextView *)growingTextView; - -- (BOOL)growingTextView:(HPGrowingTextView *)growingTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; -- (void)growingTextViewDidChange:(HPGrowingTextView *)growingTextView; - -- (void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height; -- (void)growingTextView:(HPGrowingTextView *)growingTextView didChangeHeight:(float)height; - -- (void)growingTextViewDidChangeSelection:(HPGrowingTextView *)growingTextView; -- (BOOL)growingTextViewShouldReturn:(HPGrowingTextView *)growingTextView; -@end - -@interface HPGrowingTextView : UIView <UITextViewDelegate> { - HPTextViewInternal *internalTextView; - - int minHeight; - int maxHeight; - - //class properties - int maxNumberOfLines; - int minNumberOfLines; - - BOOL animateHeightChange; - NSTimeInterval animationDuration; - - //uitextview properties - NSObject <HPGrowingTextViewDelegate> *__unsafe_unretained delegate; - NSTextAlignment textAlignment; - NSRange selectedRange; - BOOL editable; - UIDataDetectorTypes dataDetectorTypes; - UIReturnKeyType returnKeyType; - UIKeyboardType keyboardType; - - UIEdgeInsets contentInset; -} - -//real class properties -@property int maxNumberOfLines; -@property int minNumberOfLines; -@property (nonatomic) int maxHeight; -@property (nonatomic) int minHeight; -@property BOOL animateHeightChange; -@property NSTimeInterval animationDuration; -@property (nonatomic, strong) NSString *placeholder; -@property (nonatomic, strong) UIColor *placeholderColor; -@property (nonatomic, strong) UITextView *internalTextView; - - -//uitextview properties -@property(unsafe_unretained) NSObject<HPGrowingTextViewDelegate> *delegate; -@property(nonatomic,strong) NSString *text; -@property(nonatomic,strong) UIFont *font; -@property(nonatomic,strong) UIColor *textColor; -@property(nonatomic) NSTextAlignment textAlignment; // default is NSTextAlignmentLeft -@property(nonatomic) NSRange selectedRange; // only ranges of length 0 are supported -@property(nonatomic,getter=isEditable) BOOL editable; -@property(nonatomic) UIDataDetectorTypes dataDetectorTypes __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_3_0); -@property (nonatomic) UIReturnKeyType returnKeyType; -@property (nonatomic) UIKeyboardType keyboardType; -@property (assign) UIEdgeInsets contentInset; -@property (nonatomic) BOOL isScrollable; -@property(nonatomic) BOOL enablesReturnKeyAutomatically; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (id)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer; -#endif - -//uitextview methods -//need others? use .internalTextView -- (BOOL)becomeFirstResponder; -- (BOOL)resignFirstResponder; -- (BOOL)isFirstResponder; - -- (BOOL)hasText; -- (void)scrollRangeToVisible:(NSRange)range; - -// call to force a height change (e.g. after you change max/min lines) -- (void)refreshHeight; - -@end diff --git a/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.m b/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.m deleted file mode 100644 index 9871c6f..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/class/HPGrowingTextView.m +++ /dev/null @@ -1,666 +0,0 @@ -// -// HPTextView.m -// -// Created by Hans Pinckaers on 29-06-10. -// -// MIT License -// -// Copyright (c) 2011 Hans Pinckaers -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "HPGrowingTextView.h" -#import "HPTextViewInternal.h" - -@interface HPGrowingTextView(private) --(void)commonInitialiser; --(void)resizeTextView:(NSInteger)newSizeH; --(void)growDidStop; -@end - -@implementation HPGrowingTextView -@synthesize internalTextView; -@synthesize delegate; -@synthesize maxHeight; -@synthesize minHeight; -@synthesize font; -@synthesize textColor; -@synthesize textAlignment; -@synthesize selectedRange; -@synthesize editable; -@synthesize dataDetectorTypes; -@synthesize animateHeightChange; -@synthesize animationDuration; -@synthesize returnKeyType; -@dynamic placeholder; -@dynamic placeholderColor; - -// having initwithcoder allows us to use HPGrowingTextView in a Nib. -- aob, 9/2011 -- (id)initWithCoder:(NSCoder *)aDecoder -{ - if ((self = [super initWithCoder:aDecoder])) { - [self commonInitialiser]; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - [self commonInitialiser]; - } - return self; -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (id)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer { - if ((self = [super initWithFrame:frame])) { - [self commonInitialiser:textContainer]; - } - return self; -} - --(void)commonInitialiser { - [self commonInitialiser:nil]; -} - --(void)commonInitialiser:(NSTextContainer *)textContainer -#else --(void)commonInitialiser -#endif -{ - // Initialization code - CGRect r = self.frame; - r.origin.y = 0; - r.origin.x = 0; -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - internalTextView = [[HPTextViewInternal alloc] initWithFrame:r textContainer:textContainer]; -#else - internalTextView = [[HPTextViewInternal alloc] initWithFrame:r]; -#endif - internalTextView.delegate = self; - internalTextView.scrollEnabled = NO; - internalTextView.font = [UIFont fontWithName:@"Helvetica" size:13]; - internalTextView.contentInset = UIEdgeInsetsZero; - internalTextView.showsHorizontalScrollIndicator = NO; - internalTextView.text = @"-"; - internalTextView.contentMode = UIViewContentModeRedraw; - [self addSubview:internalTextView]; - - minHeight = internalTextView.frame.size.height; - minNumberOfLines = 1; - - animateHeightChange = YES; - animationDuration = 0.1f; - - internalTextView.text = @""; - - [self setMaxNumberOfLines:3]; - - [self setPlaceholderColor:[UIColor lightGrayColor]]; - internalTextView.displayPlaceHolder = YES; -} - --(CGSize)sizeThatFits:(CGSize)size -{ - if (self.text.length == 0) { - size.height = minHeight; - } - return size; -} - --(void)layoutSubviews -{ - [super layoutSubviews]; - - CGRect r = self.bounds; - r.origin.y = 0; - r.origin.x = contentInset.left; - r.size.width -= contentInset.left + contentInset.right; - - internalTextView.frame = r; -} - --(void)setContentInset:(UIEdgeInsets)inset -{ - contentInset = inset; - - CGRect r = self.frame; - r.origin.y = inset.top - inset.bottom; - r.origin.x = inset.left; - r.size.width -= inset.left + inset.right; - - internalTextView.frame = r; - - [self setMaxNumberOfLines:maxNumberOfLines]; - [self setMinNumberOfLines:minNumberOfLines]; -} - --(UIEdgeInsets)contentInset -{ - return contentInset; -} - --(void)setMaxNumberOfLines:(int)n -{ - if(n == 0 && maxHeight > 0) return; // the user specified a maxHeight themselves. - - // Use internalTextView for height calculations, thanks to Gwynne <http://blog.darkrainfall.org/> - NSString *saveText = internalTextView.text, *newText = @"-"; - - internalTextView.delegate = nil; - internalTextView.hidden = YES; - - for (int i = 1; i < n; ++i) - newText = [newText stringByAppendingString:@"\n|W|"]; - - internalTextView.text = newText; - - maxHeight = [self measureHeight]; - - internalTextView.text = saveText; - internalTextView.hidden = NO; - internalTextView.delegate = self; - - [self sizeToFit]; - - maxNumberOfLines = n; -} - --(int)maxNumberOfLines -{ - return maxNumberOfLines; -} - -- (void)setMaxHeight:(int)height -{ - maxHeight = height; - maxNumberOfLines = 0; -} - --(void)setMinNumberOfLines:(int)m -{ - if(m == 0 && minHeight > 0) return; // the user specified a minHeight themselves. - - // Use internalTextView for height calculations, thanks to Gwynne <http://blog.darkrainfall.org/> - NSString *saveText = internalTextView.text, *newText = @"-"; - - internalTextView.delegate = nil; - internalTextView.hidden = YES; - - for (int i = 1; i < m; ++i) - newText = [newText stringByAppendingString:@"\n|W|"]; - - internalTextView.text = newText; - - minHeight = [self measureHeight]; - - internalTextView.text = saveText; - internalTextView.hidden = NO; - internalTextView.delegate = self; - - [self sizeToFit]; - - minNumberOfLines = m; -} - --(int)minNumberOfLines -{ - return minNumberOfLines; -} - -- (void)setMinHeight:(int)height -{ - minHeight = height; - minNumberOfLines = 0; -} - -- (NSString *)placeholder -{ - return internalTextView.placeholder; -} - -- (void)setPlaceholder:(NSString *)placeholder -{ - [internalTextView setPlaceholder:placeholder]; - [internalTextView setNeedsDisplay]; -} - -- (UIColor *)placeholderColor -{ - return internalTextView.placeholderColor; -} - -- (void)setPlaceholderColor:(UIColor *)placeholderColor -{ - [internalTextView setPlaceholderColor:placeholderColor]; -} - -- (void)textViewDidChange:(UITextView *)textView -{ - [self refreshHeight]; -} - -- (void)refreshHeight -{ - //size of content, so we can set the frame of self - NSInteger newSizeH = [self measureHeight]; - if (newSizeH < minHeight || !internalTextView.hasText) { - newSizeH = minHeight; //not smalles than minHeight - } - else if (maxHeight && newSizeH > maxHeight) { - newSizeH = maxHeight; // not taller than maxHeight - } - - if (internalTextView.frame.size.height != newSizeH) - { - // if our new height is greater than the maxHeight - // sets not set the height or move things - // around and enable scrolling - if (newSizeH >= maxHeight) - { - if(!internalTextView.scrollEnabled){ - internalTextView.scrollEnabled = YES; - [internalTextView flashScrollIndicators]; - } - - } else { - internalTextView.scrollEnabled = NO; - } - - // [fixed] Pasting too much text into the view failed to fire the height change, - // thanks to Gwynne <http://blog.darkrainfall.org/> - if (newSizeH <= maxHeight) - { - if(animateHeightChange) { - - if ([UIView resolveClassMethod:@selector(animateWithDuration:animations:)]) { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000 - [UIView animateWithDuration:animationDuration - delay:0 - options:(UIViewAnimationOptionAllowUserInteraction| - UIViewAnimationOptionBeginFromCurrentState) - animations:^(void) { - [self resizeTextView:newSizeH]; - } - completion:^(BOOL finished) { - if ([delegate respondsToSelector:@selector(growingTextView:didChangeHeight:)]) { - [delegate growingTextView:self didChangeHeight:newSizeH]; - } - }]; -#endif - } else { - [UIView beginAnimations:@"" context:nil]; - [UIView setAnimationDuration:animationDuration]; - [UIView setAnimationDelegate:self]; - [UIView setAnimationDidStopSelector:@selector(growDidStop)]; - [UIView setAnimationBeginsFromCurrentState:YES]; - [self resizeTextView:newSizeH]; - [UIView commitAnimations]; - } - } else { - [self resizeTextView:newSizeH]; - // [fixed] The growingTextView:didChangeHeight: delegate method was not called at all when not animating height changes. - // thanks to Gwynne <http://blog.darkrainfall.org/> - - if ([delegate respondsToSelector:@selector(growingTextView:didChangeHeight:)]) { - [delegate growingTextView:self didChangeHeight:newSizeH]; - } - } - } - } - // Display (or not) the placeholder string - - BOOL wasDisplayingPlaceholder = internalTextView.displayPlaceHolder; - internalTextView.displayPlaceHolder = self.internalTextView.text.length == 0; - - if (wasDisplayingPlaceholder != internalTextView.displayPlaceHolder) { - [internalTextView setNeedsDisplay]; - } - - - // scroll to caret (needed on iOS7) - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) - { - [self performSelector:@selector(resetScrollPositionForIOS7) withObject:nil afterDelay:0.1f]; - } - - // Tell the delegate that the text view changed - if ([delegate respondsToSelector:@selector(growingTextViewDidChange:)]) { - [delegate growingTextViewDidChange:self]; - } -} - -// Code from apple developer forum - @Steve Krulewitz, @Mark Marszal, @Eric Silverberg -- (CGFloat)measureHeight -{ - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) - { - return ceilf([self.internalTextView sizeThatFits:self.internalTextView.frame.size].height); - } - else { - return self.internalTextView.contentSize.height; - } -} - -- (void)resetScrollPositionForIOS7 -{ - CGRect r = [internalTextView caretRectForPosition:internalTextView.selectedTextRange.end]; - CGFloat caretY = MAX(r.origin.y - internalTextView.frame.size.height + r.size.height + 8, 0); - if (internalTextView.contentOffset.y < caretY && r.origin.y != INFINITY) - internalTextView.contentOffset = CGPointMake(0, caretY); -} - --(void)resizeTextView:(NSInteger)newSizeH -{ - if ([delegate respondsToSelector:@selector(growingTextView:willChangeHeight:)]) { - [delegate growingTextView:self willChangeHeight:newSizeH]; - } - - CGRect internalTextViewFrame = self.frame; - internalTextViewFrame.size.height = newSizeH; // + padding - self.frame = internalTextViewFrame; - - internalTextViewFrame.origin.y = contentInset.top - contentInset.bottom; - internalTextViewFrame.origin.x = contentInset.left; - - if(!CGRectEqualToRect(internalTextView.frame, internalTextViewFrame)) internalTextView.frame = internalTextViewFrame; -} - -- (void)growDidStop -{ - // scroll to caret (needed on iOS7) - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) - { - [self resetScrollPositionForIOS7]; - } - - if ([delegate respondsToSelector:@selector(growingTextView:didChangeHeight:)]) { - [delegate growingTextView:self didChangeHeight:self.frame.size.height]; - } -} - --(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - [internalTextView becomeFirstResponder]; -} - -- (BOOL)becomeFirstResponder -{ - [super becomeFirstResponder]; - return [self.internalTextView becomeFirstResponder]; -} - --(BOOL)resignFirstResponder -{ - [super resignFirstResponder]; - return [internalTextView resignFirstResponder]; -} - --(BOOL)isFirstResponder -{ - return [self.internalTextView isFirstResponder]; -} - - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark UITextView properties -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setText:(NSString *)newText -{ - internalTextView.text = newText; - - // include this line to analyze the height of the textview. - // fix from Ankit Thakur - [self performSelector:@selector(textViewDidChange:) withObject:internalTextView]; -} - --(NSString*) text -{ - return internalTextView.text; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setFont:(UIFont *)afont -{ - internalTextView.font= afont; - - [self setMaxNumberOfLines:maxNumberOfLines]; - [self setMinNumberOfLines:minNumberOfLines]; -} - --(UIFont *)font -{ - return internalTextView.font; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setTextColor:(UIColor *)color -{ - internalTextView.textColor = color; -} - --(UIColor*)textColor{ - return internalTextView.textColor; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setBackgroundColor:(UIColor *)backgroundColor -{ - [super setBackgroundColor:backgroundColor]; - internalTextView.backgroundColor = backgroundColor; -} - --(UIColor*)backgroundColor -{ - return internalTextView.backgroundColor; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setTextAlignment:(NSTextAlignment)aligment -{ - internalTextView.textAlignment = aligment; -} - --(NSTextAlignment)textAlignment -{ - return internalTextView.textAlignment; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setSelectedRange:(NSRange)range -{ - internalTextView.selectedRange = range; -} - --(NSRange)selectedRange -{ - return internalTextView.selectedRange; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -- (void)setIsScrollable:(BOOL)isScrollable -{ - internalTextView.scrollEnabled = isScrollable; -} - -- (BOOL)isScrollable -{ - return internalTextView.scrollEnabled; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setEditable:(BOOL)beditable -{ - internalTextView.editable = beditable; -} - --(BOOL)isEditable -{ - return internalTextView.editable; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setReturnKeyType:(UIReturnKeyType)keyType -{ - internalTextView.returnKeyType = keyType; -} - --(UIReturnKeyType)returnKeyType -{ - return internalTextView.returnKeyType; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -- (void)setKeyboardType:(UIKeyboardType)keyType -{ - internalTextView.keyboardType = keyType; -} - -- (UIKeyboardType)keyboardType -{ - return internalTextView.keyboardType; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -- (void)setEnablesReturnKeyAutomatically:(BOOL)enablesReturnKeyAutomatically -{ - internalTextView.enablesReturnKeyAutomatically = enablesReturnKeyAutomatically; -} - -- (BOOL)enablesReturnKeyAutomatically -{ - return internalTextView.enablesReturnKeyAutomatically; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - --(void)setDataDetectorTypes:(UIDataDetectorTypes)datadetector -{ - internalTextView.dataDetectorTypes = datadetector; -} - --(UIDataDetectorTypes)dataDetectorTypes -{ - return internalTextView.dataDetectorTypes; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -- (BOOL)hasText{ - return [internalTextView hasText]; -} - -- (void)scrollRangeToVisible:(NSRange)range -{ - [internalTextView scrollRangeToVisible:range]; -} - -///////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -#pragma mark UITextViewDelegate - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { - if ([delegate respondsToSelector:@selector(growingTextViewShouldBeginEditing:)]) { - return [delegate growingTextViewShouldBeginEditing:self]; - - } else { - return YES; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (BOOL)textViewShouldEndEditing:(UITextView *)textView { - if ([delegate respondsToSelector:@selector(growingTextViewShouldEndEditing:)]) { - return [delegate growingTextViewShouldEndEditing:self]; - - } else { - return YES; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)textViewDidBeginEditing:(UITextView *)textView { - if ([delegate respondsToSelector:@selector(growingTextViewDidBeginEditing:)]) { - [delegate growingTextViewDidBeginEditing:self]; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)textViewDidEndEditing:(UITextView *)textView { - if ([delegate respondsToSelector:@selector(growingTextViewDidEndEditing:)]) { - [delegate growingTextViewDidEndEditing:self]; - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range - replacementText:(NSString *)atext { - - //weird 1 pixel bug when clicking backspace when textView is empty - if(![textView hasText] && [atext isEqualToString:@""]) return NO; - - //Added by bretdabaker: sometimes we want to handle this ourselves - if ([delegate respondsToSelector:@selector(growingTextView:shouldChangeTextInRange:replacementText:)]) - return [delegate growingTextView:self shouldChangeTextInRange:range replacementText:atext]; - - if ([atext isEqualToString:@"\n"]) { - if ([delegate respondsToSelector:@selector(growingTextViewShouldReturn:)]) { - if (![delegate performSelector:@selector(growingTextViewShouldReturn:) withObject:self]) { - return YES; - } else { - [textView resignFirstResponder]; - return NO; - } - } - } - - return YES; - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)textViewDidChangeSelection:(UITextView *)textView { - if ([delegate respondsToSelector:@selector(growingTextViewDidChangeSelection:)]) { - [delegate growingTextViewDidChangeSelection:self]; - } -} - - - -@end diff --git a/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.h b/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.h deleted file mode 100644 index 175f4d4..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// HPTextViewInternal.h -// -// Created by Hans Pinckaers on 29-06-10. -// -// MIT License -// -// Copyright (c) 2011 Hans Pinckaers -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <UIKit/UIKit.h> - - -@interface HPTextViewInternal : UITextView - -@property (nonatomic, strong) NSString *placeholder; -@property (nonatomic, strong) UIColor *placeholderColor; -@property (nonatomic) BOOL displayPlaceHolder; - -@end diff --git a/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.m b/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.m deleted file mode 100644 index f3a6a1d..0000000 --- a/TeamTalk/Pods/HPGrowingTextView/class/HPTextViewInternal.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// HPTextViewInternal.m -// -// Created by Hans Pinckaers on 29-06-10. -// -// MIT License -// -// Copyright (c) 2011 Hans Pinckaers -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "HPTextViewInternal.h" - - -@implementation HPTextViewInternal - --(void)setText:(NSString *)text -{ - BOOL originalValue = self.scrollEnabled; - //If one of GrowingTextView's superviews is a scrollView, and self.scrollEnabled == NO, - //setting the text programatically will cause UIKit to search upwards until it finds a scrollView with scrollEnabled==yes - //then scroll it erratically. Setting scrollEnabled temporarily to YES prevents this. - [self setScrollEnabled:YES]; - [super setText:text]; - [self setScrollEnabled:originalValue]; -} - -- (void)setScrollable:(BOOL)isScrollable -{ - [super setScrollEnabled:isScrollable]; -} - --(void)setContentOffset:(CGPoint)s -{ - if(self.tracking || self.decelerating){ - //initiated by user... - - UIEdgeInsets insets = self.contentInset; - insets.bottom = 0; - insets.top = 0; - self.contentInset = insets; - - } else { - - float bottomOffset = (self.contentSize.height - self.frame.size.height + self.contentInset.bottom); - if(s.y < bottomOffset && self.scrollEnabled){ - UIEdgeInsets insets = self.contentInset; - insets.bottom = 8; - insets.top = 0; - self.contentInset = insets; - } - } - - // Fix "overscrolling" bug - if (s.y > self.contentSize.height - self.frame.size.height && !self.decelerating && !self.tracking && !self.dragging) - s = CGPointMake(s.x, self.contentSize.height - self.frame.size.height); - - [super setContentOffset:s]; -} - --(void)setContentInset:(UIEdgeInsets)s -{ - UIEdgeInsets insets = s; - - if(s.bottom>8) insets.bottom = 0; - insets.top = 0; - - [super setContentInset:insets]; -} - --(void)setContentSize:(CGSize)contentSize -{ - // is this an iOS5 bug? Need testing! - if(self.contentSize.height > contentSize.height) - { - UIEdgeInsets insets = self.contentInset; - insets.bottom = 0; - insets.top = 0; - self.contentInset = insets; - } - - [super setContentSize:contentSize]; -} - -- (void)drawRect:(CGRect)rect -{ - [super drawRect:rect]; - if (self.displayPlaceHolder && self.placeholder && self.placeholderColor) - { - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) - { - NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - paragraphStyle.alignment = self.textAlignment; - [self.placeholder drawInRect:CGRectMake(5, 8 + self.contentInset.top, self.frame.size.width-self.contentInset.left, self.frame.size.height- self.contentInset.top) withAttributes:@{NSFontAttributeName:self.font, NSForegroundColorAttributeName:self.placeholderColor, NSParagraphStyleAttributeName:paragraphStyle}]; - } - else { - [self.placeholderColor set]; - [self.placeholder drawInRect:CGRectMake(8.0f, 8.0f, self.frame.size.width - 16.0f, self.frame.size.height - 16.0f) withFont:self.font]; - } - } -} - --(void)setPlaceholder:(NSString *)placeholder -{ - _placeholder = placeholder; - - [self setNeedsDisplay]; -} - -@end diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h b/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h deleted file mode 120000 index d51daed..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperationManager.h b/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperationManager.h deleted file mode 120000 index 6a7fa3a..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPRequestOperationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPSessionManager.h b/TeamTalk/Pods/Headers/AFNetworking/AFHTTPSessionManager.h deleted file mode 120000 index dda87e6..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFHTTPSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h b/TeamTalk/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h deleted file mode 120000 index 2d0d400..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFNetworkReachabilityManager.h b/TeamTalk/Pods/Headers/AFNetworking/AFNetworkReachabilityManager.h deleted file mode 120000 index 14fd177..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFNetworkReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/AFNetworking.h deleted file mode 120000 index 83dd518..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFSecurityPolicy.h b/TeamTalk/Pods/Headers/AFNetworking/AFSecurityPolicy.h deleted file mode 120000 index 6a54dc3..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFSecurityPolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFURLConnectionOperation.h b/TeamTalk/Pods/Headers/AFNetworking/AFURLConnectionOperation.h deleted file mode 120000 index 360459d..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFURLConnectionOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFURLRequestSerialization.h b/TeamTalk/Pods/Headers/AFNetworking/AFURLRequestSerialization.h deleted file mode 120000 index 32572ec..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFURLRequestSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFURLResponseSerialization.h b/TeamTalk/Pods/Headers/AFNetworking/AFURLResponseSerialization.h deleted file mode 120000 index 4b70627..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFURLResponseSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/AFURLSessionManager.h b/TeamTalk/Pods/Headers/AFNetworking/AFURLSessionManager.h deleted file mode 120000 index a206011..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/AFURLSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIActivityIndicatorView+AFNetworking.h deleted file mode 120000 index 8634d2d..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIActivityIndicatorView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIAlertView+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIAlertView+AFNetworking.h deleted file mode 120000 index 3eb67fb..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIAlertView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIButton+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIButton+AFNetworking.h deleted file mode 120000 index 32c242d..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIButton+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h deleted file mode 120000 index d3fab3c..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIKit+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIKit+AFNetworking.h deleted file mode 120000 index 6d1d448..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIKit+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIProgressView+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIProgressView+AFNetworking.h deleted file mode 120000 index f32234c..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIProgressView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIRefreshControl+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIRefreshControl+AFNetworking.h deleted file mode 120000 index fdc7eb4..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIRefreshControl+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/AFNetworking/UIWebView+AFNetworking.h b/TeamTalk/Pods/Headers/AFNetworking/UIWebView+AFNetworking.h deleted file mode 120000 index 776285f..0000000 --- a/TeamTalk/Pods/Headers/AFNetworking/UIWebView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/DACircularProgress/DACircularProgressView.h b/TeamTalk/Pods/Headers/DACircularProgress/DACircularProgressView.h deleted file mode 120000 index 6643808..0000000 --- a/TeamTalk/Pods/Headers/DACircularProgress/DACircularProgressView.h +++ /dev/null @@ -1 +0,0 @@ -../../DACircularProgress/DACircularProgress/DACircularProgressView.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMDB.h b/TeamTalk/Pods/Headers/FMDB/FMDB.h deleted file mode 120000 index 0bac013..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMDB.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDB.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMDatabase.h b/TeamTalk/Pods/Headers/FMDB/FMDatabase.h deleted file mode 120000 index db4c661..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMDatabase.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabase.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMDatabaseAdditions.h b/TeamTalk/Pods/Headers/FMDB/FMDatabaseAdditions.h deleted file mode 120000 index 51c62d6..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMDatabaseAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabaseAdditions.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMDatabasePool.h b/TeamTalk/Pods/Headers/FMDB/FMDatabasePool.h deleted file mode 120000 index 4b061c5..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMDatabasePool.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabasePool.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMDatabaseQueue.h b/TeamTalk/Pods/Headers/FMDB/FMDatabaseQueue.h deleted file mode 120000 index a815d10..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMDatabaseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMDatabaseQueue.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/FMDB/FMResultSet.h b/TeamTalk/Pods/Headers/FMDB/FMResultSet.h deleted file mode 120000 index 6f2d587..0000000 --- a/TeamTalk/Pods/Headers/FMDB/FMResultSet.h +++ /dev/null @@ -1 +0,0 @@ -../../FMDB/src/fmdb/FMResultSet.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/HPGrowingTextView/HPGrowingTextView.h b/TeamTalk/Pods/Headers/HPGrowingTextView/HPGrowingTextView.h deleted file mode 120000 index 61c2d3a..0000000 --- a/TeamTalk/Pods/Headers/HPGrowingTextView/HPGrowingTextView.h +++ /dev/null @@ -1 +0,0 @@ -../../HPGrowingTextView/class/HPGrowingTextView.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/HPGrowingTextView/HPTextViewInternal.h b/TeamTalk/Pods/Headers/HPGrowingTextView/HPTextViewInternal.h deleted file mode 120000 index 0a7d194..0000000 --- a/TeamTalk/Pods/Headers/HPGrowingTextView/HPTextViewInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../HPGrowingTextView/class/HPTextViewInternal.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/MBProgressHUD/MBProgressHUD.h b/TeamTalk/Pods/Headers/MBProgressHUD/MBProgressHUD.h deleted file mode 120000 index 6a8f158..0000000 --- a/TeamTalk/Pods/Headers/MBProgressHUD/MBProgressHUD.h +++ /dev/null @@ -1 +0,0 @@ -../../MBProgressHUD/MBProgressHUD.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h b/TeamTalk/Pods/Headers/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h deleted file mode 120000 index e7a9d6e..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionView.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionView.h deleted file mode 120000 index dbe4e65..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionView.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCell.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCell.h deleted file mode 120000 index 2115a68..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCommon.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCommon.h deleted file mode 120000 index bd4238f..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewCommon.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewController.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewController.h deleted file mode 120000 index 2684c6b..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewData.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewData.h deleted file mode 120000 index 2e56de1..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewData.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewFlowLayout.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewFlowLayout.h deleted file mode 120000 index 16902ec..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewFlowLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewItemKey.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewItemKey.h deleted file mode 120000 index 6c53e38..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewItemKey.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout+Internals.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout+Internals.h deleted file mode 120000 index 536b195..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout+Internals.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout.h deleted file mode 120000 index 25a2274..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewUpdateItem.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewUpdateItem.h deleted file mode 120000 index 0de4708..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTCollectionViewUpdateItem.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutInfo.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutInfo.h deleted file mode 120000 index 54f983f..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutItem.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutItem.h deleted file mode 120000 index 9d51f15..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutItem.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutRow.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutRow.h deleted file mode 120000 index 2ed78b4..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutRow.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutSection.h b/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutSection.h deleted file mode 120000 index 844f955..0000000 --- a/TeamTalk/Pods/Headers/PSTCollectionView/PSTGridLayoutSection.h +++ /dev/null @@ -1 +0,0 @@ -../../PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/NSData+ImageContentType.h b/TeamTalk/Pods/Headers/SDWebImage/NSData+ImageContentType.h deleted file mode 120000 index db1cbe7..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDImageCache.h b/TeamTalk/Pods/Headers/SDWebImage/SDImageCache.h deleted file mode 120000 index 9893ccc..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDImageCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageCompat.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageCompat.h deleted file mode 120000 index 088c749..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageCompat.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageCompat.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDecoder.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDecoder.h deleted file mode 120000 index b4d0b05..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDecoder.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDecoder.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloader.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloader.h deleted file mode 120000 index 501f4ff..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloader.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDownloader.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloaderOperation.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloaderOperation.h deleted file mode 120000 index a864736..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageManager.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageManager.h deleted file mode 120000 index f9d2aa2..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageManager.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageManager.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageOperation.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImageOperation.h deleted file mode 120000 index a0769c4..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImageOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImageOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/SDWebImagePrefetcher.h b/TeamTalk/Pods/Headers/SDWebImage/SDWebImagePrefetcher.h deleted file mode 120000 index fcc0b60..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/SDWebImagePrefetcher.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIButton+WebCache.h b/TeamTalk/Pods/Headers/SDWebImage/UIButton+WebCache.h deleted file mode 120000 index 5586e49..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIButton+WebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIImage+GIF.h b/TeamTalk/Pods/Headers/SDWebImage/UIImage+GIF.h deleted file mode 120000 index 44cfed5..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIImage+GIF.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImage+GIF.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIImage+MultiFormat.h b/TeamTalk/Pods/Headers/SDWebImage/UIImage+MultiFormat.h deleted file mode 120000 index 185c480..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIImage+MultiFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImage+MultiFormat.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIImageView+HighlightedWebCache.h b/TeamTalk/Pods/Headers/SDWebImage/UIImageView+HighlightedWebCache.h deleted file mode 120000 index b05c09f..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIImageView+WebCache.h b/TeamTalk/Pods/Headers/SDWebImage/UIImageView+WebCache.h deleted file mode 120000 index 336b44b..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIImageView+WebCache.h \ No newline at end of file diff --git a/TeamTalk/Pods/Headers/SDWebImage/UIView+WebCacheOperation.h b/TeamTalk/Pods/Headers/SDWebImage/UIView+WebCacheOperation.h deleted file mode 120000 index 3486fa4..0000000 --- a/TeamTalk/Pods/Headers/SDWebImage/UIView+WebCacheOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/TeamTalk/Pods/MBProgressHUD/LICENSE b/TeamTalk/Pods/MBProgressHUD/LICENSE deleted file mode 100644 index c51b6b0..0000000 --- a/TeamTalk/Pods/MBProgressHUD/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013 Matej Bukovinski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.h b/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.h deleted file mode 100755 index 26eadf6..0000000 --- a/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.h +++ /dev/null @@ -1,484 +0,0 @@ -// -// MBProgressHUD.h -// Version 0.8 -// Created by Matej Bukovinski on 2.4.09. -// - -// This code is distributed under the terms and conditions of the MIT license. - -// Copyright (c) 2013 Matej Bukovinski -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> -#import <UIKit/UIKit.h> -#import <CoreGraphics/CoreGraphics.h> - -@protocol MBProgressHUDDelegate; - - -typedef enum { - /** Progress is shown using an UIActivityIndicatorView. This is the default. */ - MBProgressHUDModeIndeterminate, - /** Progress is shown using a round, pie-chart like, progress view. */ - MBProgressHUDModeDeterminate, - /** Progress is shown using a horizontal progress bar */ - MBProgressHUDModeDeterminateHorizontalBar, - /** Progress is shown using a ring-shaped progress view. */ - MBProgressHUDModeAnnularDeterminate, - /** Shows a custom view */ - MBProgressHUDModeCustomView, - /** Shows only labels */ - MBProgressHUDModeText -} MBProgressHUDMode; - -typedef enum { - /** Opacity animation */ - MBProgressHUDAnimationFade, - /** Opacity + scale animation */ - MBProgressHUDAnimationZoom, - MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom, - MBProgressHUDAnimationZoomIn -} MBProgressHUDAnimation; - - -#ifndef MB_INSTANCETYPE -#if __has_feature(objc_instancetype) - #define MB_INSTANCETYPE instancetype -#else - #define MB_INSTANCETYPE id -#endif -#endif - -#ifndef MB_STRONG -#if __has_feature(objc_arc) - #define MB_STRONG strong -#else - #define MB_STRONG retain -#endif -#endif - -#ifndef MB_WEAK -#if __has_feature(objc_arc_weak) - #define MB_WEAK weak -#elif __has_feature(objc_arc) - #define MB_WEAK unsafe_unretained -#else - #define MB_WEAK assign -#endif -#endif - -#if NS_BLOCKS_AVAILABLE -typedef void (^MBProgressHUDCompletionBlock)(); -#endif - - -/** - * Displays a simple HUD window containing a progress indicator and two optional labels for short messages. - * - * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. - * The MBProgressHUD window spans over the entire space given to it by the initWithFrame constructor and catches all - * user input on this region, thereby preventing the user operations on components below the view. The HUD itself is - * drawn centered as a rounded semi-transparent view which resizes depending on the user specified content. - * - * This view supports four modes of operation: - * - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView - * - MBProgressHUDModeDeterminate - shows a custom round progress indicator - * - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator - * - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (@see customView) - * - * All three modes can have optional labels assigned: - * - If the labelText property is set and non-empty then a label containing the provided content is placed below the - * indicator view. - * - If also the detailsLabelText property is set then another label is placed below the first label. - */ -@interface MBProgressHUD : UIView - -/** - * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. - * - * @param view The view that the HUD will be added to - * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use - * animations while appearing. - * @return A reference to the created HUD. - * - * @see hideHUDForView:animated: - * @see animationType - */ -+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; - -/** - * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:. - * - * @param view The view that is going to be searched for a HUD subview. - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * @return YES if a HUD was found and removed, NO otherwise. - * - * @see showHUDAddedTo:animated: - * @see animationType - */ -+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; - -/** - * Finds all the HUD subviews and hides them. - * - * @param view The view that is going to be searched for HUD subviews. - * @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use - * animations while disappearing. - * @return the number of HUDs found and removed. - * - * @see hideHUDForView:animated: - * @see animationType - */ -+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated; - -/** - * Finds the top-most HUD subview and returns it. - * - * @param view The view that is going to be searched. - * @return A reference to the last HUD subview discovered. - */ -+ (MB_INSTANCETYPE)HUDForView:(UIView *)view; - -/** - * Finds all HUD subviews and returns them. - * - * @param view The view that is going to be searched. - * @return All found HUD views (array of MBProgressHUD objects). - */ -+ (NSArray *)allHUDsForView:(UIView *)view; - -/** - * A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with - * window.bounds as the parameter. - * - * @param window The window instance that will provide the bounds for the HUD. Should be the same instance as - * the HUD's superview (i.e., the window that the HUD will be added to). - */ -- (id)initWithWindow:(UIWindow *)window; - -/** - * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with - * view.bounds as the parameter - * - * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as - * the HUD's superview (i.e., the view that the HUD will be added to). - */ -- (id)initWithView:(UIView *)view; - -/** - * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so - * the user interface can be updated. Call this method when your task is already set-up to be executed in a new thread - * (e.g., when using something like NSOperation or calling an asynchronous call like NSURLRequest). - * - * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use - * animations while appearing. - * - * @see animationType - */ -- (void)show:(BOOL)animated; - -/** - * Hide the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to - * hide the HUD when your task completes. - * - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * - * @see animationType - */ -- (void)hide:(BOOL)animated; - -/** - * Hide the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to - * hide the HUD when your task completes. - * - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * @param delay Delay in seconds until the HUD is hidden. - * - * @see animationType - */ -- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay; - -/** - * Shows the HUD while a background task is executing in a new thread, then hides the HUD. - * - * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a - * pool. - * - * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread. - * @param target The object that the target method belongs to. - * @param object An optional object to be passed to the method. - * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use - * animations while (dis)appearing. - */ -- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated; - -#if NS_BLOCKS_AVAILABLE - -/** - * Shows the HUD while a block is executing on a background queue, then hides the HUD. - * - * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: - */ -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block; - -/** - * Shows the HUD while a block is executing on a background queue, then hides the HUD. - * - * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: - */ -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion; - -/** - * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD. - * - * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: - */ -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue; - -/** - * Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD. - * - * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will - * not use animations while (dis)appearing. - * @param block The block to be executed while the HUD is shown. - * @param queue The dispatch queue on which the block should be executed. - * @param completion The block to be executed on completion. - * - * @see completionBlock - */ -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue - completionBlock:(MBProgressHUDCompletionBlock)completion; - -/** - * A block that gets called after the HUD was completely hidden. - */ -@property (copy) MBProgressHUDCompletionBlock completionBlock; - -#endif - -/** - * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. - * - * @see MBProgressHUDMode - */ -@property (assign) MBProgressHUDMode mode; - -/** - * The animation type that should be used when the HUD is shown and hidden. - * - * @see MBProgressHUDAnimation - */ -@property (assign) MBProgressHUDAnimation animationType; - -/** - * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. - * For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds). - */ -@property (MB_STRONG) UIView *customView; - -/** - * The HUD delegate object. - * - * @see MBProgressHUDDelegate - */ -@property (MB_WEAK) id<MBProgressHUDDelegate> delegate; - -/** - * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit - * the entire text. If the text is too long it will get clipped by displaying "..." at the end. If left unchanged or - * set to @"", then no message is displayed. - */ -@property (copy) NSString *labelText; - -/** - * An optional details message displayed below the labelText message. This message is displayed only if the labelText - * property is also set and is different from an empty string (@""). The details text can span multiple lines. - */ -@property (copy) NSString *detailsLabelText; - -/** - * The opacity of the HUD window. Defaults to 0.8 (80% opacity). - */ -@property (assign) float opacity; - -/** - * The color of the HUD window. Defaults to black. If this property is set, color is set using - * this UIColor and the opacity property is not used. using retain because performing copy on - * UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone. - */ -@property (MB_STRONG) UIColor *color; - -/** - * The x-axis offset of the HUD relative to the centre of the superview. - */ -@property (assign) float xOffset; - -/** - * The y-axis offset of the HUD relative to the centre of the superview. - */ -@property (assign) float yOffset; - -/** - * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). - * Defaults to 20.0 - */ -@property (assign) float margin; - -/** - * Cover the HUD background view with a radial gradient. - */ -@property (assign) BOOL dimBackground; - -/* - * Grace period is the time (in seconds) that the invoked method may be run without - * showing the HUD. If the task finishes before the grace time runs out, the HUD will - * not be shown at all. - * This may be used to prevent HUD display for very short tasks. - * Defaults to 0 (no grace time). - * Grace time functionality is only supported when the task status is known! - * @see taskInProgress - */ -@property (assign) float graceTime; - -/** - * The minimum time (in seconds) that the HUD is shown. - * This avoids the problem of the HUD being shown and than instantly hidden. - * Defaults to 0 (no minimum show time). - */ -@property (assign) float minShowTime; - -/** - * Indicates that the executed operation is in progress. Needed for correct graceTime operation. - * If you don't set a graceTime (different than 0.0) this does nothing. - * This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:. - * When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly), - * you need to set this property when your task starts and completes in order to have normal graceTime - * functionality. - */ -@property (assign) BOOL taskInProgress; - -/** - * Removes the HUD from its parent view when hidden. - * Defaults to NO. - */ -@property (assign) BOOL removeFromSuperViewOnHide; - -/** - * Font to be used for the main label. Set this property if the default is not adequate. - */ -@property (MB_STRONG) UIFont* labelFont; - -/** - * Font to be used for the details label. Set this property if the default is not adequate. - */ -@property (MB_STRONG) UIFont* detailsLabelFont; - -/** - * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. - */ -@property (assign) float progress; - -/** - * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). - */ -@property (assign) CGSize minSize; - -/** - * Force the HUD dimensions to be equal if possible. - */ -@property (assign, getter = isSquare) BOOL square; - -@end - - -@protocol MBProgressHUDDelegate <NSObject> - -@optional - -/** - * Called after the HUD was fully hidden from the screen. - */ -- (void)hudWasHidden:(MBProgressHUD *)hud; - -@end - - -/** - * A progress view for showing definite progress by filling up a circle (pie chart). - */ -@interface MBRoundProgressView : UIView - -/** - * Progress (0.0 to 1.0) - */ -@property (nonatomic, assign) float progress; - -/** - * Indicator progress color. - * Defaults to white [UIColor whiteColor] - */ -@property (nonatomic, MB_STRONG) UIColor *progressTintColor; - -/** - * Indicator background (non-progress) color. - * Defaults to translucent white (alpha 0.1) - */ -@property (nonatomic, MB_STRONG) UIColor *backgroundTintColor; - -/* - * Display mode - NO = round or YES = annular. Defaults to round. - */ -@property (nonatomic, assign, getter = isAnnular) BOOL annular; - -@end - - -/** - * A flat bar progress view. - */ -@interface MBBarProgressView : UIView - -/** - * Progress (0.0 to 1.0) - */ -@property (nonatomic, assign) float progress; - -/** - * Bar border line color. - * Defaults to white [UIColor whiteColor]. - */ -@property (nonatomic, MB_STRONG) UIColor *lineColor; - -/** - * Bar background color. - * Defaults to clear [UIColor clearColor]; - */ -@property (nonatomic, MB_STRONG) UIColor *progressRemainingColor; - -/** - * Bar progress color. - * Defaults to white [UIColor whiteColor]. - */ -@property (nonatomic, MB_STRONG) UIColor *progressColor; - -@end diff --git a/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.m b/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.m deleted file mode 100755 index b1f2055..0000000 --- a/TeamTalk/Pods/MBProgressHUD/MBProgressHUD.m +++ /dev/null @@ -1,1008 +0,0 @@ -// -// MBProgressHUD.m -// Version 0.8 -// Created by Matej Bukovinski on 2.4.09. -// - -#import "MBProgressHUD.h" - - -#if __has_feature(objc_arc) - #define MB_AUTORELEASE(exp) exp - #define MB_RELEASE(exp) exp - #define MB_RETAIN(exp) exp -#else - #define MB_AUTORELEASE(exp) [exp autorelease] - #define MB_RELEASE(exp) [exp release] - #define MB_RETAIN(exp) [exp retain] -#endif - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 - #define MBLabelAlignmentCenter NSTextAlignmentCenter -#else - #define MBLabelAlignmentCenter UITextAlignmentCenter -#endif - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - #define MB_TEXTSIZE(text, font) [text length] > 0 ? [text \ - sizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero; -#else - #define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero; -#endif - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - #define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \ - boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin) \ - attributes:@{NSFontAttributeName:font} context:nil].size : CGSizeZero; -#else - #define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \ - sizeWithFont:font constrainedToSize:maxSize lineBreakMode:mode] : CGSizeZero; -#endif - - -static const CGFloat kPadding = 4.f; -static const CGFloat kLabelFontSize = 16.f; -static const CGFloat kDetailsLabelFontSize = 12.f; - - -@interface MBProgressHUD () - -- (void)setupLabels; -- (void)registerForKVO; -- (void)unregisterFromKVO; -- (NSArray *)observableKeypaths; -- (void)registerForNotifications; -- (void)unregisterFromNotifications; -- (void)updateUIForKeypath:(NSString *)keyPath; -- (void)hideUsingAnimation:(BOOL)animated; -- (void)showUsingAnimation:(BOOL)animated; -- (void)done; -- (void)updateIndicators; -- (void)handleGraceTimer:(NSTimer *)theTimer; -- (void)handleMinShowTimer:(NSTimer *)theTimer; -- (void)setTransformForCurrentOrientation:(BOOL)animated; -- (void)cleanUp; -- (void)launchExecution; -- (void)deviceOrientationDidChange:(NSNotification *)notification; -- (void)hideDelayed:(NSNumber *)animated; - -@property (atomic, MB_STRONG) UIView *indicator; -@property (atomic, MB_STRONG) NSTimer *graceTimer; -@property (atomic, MB_STRONG) NSTimer *minShowTimer; -@property (atomic, MB_STRONG) NSDate *showStarted; -@property (atomic, assign) CGSize size; - -@end - - -@implementation MBProgressHUD { - BOOL useAnimation; - SEL methodForExecution; - id targetForExecution; - id objectForExecution; - UILabel *label; - UILabel *detailsLabel; - BOOL isFinished; - CGAffineTransform rotationTransform; -} - -#pragma mark - Properties - -@synthesize animationType; -@synthesize delegate; -@synthesize opacity; -@synthesize color; -@synthesize labelFont; -@synthesize detailsLabelFont; -@synthesize indicator; -@synthesize xOffset; -@synthesize yOffset; -@synthesize minSize; -@synthesize square; -@synthesize margin; -@synthesize dimBackground; -@synthesize graceTime; -@synthesize minShowTime; -@synthesize graceTimer; -@synthesize minShowTimer; -@synthesize taskInProgress; -@synthesize removeFromSuperViewOnHide; -@synthesize customView; -@synthesize showStarted; -@synthesize mode; -@synthesize labelText; -@synthesize detailsLabelText; -@synthesize progress; -@synthesize size; -#if NS_BLOCKS_AVAILABLE -@synthesize completionBlock; -#endif - -#pragma mark - Class methods - -+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated { - MBProgressHUD *hud = [[self alloc] initWithView:view]; - [view addSubview:hud]; - [hud show:animated]; - return MB_AUTORELEASE(hud); -} - -+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated { - MBProgressHUD *hud = [self HUDForView:view]; - if (hud != nil) { - hud.removeFromSuperViewOnHide = YES; - [hud hide:animated]; - return YES; - } - return NO; -} - -+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated { - NSArray *huds = [MBProgressHUD allHUDsForView:view]; - for (MBProgressHUD *hud in huds) { - hud.removeFromSuperViewOnHide = YES; - [hud hide:animated]; - } - return [huds count]; -} - -+ (MB_INSTANCETYPE)HUDForView:(UIView *)view { - NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; - for (UIView *subview in subviewsEnum) { - if ([subview isKindOfClass:self]) { - return (MBProgressHUD *)subview; - } - } - return nil; -} - -+ (NSArray *)allHUDsForView:(UIView *)view { - NSMutableArray *huds = [NSMutableArray array]; - NSArray *subviews = view.subviews; - for (UIView *aView in subviews) { - if ([aView isKindOfClass:self]) { - [huds addObject:aView]; - } - } - return [NSArray arrayWithArray:huds]; -} - -#pragma mark - Lifecycle - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - // Set default values for properties - self.animationType = MBProgressHUDAnimationFade; - self.mode = MBProgressHUDModeIndeterminate; - self.labelText = nil; - self.detailsLabelText = nil; - self.opacity = 0.8f; - self.color = nil; - self.labelFont = [UIFont boldSystemFontOfSize:kLabelFontSize]; - self.detailsLabelFont = [UIFont boldSystemFontOfSize:kDetailsLabelFontSize]; - self.xOffset = 0.0f; - self.yOffset = 0.0f; - self.dimBackground = NO; - self.margin = 20.0f; - self.graceTime = 0.0f; - self.minShowTime = 0.0f; - self.removeFromSuperViewOnHide = NO; - self.minSize = CGSizeZero; - self.square = NO; - self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin - | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; - - // Transparent background - self.opaque = NO; - self.backgroundColor = [UIColor clearColor]; - // Make it invisible for now - self.alpha = 0.0f; - - taskInProgress = NO; - rotationTransform = CGAffineTransformIdentity; - - [self setupLabels]; - [self updateIndicators]; - [self registerForKVO]; - [self registerForNotifications]; - } - return self; -} - -- (id)initWithView:(UIView *)view { - NSAssert(view, @"View must not be nil."); - return [self initWithFrame:view.bounds]; -} - -- (id)initWithWindow:(UIWindow *)window { - return [self initWithView:window]; -} - -- (void)dealloc { - [self unregisterFromNotifications]; - [self unregisterFromKVO]; -#if !__has_feature(objc_arc) - [color release]; - [indicator release]; - [label release]; - [detailsLabel release]; - [labelText release]; - [detailsLabelText release]; - [graceTimer release]; - [minShowTimer release]; - [showStarted release]; - [customView release]; -#if NS_BLOCKS_AVAILABLE - [completionBlock release]; -#endif - [super dealloc]; -#endif -} - -#pragma mark - Show & hide - -- (void)show:(BOOL)animated { - useAnimation = animated; - // If the grace time is set postpone the HUD display - if (self.graceTime > 0.0) { - self.graceTimer = [NSTimer scheduledTimerWithTimeInterval:self.graceTime target:self - selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; - } - // ... otherwise show the HUD imediately - else { - [self setNeedsDisplay]; - [self showUsingAnimation:useAnimation]; - } -} - -- (void)hide:(BOOL)animated { - useAnimation = animated; - // If the minShow time is set, calculate how long the hud was shown, - // and pospone the hiding operation if necessary - if (self.minShowTime > 0.0 && showStarted) { - NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:showStarted]; - if (interv < self.minShowTime) { - self.minShowTimer = [NSTimer scheduledTimerWithTimeInterval:(self.minShowTime - interv) target:self - selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO]; - return; - } - } - // ... otherwise hide the HUD immediately - [self hideUsingAnimation:useAnimation]; -} - -- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay { - [self performSelector:@selector(hideDelayed:) withObject:[NSNumber numberWithBool:animated] afterDelay:delay]; -} - -- (void)hideDelayed:(NSNumber *)animated { - [self hide:[animated boolValue]]; -} - -#pragma mark - Timer callbacks - -- (void)handleGraceTimer:(NSTimer *)theTimer { - // Show the HUD only if the task is still running - if (taskInProgress) { - [self setNeedsDisplay]; - [self showUsingAnimation:useAnimation]; - } -} - -- (void)handleMinShowTimer:(NSTimer *)theTimer { - [self hideUsingAnimation:useAnimation]; -} - -#pragma mark - View Hierrarchy - -- (void)didMoveToSuperview { - // We need to take care of rotation ourselfs if we're adding the HUD to a window - if ([self.superview isKindOfClass:[UIWindow class]]) { - [self setTransformForCurrentOrientation:NO]; - } -} - -#pragma mark - Internal show & hide operations - -- (void)showUsingAnimation:(BOOL)animated { - if (animated && animationType == MBProgressHUDAnimationZoomIn) { - self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f)); - } else if (animated && animationType == MBProgressHUDAnimationZoomOut) { - self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f)); - } - self.showStarted = [NSDate date]; - // Fade in - if (animated) { - [UIView beginAnimations:nil context:NULL]; - [UIView setAnimationDuration:0.30]; - self.alpha = 1.0f; - if (animationType == MBProgressHUDAnimationZoomIn || animationType == MBProgressHUDAnimationZoomOut) { - self.transform = rotationTransform; - } - [UIView commitAnimations]; - } - else { - self.alpha = 1.0f; - } -} - -- (void)hideUsingAnimation:(BOOL)animated { - // Fade out - if (animated && showStarted) { - [UIView beginAnimations:nil context:NULL]; - [UIView setAnimationDuration:0.30]; - [UIView setAnimationDelegate:self]; - [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)]; - // 0.02 prevents the hud from passing through touches during the animation the hud will get completely hidden - // in the done method - if (animationType == MBProgressHUDAnimationZoomIn) { - self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f)); - } else if (animationType == MBProgressHUDAnimationZoomOut) { - self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f)); - } - - self.alpha = 0.02f; - [UIView commitAnimations]; - } - else { - self.alpha = 0.0f; - [self done]; - } - self.showStarted = nil; -} - -- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void*)context { - [self done]; -} - -- (void)done { - isFinished = YES; - self.alpha = 0.0f; - if (removeFromSuperViewOnHide) { - [self removeFromSuperview]; - } -#if NS_BLOCKS_AVAILABLE - if (self.completionBlock) { - self.completionBlock(); - self.completionBlock = NULL; - } -#endif - if ([delegate respondsToSelector:@selector(hudWasHidden:)]) { - [delegate performSelector:@selector(hudWasHidden:) withObject:self]; - } -} - -#pragma mark - Threading - -- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated { - methodForExecution = method; - targetForExecution = MB_RETAIN(target); - objectForExecution = MB_RETAIN(object); - // Launch execution in new thread - self.taskInProgress = YES; - [NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil]; - // Show HUD view - [self show:animated]; -} - -#if NS_BLOCKS_AVAILABLE - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block { - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion { - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue { - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue - completionBlock:(MBProgressHUDCompletionBlock)completion { - self.taskInProgress = YES; - self.completionBlock = completion; - dispatch_async(queue, ^(void) { - block(); - dispatch_async(dispatch_get_main_queue(), ^(void) { - [self cleanUp]; - }); - }); - [self show:animated]; -} - -#endif - -- (void)launchExecution { - @autoreleasepool { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - // Start executing the requested task - [targetForExecution performSelector:methodForExecution withObject:objectForExecution]; -#pragma clang diagnostic pop - // Task completed, update view in main thread (note: view operations should - // be done only in the main thread) - [self performSelectorOnMainThread:@selector(cleanUp) withObject:nil waitUntilDone:NO]; - } -} - -- (void)cleanUp { - taskInProgress = NO; -#if !__has_feature(objc_arc) - [targetForExecution release]; - [objectForExecution release]; -#else - targetForExecution = nil; - objectForExecution = nil; -#endif - [self hide:useAnimation]; -} - -#pragma mark - UI - -- (void)setupLabels { - label = [[UILabel alloc] initWithFrame:self.bounds]; - label.adjustsFontSizeToFitWidth = NO; - label.textAlignment = MBLabelAlignmentCenter; - label.opaque = NO; - label.backgroundColor = [UIColor clearColor]; - label.textColor = [UIColor whiteColor]; - label.font = self.labelFont; - label.text = self.labelText; - [self addSubview:label]; - - detailsLabel = [[UILabel alloc] initWithFrame:self.bounds]; - detailsLabel.font = self.detailsLabelFont; - detailsLabel.adjustsFontSizeToFitWidth = NO; - detailsLabel.textAlignment = MBLabelAlignmentCenter; - detailsLabel.opaque = NO; - detailsLabel.backgroundColor = [UIColor clearColor]; - detailsLabel.textColor = [UIColor whiteColor]; - detailsLabel.numberOfLines = 0; - detailsLabel.font = self.detailsLabelFont; - detailsLabel.text = self.detailsLabelText; - [self addSubview:detailsLabel]; -} - -- (void)updateIndicators { - - BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]]; - BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]]; - - if (mode == MBProgressHUDModeIndeterminate && !isActivityIndicator) { - // Update to indeterminate indicator - [indicator removeFromSuperview]; - self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc] - initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]); - [(UIActivityIndicatorView *)indicator startAnimating]; - [self addSubview:indicator]; - } - else if (mode == MBProgressHUDModeDeterminateHorizontalBar) { - // Update to bar determinate indicator - [indicator removeFromSuperview]; - self.indicator = MB_AUTORELEASE([[MBBarProgressView alloc] init]); - [self addSubview:indicator]; - } - else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) { - if (!isRoundIndicator) { - // Update to determinante indicator - [indicator removeFromSuperview]; - self.indicator = MB_AUTORELEASE([[MBRoundProgressView alloc] init]); - [self addSubview:indicator]; - } - if (mode == MBProgressHUDModeAnnularDeterminate) { - [(MBRoundProgressView *)indicator setAnnular:YES]; - } - } - else if (mode == MBProgressHUDModeCustomView && customView != indicator) { - // Update custom view indicator - [indicator removeFromSuperview]; - self.indicator = customView; - [self addSubview:indicator]; - } else if (mode == MBProgressHUDModeText) { - [indicator removeFromSuperview]; - self.indicator = nil; - } -} - -#pragma mark - Layout - -- (void)layoutSubviews { - - // Entirely cover the parent view - UIView *parent = self.superview; - if (parent) { - self.frame = parent.bounds; - } - CGRect bounds = self.bounds; - - // Determine the total widt and height needed - CGFloat maxWidth = bounds.size.width - 4 * margin; - CGSize totalSize = CGSizeZero; - - CGRect indicatorF = indicator.bounds; - indicatorF.size.width = MIN(indicatorF.size.width, maxWidth); - totalSize.width = MAX(totalSize.width, indicatorF.size.width); - totalSize.height += indicatorF.size.height; - - CGSize labelSize = MB_TEXTSIZE(label.text, label.font); - labelSize.width = MIN(labelSize.width, maxWidth); - totalSize.width = MAX(totalSize.width, labelSize.width); - totalSize.height += labelSize.height; - if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { - totalSize.height += kPadding; - } - - CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; - CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); - CGSize detailsLabelSize = MB_MULTILINE_TEXTSIZE(detailsLabel.text, detailsLabel.font, maxSize, detailsLabel.lineBreakMode); - totalSize.width = MAX(totalSize.width, detailsLabelSize.width); - totalSize.height += detailsLabelSize.height; - if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { - totalSize.height += kPadding; - } - - totalSize.width += 2 * margin; - totalSize.height += 2 * margin; - - // Position elements - CGFloat yPos = roundf(((bounds.size.height - totalSize.height) / 2)) + margin + yOffset; - CGFloat xPos = xOffset; - indicatorF.origin.y = yPos; - indicatorF.origin.x = roundf((bounds.size.width - indicatorF.size.width) / 2) + xPos; - indicator.frame = indicatorF; - yPos += indicatorF.size.height; - - if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { - yPos += kPadding; - } - CGRect labelF; - labelF.origin.y = yPos; - labelF.origin.x = roundf((bounds.size.width - labelSize.width) / 2) + xPos; - labelF.size = labelSize; - label.frame = labelF; - yPos += labelF.size.height; - - if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { - yPos += kPadding; - } - CGRect detailsLabelF; - detailsLabelF.origin.y = yPos; - detailsLabelF.origin.x = roundf((bounds.size.width - detailsLabelSize.width) / 2) + xPos; - detailsLabelF.size = detailsLabelSize; - detailsLabel.frame = detailsLabelF; - - // Enforce minsize and quare rules - if (square) { - CGFloat max = MAX(totalSize.width, totalSize.height); - if (max <= bounds.size.width - 2 * margin) { - totalSize.width = max; - } - if (max <= bounds.size.height - 2 * margin) { - totalSize.height = max; - } - } - if (totalSize.width < minSize.width) { - totalSize.width = minSize.width; - } - if (totalSize.height < minSize.height) { - totalSize.height = minSize.height; - } - - self.size = totalSize; -} - -#pragma mark BG Drawing - -- (void)drawRect:(CGRect)rect { - - CGContextRef context = UIGraphicsGetCurrentContext(); - UIGraphicsPushContext(context); - - if (self.dimBackground) { - //Gradient colours - size_t gradLocationsNum = 2; - CGFloat gradLocations[2] = {0.0f, 1.0f}; - CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f}; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum); - CGColorSpaceRelease(colorSpace); - //Gradient center - CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); - //Gradient radius - float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ; - //Gradient draw - CGContextDrawRadialGradient (context, gradient, gradCenter, - 0, gradCenter, gradRadius, - kCGGradientDrawsAfterEndLocation); - CGGradientRelease(gradient); - } - - // Set background rect color - if (self.color) { - CGContextSetFillColorWithColor(context, self.color.CGColor); - } else { - CGContextSetGrayFillColor(context, 0.0f, self.opacity); - } - - - // Center HUD - CGRect allRect = self.bounds; - // Draw rounded HUD backgroud rect - CGRect boxRect = CGRectMake(roundf((allRect.size.width - size.width) / 2) + self.xOffset, - roundf((allRect.size.height - size.height) / 2) + self.yOffset, size.width, size.height); - float radius = 10.0f; - CGContextBeginPath(context); - CGContextMoveToPoint(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect)); - CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMinY(boxRect) + radius, radius, 3 * (float)M_PI / 2, 0, 0); - CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMaxY(boxRect) - radius, radius, 0, (float)M_PI / 2, 0); - CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMaxY(boxRect) - radius, radius, (float)M_PI / 2, (float)M_PI, 0); - CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect) + radius, radius, (float)M_PI, 3 * (float)M_PI / 2, 0); - CGContextClosePath(context); - CGContextFillPath(context); - - UIGraphicsPopContext(); -} - -#pragma mark - KVO - -- (void)registerForKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; - } -} - -- (void)unregisterFromKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self removeObserver:self forKeyPath:keyPath]; - } -} - -- (NSArray *)observableKeypaths { - return [NSArray arrayWithObjects:@"mode", @"customView", @"labelText", @"labelFont", - @"detailsLabelText", @"detailsLabelFont", @"progress", nil]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (![NSThread isMainThread]) { - [self performSelectorOnMainThread:@selector(updateUIForKeypath:) withObject:keyPath waitUntilDone:NO]; - } else { - [self updateUIForKeypath:keyPath]; - } -} - -- (void)updateUIForKeypath:(NSString *)keyPath { - if ([keyPath isEqualToString:@"mode"] || [keyPath isEqualToString:@"customView"]) { - [self updateIndicators]; - } else if ([keyPath isEqualToString:@"labelText"]) { - label.text = self.labelText; - } else if ([keyPath isEqualToString:@"labelFont"]) { - label.font = self.labelFont; - } else if ([keyPath isEqualToString:@"detailsLabelText"]) { - detailsLabel.text = self.detailsLabelText; - } else if ([keyPath isEqualToString:@"detailsLabelFont"]) { - detailsLabel.font = self.detailsLabelFont; - } else if ([keyPath isEqualToString:@"progress"]) { - if ([indicator respondsToSelector:@selector(setProgress:)]) { - [(id)indicator setProgress:progress]; - } - return; - } - [self setNeedsLayout]; - [self setNeedsDisplay]; -} - -#pragma mark - Notifications - -- (void)registerForNotifications { - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self selector:@selector(deviceOrientationDidChange:) - name:UIDeviceOrientationDidChangeNotification object:nil]; -} - -- (void)unregisterFromNotifications { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)deviceOrientationDidChange:(NSNotification *)notification { - UIView *superview = self.superview; - if (!superview) { - return; - } else if ([superview isKindOfClass:[UIWindow class]]) { - [self setTransformForCurrentOrientation:YES]; - } else { - self.bounds = self.superview.bounds; - [self setNeedsDisplay]; - } -} - -- (void)setTransformForCurrentOrientation:(BOOL)animated { - // Stay in sync with the superview - if (self.superview) { - self.bounds = self.superview.bounds; - [self setNeedsDisplay]; - } - - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - CGFloat radians = 0; - if (UIInterfaceOrientationIsLandscape(orientation)) { - if (orientation == UIInterfaceOrientationLandscapeLeft) { radians = -(CGFloat)M_PI_2; } - else { radians = (CGFloat)M_PI_2; } - // Window coordinates differ! - self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width); - } else { - if (orientation == UIInterfaceOrientationPortraitUpsideDown) { radians = (CGFloat)M_PI; } - else { radians = 0; } - } - rotationTransform = CGAffineTransformMakeRotation(radians); - - if (animated) { - [UIView beginAnimations:nil context:nil]; - } - [self setTransform:rotationTransform]; - if (animated) { - [UIView commitAnimations]; - } -} - -@end - - -@implementation MBRoundProgressView - -#pragma mark - Lifecycle - -- (id)init { - return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)]; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - _progress = 0.f; - _annular = NO; - _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f]; - _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f]; - [self registerForKVO]; - } - return self; -} - -- (void)dealloc { - [self unregisterFromKVO]; -#if !__has_feature(objc_arc) - [_progressTintColor release]; - [_backgroundTintColor release]; - [super dealloc]; -#endif -} - -#pragma mark - Drawing - -- (void)drawRect:(CGRect)rect { - - CGRect allRect = self.bounds; - CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f); - CGContextRef context = UIGraphicsGetCurrentContext(); - - if (_annular) { - // Draw background - CGFloat lineWidth = 5.f; - UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; - processBackgroundPath.lineWidth = lineWidth; - processBackgroundPath.lineCapStyle = kCGLineCapRound; - CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); - CGFloat radius = (self.bounds.size.width - lineWidth)/2; - CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees - CGFloat endAngle = (2 * (float)M_PI) + startAngle; - [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - [_backgroundTintColor set]; - [processBackgroundPath stroke]; - // Draw progress - UIBezierPath *processPath = [UIBezierPath bezierPath]; - processPath.lineCapStyle = kCGLineCapRound; - processPath.lineWidth = lineWidth; - endAngle = (self.progress * 2 * (float)M_PI) + startAngle; - [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - [_progressTintColor set]; - [processPath stroke]; - } else { - // Draw background - [_progressTintColor setStroke]; - [_backgroundTintColor setFill]; - CGContextSetLineWidth(context, 2.0f); - CGContextFillEllipseInRect(context, circleRect); - CGContextStrokeEllipseInRect(context, circleRect); - // Draw progress - CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2); - CGFloat radius = (allRect.size.width - 4) / 2; - CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees - CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle; - CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // white - CGContextMoveToPoint(context, center.x, center.y); - CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); - CGContextClosePath(context); - CGContextFillPath(context); - } -} - -#pragma mark - KVO - -- (void)registerForKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; - } -} - -- (void)unregisterFromKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self removeObserver:self forKeyPath:keyPath]; - } -} - -- (NSArray *)observableKeypaths { - return [NSArray arrayWithObjects:@"progressTintColor", @"backgroundTintColor", @"progress", @"annular", nil]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - [self setNeedsDisplay]; -} - -@end - - -@implementation MBBarProgressView - -#pragma mark - Lifecycle - -- (id)init { - return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)]; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - _progress = 0.f; - _lineColor = [UIColor whiteColor]; - _progressColor = [UIColor whiteColor]; - _progressRemainingColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - [self registerForKVO]; - } - return self; -} - -- (void)dealloc { - [self unregisterFromKVO]; -#if !__has_feature(objc_arc) - [_lineColor release]; - [_progressColor release]; - [_progressRemainingColor release]; - [super dealloc]; -#endif -} - -#pragma mark - Drawing - -- (void)drawRect:(CGRect)rect { - CGContextRef context = UIGraphicsGetCurrentContext(); - - // setup properties - CGContextSetLineWidth(context, 2); - CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); - CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); - - // draw line border - float radius = (rect.size.height / 2) - 2; - CGContextMoveToPoint(context, 2, rect.size.height/2); - CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); - CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); - CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); - CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); - CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); - CGContextFillPath(context); - - // draw progress background - CGContextMoveToPoint(context, 2, rect.size.height/2); - CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); - CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); - CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); - CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); - CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); - CGContextStrokePath(context); - - // setup to draw progress color - CGContextSetFillColorWithColor(context, [_progressColor CGColor]); - radius = radius - 2; - float amount = self.progress * rect.size.width; - - // if progress is in the middle area - if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { - // top - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, amount, 4); - CGContextAddLineToPoint(context, amount, radius + 4); - - // bottom - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, amount, rect.size.height - 4); - CGContextAddLineToPoint(context, amount, radius + 4); - - CGContextFillPath(context); - } - - // progress is in the right arc - else if (amount > radius + 4) { - float x = amount - (rect.size.width - radius - 4); - - // top - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4); - float angle = -acos(x/radius); - if (isnan(angle)) angle = 0; - CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0); - CGContextAddLineToPoint(context, amount, rect.size.height/2); - - // bottom - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4); - angle = acos(x/radius); - if (isnan(angle)) angle = 0; - CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); - CGContextAddLineToPoint(context, amount, rect.size.height/2); - - CGContextFillPath(context); - } - - // progress is in the left arc - else if (amount < radius + 4 && amount > 0) { - // top - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); - - // bottom - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); - - CGContextFillPath(context); - } -} - -#pragma mark - KVO - -- (void)registerForKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; - } -} - -- (void)unregisterFromKVO { - for (NSString *keyPath in [self observableKeypaths]) { - [self removeObserver:self forKeyPath:keyPath]; - } -} - -- (NSArray *)observableKeypaths { - return [NSArray arrayWithObjects:@"lineColor", @"progressRemainingColor", @"progressColor", @"progress", nil]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - [self setNeedsDisplay]; -} - -@end diff --git a/TeamTalk/Pods/MBProgressHUD/README.mdown b/TeamTalk/Pods/MBProgressHUD/README.mdown deleted file mode 100644 index d21bc65..0000000 --- a/TeamTalk/Pods/MBProgressHUD/README.mdown +++ /dev/null @@ -1,101 +0,0 @@ -# MBProgressHUD [![Build Status](https://travis-ci.org/matej/MBProgressHUD.png)](https://travis-ci.org/matej/MBProgressHUD) - -MBProgressHUD is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features. - -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/1-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/1.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/2-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/2.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/3-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/3.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/4-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/4.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/5-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/5.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/6-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/6.png) -[![](http://dl.dropbox.com/u/378729/MBProgressHUD/7-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/7.png) - -## Requirements - -MBProgressHUD works on any iOS version and is compatible with both ARC and non-ARC projects. It depends on the following Apple frameworks, which should already be included with most Xcode templates: - -* Foundation.framework -* UIKit.framework -* CoreGraphics.framework - -You will need LLVM 3.0 or later in order to build MBProgressHUD. - -## Adding MBProgressHUD to your project - -### Cocoapods - -[CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project. - -1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 0.8'` -2. Install the pod(s) by running `pod install`. -3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. - -### Source files - -Alternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project. - -1. Download the [latest code version](https://github.com/matej/MBProgressHUD/archive/master.zip) or add the repository as a git submodule to your git-tracked project. -2. Open your project in Xcode, then drag and drop `MBProgressHUD.h` and `MBProgressHUD.m` onto your project (use the "Product Navigator view"). Make sure to select Copy items when asked if you extracted the code archive outside of your project. -3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. - -### Static library - -You can also add MBProgressHUD as a static library to your project or workspace. - -1. Download the [latest code version](https://github.com/matej/MBProgressHUD/downloads) or add the repository as a git submodule to your git-tracked project. -2. Open your project in Xcode, then drag and drop `MBProgressHUD.xcodeproj` onto your project or workspace (use the "Product Navigator view"). -3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add `libMBProgressHUD.a`. You might also need to add `MBProgressHUD` to the Target Dependencies list. -4. Include MBProgressHUD wherever you need it with `#import <MBProgressHUD/MBProgressHUD.h>`. - -## Usage - -The main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread. - -```objective-c -[MBProgressHUD showHUDAddedTo:self.view animated:YES]; -dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ - // Do something... - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.view animated:YES]; - }); -}); -``` - -If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns. - -```objective-c -MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; -hud.mode = MBProgressHUDModeAnnularDeterminate; -hud.labelText = @"Loading"; -[self doSomethingInBackgroundWithProgressCallback:^(float progress) { - hud.progress = progress; -} completionCallback:^{ - [hud hide:YES]; -}]; -``` - -UI updates should always be done on the main thread. Some MBProgressHUD setters are however considered "thread safe" and can be called from background threads. Those also include `setMode:`, `setCustomView:`, `setLabelText:`, `setLabelFont:`, `setDetailsLabelText:`, `setDetailsLabelFont:` and `setProgress:`. - -If you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task. - -```objective-c -[MBProgressHUD showHUDAddedTo:self.view animated:YES]; -dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC); -dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - // Do something... - [MBProgressHUD hideHUDForView:self.view animated:YES]; -}); -``` - -You should be aware that any HUD updates issued inside the above block won't be displayed until the block completes. - -For more examples, including how to use MBProgressHUD with asynchronous operations such as NSURLConnection, take a look at the bundled demo project. Extensive API documentation is provided in the header file (MBProgressHUD.h). - - -## License - -This code is distributed under the terms and conditions of the [MIT license](LICENSE). - -## Change-log - -A brief summary of each MBProgressHUD release can be found on the [wiki](https://github.com/matej/MBProgressHUD/wiki/Change-log). diff --git a/TeamTalk/Pods/Manifest.lock b/TeamTalk/Pods/Manifest.lock deleted file mode 100644 index ab8de8f..0000000 --- a/TeamTalk/Pods/Manifest.lock +++ /dev/null @@ -1,54 +0,0 @@ -PODS: - - AFNetworking (2.3.1): - - AFNetworking/NSURLConnection - - AFNetworking/NSURLSession - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/UIKit - - AFNetworking/NSURLConnection (2.3.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/NSURLSession (2.3.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/Reachability (2.3.1) - - AFNetworking/Security (2.3.1) - - AFNetworking/Serialization (2.3.1) - - AFNetworking/UIKit (2.3.1): - - AFNetworking/NSURLConnection - - AFNetworking/NSURLSession - - DACircularProgress (2.2.0) - - FMDB (2.3): - - FMDB/standard - - FMDB/common (2.3) - - FMDB/standard (2.3): - - FMDB/common - - HPGrowingTextView (1.1) - - MBProgressHUD (0.8) - - PSTCollectionView (1.2.1) - - SDWebImage (3.7.1): - - SDWebImage/Core - - SDWebImage/Core (3.7.1) - -DEPENDENCIES: - - AFNetworking (~> 2.3.0) - - DACircularProgress (~> 2.2.0) - - FMDB (~> 2.3) - - HPGrowingTextView (~> 1.1) - - MBProgressHUD (~> 0.8) - - PSTCollectionView (~> 1.2.1) - - SDWebImage (~> 3.6) - -SPEC CHECKSUMS: - AFNetworking: 6d7b76aa5d04c8c37daad3eef4b7e3f2a7620da3 - DACircularProgress: 3b41941891a56dc6aa17971f5322a9a38a6f446e - FMDB: 31ec26773c7f7b7890a6038235a1f2bbd933a7cb - HPGrowingTextView: 07d5ab1f1e867acfb7a6f498b819948c9e97d07c - MBProgressHUD: c356980b0cd097f19acec959b49dca5eb8ec31be - PSTCollectionView: a63299550ad566b579479d07cb5e2bf61148686b - SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d - -COCOAPODS: 0.33.1 diff --git a/TeamTalk/Pods/PSTCollectionView/LICENSE b/TeamTalk/Pods/PSTCollectionView/LICENSE deleted file mode 100644 index 6614c69..0000000 --- a/TeamTalk/Pods/PSTCollectionView/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2013 Peter Steinberger <steipete@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h deleted file mode 100644 index 1fe930d..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSIndexPath+PSTCollectionViewAdditions.h -// PSTCollectionView -// -// Copyright (c) 2013 Peter Steinberger. All rights reserved. -// - -#import <UIKit/UIKit.h> - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - -@interface NSIndexPath (PSTCollectionViewAdditions) - -+ (NSIndexPath *)indexPathForItem:(NSInteger)item inSection:(NSInteger)section; - -- (NSInteger)item; - -@end - -#endif diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.m deleted file mode 100644 index 92b9f39..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// NSIndexPath+PSTCollectionViewAdditions.m -// PSTCollectionView -// -// Copyright (c) 2013 Peter Steinberger. All rights reserved. -// - -#import "NSIndexPath+PSTCollectionViewAdditions.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - -@implementation NSIndexPath (PSTCollectionViewAdditions) - -// Simple NSIndexPath addition to allow using "item" instead of "row". -+ (NSIndexPath *)indexPathForItem:(NSInteger)item inSection:(NSInteger)section { - return [NSIndexPath indexPathForRow:item inSection:section]; -} - -- (NSInteger)item { - return self.row; -} - -@end - -#endif diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.h deleted file mode 100644 index 8dd1216..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// PSTCollectionView.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewLayout.h" -#import "PSTCollectionViewFlowLayout.h" -#import "PSTCollectionViewCell.h" -#import "PSTCollectionViewController.h" -#import "PSTCollectionViewUpdateItem.h" - -@class PSTCollectionViewController; - -typedef NS_OPTIONS(NSUInteger, PSTCollectionViewScrollPosition) { - PSTCollectionViewScrollPositionNone = 0, - - // The vertical positions are mutually exclusive to each other, but are bitwise or-able with the horizontal scroll positions. - // Combining positions from the same grouping (horizontal or vertical) will result in an NSInvalidArgumentException. - PSTCollectionViewScrollPositionTop = 1 << 0, - PSTCollectionViewScrollPositionCenteredVertically = 1 << 1, - PSTCollectionViewScrollPositionBottom = 1 << 2, - - // Likewise, the horizontal positions are mutually exclusive to each other. - PSTCollectionViewScrollPositionLeft = 1 << 3, - PSTCollectionViewScrollPositionCenteredHorizontally = 1 << 4, - PSTCollectionViewScrollPositionRight = 1 << 5 -}; - -typedef NS_ENUM(NSUInteger, PSTCollectionElementCategory) { - PSTCollectionElementCategoryCell, - PSTCollectionElementCategorySupplementaryView, - PSTCollectionElementCategoryDecorationView -}; - -// Define the `PSTCollectionViewDisableForwardToUICollectionViewSentinel` to disable the automatic forwarding to UICollectionView on iOS 6+. (Copy below line into your AppDelegate.m) -//@interface PSTCollectionViewDisableForwardToUICollectionViewSentinel : NSObject @end @implementation PSTCollectionViewDisableForwardToUICollectionViewSentinel @end - -// API-compatible replacement for UICollectionView. -// Works on iOS 4.3 upwards (including iOS 6). -@interface PSTCollectionView : UIScrollView - -- (id)initWithFrame:(CGRect)frame collectionViewLayout:(PSTCollectionViewLayout *)layout; // the designated initializer - -@property (nonatomic, strong) PSTCollectionViewLayout *collectionViewLayout; -@property (nonatomic, assign) IBOutlet id<PSTCollectionViewDelegate> delegate; -@property (nonatomic, assign) IBOutlet id<PSTCollectionViewDataSource> dataSource; -@property (nonatomic, strong) UIView *backgroundView; // will be automatically resized to track the size of the collection view and placed behind all cells and supplementary views. - -// For each reuse identifier that the collection view will use, register either a class or a nib from which to instantiate a cell. -// If a nib is registered, it must contain exactly 1 top level object which is a PSTCollectionViewCell. -// If a class is registered, it will be instantiated via alloc/initWithFrame: -- (void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier; - -- (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier; - -- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier; - -// TODO: implement! -- (void)registerNib:(UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier; - -- (id)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath; - -- (id)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath; - -// These properties control whether items can be selected, and if so, whether multiple items can be simultaneously selected. -@property (nonatomic) BOOL allowsSelection; // default is YES -@property (nonatomic) BOOL allowsMultipleSelection; // default is NO - -- (NSArray *)indexPathsForSelectedItems; // returns nil or an array of selected index paths -- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(PSTCollectionViewScrollPosition)scrollPosition; - -- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; - -- (void)reloadData; // discard the dataSource and delegate data and requery as necessary - -- (void)setCollectionViewLayout:(PSTCollectionViewLayout *)layout animated:(BOOL)animated; // transition from one layout to another - -// Information about the current state of the collection view. - -- (NSInteger)numberOfSections; - -- (NSInteger)numberOfItemsInSection:(NSInteger)section; - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath; - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; - -- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point; - -- (NSIndexPath *)indexPathForCell:(PSTCollectionViewCell *)cell; - -- (PSTCollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath; - -- (NSArray *)visibleCells; - -- (NSArray *)indexPathsForVisibleItems; - -// Interacting with the collection view. - -- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(PSTCollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; - -// These methods allow dynamic modification of the current set of items in the collection view -- (void)insertSections:(NSIndexSet *)sections; -- (void)deleteSections:(NSIndexSet *)sections; -- (void)reloadSections:(NSIndexSet *)sections; -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; -- (void)insertItemsAtIndexPaths:(NSArray *)indexPaths; -- (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths; -- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths; -- (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath; -- (void)performBatchUpdates:(void (^)(void))updates completion:(void (^)(BOOL finished))completion; // allows multiple insert/delete/reload/move calls to be animated simultaneously. Nestable. - -@end - -// To dynamically switch between PSTCollectionView and UICollectionView, use the PSUICollectionView* classes. -#define PSUICollectionView PSUICollectionView_ -#define PSUICollectionViewCell PSUICollectionViewCell_ -#define PSUICollectionReusableView PSUICollectionReusableView_ -#define PSUICollectionViewDelegate PSTCollectionViewDelegate -#define PSUICollectionViewDataSource PSTCollectionViewDataSource -#define PSUICollectionViewLayout PSUICollectionViewLayout_ -#define PSUICollectionViewFlowLayout PSUICollectionViewFlowLayout_ -#define PSUICollectionViewDelegateFlowLayout PSTCollectionViewDelegateFlowLayout -#define PSUICollectionViewLayoutAttributes PSUICollectionViewLayoutAttributes_ -#define PSUICollectionViewController PSUICollectionViewController_ - -@interface PSUICollectionView_ : PSTCollectionView @end -@interface PSUICollectionViewCell_ : PSTCollectionViewCell @end -@interface PSUICollectionReusableView_ : PSTCollectionReusableView @end -@interface PSUICollectionViewLayout_ : PSTCollectionViewLayout @end -@interface PSUICollectionViewFlowLayout_ : PSTCollectionViewFlowLayout @end -@protocol PSUICollectionViewDelegateFlowLayout_ <PSTCollectionViewDelegateFlowLayout> @end -@interface PSUICollectionViewLayoutAttributes_ : PSTCollectionViewLayoutAttributes @end -@interface PSUICollectionViewController_ : PSTCollectionViewController <PSUICollectionViewDelegate, PSUICollectionViewDataSource> @end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.m deleted file mode 100644 index 7011877..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionView.m +++ /dev/null @@ -1,2311 +0,0 @@ -// -// PSTCollectionView.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionView.h" -#import "PSTCollectionViewData.h" -#import "PSTCollectionViewLayout+Internals.h" -#import "PSTCollectionViewItemKey.h" - -#import <objc/runtime.h> -#if TARGET_IPHONE_SIMULATOR -#import <dlfcn.h> -#endif - -@interface PSTCollectionViewLayout (Internal) -@property (nonatomic, unsafe_unretained) PSTCollectionView *collectionView; -@end - -@interface PSTCollectionViewData (Internal) -- (void)prepareToLoadData; -@end - -@interface PSTCollectionViewCell (Internal) -- (void)performSelectionSegue; -@end - -@interface PSTCollectionViewUpdateItem () -- (NSIndexPath *)indexPath; - -- (BOOL)isSectionOperation; -@end - -@interface PSTCollectionViewLayoutAttributes () { - char junk[128]; -} -@property (nonatomic, copy) NSString *elementKind; -@end - -CGFloat PSTSimulatorAnimationDragCoefficient(void); - -@class PSTCollectionViewExt; - -@interface PSTCollectionView () <UIScrollViewDelegate> { - // ivar layout needs to EQUAL to UICollectionView. - PSTCollectionViewLayout *_layout; - __unsafe_unretained id<PSTCollectionViewDataSource> _dataSource; - UIView *_backgroundView; - NSMutableSet *_indexPathsForSelectedItems; - NSMutableDictionary *_cellReuseQueues; - NSMutableDictionary *_supplementaryViewReuseQueues; - NSMutableDictionary *_decorationViewReuseQueues; - NSMutableSet *_indexPathsForHighlightedItems; - int _reloadingSuspendedCount; - PSTCollectionReusableView *_firstResponderView; - UIView *_newContentView; - int _firstResponderViewType; - NSString *_firstResponderViewKind; - NSIndexPath *_firstResponderIndexPath; - NSMutableDictionary *_allVisibleViewsDict; - NSIndexPath *_pendingSelectionIndexPath; - NSMutableSet *_pendingDeselectionIndexPaths; - PSTCollectionViewData *_collectionViewData; - id _update; - CGRect _visibleBoundRects; - CGRect _preRotationBounds; - CGPoint _rotationBoundsOffset; - int _rotationAnimationCount; - int _updateCount; - NSMutableArray *_insertItems; - NSMutableArray *_deleteItems; - NSMutableArray *_reloadItems; - NSMutableArray *_moveItems; - NSArray *_originalInsertItems; - NSArray *_originalDeleteItems; - UITouch *_currentTouch; - - void (^_updateCompletionHandler)(BOOL finished); - - NSMutableDictionary *_cellClassDict; - NSMutableDictionary *_cellNibDict; - NSMutableDictionary *_supplementaryViewClassDict; - NSMutableDictionary *_supplementaryViewNibDict; - NSMutableDictionary *_cellNibExternalObjectsTables; - NSMutableDictionary *_supplementaryViewNibExternalObjectsTables; - struct { - unsigned int delegateShouldHighlightItemAtIndexPath : 1; - unsigned int delegateDidHighlightItemAtIndexPath : 1; - unsigned int delegateDidUnhighlightItemAtIndexPath : 1; - unsigned int delegateShouldSelectItemAtIndexPath : 1; - unsigned int delegateShouldDeselectItemAtIndexPath : 1; - unsigned int delegateDidSelectItemAtIndexPath : 1; - unsigned int delegateDidDeselectItemAtIndexPath : 1; - unsigned int delegateSupportsMenus : 1; - unsigned int delegateDidEndDisplayingCell : 1; - unsigned int delegateDidEndDisplayingSupplementaryView : 1; - unsigned int dataSourceNumberOfSections : 1; - unsigned int dataSourceViewForSupplementaryElement : 1; - unsigned int reloadSkippedDuringSuspension : 1; - unsigned int scheduledUpdateVisibleCells : 1; - unsigned int scheduledUpdateVisibleCellLayoutAttributes : 1; - unsigned int allowsSelection : 1; - unsigned int allowsMultipleSelection : 1; - unsigned int updating : 1; - unsigned int fadeCellsForBoundsChange : 1; - unsigned int updatingLayout : 1; - unsigned int needsReload : 1; - unsigned int reloading : 1; - unsigned int skipLayoutDuringSnapshotting : 1; - unsigned int layoutInvalidatedSinceLastCellUpdate : 1; - unsigned int doneFirstLayout : 1; - }_collectionViewFlags; - CGPoint _lastLayoutOffset; - char filler[200]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} -@property (nonatomic, strong) PSTCollectionViewData *collectionViewData; -@property (nonatomic, strong, readonly) PSTCollectionViewExt *extVars; -@property (nonatomic, readonly) id currentUpdate; -@property (nonatomic, readonly) NSDictionary *visibleViewsDict; -@property (nonatomic, assign) CGRect visibleBoundRects; -@end - -// Used by PSTCollectionView for external variables. -// (We need to keep the total class size equal to the UICollectionView variant) -@interface PSTCollectionViewExt : NSObject -@property (nonatomic, unsafe_unretained) id<PSTCollectionViewDelegate> collectionViewDelegate; -@property (nonatomic, strong) PSTCollectionViewLayout *nibLayout; -@property (nonatomic, strong) NSDictionary *nibCellsExternalObjects; -@property (nonatomic, strong) NSDictionary *supplementaryViewsExternalObjects; -@property (nonatomic, strong) NSIndexPath *touchingIndexPath; -@property (nonatomic, strong) NSIndexPath *currentIndexPath; -@end - -@implementation PSTCollectionViewExt -@end - -const char kPSTColletionViewExt; - -@implementation PSTCollectionView - -@synthesize collectionViewLayout = _layout; -@synthesize currentUpdate = _update; -@synthesize visibleViewsDict = _allVisibleViewsDict; - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -static void PSTCollectionViewCommonSetup(PSTCollectionView *_self) { - _self.allowsSelection = YES; - _self->_indexPathsForSelectedItems = [NSMutableSet new]; - _self->_indexPathsForHighlightedItems = [NSMutableSet new]; - _self->_cellReuseQueues = [NSMutableDictionary new]; - _self->_supplementaryViewReuseQueues = [NSMutableDictionary new]; - _self->_decorationViewReuseQueues = [NSMutableDictionary new]; - _self->_allVisibleViewsDict = [NSMutableDictionary new]; - _self->_cellClassDict = [NSMutableDictionary new]; - _self->_cellNibDict = [NSMutableDictionary new]; - _self->_supplementaryViewClassDict = [NSMutableDictionary new]; - _self->_supplementaryViewNibDict = [NSMutableDictionary new]; - - // add class that saves additional ivars - objc_setAssociatedObject(_self, &kPSTColletionViewExt, [PSTCollectionViewExt new], OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (id)initWithFrame:(CGRect)frame { - return [self initWithFrame:frame collectionViewLayout:nil]; -} - -- (id)initWithFrame:(CGRect)frame collectionViewLayout:(PSTCollectionViewLayout *)layout { - if ((self = [super initWithFrame:frame])) { - // Set self as the UIScrollView's delegate - [super setDelegate:self]; - - PSTCollectionViewCommonSetup(self); - self.collectionViewLayout = layout; - _collectionViewData = [[PSTCollectionViewData alloc] initWithCollectionView:self layout:layout]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)inCoder { - if ((self = [super initWithCoder:inCoder])) { - // Set self as the UIScrollView's delegate - [super setDelegate:self]; - - PSTCollectionViewCommonSetup(self); - - self.extVars.nibLayout = [inCoder decodeObjectForKey:@"UICollectionLayout"]; - - NSDictionary *cellExternalObjects = [inCoder decodeObjectForKey:@"UICollectionViewCellPrototypeNibExternalObjects"]; - NSDictionary *cellNibs = [inCoder decodeObjectForKey:@"UICollectionViewCellNibDict"]; - - for (NSString *identifier in cellNibs.allKeys) { - _cellNibDict[identifier] = cellNibs[identifier]; - } - - self.extVars.nibCellsExternalObjects = cellExternalObjects; - - NSDictionary *supplementaryViewExternalObjects = [inCoder decodeObjectForKey:@"UICollectionViewSupplementaryViewPrototypeNibExternalObjects"]; - NSDictionary *supplementaryViewNibs = [inCoder decodeObjectForKey:@"UICollectionViewSupplementaryViewNibDict"]; - - for (NSString *identifier in supplementaryViewNibs.allKeys) { - _supplementaryViewNibDict[identifier] = supplementaryViewNibs[identifier]; - } - - self.extVars.supplementaryViewsExternalObjects = supplementaryViewExternalObjects; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - - PSTCollectionViewLayout *nibLayout = self.extVars.nibLayout; - if (nibLayout) { - self.collectionViewLayout = nibLayout; - self.extVars.nibLayout = nil; - } -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@ collection view layout: %@", [super description], self.collectionViewLayout]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - UIView - -- (void)layoutSubviews { - [super layoutSubviews]; - - // Adding alpha animation to make the relayouting smooth - if (_collectionViewFlags.fadeCellsForBoundsChange) { - CATransition *transition = [CATransition animation]; - transition.duration = 0.25f * PSTSimulatorAnimationDragCoefficient(); - transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - transition.type = kCATransitionFade; - [self.layer addAnimation:transition forKey:@"rotationAnimation"]; - } - - [_collectionViewData validateLayoutInRect:self.bounds]; - - // update cells - if (_collectionViewFlags.fadeCellsForBoundsChange) { - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - } - - if (!_collectionViewFlags.updatingLayout) - [self updateVisibleCellsNow:YES]; - - if (_collectionViewFlags.fadeCellsForBoundsChange) { - [CATransaction commit]; - } - - // do we need to update contentSize? - CGSize contentSize = [_collectionViewData collectionViewContentRect].size; - if (!CGSizeEqualToSize(self.contentSize, contentSize)) { - self.contentSize = contentSize; - - // if contentSize is different, we need to re-evaluate layout, bounds (contentOffset) might changed - [_collectionViewData validateLayoutInRect:self.bounds]; - [self updateVisibleCellsNow:YES]; - } - - if (_backgroundView) { - _backgroundView.frame = (CGRect){.origin=self.contentOffset, .size=self.bounds.size}; - } - - _collectionViewFlags.fadeCellsForBoundsChange = NO; - _collectionViewFlags.doneFirstLayout = YES; -} - -- (void)setFrame:(CGRect)frame { - if (!CGRectEqualToRect(frame, self.frame)) { - CGRect bounds = (CGRect){.origin=self.contentOffset, .size=frame.size}; - BOOL shouldInvalidate = [self.collectionViewLayout shouldInvalidateLayoutForBoundsChange:bounds]; - [super setFrame:frame]; - if (shouldInvalidate) { - [self invalidateLayout]; - _collectionViewFlags.fadeCellsForBoundsChange = YES; - } - } -} - -- (void)setBounds:(CGRect)bounds { - if (!CGRectEqualToRect(bounds, self.bounds)) { - BOOL shouldInvalidate = [self.collectionViewLayout shouldInvalidateLayoutForBoundsChange:bounds]; - [super setBounds:bounds]; - if (shouldInvalidate) { - [self invalidateLayout]; - _collectionViewFlags.fadeCellsForBoundsChange = YES; - } - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - UIScrollViewDelegate - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidScroll:)]) { - [delegate scrollViewDidScroll:scrollView]; - } -} - -- (void)scrollViewDidZoom:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidZoom:)]) { - [delegate scrollViewDidZoom:scrollView]; - } -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) { - [delegate scrollViewWillBeginDragging:scrollView]; - } -} - -- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { - // Let collectionViewLayout decide where to stop. - *targetContentOffset = [[self collectionViewLayout] targetContentOffsetForProposedContentOffset:*targetContentOffset withScrollingVelocity:velocity]; - - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]) { - //if collectionViewDelegate implements this method, it may modify targetContentOffset as well - [delegate scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset]; - } -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)]) { - [delegate scrollViewDidEndDragging:scrollView willDecelerate:decelerate]; - } - - // if we are in the middle of a cell touch event, perform the "touchEnded" simulation - if (self.extVars.touchingIndexPath) { - [self cellTouchCancelled]; - } -} - -- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewWillBeginDecelerating:)]) { - [delegate scrollViewWillBeginDecelerating:scrollView]; - } -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) { - [delegate scrollViewDidEndDecelerating:scrollView]; - } -} - -- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)]) { - [delegate scrollViewDidEndScrollingAnimation:scrollView]; - } -} - -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(viewForZoomingInScrollView:)]) { - return [delegate viewForZoomingInScrollView:scrollView]; - } - return nil; -} - -- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewWillBeginZooming:withView:)]) { - [delegate scrollViewWillBeginZooming:scrollView withView:view]; - } -} - -- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidEndZooming:withView:atScale:)]) { - [delegate scrollViewDidEndZooming:scrollView withView:view atScale:scale]; - } -} - -- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewShouldScrollToTop:)]) { - return [delegate scrollViewShouldScrollToTop:scrollView]; - } - return YES; -} - -- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { - id<PSTCollectionViewDelegate> delegate = self.extVars.collectionViewDelegate; - if ((id)delegate != self && [delegate respondsToSelector:@selector(scrollViewDidScrollToTop:)]) { - [delegate scrollViewDidScrollToTop:scrollView]; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier { - NSParameterAssert(cellClass); - NSParameterAssert(identifier); - _cellClassDict[identifier] = cellClass; -} - -- (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier { - NSParameterAssert(viewClass); - NSParameterAssert(elementKind); - NSParameterAssert(identifier); - NSString *kindAndIdentifier = [NSString stringWithFormat:@"%@/%@", elementKind, identifier]; - _supplementaryViewClassDict[kindAndIdentifier] = viewClass; -} - -- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier { - NSArray *topLevelObjects = [nib instantiateWithOwner:nil options:nil]; -#pragma unused(topLevelObjects) - NSAssert(topLevelObjects.count == 1 && [topLevelObjects[0] isKindOfClass:PSTCollectionViewCell.class], @"must contain exactly 1 top level object which is a PSTCollectionViewCell"); - - _cellNibDict[identifier] = nib; -} - -- (void)registerNib:(UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier { - NSArray *topLevelObjects = [nib instantiateWithOwner:nil options:nil]; -#pragma unused(topLevelObjects) - NSAssert(topLevelObjects.count == 1 && [topLevelObjects[0] isKindOfClass:PSTCollectionReusableView.class], @"must contain exactly 1 top level object which is a PSTCollectionReusableView"); - - NSString *kindAndIdentifier = [NSString stringWithFormat:@"%@/%@", kind, identifier]; - _supplementaryViewNibDict[kindAndIdentifier] = nib; -} - -- (id)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath { - // de-queue cell (if available) - NSMutableArray *reusableCells = _cellReuseQueues[identifier]; - PSTCollectionViewCell *cell = [reusableCells lastObject]; - PSTCollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:indexPath]; - - if (cell) { - [reusableCells removeObjectAtIndex:reusableCells.count - 1]; - }else { - if (_cellNibDict[identifier]) { - // Cell was registered via registerNib:forCellWithReuseIdentifier: - UINib *cellNib = _cellNibDict[identifier]; - NSDictionary *externalObjects = self.extVars.nibCellsExternalObjects[identifier]; - if (externalObjects) { - cell = [cellNib instantiateWithOwner:self options:@{UINibExternalObjects : externalObjects}][0]; - }else { - cell = [cellNib instantiateWithOwner:self options:nil][0]; - } - }else { - Class cellClass = _cellClassDict[identifier]; - // compatibility layer - Class collectionViewCellClass = NSClassFromString(@"UICollectionViewCell"); - if (collectionViewCellClass && [cellClass isEqual:collectionViewCellClass]) { - cellClass = PSTCollectionViewCell.class; - } - if (cellClass == nil) { - @throw [NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"Class not registered for identifier %@", identifier] userInfo:nil]; - } - if (attributes) { - cell = [[cellClass alloc] initWithFrame:attributes.frame]; - }else { - cell = [cellClass new]; - } - } - cell.collectionView = self; - cell.reuseIdentifier = identifier; - } - - [cell applyLayoutAttributes:attributes]; - - return cell; -} - -- (id)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath { - NSString *kindAndIdentifier = [NSString stringWithFormat:@"%@/%@", elementKind, identifier]; - NSMutableArray *reusableViews = _supplementaryViewReuseQueues[kindAndIdentifier]; - PSTCollectionReusableView *view = [reusableViews lastObject]; - if (view) { - [reusableViews removeObjectAtIndex:reusableViews.count - 1]; - }else { - if (_supplementaryViewNibDict[kindAndIdentifier]) { - // supplementary view was registered via registerNib:forCellWithReuseIdentifier: - UINib *supplementaryViewNib = _supplementaryViewNibDict[kindAndIdentifier]; - NSDictionary *externalObjects = self.extVars.supplementaryViewsExternalObjects[kindAndIdentifier]; - if (externalObjects) { - view = [supplementaryViewNib instantiateWithOwner:self options:@{UINibExternalObjects : externalObjects}][0]; - }else { - view = [supplementaryViewNib instantiateWithOwner:self options:nil][0]; - } - }else { - Class viewClass = _supplementaryViewClassDict[kindAndIdentifier]; - Class reusableViewClass = NSClassFromString(@"UICollectionReusableView"); - if (reusableViewClass && [viewClass isEqual:reusableViewClass]) { - viewClass = PSTCollectionReusableView.class; - } - if (viewClass == nil) { - @throw [NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"Class not registered for kind/identifier %@", kindAndIdentifier] userInfo:nil]; - } - if (self.collectionViewLayout) { - PSTCollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForSupplementaryViewOfKind:elementKind atIndexPath:indexPath]; - if (attributes) { - view = [[viewClass alloc] initWithFrame:attributes.frame]; - } - }else { - view = [viewClass new]; - } - } - view.collectionView = self; - view.reuseIdentifier = identifier; - } - - return view; -} - -- (id)dequeueReusableOrCreateDecorationViewOfKind:(NSString *)elementKind forIndexPath:(NSIndexPath *)indexPath { - NSMutableArray *reusableViews = _decorationViewReuseQueues[elementKind]; - PSTCollectionReusableView *view = [reusableViews lastObject]; - PSTCollectionViewLayout *collectionViewLayout = self.collectionViewLayout; - PSTCollectionViewLayoutAttributes *attributes = [collectionViewLayout layoutAttributesForDecorationViewOfKind:elementKind atIndexPath:indexPath]; - - if (view) { - [reusableViews removeObjectAtIndex:reusableViews.count - 1]; - }else { - NSDictionary *decorationViewNibDict = collectionViewLayout.decorationViewNibDict; - NSDictionary *decorationViewExternalObjects = collectionViewLayout.decorationViewExternalObjectsTables; - if (decorationViewNibDict[elementKind]) { - // supplementary view was registered via registerNib:forCellWithReuseIdentifier: - UINib *supplementaryViewNib = decorationViewNibDict[elementKind]; - NSDictionary *externalObjects = decorationViewExternalObjects[elementKind]; - if (externalObjects) { - view = [supplementaryViewNib instantiateWithOwner:self options:@{UINibExternalObjects : externalObjects}][0]; - }else { - view = [supplementaryViewNib instantiateWithOwner:self options:nil][0]; - } - }else { - NSDictionary *decorationViewClassDict = collectionViewLayout.decorationViewClassDict; - Class viewClass = decorationViewClassDict[elementKind]; - Class reusableViewClass = NSClassFromString(@"UICollectionReusableView"); - if (reusableViewClass && [viewClass isEqual:reusableViewClass]) { - viewClass = PSTCollectionReusableView.class; - } - if (viewClass == nil) { - @throw [NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"Class not registered for identifier %@", elementKind] userInfo:nil]; - } - if (attributes) { - view = [[viewClass alloc] initWithFrame:attributes.frame]; - }else { - view = [viewClass new]; - } - } - view.collectionView = self; - view.reuseIdentifier = elementKind; - } - - [view applyLayoutAttributes:attributes]; - - return view; -} - -- (NSArray *)allCells { - return [[_allVisibleViewsDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { - return [evaluatedObject isKindOfClass:PSTCollectionViewCell.class]; - }]]; -} - -- (NSArray *)visibleCells { - return [[_allVisibleViewsDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { - return [evaluatedObject isKindOfClass:PSTCollectionViewCell.class] && CGRectIntersectsRect(self.bounds, [evaluatedObject frame]); - }]]; -} - -- (void)reloadData { - if (_reloadingSuspendedCount != 0) return; - [self invalidateLayout]; - [_allVisibleViewsDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isKindOfClass:UIView.class]) { - [obj removeFromSuperview]; - } - }]; - [_allVisibleViewsDict removeAllObjects]; - - for (NSIndexPath *indexPath in _indexPathsForSelectedItems) { - PSTCollectionViewCell *selectedCell = [self cellForItemAtIndexPath:indexPath]; - selectedCell.selected = NO; - selectedCell.highlighted = NO; - } - [_indexPathsForSelectedItems removeAllObjects]; - [_indexPathsForHighlightedItems removeAllObjects]; - - [self setNeedsLayout]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Query Grid - -- (NSInteger)numberOfSections { - return [_collectionViewData numberOfSections]; -} - -- (NSInteger)numberOfItemsInSection:(NSInteger)section { - return [_collectionViewData numberOfItemsInSection:section]; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { - return [[self collectionViewLayout] layoutAttributesForItemAtIndexPath:indexPath]; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { - return [[self collectionViewLayout] layoutAttributesForSupplementaryViewOfKind:kind atIndexPath:indexPath]; -} - -- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point { - PSTCollectionViewLayoutAttributes *attributes = [[self.collectionViewLayout layoutAttributesForElementsInRect:CGRectMake(point.x, point.y, 1, 1)] lastObject]; - return attributes.indexPath; -} - -- (NSIndexPath *)indexPathForCell:(PSTCollectionViewCell *)cell { - __block NSIndexPath *indexPath = nil; - [_allVisibleViewsDict enumerateKeysAndObjectsWithOptions:kNilOptions usingBlock:^(id key, id obj, BOOL *stop) { - PSTCollectionViewItemKey *itemKey = (PSTCollectionViewItemKey *)key; - if (itemKey.type == PSTCollectionViewItemTypeCell) { - PSTCollectionViewCell *currentCell = (PSTCollectionViewCell *)obj; - if (currentCell == cell) { - indexPath = itemKey.indexPath; - *stop = YES; - } - } - }]; - return indexPath; -} - -- (PSTCollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath { - // NSInteger index = [_collectionViewData globalIndexForItemAtIndexPath:indexPath]; - // TODO Apple uses some kind of globalIndex for this. - __block PSTCollectionViewCell *cell = nil; - [_allVisibleViewsDict enumerateKeysAndObjectsWithOptions:0 usingBlock:^(id key, id obj, BOOL *stop) { - PSTCollectionViewItemKey *itemKey = (PSTCollectionViewItemKey *)key; - if (itemKey.type == PSTCollectionViewItemTypeCell) { - if ([itemKey.indexPath isEqual:indexPath]) { - cell = obj; - *stop = YES; - } - } - }]; - return cell; -} - -- (NSArray *)indexPathsForVisibleItems { - NSArray *visibleCells = self.visibleCells; - NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:visibleCells.count]; - - [visibleCells enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - PSTCollectionViewCell *cell = (PSTCollectionViewCell *)obj; - [indexPaths addObject:cell.layoutAttributes.indexPath]; - }]; - - return indexPaths; -} - -// returns nil or an array of selected index paths -- (NSArray *)indexPathsForSelectedItems { - return [_indexPathsForSelectedItems allObjects]; -} - -// Interacting with the collection view. -- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(PSTCollectionViewScrollPosition)scrollPosition animated:(BOOL)animated { - // Ensure grid is laid out; else we can't scroll. - [self layoutSubviews]; - - PSTCollectionViewLayoutAttributes *layoutAttributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:indexPath]; - if (layoutAttributes) { - CGRect targetRect = [self makeRect:layoutAttributes.frame toScrollPosition:scrollPosition]; - [self scrollRectToVisible:targetRect animated:animated]; - } -} - -- (CGRect)makeRect:(CGRect)targetRect toScrollPosition:(PSTCollectionViewScrollPosition)scrollPosition { - // split parameters - NSUInteger verticalPosition = scrollPosition&0x07; // 0000 0111 - NSUInteger horizontalPosition = scrollPosition&0x38; // 0011 1000 - - if (verticalPosition != PSTCollectionViewScrollPositionNone - && verticalPosition != PSTCollectionViewScrollPositionTop - && verticalPosition != PSTCollectionViewScrollPositionCenteredVertically - && verticalPosition != PSTCollectionViewScrollPositionBottom) { - @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"PSTCollectionViewScrollPosition: attempt to use a scroll position with multiple vertical positioning styles" userInfo:nil]; - } - - if (horizontalPosition != PSTCollectionViewScrollPositionNone - && horizontalPosition != PSTCollectionViewScrollPositionLeft - && horizontalPosition != PSTCollectionViewScrollPositionCenteredHorizontally - && horizontalPosition != PSTCollectionViewScrollPositionRight) { - @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"PSTCollectionViewScrollPosition: attempt to use a scroll position with multiple horizontal positioning styles" userInfo:nil]; - } - - CGRect frame = self.layer.bounds; - CGFloat calculateX; - CGFloat calculateY; - - switch (verticalPosition) { - case PSTCollectionViewScrollPositionCenteredVertically: - calculateY = fmax(targetRect.origin.y - ((frame.size.height / 2) - (targetRect.size.height / 2)), -self.contentInset.top); - targetRect = CGRectMake(targetRect.origin.x, calculateY, targetRect.size.width, frame.size.height); - break; - case PSTCollectionViewScrollPositionTop: - targetRect = CGRectMake(targetRect.origin.x, targetRect.origin.y, targetRect.size.width, frame.size.height); - break; - - case PSTCollectionViewScrollPositionBottom: - calculateY = fmax(targetRect.origin.y - (frame.size.height - targetRect.size.height), -self.contentInset.top); - targetRect = CGRectMake(targetRect.origin.x, calculateY, targetRect.size.width, frame.size.height); - break; - } - - switch (horizontalPosition) { - case PSTCollectionViewScrollPositionCenteredHorizontally: - calculateX = targetRect.origin.x - ((frame.size.width / 2) - (targetRect.size.width / 2)); - targetRect = CGRectMake(calculateX, targetRect.origin.y, frame.size.width, targetRect.size.height); - break; - - case PSTCollectionViewScrollPositionLeft: - targetRect = CGRectMake(targetRect.origin.x, targetRect.origin.y, frame.size.width, targetRect.size.height); - break; - - case PSTCollectionViewScrollPositionRight: - calculateX = targetRect.origin.x - (frame.size.width - targetRect.size.width); - targetRect = CGRectMake(calculateX, targetRect.origin.y, frame.size.width, targetRect.size.height); - break; - } - - return targetRect; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Touch Handling - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [super touchesBegan:touches withEvent:event]; - - // reset touching state vars - self.extVars.touchingIndexPath = nil; - self.extVars.currentIndexPath = nil; - - CGPoint touchPoint = [[touches anyObject] locationInView:self]; - NSIndexPath *indexPath = [self indexPathForItemAtPoint:touchPoint]; - if (indexPath && self.allowsSelection) { - if (![self highlightItemAtIndexPath:indexPath animated:YES scrollPosition:PSTCollectionViewScrollPositionNone notifyDelegate:YES]) - return; - - self.extVars.touchingIndexPath = indexPath; - self.extVars.currentIndexPath = indexPath; - - if (!self.allowsMultipleSelection) { - // temporally unhighlight background on touchesBegan (keeps selected by _indexPathsForSelectedItems) - // single-select only mode only though - NSIndexPath *tempDeselectIndexPath = _indexPathsForSelectedItems.anyObject; - if (tempDeselectIndexPath && ![tempDeselectIndexPath isEqual:self.extVars.touchingIndexPath]) { - // iOS6 UICollectionView deselects cell without notification - PSTCollectionViewCell *selectedCell = [self cellForItemAtIndexPath:tempDeselectIndexPath]; - selectedCell.selected = NO; - } - } - } -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - [super touchesMoved:touches withEvent:event]; - - // allows moving between highlight and unhighlight state only if setHighlighted is not overwritten - if (self.extVars.touchingIndexPath) { - CGPoint touchPoint = [[touches anyObject] locationInView:self]; - NSIndexPath *indexPath = [self indexPathForItemAtPoint:touchPoint]; - - // moving out of bounds - if ([self.extVars.currentIndexPath isEqual:self.extVars.touchingIndexPath] && - ![indexPath isEqual:self.extVars.touchingIndexPath] && - [self unhighlightItemAtIndexPath:self.extVars.touchingIndexPath animated:YES notifyDelegate:YES shouldCheckHighlight:YES]) { - self.extVars.currentIndexPath = indexPath; - // moving back into the original touching cell - }else if (![self.extVars.currentIndexPath isEqual:self.extVars.touchingIndexPath] && - [indexPath isEqual:self.extVars.touchingIndexPath]) { - [self highlightItemAtIndexPath:self.extVars.touchingIndexPath animated:YES scrollPosition:PSTCollectionViewScrollPositionNone notifyDelegate:YES]; - self.extVars.currentIndexPath = self.extVars.touchingIndexPath; - } - } -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - [super touchesEnded:touches withEvent:event]; - - if (self.extVars.touchingIndexPath) { - // first unhighlight the touch operation - [self unhighlightItemAtIndexPath:self.extVars.touchingIndexPath animated:YES notifyDelegate:YES]; - - CGPoint touchPoint = [[touches anyObject] locationInView:self]; - NSIndexPath *indexPath = [self indexPathForItemAtPoint:touchPoint]; - if ([indexPath isEqual:self.extVars.touchingIndexPath]) { - [self userSelectedItemAtIndexPath:indexPath]; - } - else if (!self.allowsMultipleSelection) { - NSIndexPath *tempDeselectIndexPath = _indexPathsForSelectedItems.anyObject; - if (tempDeselectIndexPath && ![tempDeselectIndexPath isEqual:self.extVars.touchingIndexPath]) { - [self cellTouchCancelled]; - } - } - - // for pedantic reasons only - always set to nil on touchesBegan - self.extVars.touchingIndexPath = nil; - self.extVars.currentIndexPath = nil; - } -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - [super touchesCancelled:touches withEvent:event]; - - // do not mark touchingIndexPath as nil because whoever cancelled this touch will need to signal a touch up event later - if (self.extVars.touchingIndexPath) { - // first unhighlight the touch operation - [self unhighlightItemAtIndexPath:self.extVars.touchingIndexPath animated:YES notifyDelegate:YES]; - } -} - -- (void)cellTouchCancelled { - // turn on ALL the *should be selected* cells (iOS6 UICollectionView does no state keeping or other fancy optimizations) - // there should be no notifications as this is a silent "turn everything back on" - for (NSIndexPath *tempDeselectedIndexPath in [_indexPathsForSelectedItems copy]) { - PSTCollectionViewCell *selectedCell = [self cellForItemAtIndexPath:tempDeselectedIndexPath]; - selectedCell.selected = YES; - } -} - -- (void)userSelectedItemAtIndexPath:(NSIndexPath *)indexPath { - if (self.allowsMultipleSelection && [_indexPathsForSelectedItems containsObject:indexPath]) { - [self deselectItemAtIndexPath:indexPath animated:YES notifyDelegate:YES]; - } - else if (self.allowsSelection) { - [self selectItemAtIndexPath:indexPath animated:YES scrollPosition:PSTCollectionViewScrollPositionNone notifyDelegate:YES]; - } -} - -// select item, notify delegate (internal) -- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(PSTCollectionViewScrollPosition)scrollPosition notifyDelegate:(BOOL)notifyDelegate { - if (self.allowsMultipleSelection && [_indexPathsForSelectedItems containsObject:indexPath]) { - BOOL shouldDeselect = YES; - if (notifyDelegate && _collectionViewFlags.delegateShouldDeselectItemAtIndexPath) { - shouldDeselect = [self.delegate collectionView:self shouldDeselectItemAtIndexPath:indexPath]; - } - - if (shouldDeselect) { - [self deselectItemAtIndexPath:indexPath animated:animated notifyDelegate:notifyDelegate]; - } - } - else { - // either single selection, or wasn't already selected in multiple selection mode - BOOL shouldSelect = YES; - if (notifyDelegate && _collectionViewFlags.delegateShouldSelectItemAtIndexPath) { - shouldSelect = [self.delegate collectionView:self shouldSelectItemAtIndexPath:indexPath]; - } - - if (!self.allowsMultipleSelection) { - // now unselect the previously selected cell for single selection - NSIndexPath *tempDeselectIndexPath = _indexPathsForSelectedItems.anyObject; - if (tempDeselectIndexPath && ![tempDeselectIndexPath isEqual:indexPath]) { - [self deselectItemAtIndexPath:tempDeselectIndexPath animated:YES notifyDelegate:YES]; - } - } - - if (shouldSelect) { - PSTCollectionViewCell *selectedCell = [self cellForItemAtIndexPath:indexPath]; - selectedCell.selected = YES; - - [_indexPathsForSelectedItems addObject:indexPath]; - - [selectedCell performSelectionSegue]; - - if (scrollPosition != PSTCollectionViewScrollPositionNone) { - [self scrollToItemAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated]; - } - - if (notifyDelegate && _collectionViewFlags.delegateDidSelectItemAtIndexPath) { - [self.delegate collectionView:self didSelectItemAtIndexPath:indexPath]; - } - } - } -} - -- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(PSTCollectionViewScrollPosition)scrollPosition { - [self selectItemAtIndexPath:indexPath animated:animated scrollPosition:scrollPosition notifyDelegate:NO]; -} - -- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated { - [self deselectItemAtIndexPath:indexPath animated:animated notifyDelegate:NO]; -} - -- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated notifyDelegate:(BOOL)notifyDelegate { - BOOL shouldDeselect = YES; - // deselect only relevant during multi mode - if (self.allowsMultipleSelection && notifyDelegate && _collectionViewFlags.delegateShouldDeselectItemAtIndexPath) { - shouldDeselect = [self.delegate collectionView:self shouldDeselectItemAtIndexPath:indexPath]; - } - - if (shouldDeselect && [_indexPathsForSelectedItems containsObject:indexPath]) { - PSTCollectionViewCell *selectedCell = [self cellForItemAtIndexPath:indexPath]; - if (selectedCell) { - if (selectedCell.selected) { - selectedCell.selected = NO; - } - } - [_indexPathsForSelectedItems removeObject:indexPath]; - - if (notifyDelegate && _collectionViewFlags.delegateDidDeselectItemAtIndexPath) { - [self.delegate collectionView:self didDeselectItemAtIndexPath:indexPath]; - } - } -} - -- (BOOL)highlightItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(PSTCollectionViewScrollPosition)scrollPosition notifyDelegate:(BOOL)notifyDelegate { - BOOL shouldHighlight = YES; - if (notifyDelegate && _collectionViewFlags.delegateShouldHighlightItemAtIndexPath) { - shouldHighlight = [self.delegate collectionView:self shouldHighlightItemAtIndexPath:indexPath]; - } - - if (shouldHighlight) { - PSTCollectionViewCell *highlightedCell = [self cellForItemAtIndexPath:indexPath]; - highlightedCell.highlighted = YES; - [_indexPathsForHighlightedItems addObject:indexPath]; - - if (scrollPosition != PSTCollectionViewScrollPositionNone) { - [self scrollToItemAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated]; - } - - if (notifyDelegate && _collectionViewFlags.delegateDidHighlightItemAtIndexPath) { - [self.delegate collectionView:self didHighlightItemAtIndexPath:indexPath]; - } - } - return shouldHighlight; -} - -- (BOOL)unhighlightItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated notifyDelegate:(BOOL)notifyDelegate { - return [self unhighlightItemAtIndexPath:indexPath animated:animated notifyDelegate:notifyDelegate shouldCheckHighlight:NO]; -} - -- (BOOL)unhighlightItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated notifyDelegate:(BOOL)notifyDelegate shouldCheckHighlight:(BOOL)check { - if ([_indexPathsForHighlightedItems containsObject:indexPath]) { - PSTCollectionViewCell *highlightedCell = [self cellForItemAtIndexPath:indexPath]; - // iOS6 does not notify any delegate if the cell was never highlighted (setHighlighted overwritten) during touchMoved - if (check && !highlightedCell.highlighted) { - return NO; - } - - // if multiple selection or not unhighlighting a selected item we don't perform any op - if (highlightedCell.highlighted && [_indexPathsForSelectedItems containsObject:indexPath]) { - highlightedCell.highlighted = YES; - }else { - highlightedCell.highlighted = NO; - } - - [_indexPathsForHighlightedItems removeObject:indexPath]; - - if (notifyDelegate && _collectionViewFlags.delegateDidUnhighlightItemAtIndexPath) { - [self.delegate collectionView:self didUnhighlightItemAtIndexPath:indexPath]; - } - - return YES; - } - return NO; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Update Grid - -- (void)insertSections:(NSIndexSet *)sections { - [self updateSections:sections updateAction:PSTCollectionUpdateActionInsert]; -} - -- (void)deleteSections:(NSIndexSet *)sections { - // First delete all items - NSMutableArray *paths = [NSMutableArray new]; - [sections enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - for (int i = 0; i < [self numberOfItemsInSection:idx]; ++i) { - [paths addObject:[NSIndexPath indexPathForItem:i inSection:idx]]; - } - }]; - [self deleteItemsAtIndexPaths:paths]; - // Then delete the section. - [self updateSections:sections updateAction:PSTCollectionUpdateActionDelete]; -} - -- (void)reloadSections:(NSIndexSet *)sections { - [self updateSections:sections updateAction:PSTCollectionUpdateActionReload]; -} - -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection { - NSMutableArray *moveUpdateItems = [self arrayForUpdateAction:PSTCollectionUpdateActionMove]; - [moveUpdateItems addObject: - [[PSTCollectionViewUpdateItem alloc] initWithInitialIndexPath:[NSIndexPath indexPathForItem:NSNotFound inSection:section] - finalIndexPath:[NSIndexPath indexPathForItem:NSNotFound inSection:newSection] - updateAction:PSTCollectionUpdateActionMove]]; - if (!_collectionViewFlags.updating) { - [self setupCellAnimations]; - [self endItemAnimations]; - } -} - -- (void)insertItemsAtIndexPaths:(NSArray *)indexPaths { - [self updateRowsAtIndexPaths:indexPaths updateAction:PSTCollectionUpdateActionInsert]; -} - -- (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths { - [self updateRowsAtIndexPaths:indexPaths updateAction:PSTCollectionUpdateActionDelete]; - -} - -- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths { - [self updateRowsAtIndexPaths:indexPaths updateAction:PSTCollectionUpdateActionReload]; -} - -- (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath { - NSMutableArray *moveUpdateItems = [self arrayForUpdateAction:PSTCollectionUpdateActionMove]; - [moveUpdateItems addObject: - [[PSTCollectionViewUpdateItem alloc] initWithInitialIndexPath:indexPath - finalIndexPath:newIndexPath - updateAction:PSTCollectionUpdateActionMove]]; - if (!_collectionViewFlags.updating) { - [self setupCellAnimations]; - [self endItemAnimations]; - } - -} - -- (void)performBatchUpdates:(void (^)(void))updates completion:(void (^)(BOOL finished))completion { - [self setupCellAnimations]; - - if (updates) updates(); - if (completion) _updateCompletionHandler = completion; - - [self endItemAnimations]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Properties - -- (void)setBackgroundView:(UIView *)backgroundView { - if (backgroundView != _backgroundView) { - [_backgroundView removeFromSuperview]; - _backgroundView = backgroundView; - backgroundView.frame = (CGRect){.origin=self.contentOffset, .size=self.bounds.size}; - backgroundView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; - [self addSubview:backgroundView]; - [self sendSubviewToBack:backgroundView]; - } -} - -- (void)setCollectionViewLayout:(PSTCollectionViewLayout *)layout animated:(BOOL)animated { - if (layout == _layout) return; - - // not sure it was it original code, but here this prevents crash - // in case we switch layout before previous one was initially loaded - if (CGRectIsEmpty(self.bounds) || !_collectionViewFlags.doneFirstLayout) { - _layout.collectionView = nil; - _collectionViewData = [[PSTCollectionViewData alloc] initWithCollectionView:self layout:layout]; - layout.collectionView = self; - _layout = layout; - - // originally the use method - // _setNeedsVisibleCellsUpdate:withLayoutAttributes: - // here with CellsUpdate set to YES and LayoutAttributes parameter set to NO - // inside this method probably some flags are set and finally - // setNeedsDisplay is called - - _collectionViewFlags.scheduledUpdateVisibleCells = YES; - _collectionViewFlags.scheduledUpdateVisibleCellLayoutAttributes = NO; - - [self setNeedsDisplay]; - } - else { - layout.collectionView = self; - - _layout.collectionView = nil; - _layout = layout; - - _collectionViewData = [[PSTCollectionViewData alloc] initWithCollectionView:self layout:layout]; - [_collectionViewData prepareToLoadData]; - - NSArray *previouslySelectedIndexPaths = [self indexPathsForSelectedItems]; - NSMutableSet *selectedCellKeys = [NSMutableSet setWithCapacity:previouslySelectedIndexPaths.count]; - - for (NSIndexPath *indexPath in previouslySelectedIndexPaths) { - [selectedCellKeys addObject:[PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPath]]; - } - - NSArray *previouslyVisibleItemsKeys = [_allVisibleViewsDict allKeys]; - NSSet *previouslyVisibleItemsKeysSet = [NSSet setWithArray:previouslyVisibleItemsKeys]; - NSMutableSet *previouslyVisibleItemsKeysSetMutable = [NSMutableSet setWithArray:previouslyVisibleItemsKeys]; - - if ([selectedCellKeys intersectsSet:selectedCellKeys]) { - [previouslyVisibleItemsKeysSetMutable intersectSet:previouslyVisibleItemsKeysSetMutable]; - } - - [self bringSubviewToFront:_allVisibleViewsDict[[previouslyVisibleItemsKeysSetMutable anyObject]]]; - - CGPoint targetOffset = self.contentOffset; - CGPoint centerPoint = CGPointMake(self.bounds.origin.x + self.bounds.size.width / 2.f, - self.bounds.origin.y + self.bounds.size.height / 2.f); - NSIndexPath *centerItemIndexPath = [self indexPathForItemAtPoint:centerPoint]; - - if (!centerItemIndexPath) { - NSArray *visibleItems = [self indexPathsForVisibleItems]; - if (visibleItems.count > 0) { - centerItemIndexPath = visibleItems[visibleItems.count / 2]; - } - } - - if (centerItemIndexPath) { - PSTCollectionViewLayoutAttributes *layoutAttributes = [layout layoutAttributesForItemAtIndexPath:centerItemIndexPath]; - if (layoutAttributes) { - PSTCollectionViewScrollPosition scrollPosition = PSTCollectionViewScrollPositionCenteredVertically|PSTCollectionViewScrollPositionCenteredHorizontally; - CGRect targetRect = [self makeRect:layoutAttributes.frame toScrollPosition:scrollPosition]; - targetOffset = CGPointMake(fmax(0.f, targetRect.origin.x), fmax(0.f, targetRect.origin.y)); - } - } - - CGRect newlyBounds = CGRectMake(targetOffset.x, targetOffset.y, self.bounds.size.width, self.bounds.size.height); - NSArray *newlyVisibleLayoutAttrs = [_collectionViewData layoutAttributesForElementsInRect:newlyBounds]; - - NSMutableDictionary *layoutInterchangeData = [NSMutableDictionary dictionaryWithCapacity: - newlyVisibleLayoutAttrs.count + previouslyVisibleItemsKeysSet.count]; - - NSMutableSet *newlyVisibleItemsKeys = [NSMutableSet set]; - for (PSTCollectionViewLayoutAttributes *attr in newlyVisibleLayoutAttrs) { - PSTCollectionViewItemKey *newKey = [PSTCollectionViewItemKey collectionItemKeyForLayoutAttributes:attr]; - [newlyVisibleItemsKeys addObject:newKey]; - - PSTCollectionViewLayoutAttributes *prevAttr = nil; - PSTCollectionViewLayoutAttributes *newAttr = nil; - - if (newKey.type == PSTCollectionViewItemTypeDecorationView) { - prevAttr = [self.collectionViewLayout layoutAttributesForDecorationViewOfKind:attr.representedElementKind - atIndexPath:newKey.indexPath]; - newAttr = [layout layoutAttributesForDecorationViewOfKind:attr.representedElementKind - atIndexPath:newKey.indexPath]; - } - else if (newKey.type == PSTCollectionViewItemTypeCell) { - prevAttr = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:newKey.indexPath]; - newAttr = [layout layoutAttributesForItemAtIndexPath:newKey.indexPath]; - } - else { - prevAttr = [self.collectionViewLayout layoutAttributesForSupplementaryViewOfKind:attr.representedElementKind - atIndexPath:newKey.indexPath]; - newAttr = [layout layoutAttributesForSupplementaryViewOfKind:attr.representedElementKind - atIndexPath:newKey.indexPath]; - } - - if (prevAttr != nil && newAttr != nil) { - layoutInterchangeData[newKey] = @{@"previousLayoutInfos": prevAttr, @"newLayoutInfos": newAttr}; - } - } - - for (PSTCollectionViewItemKey *key in previouslyVisibleItemsKeysSet) { - PSTCollectionViewLayoutAttributes *prevAttr = nil; - PSTCollectionViewLayoutAttributes *newAttr = nil; - - if (key.type == PSTCollectionViewItemTypeDecorationView) { - PSTCollectionReusableView *decorView = _allVisibleViewsDict[key]; - prevAttr = [self.collectionViewLayout layoutAttributesForDecorationViewOfKind:decorView.reuseIdentifier - atIndexPath:key.indexPath]; - newAttr = [layout layoutAttributesForDecorationViewOfKind:decorView.reuseIdentifier - atIndexPath:key.indexPath]; - } - else if (key.type == PSTCollectionViewItemTypeCell) { - prevAttr = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:key.indexPath]; - newAttr = [layout layoutAttributesForItemAtIndexPath:key.indexPath]; - } - else if (key.type == PSTCollectionViewItemTypeSupplementaryView) { - PSTCollectionReusableView *suuplView = _allVisibleViewsDict[key]; - prevAttr = [self.collectionViewLayout layoutAttributesForSupplementaryViewOfKind:suuplView.layoutAttributes.representedElementKind - atIndexPath:key.indexPath]; - newAttr = [layout layoutAttributesForSupplementaryViewOfKind:suuplView.layoutAttributes.representedElementKind - atIndexPath:key.indexPath]; - } - - NSMutableDictionary *layoutInterchangeDataValue = [NSMutableDictionary dictionary]; - if (prevAttr) layoutInterchangeDataValue[@"previousLayoutInfos"] = prevAttr; - if (newAttr) layoutInterchangeDataValue[@"newLayoutInfos"] = newAttr; - layoutInterchangeData[key] = layoutInterchangeDataValue; - } - - for (PSTCollectionViewItemKey *key in [layoutInterchangeData keyEnumerator]) { - if (key.type == PSTCollectionViewItemTypeCell) { - PSTCollectionViewCell *cell = _allVisibleViewsDict[key]; - - if (!cell) { - cell = [self createPreparedCellForItemAtIndexPath:key.indexPath - withLayoutAttributes:layoutInterchangeData[key][@"previousLayoutInfos"]]; - _allVisibleViewsDict[key] = cell; - [self addControlledSubview:cell]; - } - else [cell applyLayoutAttributes:layoutInterchangeData[key][@"previousLayoutInfos"]]; - } - else if (key.type == PSTCollectionViewItemTypeSupplementaryView) { - PSTCollectionReusableView *view = _allVisibleViewsDict[key]; - if (!view) { - PSTCollectionViewLayoutAttributes *attrs = layoutInterchangeData[key][@"previousLayoutInfos"]; - view = [self createPreparedSupplementaryViewForElementOfKind:attrs.representedElementKind - atIndexPath:attrs.indexPath - withLayoutAttributes:attrs]; - _allVisibleViewsDict[key] = view; - [self addControlledSubview:view]; - } - } - else if (key.type == PSTCollectionViewItemTypeDecorationView) { - PSTCollectionReusableView *view = _allVisibleViewsDict[key]; - if (!view) { - PSTCollectionViewLayoutAttributes *attrs = layoutInterchangeData[key][@"previousLayoutInfos"]; - view = [self dequeueReusableOrCreateDecorationViewOfKind:attrs.representedElementKind forIndexPath:attrs.indexPath]; - _allVisibleViewsDict[key] = view; - [self addControlledSubview:view]; - } - } - }; - - CGRect contentRect = [_collectionViewData collectionViewContentRect]; - - void (^applyNewLayoutBlock)(void) = ^{ - NSEnumerator *keys = [layoutInterchangeData keyEnumerator]; - for (PSTCollectionViewItemKey *key in keys) { - // TODO: This is most likely not 100% the same time as in UICollectionView. Needs to be investigated. - PSTCollectionViewCell *cell = (PSTCollectionViewCell *)_allVisibleViewsDict[key]; - [cell willTransitionFromLayout:_layout toLayout:layout]; - [cell applyLayoutAttributes:layoutInterchangeData[key][@"newLayoutInfos"]]; - [cell didTransitionFromLayout:_layout toLayout:layout]; - } - }; - - void (^freeUnusedViews)(void) = ^{ - NSMutableSet *toRemove = [NSMutableSet set]; - for (PSTCollectionViewItemKey *key in [_allVisibleViewsDict keyEnumerator]) { - if (![newlyVisibleItemsKeys containsObject:key]) { - if (key.type == PSTCollectionViewItemTypeCell) { - [self reuseCell:_allVisibleViewsDict[key]]; - [toRemove addObject:key]; - } - else if (key.type == PSTCollectionViewItemTypeSupplementaryView) { - [self reuseSupplementaryView:_allVisibleViewsDict[key]]; - [toRemove addObject:key]; - } - else if (key.type == PSTCollectionViewItemTypeDecorationView) { - [self reuseDecorationView:_allVisibleViewsDict[key]]; - [toRemove addObject:key]; - } - } - } - - for (id key in toRemove) - [_allVisibleViewsDict removeObjectForKey:key]; - }; - - if (animated) { - [UIView animateWithDuration:.3 animations:^{ - _collectionViewFlags.updatingLayout = YES; - self.contentOffset = targetOffset; - self.contentSize = contentRect.size; - applyNewLayoutBlock(); - } completion:^(BOOL finished) { - freeUnusedViews(); - _collectionViewFlags.updatingLayout = NO; - - // layout subviews for updating content offset or size while updating layout - if (!CGPointEqualToPoint(self.contentOffset, targetOffset) - || !CGSizeEqualToSize(self.contentSize, contentRect.size)) { - [self layoutSubviews]; - } - }]; - } - else { - self.contentOffset = targetOffset; - self.contentSize = contentRect.size; - applyNewLayoutBlock(); - freeUnusedViews(); - } - } -} - -- (void)setCollectionViewLayout:(PSTCollectionViewLayout *)layout { - [self setCollectionViewLayout:layout animated:NO]; -} - -- (id<PSTCollectionViewDelegate>)delegate { - return self.extVars.collectionViewDelegate; -} - -- (void)setDelegate:(id<PSTCollectionViewDelegate>)delegate { - self.extVars.collectionViewDelegate = delegate; - - // Managing the Selected Cells - _collectionViewFlags.delegateShouldSelectItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:shouldSelectItemAtIndexPath:)]; - _collectionViewFlags.delegateDidSelectItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:didSelectItemAtIndexPath:)]; - _collectionViewFlags.delegateShouldDeselectItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:shouldDeselectItemAtIndexPath:)]; - _collectionViewFlags.delegateDidDeselectItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:didDeselectItemAtIndexPath:)]; - - // Managing Cell Highlighting - _collectionViewFlags.delegateShouldHighlightItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:shouldHighlightItemAtIndexPath:)]; - _collectionViewFlags.delegateDidHighlightItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:didHighlightItemAtIndexPath:)]; - _collectionViewFlags.delegateDidUnhighlightItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:didUnhighlightItemAtIndexPath:)]; - - // Tracking the Removal of Views - _collectionViewFlags.delegateDidEndDisplayingCell = [self.delegate respondsToSelector:@selector(collectionView:didEndDisplayingCell:forItemAtIndexPath:)]; - _collectionViewFlags.delegateDidEndDisplayingSupplementaryView = [self.delegate respondsToSelector:@selector(collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:)]; - - // Managing Actions for Cells - _collectionViewFlags.delegateSupportsMenus = [self.delegate respondsToSelector:@selector(collectionView:shouldShowMenuForItemAtIndexPath:)]; - - // These aren't present in the flags which is a little strange. Not adding them because that will mess with byte alignment which will affect cross compatibility. - // The flag names are guesses and are there for documentation purposes. - // _collectionViewFlags.delegateCanPerformActionForItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:canPerformAction:forItemAtIndexPath:withSender:)]; - // _collectionViewFlags.delegatePerformActionForItemAtIndexPath = [self.delegate respondsToSelector:@selector(collectionView:performAction:forItemAtIndexPath:withSender:)]; -} - -// Might be overkill since two are required and two are handled by PSTCollectionViewData leaving only one flag we actually need to check for -- (void)setDataSource:(id<PSTCollectionViewDataSource>)dataSource { - if (dataSource != _dataSource) { - _dataSource = dataSource; - - // Getting Item and Section Metrics - _collectionViewFlags.dataSourceNumberOfSections = [_dataSource respondsToSelector:@selector(numberOfSectionsInCollectionView:)]; - - // Getting Views for Items - _collectionViewFlags.dataSourceViewForSupplementaryElement = [_dataSource respondsToSelector:@selector(collectionView:viewForSupplementaryElementOfKind:atIndexPath:)]; - } -} - -- (BOOL)allowsSelection { - return _collectionViewFlags.allowsSelection; -} - -- (void)setAllowsSelection:(BOOL)allowsSelection { - _collectionViewFlags.allowsSelection = allowsSelection; -} - -- (BOOL)allowsMultipleSelection { - return _collectionViewFlags.allowsMultipleSelection; -} - -- (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection { - _collectionViewFlags.allowsMultipleSelection = allowsMultipleSelection; - - // Deselect all objects if allows multiple selection is false - if (!allowsMultipleSelection && _indexPathsForSelectedItems.count) { - - // Note: Apple's implementation leaves a mostly random item selected. Presumably they - // have a good reason for this, but I guess it's just skipping the last or first index. - for (NSIndexPath *selectedIndexPath in [_indexPathsForSelectedItems copy]) { - if (_indexPathsForSelectedItems.count == 1) continue; - [self deselectItemAtIndexPath:selectedIndexPath animated:YES notifyDelegate:YES]; - } - } -} - -- (CGRect)visibleBoundRects { - // in original UICollectionView implementation they - // check for _visibleBounds and can union self.bounds - // with this value. Don't know the meaning of _visibleBounds however. - return self.bounds; -} -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private - -- (PSTCollectionViewExt *)extVars { - return objc_getAssociatedObject(self, &kPSTColletionViewExt); -} - -- (void)invalidateLayout { - [self.collectionViewLayout invalidateLayout]; - [self.collectionViewData invalidate]; // invalidate layout cache -} - -// update currently visible cells, fetches new cells if needed -// TODO: use now parameter. -- (void)updateVisibleCellsNow:(BOOL)now { - NSArray *layoutAttributesArray = [_collectionViewData layoutAttributesForElementsInRect:self.bounds]; - - if (layoutAttributesArray == nil || layoutAttributesArray.count == 0) { - // If our layout source isn't providing any layout information, we should just - // stop, otherwise we'll blow away all the currently existing cells. - return; - } - - // create ItemKey/Attributes dictionary - NSMutableDictionary *itemKeysToAddDict = [NSMutableDictionary dictionary]; - - // Add new cells. - for (PSTCollectionViewLayoutAttributes *layoutAttributes in layoutAttributesArray) { - PSTCollectionViewItemKey *itemKey = [PSTCollectionViewItemKey collectionItemKeyForLayoutAttributes:layoutAttributes]; - itemKeysToAddDict[itemKey] = layoutAttributes; - - // check if cell is in visible dict; add it if not. - PSTCollectionReusableView *view = _allVisibleViewsDict[itemKey]; - if (!view) { - if (itemKey.type == PSTCollectionViewItemTypeCell) { - view = [self createPreparedCellForItemAtIndexPath:itemKey.indexPath withLayoutAttributes:layoutAttributes]; - - }else if (itemKey.type == PSTCollectionViewItemTypeSupplementaryView) { - view = [self createPreparedSupplementaryViewForElementOfKind:layoutAttributes.representedElementKind - atIndexPath:layoutAttributes.indexPath - withLayoutAttributes:layoutAttributes]; - }else if (itemKey.type == PSTCollectionViewItemTypeDecorationView) { - view = [self dequeueReusableOrCreateDecorationViewOfKind:layoutAttributes.representedElementKind forIndexPath:layoutAttributes.indexPath]; - } - - // Supplementary views are optional - if (view) { - _allVisibleViewsDict[itemKey] = view; - [self addControlledSubview:view]; - - // Always apply attributes. Fixes #203. - [view applyLayoutAttributes:layoutAttributes]; - } - }else { - // just update cell - [view applyLayoutAttributes:layoutAttributes]; - } - } - - // Detect what items should be removed and queued back. - NSMutableSet *allVisibleItemKeys = [NSMutableSet setWithArray:[_allVisibleViewsDict allKeys]]; - [allVisibleItemKeys minusSet:[NSSet setWithArray:[itemKeysToAddDict allKeys]]]; - - // Finally remove views that have not been processed and prepare them for re-use. - for (PSTCollectionViewItemKey *itemKey in allVisibleItemKeys) { - PSTCollectionReusableView *reusableView = _allVisibleViewsDict[itemKey]; - if (reusableView) { - [reusableView removeFromSuperview]; - [_allVisibleViewsDict removeObjectForKey:itemKey]; - if (itemKey.type == PSTCollectionViewItemTypeCell) { - if (_collectionViewFlags.delegateDidEndDisplayingCell) { - [self.delegate collectionView:self didEndDisplayingCell:(PSTCollectionViewCell *)reusableView forItemAtIndexPath:itemKey.indexPath]; - } - [self reuseCell:(PSTCollectionViewCell *)reusableView]; - } - else if (itemKey.type == PSTCollectionViewItemTypeSupplementaryView) { - if (_collectionViewFlags.delegateDidEndDisplayingSupplementaryView) { - [self.delegate collectionView:self didEndDisplayingSupplementaryView:reusableView forElementOfKind:itemKey.identifier atIndexPath:itemKey.indexPath]; - } - [self reuseSupplementaryView:reusableView]; - } - else if (itemKey.type == PSTCollectionViewItemTypeDecorationView) { - [self reuseDecorationView:reusableView]; - } - } - } -} - -// fetches a cell from the dataSource and sets the layoutAttributes -- (PSTCollectionViewCell *)createPreparedCellForItemAtIndexPath:(NSIndexPath *)indexPath withLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes { - PSTCollectionViewCell *cell = [self.dataSource collectionView:self cellForItemAtIndexPath:indexPath]; - - // Apply attributes - [cell applyLayoutAttributes:layoutAttributes]; - - // reset selected/highlight state - [cell setHighlighted:[_indexPathsForHighlightedItems containsObject:indexPath]]; - [cell setSelected:[_indexPathsForSelectedItems containsObject:indexPath]]; - - // voiceover support - cell.isAccessibilityElement = YES; - - return cell; -} - -- (PSTCollectionReusableView *)createPreparedSupplementaryViewForElementOfKind:(NSString *)kind - atIndexPath:(NSIndexPath *)indexPath - withLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes { - if (_collectionViewFlags.dataSourceViewForSupplementaryElement) { - PSTCollectionReusableView *view = [self.dataSource collectionView:self - viewForSupplementaryElementOfKind:kind - atIndexPath:indexPath]; - [view applyLayoutAttributes:layoutAttributes]; - return view; - } - return nil; -} - -// @steipete optimization -- (void)queueReusableView:(PSTCollectionReusableView *)reusableView inQueue:(NSMutableDictionary *)queue withIdentifier:(NSString *)identifier { - NSParameterAssert(identifier.length > 0); - - [reusableView removeFromSuperview]; - [reusableView prepareForReuse]; - - // enqueue cell - NSMutableArray *reuseableViews = queue[identifier]; - if (!reuseableViews) { - reuseableViews = [NSMutableArray array]; - queue[identifier] = reuseableViews; - } - [reuseableViews addObject:reusableView]; -} - -// enqueue cell for reuse -- (void)reuseCell:(PSTCollectionViewCell *)cell { - [self queueReusableView:cell inQueue:_cellReuseQueues withIdentifier:cell.reuseIdentifier]; -} - -// enqueue supplementary view for reuse -- (void)reuseSupplementaryView:(PSTCollectionReusableView *)supplementaryView { - NSString *kindAndIdentifier = [NSString stringWithFormat:@"%@/%@", supplementaryView.layoutAttributes.elementKind, supplementaryView.reuseIdentifier]; - [self queueReusableView:supplementaryView inQueue:_supplementaryViewReuseQueues withIdentifier:kindAndIdentifier]; -} - -// enqueue decoration view for reuse -- (void)reuseDecorationView:(PSTCollectionReusableView *)decorationView { - [self queueReusableView:decorationView inQueue:_decorationViewReuseQueues withIdentifier:decorationView.reuseIdentifier]; -} - -- (void)addControlledSubview:(PSTCollectionReusableView *)subview { - // avoids placing views above the scroll indicator - // If the collection view is not displaying scrollIndicators then self.subviews.count can be 0. - // We take the max to ensure we insert at a non negative index because a negative index will silently fail to insert the view - NSInteger insertionIndex = MAX((NSInteger)(self.subviews.count - (self.dragging ? 1 : 0)), 0); - [self insertSubview:subview atIndex:insertionIndex]; - UIView *scrollIndicatorView = nil; - if (self.dragging) { - scrollIndicatorView = [self.subviews lastObject]; - } - - NSMutableArray *floatingViews = [[NSMutableArray alloc] init]; - for (UIView *uiView in self.subviews) { - if ([uiView isKindOfClass:PSTCollectionReusableView.class] && [[(PSTCollectionReusableView *)uiView layoutAttributes] zIndex] > 0) { - [floatingViews addObject:uiView]; - } - } - - [floatingViews sortUsingComparator:^NSComparisonResult(PSTCollectionReusableView *obj1, PSTCollectionReusableView *obj2) { - CGFloat z1 = [[obj1 layoutAttributes] zIndex]; - CGFloat z2 = [[obj2 layoutAttributes] zIndex]; - if (z1 > z2) { - return (NSComparisonResult)NSOrderedDescending; - }else if (z1 < z2) { - return (NSComparisonResult)NSOrderedAscending; - }else { - return (NSComparisonResult)NSOrderedSame; - } - }]; - - for (PSTCollectionReusableView *uiView in floatingViews) { - [self bringSubviewToFront:uiView]; - } - - if (floatingViews.count && scrollIndicatorView) { - [self bringSubviewToFront:scrollIndicatorView]; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Updating grid internal functionality - -- (void)suspendReloads { - _reloadingSuspendedCount++; -} - -- (void)resumeReloads { - if (0 < _reloadingSuspendedCount) _reloadingSuspendedCount--; -} - -- (NSMutableArray *)arrayForUpdateAction:(PSTCollectionUpdateAction)updateAction { - NSMutableArray *updateActions = nil; - - switch (updateAction) { - case PSTCollectionUpdateActionInsert: - if (!_insertItems) _insertItems = [NSMutableArray new]; - updateActions = _insertItems; - break; - case PSTCollectionUpdateActionDelete: - if (!_deleteItems) _deleteItems = [NSMutableArray new]; - updateActions = _deleteItems; - break; - case PSTCollectionUpdateActionMove: - if (!_moveItems) _moveItems = [NSMutableArray new]; - updateActions = _moveItems; - break; - case PSTCollectionUpdateActionReload: - if (!_reloadItems) _reloadItems = [NSMutableArray new]; - updateActions = _reloadItems; - break; - default: break; - } - return updateActions; -} - -- (void)prepareLayoutForUpdates { - NSMutableArray *array = [[NSMutableArray alloc] init]; - [array addObjectsFromArray:[_originalDeleteItems sortedArrayUsingSelector:@selector(inverseCompareIndexPaths:)]]; - [array addObjectsFromArray:[_originalInsertItems sortedArrayUsingSelector:@selector(compareIndexPaths:)]]; - [array addObjectsFromArray:[_reloadItems sortedArrayUsingSelector:@selector(compareIndexPaths:)]]; - [array addObjectsFromArray:[_moveItems sortedArrayUsingSelector:@selector(compareIndexPaths:)]]; - [_layout prepareForCollectionViewUpdates:array]; -} - -- (void)updateWithItems:(NSArray *)items { - [self prepareLayoutForUpdates]; - - NSMutableArray *animations = [[NSMutableArray alloc] init]; - NSMutableDictionary *newAllVisibleView = [[NSMutableDictionary alloc] init]; - - NSMutableDictionary *viewsToRemove = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSMutableArray array], @(PSTCollectionViewItemTypeCell), - [NSMutableArray array], @(PSTCollectionViewItemTypeDecorationView), - [NSMutableArray array], @(PSTCollectionViewItemTypeSupplementaryView), nil]; - - for (PSTCollectionViewUpdateItem *updateItem in items) { - if (updateItem.isSectionOperation && updateItem.updateAction != PSTCollectionUpdateActionDelete) continue; - if (updateItem.isSectionOperation && updateItem.updateAction == PSTCollectionUpdateActionDelete) { - NSInteger numberOfBeforeSection = [_update[@"oldModel"] numberOfItemsInSection:updateItem.indexPathBeforeUpdate.section]; - for (NSInteger i = 0; i < numberOfBeforeSection; i++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:updateItem.indexPathBeforeUpdate.section]; - - PSTCollectionViewLayoutAttributes *finalAttrs = [_layout finalLayoutAttributesForDisappearingItemAtIndexPath:indexPath]; - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPath]; - PSTCollectionReusableView *view = _allVisibleViewsDict[key]; - if (view) { - PSTCollectionViewLayoutAttributes *startAttrs = view.layoutAttributes; - - if (!finalAttrs) { - finalAttrs = [startAttrs copy]; - finalAttrs.alpha = 0; - } - [animations addObject:@{@"view" : view, @"previousLayoutInfos" : startAttrs, @"newLayoutInfos" : finalAttrs}]; - - [_allVisibleViewsDict removeObjectForKey:key]; - - [(NSMutableArray *)viewsToRemove[@(key.type)] addObject:view]; - - } - } - continue; - } - - if (updateItem.updateAction == PSTCollectionUpdateActionDelete) { - NSIndexPath *indexPath = updateItem.indexPathBeforeUpdate; - - PSTCollectionViewLayoutAttributes *finalAttrs = [_layout finalLayoutAttributesForDisappearingItemAtIndexPath:indexPath]; - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPath]; - PSTCollectionReusableView *view = _allVisibleViewsDict[key]; - if (view) { - PSTCollectionViewLayoutAttributes *startAttrs = view.layoutAttributes; - - if (!finalAttrs) { - finalAttrs = [startAttrs copy]; - finalAttrs.alpha = 0; - } - [animations addObject:@{@"view" : view, @"previousLayoutInfos" : startAttrs, @"newLayoutInfos" : finalAttrs}]; - - [_allVisibleViewsDict removeObjectForKey:key]; - - [(NSMutableArray *)viewsToRemove[@(key.type)] addObject:view]; - - } - } - else if (updateItem.updateAction == PSTCollectionUpdateActionInsert) { - NSIndexPath *indexPath = updateItem.indexPathAfterUpdate; - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPath]; - PSTCollectionViewLayoutAttributes *startAttrs = [_layout initialLayoutAttributesForAppearingItemAtIndexPath:indexPath]; - PSTCollectionViewLayoutAttributes *finalAttrs = [_layout layoutAttributesForItemAtIndexPath:indexPath]; - - CGRect startRect = startAttrs.frame; - CGRect finalRect = finalAttrs.frame; - - if (CGRectIntersectsRect(self.visibleBoundRects, startRect) || CGRectIntersectsRect(self.visibleBoundRects, finalRect)) { - - if (!startAttrs) { - startAttrs = [finalAttrs copy]; - startAttrs.alpha = 0; - } - - PSTCollectionReusableView *view = [self createPreparedCellForItemAtIndexPath:indexPath - withLayoutAttributes:startAttrs]; - [self addControlledSubview:view]; - - newAllVisibleView[key] = view; - [animations addObject:@{@"view" : view, @"previousLayoutInfos" : startAttrs, @"newLayoutInfos" : finalAttrs}]; - } - } - else if (updateItem.updateAction == PSTCollectionUpdateActionMove) { - NSIndexPath *indexPathBefore = updateItem.indexPathBeforeUpdate; - NSIndexPath *indexPathAfter = updateItem.indexPathAfterUpdate; - - PSTCollectionViewItemKey *keyBefore = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPathBefore]; - PSTCollectionViewItemKey *keyAfter = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:indexPathAfter]; - PSTCollectionReusableView *view = _allVisibleViewsDict[keyBefore]; - - PSTCollectionViewLayoutAttributes *startAttrs = nil; - PSTCollectionViewLayoutAttributes *finalAttrs = [_layout layoutAttributesForItemAtIndexPath:indexPathAfter]; - - if (view) { - startAttrs = view.layoutAttributes; - [_allVisibleViewsDict removeObjectForKey:keyBefore]; - newAllVisibleView[keyAfter] = view; - } - else { - startAttrs = [finalAttrs copy]; - startAttrs.alpha = 0; - view = [self createPreparedCellForItemAtIndexPath:indexPathAfter withLayoutAttributes:startAttrs]; - [self addControlledSubview:view]; - newAllVisibleView[keyAfter] = view; - } - - [animations addObject:@{@"view" : view, @"previousLayoutInfos" : startAttrs, @"newLayoutInfos" : finalAttrs}]; - } - } - - for (PSTCollectionViewItemKey *key in [_allVisibleViewsDict keyEnumerator]) { - PSTCollectionReusableView *view = _allVisibleViewsDict[key]; - - if (key.type == PSTCollectionViewItemTypeCell) { - NSUInteger oldGlobalIndex = [_update[@"oldModel"] globalIndexForItemAtIndexPath:key.indexPath]; - NSArray *oldToNewIndexMap = _update[@"oldToNewIndexMap"]; - NSUInteger newGlobalIndex = NSNotFound; - if (NSNotFound != oldGlobalIndex && oldGlobalIndex < oldToNewIndexMap.count) { - newGlobalIndex = [oldToNewIndexMap[oldGlobalIndex] intValue]; - } - NSIndexPath *newIndexPath = newGlobalIndex == NSNotFound ? nil : [_update[@"newModel"] indexPathForItemAtGlobalIndex:newGlobalIndex]; - NSIndexPath *oldIndexPath = oldGlobalIndex == NSNotFound ? nil : [_update[@"oldModel"] indexPathForItemAtGlobalIndex:oldGlobalIndex]; - - if (newIndexPath) { - PSTCollectionViewLayoutAttributes *startAttrs = nil; - PSTCollectionViewLayoutAttributes *finalAttrs = nil; - - startAttrs = [_layout initialLayoutAttributesForAppearingItemAtIndexPath:oldIndexPath]; - finalAttrs = [_layout layoutAttributesForItemAtIndexPath:newIndexPath]; - - NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:@{@"view" : view}]; - if (startAttrs) dic[@"previousLayoutInfos"] = startAttrs; - if (finalAttrs) dic[@"newLayoutInfos"] = finalAttrs; - - [animations addObject:dic]; - PSTCollectionViewItemKey *newKey = [key copy]; - [newKey setIndexPath:newIndexPath]; - newAllVisibleView[newKey] = view; - - } - }else if (key.type == PSTCollectionViewItemTypeSupplementaryView) { - PSTCollectionViewLayoutAttributes *startAttrs = nil; - PSTCollectionViewLayoutAttributes *finalAttrs = nil; - - startAttrs = view.layoutAttributes; - finalAttrs = [_layout layoutAttributesForSupplementaryViewOfKind:view.layoutAttributes.representedElementKind atIndexPath:key.indexPath]; - - NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:@{@"view" : view}]; - if (startAttrs) dic[@"previousLayoutInfos"] = startAttrs; - if (finalAttrs) dic[@"newLayoutInfos"] = finalAttrs; - - [animations addObject:dic]; - PSTCollectionViewItemKey *newKey = [key copy]; - newAllVisibleView[newKey] = view; - - } - } - NSArray *allNewlyVisibleItems = [_layout layoutAttributesForElementsInRect:self.visibleBoundRects]; - for (PSTCollectionViewLayoutAttributes *attrs in allNewlyVisibleItems) { - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForLayoutAttributes:attrs]; - - if (key.type == PSTCollectionViewItemTypeCell && ![[newAllVisibleView allKeys] containsObject:key]) { - PSTCollectionViewLayoutAttributes *startAttrs = - [_layout initialLayoutAttributesForAppearingItemAtIndexPath:attrs.indexPath]; - - PSTCollectionReusableView *view = [self createPreparedCellForItemAtIndexPath:attrs.indexPath - withLayoutAttributes:startAttrs]; - [self addControlledSubview:view]; - newAllVisibleView[key] = view; - - [animations addObject:@{@"view" : view, @"previousLayoutInfos" : startAttrs ? startAttrs : attrs, @"newLayoutInfos" : attrs}]; - } - } - - _allVisibleViewsDict = newAllVisibleView; - - for (NSDictionary *animation in animations) { - PSTCollectionReusableView *view = animation[@"view"]; - PSTCollectionViewLayoutAttributes *attr = animation[@"previousLayoutInfos"]; - [view applyLayoutAttributes:attr]; - }; - - [UIView animateWithDuration:.3 animations:^{ - _collectionViewFlags.updatingLayout = YES; - - [CATransaction begin]; - [CATransaction setAnimationDuration:.3]; - - // You might wonder why we use CATransaction to handle animation completion - // here instead of using the completion: parameter of UIView's animateWithDuration:. - // The problem is that animateWithDuration: calls this completion block - // when other animations are finished. This means that the block is called - // after the user releases his finger and the scroll view has finished scrolling. - // This can be a large delay, which causes the layout of the cells to be greatly - // delayed, and thus, be unrendered. I assume that was done for performance - // purposes but it completely breaks our layout logic here. - // To get the completion block called immediately after the animation actually - // finishes, I switched to use CATransaction. - // The only thing I'm not sure about - _completed_ flag. I don't know where to get it - // in terms of CATransaction's API, so I use animateWithDuration's completion block - // to call _updateCompletionHandler with that flag. - // Ideally, _updateCompletionHandler should be called along with the other logic in - // CATransaction's completionHandler but I simply don't know where to get that flag. - [CATransaction setCompletionBlock:^{ - // Iterate through all the views that we are going to remove. - [viewsToRemove enumerateKeysAndObjectsUsingBlock:^(NSNumber *keyObj, NSArray *views, BOOL *stop) { - PSTCollectionViewItemType type = [keyObj unsignedIntegerValue]; - for (PSTCollectionReusableView *view in views) { - if (type == PSTCollectionViewItemTypeCell) { - [self reuseCell:(PSTCollectionViewCell *)view]; - }else if (type == PSTCollectionViewItemTypeSupplementaryView) { - [self reuseSupplementaryView:view]; - }else if (type == PSTCollectionViewItemTypeDecorationView) { - [self reuseDecorationView:view]; - } - } - }]; - _collectionViewFlags.updatingLayout = NO; - }]; - - for (NSDictionary *animation in animations) { - PSTCollectionReusableView *view = animation[@"view"]; - PSTCollectionViewLayoutAttributes *attrs = animation[@"newLayoutInfos"]; - [view applyLayoutAttributes:attrs]; - } - [CATransaction commit]; - } completion:^(BOOL finished) { - - if (_updateCompletionHandler) { - _updateCompletionHandler(finished); - _updateCompletionHandler = nil; - } - }]; - - [_layout finalizeCollectionViewUpdates]; -} - -- (void)setupCellAnimations { - [self updateVisibleCellsNow:YES]; - [self suspendReloads]; - _collectionViewFlags.updating = YES; -} - -- (void)endItemAnimations { - _updateCount++; - PSTCollectionViewData *oldCollectionViewData = _collectionViewData; - _collectionViewData = [[PSTCollectionViewData alloc] initWithCollectionView:self layout:_layout]; - - [_layout invalidateLayout]; - [_collectionViewData prepareToLoadData]; - - NSMutableArray *someMutableArr1 = [[NSMutableArray alloc] init]; - - NSArray *removeUpdateItems = [[self arrayForUpdateAction:PSTCollectionUpdateActionDelete] - sortedArrayUsingSelector:@selector(inverseCompareIndexPaths:)]; - - NSArray *insertUpdateItems = [[self arrayForUpdateAction:PSTCollectionUpdateActionInsert] - sortedArrayUsingSelector:@selector(compareIndexPaths:)]; - - NSMutableArray *sortedMutableReloadItems = [[_reloadItems sortedArrayUsingSelector:@selector(compareIndexPaths:)] mutableCopy]; - NSMutableArray *sortedMutableMoveItems = [[_moveItems sortedArrayUsingSelector:@selector(compareIndexPaths:)] mutableCopy]; - - _originalDeleteItems = [removeUpdateItems copy]; - _originalInsertItems = [insertUpdateItems copy]; - - NSMutableArray *someMutableArr2 = [[NSMutableArray alloc] init]; - NSMutableArray *someMutableArr3 = [[NSMutableArray alloc] init]; - NSMutableDictionary *operations = [[NSMutableDictionary alloc] init]; - - for (PSTCollectionViewUpdateItem *updateItem in sortedMutableReloadItems) { - NSAssert(updateItem.indexPathBeforeUpdate.section < [oldCollectionViewData numberOfSections], - @"attempt to reload item (%@) that doesn't exist (there are only %ld sections before update)", - updateItem.indexPathBeforeUpdate, (long)[oldCollectionViewData numberOfSections]); - - if (updateItem.indexPathBeforeUpdate.item != NSNotFound) { - NSAssert(updateItem.indexPathBeforeUpdate.item < [oldCollectionViewData numberOfItemsInSection:updateItem.indexPathBeforeUpdate.section], - @"attempt to reload item (%@) that doesn't exist (there are only %ld items in section %ld before update)", - updateItem.indexPathBeforeUpdate, - (long)[oldCollectionViewData numberOfItemsInSection:updateItem.indexPathBeforeUpdate.section], - (long)updateItem.indexPathBeforeUpdate.section); - } - - [someMutableArr2 addObject:[[PSTCollectionViewUpdateItem alloc] initWithAction:PSTCollectionUpdateActionDelete - forIndexPath:updateItem.indexPathBeforeUpdate]]; - [someMutableArr3 addObject:[[PSTCollectionViewUpdateItem alloc] initWithAction:PSTCollectionUpdateActionInsert - forIndexPath:updateItem.indexPathAfterUpdate]]; - } - - NSMutableArray *sortedDeletedMutableItems = [[_deleteItems sortedArrayUsingSelector:@selector(inverseCompareIndexPaths:)] mutableCopy]; - NSMutableArray *sortedInsertMutableItems = [[_insertItems sortedArrayUsingSelector:@selector(compareIndexPaths:)] mutableCopy]; - - for (PSTCollectionViewUpdateItem *deleteItem in sortedDeletedMutableItems) { - if ([deleteItem isSectionOperation]) { - NSAssert(deleteItem.indexPathBeforeUpdate.section < [oldCollectionViewData numberOfSections], - @"attempt to delete section (%ld) that doesn't exist (there are only %ld sections before update)", - (long)deleteItem.indexPathBeforeUpdate.section, - (long)[oldCollectionViewData numberOfSections]); - - for (PSTCollectionViewUpdateItem *moveItem in sortedMutableMoveItems) { - if (moveItem.indexPathBeforeUpdate.section == deleteItem.indexPathBeforeUpdate.section) { - if (moveItem.isSectionOperation) - NSAssert(NO, @"attempt to delete and move from the same section %ld", (long)deleteItem.indexPathBeforeUpdate.section); - else - NSAssert(NO, @"attempt to delete and move from the same section (%@)", moveItem.indexPathBeforeUpdate); - } - } - }else { - NSAssert(deleteItem.indexPathBeforeUpdate.section < [oldCollectionViewData numberOfSections], - @"attempt to delete item (%@) that doesn't exist (there are only %ld sections before update)", - deleteItem.indexPathBeforeUpdate, - (long)[oldCollectionViewData numberOfSections]); - NSAssert(deleteItem.indexPathBeforeUpdate.item < [oldCollectionViewData numberOfItemsInSection:deleteItem.indexPathBeforeUpdate.section], - @"attempt to delete item (%@) that doesn't exist (there are only %ld items in section%ld before update)", - deleteItem.indexPathBeforeUpdate, - (long)[oldCollectionViewData numberOfItemsInSection:deleteItem.indexPathBeforeUpdate.section], - (long)deleteItem.indexPathBeforeUpdate.section); - - for (PSTCollectionViewUpdateItem *moveItem in sortedMutableMoveItems) { - NSAssert(![deleteItem.indexPathBeforeUpdate isEqual:moveItem.indexPathBeforeUpdate], - @"attempt to delete and move the same item (%@)", deleteItem.indexPathBeforeUpdate); - } - - if (!operations[@(deleteItem.indexPathBeforeUpdate.section)]) - operations[@(deleteItem.indexPathBeforeUpdate.section)] = [NSMutableDictionary dictionary]; - - operations[@(deleteItem.indexPathBeforeUpdate.section)][@"deleted"] = - @([operations[@(deleteItem.indexPathBeforeUpdate.section)][@"deleted"] intValue] + 1); - } - } - - for (NSUInteger i = 0; i < sortedInsertMutableItems.count; i++) { - PSTCollectionViewUpdateItem *insertItem = sortedInsertMutableItems[i]; - NSIndexPath *indexPath = insertItem.indexPathAfterUpdate; - - BOOL sectionOperation = [insertItem isSectionOperation]; - if (sectionOperation) { - NSAssert([indexPath section] < [_collectionViewData numberOfSections], - @"attempt to insert %ld but there are only %ld sections after update", - (long)[indexPath section], (long)[_collectionViewData numberOfSections]); - - for (PSTCollectionViewUpdateItem *moveItem in sortedMutableMoveItems) { - if ([moveItem.indexPathAfterUpdate isEqual:indexPath]) { - if (moveItem.isSectionOperation) - NSAssert(NO, @"attempt to perform an insert and a move to the same section (%ld)", (long)indexPath.section); - } - } - - NSUInteger j = i + 1; - while (j < sortedInsertMutableItems.count) { - PSTCollectionViewUpdateItem *nextInsertItem = sortedInsertMutableItems[j]; - - if (nextInsertItem.indexPathAfterUpdate.section == indexPath.section) { - NSAssert(nextInsertItem.indexPathAfterUpdate.item < [_collectionViewData numberOfItemsInSection:indexPath.section], - @"attempt to insert item %ld into section %ld, but there are only %ld items in section %ld after the update", - (long)nextInsertItem.indexPathAfterUpdate.item, - (long)indexPath.section, - (long)[_collectionViewData numberOfItemsInSection:indexPath.section], - (long)indexPath.section); - [sortedInsertMutableItems removeObjectAtIndex:j]; - } - else break; - } - }else { - NSAssert(indexPath.item < [_collectionViewData numberOfItemsInSection:indexPath.section], - @"attempt to insert item to (%@) but there are only %ld items in section %ld after update", - indexPath, - (long)[_collectionViewData numberOfItemsInSection:indexPath.section], - (long)indexPath.section); - - if (!operations[@(indexPath.section)]) - operations[@(indexPath.section)] = [NSMutableDictionary dictionary]; - - operations[@(indexPath.section)][@"inserted"] = - @([operations[@(indexPath.section)][@"inserted"] intValue] + 1); - } - } - - for (PSTCollectionViewUpdateItem *sortedItem in sortedMutableMoveItems) { - if (sortedItem.isSectionOperation) { - NSAssert(sortedItem.indexPathBeforeUpdate.section < [oldCollectionViewData numberOfSections], - @"attempt to move section (%ld) that doesn't exist (%ld sections before update)", - (long)sortedItem.indexPathBeforeUpdate.section, - (long)[oldCollectionViewData numberOfSections]); - NSAssert(sortedItem.indexPathAfterUpdate.section < [_collectionViewData numberOfSections], - @"attempt to move section to %ld but there are only %ld sections after update", - (long)sortedItem.indexPathAfterUpdate.section, - (long)[_collectionViewData numberOfSections]); - }else { - NSAssert(sortedItem.indexPathBeforeUpdate.section < [oldCollectionViewData numberOfSections], - @"attempt to move item (%@) that doesn't exist (%ld sections before update)", - sortedItem, (long)[oldCollectionViewData numberOfSections]); - NSAssert(sortedItem.indexPathBeforeUpdate.item < [oldCollectionViewData numberOfItemsInSection:sortedItem.indexPathBeforeUpdate.section], - @"attempt to move item (%@) that doesn't exist (%ld items in section %ld before update)", - sortedItem, - (long)[oldCollectionViewData numberOfItemsInSection:sortedItem.indexPathBeforeUpdate.section], - (long)sortedItem.indexPathBeforeUpdate.section); - - NSAssert(sortedItem.indexPathAfterUpdate.section < [_collectionViewData numberOfSections], - @"attempt to move item to (%@) but there are only %ld sections after update", - sortedItem.indexPathAfterUpdate, - (long)[_collectionViewData numberOfSections]); - NSAssert(sortedItem.indexPathAfterUpdate.item < [_collectionViewData numberOfItemsInSection:sortedItem.indexPathAfterUpdate.section], - @"attempt to move item to (%@) but there are only %ld items in section %ld after update", - sortedItem, - (long)[_collectionViewData numberOfItemsInSection:sortedItem.indexPathAfterUpdate.section], - (long)sortedItem.indexPathAfterUpdate.section); - } - - if (!operations[@(sortedItem.indexPathBeforeUpdate.section)]) - operations[@(sortedItem.indexPathBeforeUpdate.section)] = [NSMutableDictionary dictionary]; - if (!operations[@(sortedItem.indexPathAfterUpdate.section)]) - operations[@(sortedItem.indexPathAfterUpdate.section)] = [NSMutableDictionary dictionary]; - - operations[@(sortedItem.indexPathBeforeUpdate.section)][@"movedOut"] = - @([operations[@(sortedItem.indexPathBeforeUpdate.section)][@"movedOut"] intValue] + 1); - - operations[@(sortedItem.indexPathAfterUpdate.section)][@"movedIn"] = - @([operations[@(sortedItem.indexPathAfterUpdate.section)][@"movedIn"] intValue] + 1); - } - -#if !defined NS_BLOCK_ASSERTIONS - for (NSNumber *sectionKey in [operations keyEnumerator]) { - NSInteger section = [sectionKey intValue]; - - NSInteger insertedCount = [operations[sectionKey][@"inserted"] intValue]; - NSInteger deletedCount = [operations[sectionKey][@"deleted"] intValue]; - NSInteger movedInCount = [operations[sectionKey][@"movedIn"] intValue]; - NSInteger movedOutCount = [operations[sectionKey][@"movedOut"] intValue]; - - NSAssert([oldCollectionViewData numberOfItemsInSection:section] + insertedCount - deletedCount + movedInCount - movedOutCount == - [_collectionViewData numberOfItemsInSection:section], - @"invalid update in section %ld: number of items after update (%ld) should be equal to the number of items before update (%ld) "\ - "plus count of inserted items (%ld), minus count of deleted items (%ld), plus count of items moved in (%ld), minus count of items moved out (%ld)", - (long)section, - (long)[_collectionViewData numberOfItemsInSection:section], - (long)[oldCollectionViewData numberOfItemsInSection:section], - (long)insertedCount, (long)deletedCount, (long)movedInCount, (long)movedOutCount); - } -#endif - - [someMutableArr2 addObjectsFromArray:sortedDeletedMutableItems]; - [someMutableArr3 addObjectsFromArray:sortedInsertMutableItems]; - [someMutableArr1 addObjectsFromArray:[someMutableArr2 sortedArrayUsingSelector:@selector(inverseCompareIndexPaths:)]]; - [someMutableArr1 addObjectsFromArray:sortedMutableMoveItems]; - [someMutableArr1 addObjectsFromArray:[someMutableArr3 sortedArrayUsingSelector:@selector(compareIndexPaths:)]]; - - NSMutableArray *layoutUpdateItems = [[NSMutableArray alloc] init]; - - [layoutUpdateItems addObjectsFromArray:sortedDeletedMutableItems]; - [layoutUpdateItems addObjectsFromArray:sortedMutableMoveItems]; - [layoutUpdateItems addObjectsFromArray:sortedInsertMutableItems]; - - - NSMutableArray *newModel = [NSMutableArray array]; - for (NSInteger i = 0; i < [oldCollectionViewData numberOfSections]; i++) { - NSMutableArray *sectionArr = [NSMutableArray array]; - for (NSInteger j = 0; j < [oldCollectionViewData numberOfItemsInSection:i]; j++) - [sectionArr addObject:@([oldCollectionViewData globalIndexForItemAtIndexPath:[NSIndexPath indexPathForItem:j inSection:i]])]; - [newModel addObject:sectionArr]; - } - - for (PSTCollectionViewUpdateItem *updateItem in layoutUpdateItems) { - switch (updateItem.updateAction) { - case PSTCollectionUpdateActionDelete: { - if (updateItem.isSectionOperation) { - // section updates are ignored anyway in animation code. If not commented, mixing rows and section deletion causes crash in else below - // [newModel removeObjectAtIndex:updateItem.indexPathBeforeUpdate.section]; - }else { - [(NSMutableArray *)newModel[updateItem.indexPathBeforeUpdate.section] - removeObjectAtIndex:updateItem.indexPathBeforeUpdate.item]; - } - } - break; - case PSTCollectionUpdateActionInsert: { - if (updateItem.isSectionOperation) { - [newModel insertObject:[[NSMutableArray alloc] init] - atIndex:updateItem.indexPathAfterUpdate.section]; - }else { - [(NSMutableArray *)newModel[updateItem.indexPathAfterUpdate.section] - insertObject:@(NSNotFound) - atIndex:updateItem.indexPathAfterUpdate.item]; - } - } - break; - - case PSTCollectionUpdateActionMove: { - if (updateItem.isSectionOperation) { - id section = newModel[updateItem.indexPathBeforeUpdate.section]; - [newModel insertObject:section atIndex:updateItem.indexPathAfterUpdate.section]; - } - else { - id object = @([oldCollectionViewData globalIndexForItemAtIndexPath:updateItem.indexPathBeforeUpdate]); - [newModel[updateItem.indexPathBeforeUpdate.section] removeObject:object]; - [newModel[updateItem.indexPathAfterUpdate.section] insertObject:object - atIndex:updateItem.indexPathAfterUpdate.item]; - } - } - break; - default: break; - } - } - - NSMutableArray *oldToNewMap = [NSMutableArray arrayWithCapacity:[oldCollectionViewData numberOfItems]]; - NSMutableArray *newToOldMap = [NSMutableArray arrayWithCapacity:[_collectionViewData numberOfItems]]; - - for (NSInteger i = 0; i < [oldCollectionViewData numberOfItems]; i++) - [oldToNewMap addObject:@(NSNotFound)]; - - for (NSInteger i = 0; i < [_collectionViewData numberOfItems]; i++) - [newToOldMap addObject:@(NSNotFound)]; - - for (NSUInteger i = 0; i < newModel.count; i++) { - NSMutableArray *section = newModel[i]; - for (NSUInteger j = 0; j < section.count; j++) { - NSInteger newGlobalIndex = [_collectionViewData globalIndexForItemAtIndexPath:[NSIndexPath indexPathForItem:j inSection:i]]; - if ([section[j] integerValue] != NSNotFound) - oldToNewMap[[section[j] intValue]] = @(newGlobalIndex); - if (newGlobalIndex != NSNotFound) - newToOldMap[newGlobalIndex] = section[j]; - } - } - - _update = @{@"oldModel" : oldCollectionViewData, @"newModel" : _collectionViewData, @"oldToNewIndexMap" : oldToNewMap, @"newToOldIndexMap" : newToOldMap}; - - [self updateWithItems:someMutableArr1]; - - _originalInsertItems = nil; - _originalDeleteItems = nil; - _insertItems = nil; - _deleteItems = nil; - _moveItems = nil; - _reloadItems = nil; - _update = nil; - _updateCount--; - _collectionViewFlags.updating = NO; - [self resumeReloads]; -} - -- (void)updateRowsAtIndexPaths:(NSArray *)indexPaths updateAction:(PSTCollectionUpdateAction)updateAction { - BOOL updating = _collectionViewFlags.updating; - if (!updating) [self setupCellAnimations]; - - NSMutableArray *array = [self arrayForUpdateAction:updateAction]; //returns appropriate empty array if not exists - - for (NSIndexPath *indexPath in indexPaths) { - PSTCollectionViewUpdateItem *updateItem = [[PSTCollectionViewUpdateItem alloc] initWithAction:updateAction forIndexPath:indexPath]; - [array addObject:updateItem]; - } - - if (!updating) [self endItemAnimations]; -} - - -- (void)updateSections:(NSIndexSet *)sections updateAction:(PSTCollectionUpdateAction)updateAction { - BOOL updating = _collectionViewFlags.updating; - if (!updating) [self setupCellAnimations]; - - NSMutableArray *updateActions = [self arrayForUpdateAction:updateAction]; - - [sections enumerateIndexesUsingBlock:^(NSUInteger section, BOOL *stop) { - PSTCollectionViewUpdateItem *updateItem = [[PSTCollectionViewUpdateItem alloc] initWithAction:updateAction forIndexPath:[NSIndexPath indexPathForItem:NSNotFound inSection:section]]; - [updateActions addObject:updateItem]; - }]; - - if (!updating) [self endItemAnimations]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollection/UICollection interoperability - -#ifdef kPSUIInteroperabilityEnabled -#import <objc/message.h> -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - NSMethodSignature *sig = [super methodSignatureForSelector:selector]; - if(!sig) { - NSString *selString = NSStringFromSelector(selector); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - sig = [super methodSignatureForSelector:cleanedSelector]; - } - } - return sig; -} -- (void)forwardInvocation:(NSInvocation *)inv { - NSString *selString = NSStringFromSelector([inv selector]); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - if ([self respondsToSelector:cleanedSelector]) { - // dynamically add method for faster resolving - Method newMethod = class_getInstanceMethod(self.class, [inv selector]); - IMP underscoreIMP = imp_implementationWithBlock(^(id _self) { - return objc_msgSend(_self, cleanedSelector); - }); - class_addMethod(self.class, [inv selector], underscoreIMP, method_getTypeEncoding(newMethod)); - // invoke now - inv.selector = cleanedSelector; - [inv invokeWithTarget:self]; - } - }else { - [super forwardInvocation:inv]; - } -} -#endif - -@end - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Runtime Additions to create UICollectionView - -@implementation PSUICollectionView_ @end -@implementation PSUICollectionViewCell_ @end -@implementation PSUICollectionReusableView_ @end -@implementation PSUICollectionViewLayout_ @end -@implementation PSUICollectionViewFlowLayout_ @end -@implementation PSUICollectionViewLayoutAttributes_ @end -@implementation PSUICollectionViewController_ @end - -static BOOL PSTRegisterClass(NSString *UIClassName, Class PSTClass) { - NSCParameterAssert(UIClassName && PSTClass); - - Class UIClass = NSClassFromString(UIClassName); - if (UIClass) { - // Class size need to be the same for class_setSuperclass to work. - // If the UIKit class is smaller then our subclass, ivars won't clash, so there's no issue. - long sizeDifference = class_getInstanceSize(UIClass) - class_getInstanceSize(PSTClass); - if (sizeDifference > 0) { - NSLog(@"Warning! ivar size mismatch in %@ - can't change the superclass.", PSTClass); - return NO; - } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - // class_setSuperclass is deprecated, but still exists and works on iOS6/7. - class_setSuperclass(PSTClass, UIClass); -#pragma clang diagnostic pop - } - } else { - // We're most likely on iOS5, the requested UIKit class doesn't exist, so we create it dynamically. - if ((UIClass = objc_allocateClassPair(PSTClass, UIClassName.UTF8String, 0))) { - objc_registerClassPair(UIClass); - } - } - return YES; -} - -// Create subclasses that pose as UICollectionView et al, if not available at runtime. -__attribute__((constructor)) static void PSTCreateUICollectionViewClasses(void) { - if (objc_getClass("PSTCollectionViewDisableForwardToUICollectionViewSentinel")) return; - - @autoreleasepool { - // Change superclass at runtime. This allows seamless switching from PST* to UI* at runtime. - PSTRegisterClass(@"UICollectionView", PSUICollectionView_.class); - PSTRegisterClass(@"UICollectionViewCell", PSUICollectionViewCell_.class); - PSTRegisterClass(@"UICollectionReusableView", PSUICollectionReusableView_.class); - PSTRegisterClass(@"UICollectionViewLayout", PSUICollectionViewLayout_.class); - PSTRegisterClass(@"UICollectionViewFlowLayout", PSUICollectionViewFlowLayout_.class); - PSTRegisterClass(@"UICollectionViewLayoutAttributes", PSUICollectionViewLayoutAttributes_.class); - PSTRegisterClass(@"UICollectionViewController", PSUICollectionViewController_.class); - - // add PSUI classes at runtime to make Interface Builder sane - // (IB doesn't allow adding the PSUICollectionView_ types but doesn't complain on unknown classes) - // The class name may already be in use. This may happen if this code is running for the second time (first for an app bundle, then again for a unit test bundle). - Class c; - if ((c = objc_allocateClassPair(PSUICollectionView_.class, "PSUICollectionView", 0))) objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionViewCell_.class, "PSUICollectionViewCell", 0))) objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionReusableView_.class, "PSUICollectionReusableView", 0))) objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionViewLayout_.class, "PSUICollectionViewLayout", 0))) objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionViewFlowLayout_.class, "PSUICollectionViewFlowLayout", 0))) objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionViewLayoutAttributes_.class, "PSUICollectionViewLayoutAttributes", 0)))objc_registerClassPair(c); - if ((c = objc_allocateClassPair(PSUICollectionViewController_.class, "PSUICollectionViewController", 0))) objc_registerClassPair(c); - } -} - -CGFloat PSTSimulatorAnimationDragCoefficient(void) { - static CGFloat (*UIAnimationDragCoefficient)(void) = NULL; -#if TARGET_IPHONE_SIMULATOR - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - UIAnimationDragCoefficient = (CGFloat (*)(void))dlsym(RTLD_DEFAULT, "UIAnimationDragCoefficient"); - }); -#endif - return UIAnimationDragCoefficient ? UIAnimationDragCoefficient() : 1.f; -} - -// helper to check for ivar layout -#if 0 -static void PSTPrintIvarsForClass(Class aClass) { - unsigned int varCount; - Ivar *vars = class_copyIvarList(aClass, &varCount); - for (int i = 0; i < varCount; i++) { - NSLog(@"%s %s", ivar_getTypeEncoding(vars[i]), ivar_getName(vars[i])); - } - free(vars); -} - -__attribute__((constructor)) static void PSTCheckIfIVarLayoutIsEqualSize(void) { - @autoreleasepool { - NSLog(@"PSTCollectionView size = %zd, UICollectionView size = %zd", class_getInstanceSize(PSTCollectionView.class),class_getInstanceSize(UICollectionView.class)); - NSLog(@"PSTCollectionViewCell size = %zd, UICollectionViewCell size = %zd", class_getInstanceSize(PSTCollectionViewCell.class),class_getInstanceSize(UICollectionViewCell.class)); - NSLog(@"PSTCollectionViewController size = %zd, UICollectionViewController size = %zd", class_getInstanceSize(PSTCollectionViewController.class),class_getInstanceSize(UICollectionViewController.class)); - NSLog(@"PSTCollectionViewLayout size = %zd, UICollectionViewLayout size = %zd", class_getInstanceSize(PSTCollectionViewLayout.class),class_getInstanceSize(UICollectionViewLayout.class)); - NSLog(@"PSTCollectionViewFlowLayout size = %zd, UICollectionViewFlowLayout size = %zd", class_getInstanceSize(PSTCollectionViewFlowLayout.class),class_getInstanceSize(UICollectionViewFlowLayout.class)); - //PSTPrintIvarsForClass(PSTCollectionViewFlowLayout.class); NSLog(@"\n\n\n");PSTPrintIvarsForClass(UICollectionViewFlowLayout.class); - } -} -#endif diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h deleted file mode 100644 index ee71a7e..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// PSTCollectionViewCell.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewCommon.h" - -@class PSTCollectionViewLayout, PSTCollectionView, PSTCollectionViewLayoutAttributes; - -@interface PSTCollectionReusableView : UIView - -@property (nonatomic, readonly, copy) NSString *reuseIdentifier; - -// Override in subclasses. Called before instance is returned to the reuse queue. -- (void)prepareForReuse; - -// Apply layout attributes on cell. -- (void)applyLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes; -- (void)willTransitionFromLayout:(PSTCollectionViewLayout *)oldLayout toLayout:(PSTCollectionViewLayout *)newLayout; -- (void)didTransitionFromLayout:(PSTCollectionViewLayout *)oldLayout toLayout:(PSTCollectionViewLayout *)newLayout; - -@end - -@interface PSTCollectionReusableView (Internal) -@property (nonatomic, unsafe_unretained) PSTCollectionView *collectionView; -@property (nonatomic, copy) NSString *reuseIdentifier; -@property (nonatomic, strong, readonly) PSTCollectionViewLayoutAttributes *layoutAttributes; -@end - - -@interface PSTCollectionViewCell : PSTCollectionReusableView - -@property (nonatomic, readonly) UIView *contentView; // add custom subviews to the cell's contentView - -// Cells become highlighted when the user touches them. -// The selected state is toggled when the user lifts up from a highlighted cell. -// Override these methods to provide custom UI for a selected or highlighted state. -// The collection view may call the setters inside an animation block. -@property (nonatomic, getter=isSelected) BOOL selected; -@property (nonatomic, getter=isHighlighted) BOOL highlighted; - -// The background view is a subview behind all other views. -// If selectedBackgroundView is different than backgroundView, it will be placed above the background view and animated in on selection. -@property (nonatomic, strong) UIView *backgroundView; -@property (nonatomic, strong) UIView *selectedBackgroundView; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.m deleted file mode 100644 index db216ed..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCell.m +++ /dev/null @@ -1,264 +0,0 @@ -// -// PSTCollectionViewCell.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionView.h" - -@interface PSTCollectionReusableView () { - PSTCollectionViewLayoutAttributes *_layoutAttributes; - NSString *_reuseIdentifier; - __unsafe_unretained PSTCollectionView *_collectionView; - struct { - unsigned int inUpdateAnimation : 1; - }_reusableViewFlags; - char filler[50]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} -@property (nonatomic, copy) NSString *reuseIdentifier; -@property (nonatomic, unsafe_unretained) PSTCollectionView *collectionView; -@property (nonatomic, strong) PSTCollectionViewLayoutAttributes *layoutAttributes; -@end - -@implementation PSTCollectionReusableView - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - if ((self = [super initWithCoder:aDecoder])) { - self.reuseIdentifier = [aDecoder decodeObjectForKey:@"UIReuseIdentifier"]; - } - return self; -} - -- (void)awakeFromNib { - self.reuseIdentifier = [self valueForKeyPath:@"reuseIdentifier"]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)prepareForReuse { - self.layoutAttributes = nil; -} - -- (void)applyLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes { - if (layoutAttributes != _layoutAttributes) { - _layoutAttributes = layoutAttributes; - - self.bounds = (CGRect){.origin = self.bounds.origin, .size = layoutAttributes.size}; - self.center = layoutAttributes.center; - self.hidden = layoutAttributes.hidden; - self.layer.transform = layoutAttributes.transform3D; - self.layer.zPosition = layoutAttributes.zIndex; - self.layer.opacity = layoutAttributes.alpha; - } -} - -- (void)willTransitionFromLayout:(PSTCollectionViewLayout *)oldLayout toLayout:(PSTCollectionViewLayout *)newLayout { - _reusableViewFlags.inUpdateAnimation = YES; -} - -- (void)didTransitionFromLayout:(PSTCollectionViewLayout *)oldLayout toLayout:(PSTCollectionViewLayout *)newLayout { - _reusableViewFlags.inUpdateAnimation = NO; -} - -- (BOOL)isInUpdateAnimation { - return _reusableViewFlags.inUpdateAnimation; -} - -- (void)setInUpdateAnimation:(BOOL)inUpdateAnimation { - _reusableViewFlags.inUpdateAnimation = inUpdateAnimation; -} - -@end - - -@implementation PSTCollectionViewCell { - UIView *_contentView; - UIView *_backgroundView; - UIView *_selectedBackgroundView; - UILongPressGestureRecognizer *_menuGesture; - id _selectionSegueTemplate; - id _highlightingSupport; - struct { - unsigned int selected : 1; - unsigned int highlighted : 1; - unsigned int showingMenu : 1; - unsigned int clearSelectionWhenMenuDisappears : 1; - unsigned int waitingForSelectionAnimationHalfwayPoint : 1; - }_collectionCellFlags; - BOOL _selected; - BOOL _highlighted; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - _backgroundView = [[UIView alloc] initWithFrame:self.bounds]; - _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - [self addSubview:_backgroundView]; - - _contentView = [[UIView alloc] initWithFrame:self.bounds]; - _contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - [self addSubview:_contentView]; - - _menuGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(menuGesture:)]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - if ((self = [super initWithCoder:aDecoder])) { - if (self.subviews.count > 0) { - _contentView = self.subviews[0]; - }else { - _contentView = [[UIView alloc] initWithFrame:self.bounds]; - _contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - [self addSubview:_contentView]; - } - - _backgroundView = [[UIView alloc] initWithFrame:self.bounds]; - _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - [self insertSubview:_backgroundView belowSubview:_contentView]; - - _menuGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(menuGesture:)]; - } - return self; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)prepareForReuse { - self.layoutAttributes = nil; - self.selected = NO; - self.highlighted = NO; - self.accessibilityTraits = UIAccessibilityTraitNone; -} - -// Selection highlights underlying contents -- (void)setSelected:(BOOL)selected { - _collectionCellFlags.selected = selected; - self.accessibilityTraits = selected ? UIAccessibilityTraitSelected : UIAccessibilityTraitNone; - [self updateBackgroundView:selected]; -} - -// Cell highlighting only highlights the cell itself -- (void)setHighlighted:(BOOL)highlighted { - _collectionCellFlags.highlighted = highlighted; - [self updateBackgroundView:highlighted]; -} - -- (void)updateBackgroundView:(BOOL)highlight { - _selectedBackgroundView.alpha = highlight ? 1.0f : 0.0f; - [self setHighlighted:highlight forViews:self.contentView.subviews]; -} - -- (void)setHighlighted:(BOOL)highlighted forViews:(id)subviews { - for (id view in subviews) { - // Ignore the events if view wants to - if (!((UIView *)view).isUserInteractionEnabled && - [view respondsToSelector:@selector(setHighlighted:)] && - ![view isKindOfClass:UIControl.class]) { - [view setHighlighted:highlighted]; - - [self setHighlighted:highlighted forViews:[view subviews]]; - } - } -} - -- (void)menuGesture:(UILongPressGestureRecognizer *)recognizer { - NSLog(@"Not yet implemented: %@", NSStringFromSelector(_cmd)); -} - -- (void)setBackgroundView:(UIView *)backgroundView { - if (_backgroundView != backgroundView) { - [_backgroundView removeFromSuperview]; - _backgroundView = backgroundView; - _backgroundView.frame = self.bounds; - _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; - [self insertSubview:_backgroundView atIndex:0]; - } -} - -- (void)setSelectedBackgroundView:(UIView *)selectedBackgroundView { - if (_selectedBackgroundView != selectedBackgroundView) { - [_selectedBackgroundView removeFromSuperview]; - _selectedBackgroundView = selectedBackgroundView; - _selectedBackgroundView.frame = self.bounds; - _selectedBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _selectedBackgroundView.alpha = self.selected ? 1.0f : 0.0f; - if (_backgroundView) { - [self insertSubview:_selectedBackgroundView aboveSubview:_backgroundView]; - } - else { - [self insertSubview:_selectedBackgroundView atIndex:0]; - } - } -} - -- (BOOL)isSelected { - return _collectionCellFlags.selected; -} - -- (BOOL)isHighlighted { - return _collectionCellFlags.highlighted; -} - -- (void)performSelectionSegue { - /* - Currently there's no "official" way to trigger a storyboard segue - using UIStoryboardSegueTemplate, so we're doing it in a semi-legal way. - */ - SEL selector = NSSelectorFromString([NSString stringWithFormat:@"per%@", @"form:"]); - if ([self->_selectionSegueTemplate respondsToSelector:selector]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [self->_selectionSegueTemplate performSelector:selector withObject:self]; -#pragma clang diagnostic pop - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollection/UICollection interoperability - -#ifdef kPSUIInteroperabilityEnabled -#import <objc/runtime.h> -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - NSMethodSignature *sig = [super methodSignatureForSelector:selector]; - if(!sig) { - NSString *selString = NSStringFromSelector(selector); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - sig = [super methodSignatureForSelector:cleanedSelector]; - } - } - return sig; -} - -- (void)forwardInvocation:(NSInvocation *)inv { - NSString *selString = NSStringFromSelector([inv selector]); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - if ([self respondsToSelector:cleanedSelector]) { - inv.selector = cleanedSelector; - [inv invokeWithTarget:self]; - } - }else { - [super forwardInvocation:inv]; - } -} -#endif - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h deleted file mode 100644 index fcb0a3d..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewCommon.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// PSTCollectionViewCommon.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import <Foundation/Foundation.h> -#import <UIKit/UIKit.h> - -// Mostly a debug feature, makes classes from UICollection* compatible with PSTCollection* -// (e.g. adding the "real" UICollectionViewFlowLayout to PSTCollectionView. -//#define kPSUIInteroperabilityEnabled - -@class PSTCollectionView, PSTCollectionViewCell, PSTCollectionReusableView; - -@protocol PSTCollectionViewDataSource <NSObject> -@required - -- (NSInteger)collectionView:(PSTCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; - -// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath: -- (PSTCollectionViewCell *)collectionView:(PSTCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath; - -@optional - -- (NSInteger)numberOfSectionsInCollectionView:(PSTCollectionView *)collectionView; - -// The view that is returned must be retrieved from a call to -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: -- (PSTCollectionReusableView *)collectionView:(PSTCollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; - -@end - -@protocol PSTCollectionViewDelegate <UIScrollViewDelegate> -@optional - -// Methods for notification of selection/deselection and highlight/unhighlight events. -// The sequence of calls leading to selection from a user touch is: -// -// (when the touch begins) -// 1. -collectionView:shouldHighlightItemAtIndexPath: -// 2. -collectionView:didHighlightItemAtIndexPath: -// -// (when the touch lifts) -// 3. -collectionView:shouldSelectItemAtIndexPath: or -collectionView:shouldDeselectItemAtIndexPath: -// 4. -collectionView:didSelectItemAtIndexPath: or -collectionView:didDeselectItemAtIndexPath: -// 5. -collectionView:didUnhighlightItemAtIndexPath: -- (BOOL)collectionView:(PSTCollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)collectionView:(PSTCollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)collectionView:(PSTCollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath; - -- (BOOL)collectionView:(PSTCollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; - -- (BOOL)collectionView:(PSTCollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath; // called when the user taps on an already-selected item in multi-select mode -- (void)collectionView:(PSTCollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)collectionView:(PSTCollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)collectionView:(PSTCollectionView *)collectionView didEndDisplayingCell:(PSTCollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)collectionView:(PSTCollectionView *)collectionView didEndDisplayingSupplementaryView:(PSTCollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath; - -// These methods provide support for copy/paste actions on cells. -// All three should be implemented if any are. -- (BOOL)collectionView:(PSTCollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath; - -- (BOOL)collectionView:(PSTCollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender; - -- (void)collectionView:(PSTCollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h deleted file mode 100644 index 1e9ca56..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// PSTCollectionViewController.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewCommon.h" - -@class PSTCollectionViewLayout, PSTCollectionViewController; - -// Simple controller-wrapper around PSTCollectionView. -@interface PSTCollectionViewController : UIViewController <PSTCollectionViewDelegate, PSTCollectionViewDataSource> - -// Designated initializer. -- (id)initWithCollectionViewLayout:(PSTCollectionViewLayout *)layout; - -// Internally used collection view. If not set, created during loadView. -@property (nonatomic, strong) PSTCollectionView *collectionView; - -// Defaults to YES, and if YES, any selection is cleared in viewWillAppear: -@property (nonatomic, assign) BOOL clearsSelectionOnViewWillAppear; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.m deleted file mode 100644 index f3849fc..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewController.m +++ /dev/null @@ -1,145 +0,0 @@ -// -// PSTCollectionViewController.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewController.h" -#import "PSTCollectionView.h" - -@interface PSTCollectionViewController () { - PSTCollectionViewLayout *_layout; - PSTCollectionView *_collectionView; - struct { - unsigned int clearsSelectionOnViewWillAppear : 1; - unsigned int appearsFirstTime : 1; // PST extension! - }_collectionViewControllerFlags; - char filler[100]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} -@property (nonatomic, strong) PSTCollectionViewLayout *layout; -@end - -@implementation PSTCollectionViewController - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - self.layout = [PSTCollectionViewFlowLayout new]; - self.clearsSelectionOnViewWillAppear = YES; - _collectionViewControllerFlags.appearsFirstTime = YES; - } - return self; -} - -- (id)initWithCollectionViewLayout:(PSTCollectionViewLayout *)layout { - if ((self = [super init])) { - self.layout = layout; - self.clearsSelectionOnViewWillAppear = YES; - _collectionViewControllerFlags.appearsFirstTime = YES; - } - return self; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - UIViewController - -- (void)loadView { - [super loadView]; - - // if this is restored from IB, we don't have plain main view. - if ([self.view isKindOfClass:PSTCollectionView.class]) { - _collectionView = (PSTCollectionView *)self.view; - self.view = [[UIView alloc] initWithFrame:self.view.bounds]; - self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - } - - if (_collectionView.delegate == nil) _collectionView.delegate = self; - if (_collectionView.dataSource == nil) _collectionView.dataSource = self; - - // only create the collection view if it is not already created (by IB) - if (!_collectionView) { - self.collectionView = [[PSTCollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:self.layout]; - self.collectionView.delegate = self; - self.collectionView.dataSource = self; - } -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // This seems like a hack, but is needed for real compatibility - // There can be implementations of loadView that don't call super and don't set the view, yet it works in UICollectionViewController. - if (!self.isViewLoaded) { - self.view = [[UIView alloc] initWithFrame:CGRectZero]; - } - - // Attach the view - if (self.view != self.collectionView) { - [self.view addSubview:self.collectionView]; - self.collectionView.frame = self.view.bounds; - self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - } -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - if (_collectionViewControllerFlags.appearsFirstTime) { - [_collectionView reloadData]; - _collectionViewControllerFlags.appearsFirstTime = NO; - } - - if (_collectionViewControllerFlags.clearsSelectionOnViewWillAppear) { - for (NSIndexPath *aIndexPath in [[_collectionView indexPathsForSelectedItems] copy]) { - [_collectionView deselectItemAtIndexPath:aIndexPath animated:animated]; - } - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Lazy load the collection view - -- (PSTCollectionView *)collectionView { - if (!_collectionView) { - _collectionView = [[PSTCollectionView alloc] initWithFrame:UIScreen.mainScreen.bounds collectionViewLayout:self.layout]; - _collectionView.delegate = self; - _collectionView.dataSource = self; - - // If the collection view isn't the main view, add it. - if (self.isViewLoaded && self.view != self.collectionView) { - [self.view addSubview:self.collectionView]; - self.collectionView.frame = self.view.bounds; - self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - } - } - return _collectionView; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Properties - -- (void)setClearsSelectionOnViewWillAppear:(BOOL)clearsSelectionOnViewWillAppear { - _collectionViewControllerFlags.clearsSelectionOnViewWillAppear = clearsSelectionOnViewWillAppear; -} - -- (BOOL)clearsSelectionOnViewWillAppear { - return _collectionViewControllerFlags.clearsSelectionOnViewWillAppear; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollectionViewDataSource - -- (NSInteger)collectionView:(PSTCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return 0; -} - -- (PSTCollectionViewCell *)collectionView:(PSTCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - [self doesNotRecognizeSelector:_cmd]; - return nil; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h deleted file mode 100644 index ef05d8c..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// PSTCollectionViewData.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewCommon.h" - -@class PSTCollectionView, PSTCollectionViewLayout, PSTCollectionViewLayoutAttributes; - -// https://github.com/steipete/iOS6-Runtime-Headers/blob/master/UICollectionViewData.h -@interface PSTCollectionViewData : NSObject - -// Designated initializer. -- (id)initWithCollectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout *)layout; - -// Ensure data is valid. may fetches items from dataSource and layout. -- (void)validateLayoutInRect:(CGRect)rect; - -- (CGRect)rectForItemAtIndexPath:(NSIndexPath *)indexPath; - -/* - - (CGRect)rectForSupplementaryElementOfKind:(id)arg1 atIndexPath:(id)arg2; - - (CGRect)rectForDecorationElementOfKind:(id)arg1 atIndexPath:(id)arg2; - - (CGRect)rectForGlobalItemIndex:(int)arg1; -*/ - -// No fucking idea (yet) -- (NSUInteger)globalIndexForItemAtIndexPath:(NSIndexPath *)indexPath; - -- (NSIndexPath *)indexPathForItemAtGlobalIndex:(NSInteger)index; - -// Fetch layout attributes -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect; - -/* -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForElementsInSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForGlobalItemIndex:(NSInteger)index; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForDecorationViewOfKind:(id)arg1 atIndexPath:(NSIndexPath *)indexPath; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(id)arg1 atIndexPath:(NSIndexPath *)indexPath; - - (id)existingSupplementaryLayoutAttributesInSection:(int)arg1; -*/ - -// Make data to re-evaluate dataSources. -- (void)invalidate; - -// Access cached item data -- (NSInteger)numberOfItemsBeforeSection:(NSInteger)section; - -- (NSInteger)numberOfItemsInSection:(NSInteger)section; - -- (NSInteger)numberOfItems; - -- (NSInteger)numberOfSections; - -// Total size of the content. -- (CGRect)collectionViewContentRect; - -@property (readonly) BOOL layoutIsPrepared; - -/* - - (void)_setLayoutAttributes:(id)arg1 atGlobalItemIndex:(int)arg2; - - (void)_setupMutableIndexPath:(id*)arg1 forGlobalItemIndex:(int)arg2; - - (id)_screenPageForPoint:(struct CGPoint { float x1; float x2; })arg1; - - (void)_validateContentSize; - - (void)_validateItemCounts; - - (void)_updateItemCounts; - - (void)_loadEverything; - - (void)_prepareToLoadData; - - (void)invalidate:(BOOL)arg1; - */ - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.m deleted file mode 100644 index 54a920e..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewData.m +++ /dev/null @@ -1,235 +0,0 @@ -// -// PSTCollectionViewData.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewData.h" -#import "PSTCollectionView.h" - -@interface PSTCollectionViewData () { - CGRect _validLayoutRect; - - NSInteger _numItems; - NSInteger _numSections; - NSInteger *_sectionItemCounts; -// id __strong* _globalItems; ///< _globalItems appears to be cached layoutAttributes. But adding that work in opens a can of worms, so deferring until later. - -/* - // At this point, I've no idea how _screenPageDict is structured. Looks like some optimization for layoutAttributesForElementsInRect. - And why UICGPointKey? Isn't that doable with NSValue? - - "<UICGPointKey: 0x11432d40>" = "<NSMutableIndexSet: 0x11432c60>[number of indexes: 9 (in 1 ranges), indexes: (0-8)]"; - "<UICGPointKey: 0xb94bf60>" = "<NSMutableIndexSet: 0x18dea7e0>[number of indexes: 11 (in 2 ranges), indexes: (6-15 17)]"; - - (lldb) p (CGPoint)[[[[[collectionView valueForKey:@"_collectionViewData"] valueForKey:@"_screenPageDict"] allKeys] objectAtIndex:0] point] - (CGPoint) $11 = (x=15, y=159) - (lldb) p (CGPoint)[[[[[collectionView valueForKey:@"_collectionViewData"] valueForKey:@"_screenPageDict"] allKeys] objectAtIndex:1] point] - (CGPoint) $12 = (x=15, y=1128) - - // https://github.com/steipete/iOS6-Runtime-Headers/blob/master/UICGPointKey.h - - NSMutableDictionary *_screenPageDict; - */ - - // @steipete - - CGSize _contentSize; - struct { - unsigned int contentSizeIsValid:1; - unsigned int itemCountsAreValid:1; - unsigned int layoutIsPrepared:1; - }_collectionViewDataFlags; -} -@property (nonatomic, unsafe_unretained) PSTCollectionView *collectionView; -@property (nonatomic, unsafe_unretained) PSTCollectionViewLayout *layout; -@property (nonatomic, strong) NSArray *cachedLayoutAttributes; - -@end - -@implementation PSTCollectionViewData - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)initWithCollectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout *)layout { - if ((self = [super init])) { - _collectionView = collectionView; - _layout = layout; - } - return self; -} - -- (void)dealloc { - free(_sectionItemCounts); -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p numItems:%ld numSections:%ld>", NSStringFromClass(self.class), self, (long)self.numberOfItems, (long)self.numberOfSections]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)invalidate { - _collectionViewDataFlags.itemCountsAreValid = NO; - _collectionViewDataFlags.layoutIsPrepared = NO; - _validLayoutRect = CGRectNull; // don't set CGRectZero in case of _contentSize=CGSizeZero -} - -- (CGRect)collectionViewContentRect { - return (CGRect){.size=_contentSize}; -} - -- (void)validateLayoutInRect:(CGRect)rect { - [self validateItemCounts]; - [self prepareToLoadData]; - - // TODO: check if we need to fetch data from layout - if (!CGRectEqualToRect(_validLayoutRect, rect)) { - _validLayoutRect = rect; - // we only want cell layoutAttributes & supplementaryView layoutAttributes - self.cachedLayoutAttributes = [[self.layout layoutAttributesForElementsInRect:rect] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(PSTCollectionViewLayoutAttributes *evaluatedObject, NSDictionary *bindings) { - return ([evaluatedObject isKindOfClass:PSTCollectionViewLayoutAttributes.class] && - ([evaluatedObject isCell] || - [evaluatedObject isSupplementaryView] || - [evaluatedObject isDecorationView])); - }]]; - } -} - -- (NSInteger)numberOfItems { - [self validateItemCounts]; - return _numItems; -} - -- (NSInteger)numberOfItemsBeforeSection:(NSInteger)section { - [self validateItemCounts]; - - NSAssert(section < _numSections, @"request for number of items in section %ld when there are only %ld sections in the collection view", (long)section, (long)_numSections); - - NSInteger returnCount = 0; - for (int i = 0; i < section; i++) { - returnCount += _sectionItemCounts[i]; - } - - return returnCount; -} - -- (NSInteger)numberOfItemsInSection:(NSInteger)section { - [self validateItemCounts]; - if (section >= _numSections || section < 0) { - // In case of inconsistency returns the 'less harmful' amount of items. Throwing an exception here potentially - // causes exceptions when data is consistent. Deleting sections is one of the parts sensitive to this. - // All checks via assertions are done on CollectionView animation methods, specially 'endAnimations'. - return 0; - //@throw [NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"Section %d out of range: 0...%d", section, _numSections] userInfo:nil]; - } - - NSInteger numberOfItemsInSection = 0; - if (_sectionItemCounts) { - numberOfItemsInSection = _sectionItemCounts[section]; - } - return numberOfItemsInSection; -} - -- (NSInteger)numberOfSections { - [self validateItemCounts]; - return _numSections; -} - -- (CGRect)rectForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGRectZero; -} - -- (NSIndexPath *)indexPathForItemAtGlobalIndex:(NSInteger)index { - [self validateItemCounts]; - - NSAssert(index < _numItems, @"request for index path for global index %ld when there are only %ld items in the collection view", (long)index, (long)_numItems); - - NSInteger section = 0; - NSInteger countItems = 0; - for (section = 0; section < _numSections; section++) { - NSInteger countIncludingThisSection = countItems + _sectionItemCounts[section]; - if (countIncludingThisSection > index) break; - countItems = countIncludingThisSection; - } - - NSInteger item = index - countItems; - - return [NSIndexPath indexPathForItem:item inSection:section]; -} - -- (NSUInteger)globalIndexForItemAtIndexPath:(NSIndexPath *)indexPath { - NSInteger offset = [self numberOfItemsBeforeSection:indexPath.section] + indexPath.item; - return (NSUInteger)offset; -} - -- (BOOL)layoutIsPrepared { - return _collectionViewDataFlags.layoutIsPrepared; -} - -- (void)setLayoutIsPrepared:(BOOL)layoutIsPrepared { - _collectionViewDataFlags.layoutIsPrepared = layoutIsPrepared; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Fetch Layout Attributes - -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { - [self validateLayoutInRect:rect]; - return self.cachedLayoutAttributes; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private - -// ensure item count is valid and loaded -- (void)validateItemCounts { - if (!_collectionViewDataFlags.itemCountsAreValid) { - [self updateItemCounts]; - } -} - -// query dataSource for new data -- (void)updateItemCounts { - // query how many sections there will be - _numSections = 1; - if ([self.collectionView.dataSource respondsToSelector:@selector(numberOfSectionsInCollectionView:)]) { - _numSections = [self.collectionView.dataSource numberOfSectionsInCollectionView:self.collectionView]; - } - if (_numSections <= 0) { // early bail-out - _numItems = 0; - free(_sectionItemCounts); - _sectionItemCounts = 0; - _collectionViewDataFlags.itemCountsAreValid = YES; - return; - } - // allocate space - if (!_sectionItemCounts) { - _sectionItemCounts = malloc(_numSections * sizeof(NSInteger)); - }else { - _sectionItemCounts = realloc(_sectionItemCounts, _numSections * sizeof(NSInteger)); - } - - // query cells per section - _numItems = 0; - for (NSInteger i = 0; i < _numSections; i++) { - NSInteger cellCount = [self.collectionView.dataSource collectionView:self.collectionView numberOfItemsInSection:i]; - _sectionItemCounts[i] = cellCount; - _numItems += cellCount; - } - - _collectionViewDataFlags.itemCountsAreValid = YES; -} - -- (void)prepareToLoadData { - if (!self.layoutIsPrepared) { - [self.layout prepareLayout]; - _contentSize = self.layout.collectionViewContentSize; - self.layoutIsPrepared = YES; - } -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h deleted file mode 100644 index 043333d..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.h +++ /dev/null @@ -1,116 +0,0 @@ -// -// PSTCollectionViewFlowLayout.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewLayout.h" - -extern NSString *const PSTCollectionElementKindSectionHeader; -extern NSString *const PSTCollectionElementKindSectionFooter; - -typedef NS_ENUM(NSInteger, PSTCollectionViewScrollDirection) { - PSTCollectionViewScrollDirectionVertical, - PSTCollectionViewScrollDirectionHorizontal -}; - -@protocol PSTCollectionViewDelegateFlowLayout <PSTCollectionViewDelegate> -@optional - -- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath; -- (UIEdgeInsets)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section; -- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section; -- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section; -- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section; -- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; - -@end - -@class PSTGridLayoutInfo; - -@interface PSTCollectionViewFlowLayout : PSTCollectionViewLayout - -@property (nonatomic) CGFloat minimumLineSpacing; -@property (nonatomic) CGFloat minimumInteritemSpacing; -@property (nonatomic) CGSize itemSize; // for the cases the delegate method is not implemented -@property (nonatomic) PSTCollectionViewScrollDirection scrollDirection; // default is PSTCollectionViewScrollDirectionVertical -@property (nonatomic) CGSize headerReferenceSize; -@property (nonatomic) CGSize footerReferenceSize; - -@property (nonatomic) UIEdgeInsets sectionInset; - -/* - Row alignment options exits in the official UICollectionView, but hasn't been made public API. - - Here's a snippet to test this on UICollectionView: - - NSMutableDictionary *rowAlign = [[flowLayout valueForKey:@"_rowAlignmentsOptionsDictionary"] mutableCopy]; - rowAlign[@"UIFlowLayoutCommonRowHorizontalAlignmentKey"] = @(1); - rowAlign[@"UIFlowLayoutLastRowHorizontalAlignmentKey"] = @(3); - [flowLayout setValue:rowAlign forKey:@"_rowAlignmentsOptionsDictionary"]; - */ -@property (nonatomic, strong) NSDictionary *rowAlignmentOptions; - -@end - -// @steipete addition, private API in UICollectionViewFlowLayout -extern NSString *const PSTFlowLayoutCommonRowHorizontalAlignmentKey; -extern NSString *const PSTFlowLayoutLastRowHorizontalAlignmentKey; -extern NSString *const PSTFlowLayoutRowVerticalAlignmentKey; - -typedef NS_ENUM(NSInteger, PSTFlowLayoutHorizontalAlignment) { - PSTFlowLayoutHorizontalAlignmentLeft, - PSTFlowLayoutHorizontalAlignmentCentered, - PSTFlowLayoutHorizontalAlignmentRight, - PSTFlowLayoutHorizontalAlignmentJustify // 3; default except for the last row -}; -// TODO: settings for UIFlowLayoutRowVerticalAlignmentKey - - -/* -@interface PSTCollectionViewFlowLayout (Private) - -- (CGSize)synchronizeLayout; - -// For items being inserted or deleted, the collection view calls some different methods, which you should override to provide the appropriate layout information. -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForFooterInInsertedSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForHeaderInInsertedSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForInsertedItemAtIndexPath:(NSIndexPath *)indexPath; -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForFooterInDeletedSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForHeaderInDeletedSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDeletedItemAtIndexPath:(NSIndexPath *)indexPath; - -- (void)_updateItemsLayout; -- (void)_getSizingInfos; -- (void)_updateDelegateFlags; - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForFooterInSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForHeaderInSection:(NSInteger)section; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath usingData:(id)data; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForFooterInSection:(NSInteger)section usingData:(id)data; -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForHeaderInSection:(NSInteger)section usingData:(id)data; - -- (id)indexesForSectionFootersInRect:(CGRect)rect; -- (id)indexesForSectionHeadersInRect:(CGRect)rect; -- (id)indexPathsForItemsInRect:(CGRect)rect usingData:(id)arg2; -- (id)indexesForSectionFootersInRect:(CGRect)rect usingData:(id)arg2; -- (id)indexesForSectionHeadersInRect:(CGRect)arg1 usingData:(id)arg2; -- (CGRect)_frameForItemAtSection:(int)arg1 andRow:(int)arg2 usingData:(id)arg3; -- (CGRect)_frameForFooterInSection:(int)arg1 usingData:(id)arg2; -- (CGRect)_frameForHeaderInSection:(int)arg1 usingData:(id)arg2; -- (void)_invalidateLayout; -- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)arg1; -- (PSTCollectionViewLayoutAttributes *)_layoutAttributesForItemsInRect:(CGRect)arg1; -- (CGSize)collectionViewContentSize; -- (void)finalizeCollectionViewUpdates; -- (void)_invalidateButKeepDelegateInfo; -- (void)_invalidateButKeepAllInfo; -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)arg1; -- (id)layoutAttributesForElementsInRect:(CGRect)arg1; -- (void)invalidateLayout; -- (id)layoutAttributesForItemAtIndexPath:(id)arg1; - -@end -*/ diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.m deleted file mode 100644 index 31426a2..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewFlowLayout.m +++ /dev/null @@ -1,420 +0,0 @@ -// -// PSTCollectionViewFlowLayout.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewFlowLayout.h" -#import "PSTCollectionView.h" -#import "PSTGridLayoutItem.h" -#import "PSTGridLayoutInfo.h" -#import "PSTGridLayoutRow.h" -#import "PSTGridLayoutSection.h" -#import <objc/runtime.h> - -NSString *const PSTCollectionElementKindSectionHeader = @"UICollectionElementKindSectionHeader"; -NSString *const PSTCollectionElementKindSectionFooter = @"UICollectionElementKindSectionFooter"; - -// this is not exposed in UICollectionViewFlowLayout -NSString *const PSTFlowLayoutCommonRowHorizontalAlignmentKey = @"UIFlowLayoutCommonRowHorizontalAlignmentKey"; -NSString *const PSTFlowLayoutLastRowHorizontalAlignmentKey = @"UIFlowLayoutLastRowHorizontalAlignmentKey"; -NSString *const PSTFlowLayoutRowVerticalAlignmentKey = @"UIFlowLayoutRowVerticalAlignmentKey"; - -@implementation PSTCollectionViewFlowLayout { - // class needs to have same iVar layout as UICollectionViewLayout - struct { - unsigned int delegateSizeForItem : 1; - unsigned int delegateReferenceSizeForHeader : 1; - unsigned int delegateReferenceSizeForFooter : 1; - unsigned int delegateInsetForSection : 1; - unsigned int delegateInteritemSpacingForSection : 1; - unsigned int delegateLineSpacingForSection : 1; - unsigned int delegateAlignmentOptions : 1; - unsigned int keepDelegateInfoWhileInvalidating : 1; - unsigned int keepAllDataWhileInvalidating : 1; - unsigned int layoutDataIsValid : 1; - unsigned int delegateInfoIsValid : 1; - }_gridLayoutFlags; - CGFloat _interitemSpacing; - CGFloat _lineSpacing; - CGSize _itemSize; - CGSize _headerReferenceSize; - CGSize _footerReferenceSize; - UIEdgeInsets _sectionInset; - PSTGridLayoutInfo *_data; - CGSize _currentLayoutSize; - NSMutableDictionary *_insertedItemsAttributesDict; - NSMutableDictionary *_insertedSectionHeadersAttributesDict; - NSMutableDictionary *_insertedSectionFootersAttributesDict; - NSMutableDictionary *_deletedItemsAttributesDict; - NSMutableDictionary *_deletedSectionHeadersAttributesDict; - NSMutableDictionary *_deletedSectionFootersAttributesDict; - PSTCollectionViewScrollDirection _scrollDirection; - NSDictionary *_rowAlignmentsOptionsDictionary; - CGRect _visibleBounds; - char filler[200]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} - -@synthesize rowAlignmentOptions = _rowAlignmentsOptionsDictionary; -@synthesize minimumLineSpacing = _lineSpacing; -@synthesize minimumInteritemSpacing = _interitemSpacing; - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (void)commonInit { - _itemSize = CGSizeMake(50.f, 50.f); - _lineSpacing = 10.f; - _interitemSpacing = 10.f; - _sectionInset = UIEdgeInsetsZero; - _scrollDirection = PSTCollectionViewScrollDirectionVertical; - _headerReferenceSize = CGSizeZero; - _footerReferenceSize = CGSizeZero; -} - -- (id)init { - if ((self = [super init])) { - [self commonInit]; - - // set default values for row alignment. - _rowAlignmentsOptionsDictionary = @{ - PSTFlowLayoutCommonRowHorizontalAlignmentKey : @(PSTFlowLayoutHorizontalAlignmentJustify), - PSTFlowLayoutLastRowHorizontalAlignmentKey : @(PSTFlowLayoutHorizontalAlignmentJustify), - // TODO: those values are some enum. find out what that is. - PSTFlowLayoutRowVerticalAlignmentKey : @(1), - }; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - if ((self = [super initWithCoder:decoder])) { - [self commonInit]; - - // Some properties are not set if they're default (like minimumInteritemSpacing == 10) - if ([decoder containsValueForKey:@"UIItemSize"]) - self.itemSize = [decoder decodeCGSizeForKey:@"UIItemSize"]; - if ([decoder containsValueForKey:@"UIInteritemSpacing"]) - self.minimumInteritemSpacing = [decoder decodeFloatForKey:@"UIInteritemSpacing"]; - if ([decoder containsValueForKey:@"UILineSpacing"]) - self.minimumLineSpacing = [decoder decodeFloatForKey:@"UILineSpacing"]; - if ([decoder containsValueForKey:@"UIFooterReferenceSize"]) - self.footerReferenceSize = [decoder decodeCGSizeForKey:@"UIFooterReferenceSize"]; - if ([decoder containsValueForKey:@"UIHeaderReferenceSize"]) - self.headerReferenceSize = [decoder decodeCGSizeForKey:@"UIHeaderReferenceSize"]; - if ([decoder containsValueForKey:@"UISectionInset"]) - self.sectionInset = [decoder decodeUIEdgeInsetsForKey:@"UISectionInset"]; - if ([decoder containsValueForKey:@"UIScrollDirection"]) - self.scrollDirection = [decoder decodeIntegerForKey:@"UIScrollDirection"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeCGSize:self.itemSize forKey:@"UIItemSize"]; - [coder encodeFloat:(float)self.minimumInteritemSpacing forKey:@"UIInteritemSpacing"]; - [coder encodeFloat:(float)self.minimumLineSpacing forKey:@"UILineSpacing"]; - [coder encodeCGSize:self.footerReferenceSize forKey:@"UIFooterReferenceSize"]; - [coder encodeCGSize:self.headerReferenceSize forKey:@"UIHeaderReferenceSize"]; - [coder encodeUIEdgeInsets:self.sectionInset forKey:@"UISectionInset"]; - [coder encodeInteger:self.scrollDirection forKey:@"UIScrollDirection"]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollectionViewLayout - -static char kPSTCachedItemRectsKey; - -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { - // Apple calls _layoutAttributesForItemsInRect - if (!_data) [self prepareLayout]; - - NSMutableArray *layoutAttributesArray = [NSMutableArray array]; - for (PSTGridLayoutSection *section in _data.sections) { - if (CGRectIntersectsRect(section.frame, rect)) { - - // if we have fixed size, calculate item frames only once. - // this also uses the default PSTFlowLayoutCommonRowHorizontalAlignmentKey alignment - // for the last row. (we want this effect!) - NSMutableDictionary *rectCache = objc_getAssociatedObject(self, &kPSTCachedItemRectsKey); - NSUInteger sectionIndex = [_data.sections indexOfObjectIdenticalTo:section]; - - CGRect normalizedHeaderFrame = section.headerFrame; - normalizedHeaderFrame.origin.x += section.frame.origin.x; - normalizedHeaderFrame.origin.y += section.frame.origin.y; - if (!CGRectIsEmpty(normalizedHeaderFrame) && CGRectIntersectsRect(normalizedHeaderFrame, rect)) { - PSTCollectionViewLayoutAttributes *layoutAttributes = [[self.class layoutAttributesClass] layoutAttributesForSupplementaryViewOfKind:PSTCollectionElementKindSectionHeader withIndexPath:[NSIndexPath indexPathForItem:0 inSection:sectionIndex]]; - layoutAttributes.frame = normalizedHeaderFrame; - [layoutAttributesArray addObject:layoutAttributes]; - } - - NSArray *itemRects = rectCache[@(sectionIndex)]; - if (!itemRects && section.fixedItemSize && section.rows.count) { - itemRects = [(section.rows)[0] itemRects]; - if (itemRects) rectCache[@(sectionIndex)] = itemRects; - } - - for (PSTGridLayoutRow *row in section.rows) { - CGRect normalizedRowFrame = row.rowFrame; - - normalizedRowFrame.origin.x += section.frame.origin.x; - normalizedRowFrame.origin.y += section.frame.origin.y; - - if (CGRectIntersectsRect(normalizedRowFrame, rect)) { - // TODO be more fine-grained for items - - for (NSInteger itemIndex = 0; itemIndex < row.itemCount; itemIndex++) { - PSTCollectionViewLayoutAttributes *layoutAttributes; - NSUInteger sectionItemIndex; - CGRect itemFrame; - if (row.fixedItemSize) { - itemFrame = [itemRects[itemIndex] CGRectValue]; - sectionItemIndex = row.index * section.itemsByRowCount + itemIndex; - }else { - PSTGridLayoutItem *item = row.items[itemIndex]; - sectionItemIndex = [section.items indexOfObjectIdenticalTo:item]; - itemFrame = item.itemFrame; - } - - CGRect normalisedItemFrame = CGRectMake(normalizedRowFrame.origin.x + itemFrame.origin.x, normalizedRowFrame.origin.y + itemFrame.origin.y, itemFrame.size.width, itemFrame.size.height); - - if (CGRectIntersectsRect(normalisedItemFrame, rect)) { - layoutAttributes = [[self.class layoutAttributesClass] layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForItem:sectionItemIndex inSection:sectionIndex]]; - layoutAttributes.frame = normalisedItemFrame; - [layoutAttributesArray addObject:layoutAttributes]; - } - } - } - } - - CGRect normalizedFooterFrame = section.footerFrame; - normalizedFooterFrame.origin.x += section.frame.origin.x; - normalizedFooterFrame.origin.y += section.frame.origin.y; - if (!CGRectIsEmpty(normalizedFooterFrame) && CGRectIntersectsRect(normalizedFooterFrame, rect)) { - PSTCollectionViewLayoutAttributes *layoutAttributes = [[self.class layoutAttributesClass] layoutAttributesForSupplementaryViewOfKind:PSTCollectionElementKindSectionFooter withIndexPath:[NSIndexPath indexPathForItem:0 inSection:sectionIndex]]; - layoutAttributes.frame = normalizedFooterFrame; - [layoutAttributesArray addObject:layoutAttributes]; - } - } - } - return layoutAttributesArray; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { - if (!_data) [self prepareLayout]; - - PSTGridLayoutSection *section = _data.sections[indexPath.section]; - PSTGridLayoutRow *row = nil; - CGRect itemFrame = CGRectZero; - - if (section.fixedItemSize && section.itemsByRowCount > 0 && indexPath.item / section.itemsByRowCount < (NSInteger)section.rows.count) { - row = section.rows[indexPath.item / section.itemsByRowCount]; - NSUInteger itemIndex = indexPath.item % section.itemsByRowCount; - NSArray *itemRects = [row itemRects]; - itemFrame = [itemRects[itemIndex] CGRectValue]; - }else if (indexPath.item < (NSInteger)section.items.count) { - PSTGridLayoutItem *item = section.items[indexPath.item]; - row = item.rowObject; - itemFrame = item.itemFrame; - } - - PSTCollectionViewLayoutAttributes *layoutAttributes = [[self.class layoutAttributesClass] layoutAttributesForCellWithIndexPath:indexPath]; - - // calculate item rect - CGRect normalizedRowFrame = row.rowFrame; - normalizedRowFrame.origin.x += section.frame.origin.x; - normalizedRowFrame.origin.y += section.frame.origin.y; - layoutAttributes.frame = CGRectMake(normalizedRowFrame.origin.x + itemFrame.origin.x, normalizedRowFrame.origin.y + itemFrame.origin.y, itemFrame.size.width, itemFrame.size.height); - - return layoutAttributes; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { - if (!_data) [self prepareLayout]; - - NSUInteger sectionIndex = indexPath.section; - PSTCollectionViewLayoutAttributes *layoutAttributes = nil; - - if (sectionIndex < _data.sections.count) { - PSTGridLayoutSection *section = _data.sections[sectionIndex]; - - CGRect normalizedFrame = CGRectZero; - if ([kind isEqualToString:PSTCollectionElementKindSectionHeader]) { - normalizedFrame = section.headerFrame; - } - else if ([kind isEqualToString:PSTCollectionElementKindSectionFooter]) { - normalizedFrame = section.footerFrame; - } - - if (!CGRectIsEmpty(normalizedFrame)) { - normalizedFrame.origin.x += section.frame.origin.x; - normalizedFrame.origin.y += section.frame.origin.y; - - layoutAttributes = [[self.class layoutAttributesClass] layoutAttributesForSupplementaryViewOfKind:kind withIndexPath:[NSIndexPath indexPathForItem:0 inSection:sectionIndex]]; - layoutAttributes.frame = normalizedFrame; - } - } - return layoutAttributes; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForDecorationViewWithReuseIdentifier:(NSString *)identifier atIndexPath:(NSIndexPath *)indexPath { - return nil; -} - -- (CGSize)collectionViewContentSize { - if (!_data) [self prepareLayout]; - - return _data.contentSize; -} - -- (void)setSectionInset:(UIEdgeInsets)sectionInset { - if (!UIEdgeInsetsEqualToEdgeInsets(sectionInset, _sectionInset)) { - _sectionInset = sectionInset; - [self invalidateLayout]; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Invalidating the Layout - -- (void)invalidateLayout { - [super invalidateLayout]; - objc_setAssociatedObject(self, &kPSTCachedItemRectsKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - _data = nil; -} - -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { - // we need to recalculate on width changes - if ((_visibleBounds.size.width != newBounds.size.width && self.scrollDirection == PSTCollectionViewScrollDirectionVertical) || (_visibleBounds.size.height != newBounds.size.height && self.scrollDirection == PSTCollectionViewScrollDirectionHorizontal)) { - _visibleBounds = self.collectionView.bounds; - return YES; - } - return NO; -} - -// return a point at which to rest after scrolling - for layouts that want snap-to-point scrolling behavior -- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity { - return proposedContentOffset; -} - -- (void)prepareLayout { - // custom ivars - objc_setAssociatedObject(self, &kPSTCachedItemRectsKey, [NSMutableDictionary dictionary], OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - _data = [PSTGridLayoutInfo new]; // clear old layout data - _data.horizontal = self.scrollDirection == PSTCollectionViewScrollDirectionHorizontal; - _visibleBounds = self.collectionView.bounds; - CGSize collectionViewSize = _visibleBounds.size; - _data.dimension = _data.horizontal ? collectionViewSize.height : collectionViewSize.width; - _data.rowAlignmentOptions = _rowAlignmentsOptionsDictionary; - [self fetchItemsInfo]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private - -- (void)fetchItemsInfo { - [self getSizingInfos]; - [self updateItemsLayout]; -} - -// get size of all items (if delegate is implemented) -- (void)getSizingInfos { - NSAssert(_data.sections.count == 0, @"Grid layout is already populated?"); - - id<PSTCollectionViewDelegateFlowLayout> flowDataSource = (id<PSTCollectionViewDelegateFlowLayout>)self.collectionView.delegate; - - BOOL implementsSizeDelegate = [flowDataSource respondsToSelector:@selector(collectionView:layout:sizeForItemAtIndexPath:)]; - BOOL implementsHeaderReferenceDelegate = [flowDataSource respondsToSelector:@selector(collectionView:layout:referenceSizeForHeaderInSection:)]; - BOOL implementsFooterReferenceDelegate = [flowDataSource respondsToSelector:@selector(collectionView:layout:referenceSizeForFooterInSection:)]; - - NSUInteger numberOfSections = [self.collectionView numberOfSections]; - for (NSUInteger section = 0; section < numberOfSections; section++) { - PSTGridLayoutSection *layoutSection = [_data addSection]; - layoutSection.verticalInterstice = _data.horizontal ? self.minimumInteritemSpacing : self.minimumLineSpacing; - layoutSection.horizontalInterstice = !_data.horizontal ? self.minimumInteritemSpacing : self.minimumLineSpacing; - - if ([flowDataSource respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)]) { - layoutSection.sectionMargins = [flowDataSource collectionView:self.collectionView layout:self insetForSectionAtIndex:section]; - }else { - layoutSection.sectionMargins = self.sectionInset; - } - - if ([flowDataSource respondsToSelector:@selector(collectionView:layout:minimumLineSpacingForSectionAtIndex:)]) { - CGFloat minimumLineSpacing = [flowDataSource collectionView:self.collectionView layout:self minimumLineSpacingForSectionAtIndex:section]; - if (_data.horizontal) { - layoutSection.horizontalInterstice = minimumLineSpacing; - }else { - layoutSection.verticalInterstice = minimumLineSpacing; - } - } - - if ([flowDataSource respondsToSelector:@selector(collectionView:layout:minimumInteritemSpacingForSectionAtIndex:)]) { - CGFloat minimumInterimSpacing = [flowDataSource collectionView:self.collectionView layout:self minimumInteritemSpacingForSectionAtIndex:section]; - if (_data.horizontal) { - layoutSection.verticalInterstice = minimumInterimSpacing; - }else { - layoutSection.horizontalInterstice = minimumInterimSpacing; - } - } - - CGSize headerReferenceSize; - if (implementsHeaderReferenceDelegate) { - headerReferenceSize = [flowDataSource collectionView:self.collectionView layout:self referenceSizeForHeaderInSection:section]; - }else { - headerReferenceSize = self.headerReferenceSize; - } - layoutSection.headerDimension = _data.horizontal ? headerReferenceSize.width : headerReferenceSize.height; - - CGSize footerReferenceSize; - if (implementsFooterReferenceDelegate) { - footerReferenceSize = [flowDataSource collectionView:self.collectionView layout:self referenceSizeForFooterInSection:section]; - }else { - footerReferenceSize = self.footerReferenceSize; - } - layoutSection.footerDimension = _data.horizontal ? footerReferenceSize.width : footerReferenceSize.height; - - NSUInteger numberOfItems = [self.collectionView numberOfItemsInSection:section]; - - // if delegate implements size delegate, query it for all items - if (implementsSizeDelegate) { - for (NSUInteger item = 0; item < numberOfItems; item++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section]; - CGSize itemSize = implementsSizeDelegate ? [flowDataSource collectionView:self.collectionView layout:self sizeForItemAtIndexPath:indexPath] : self.itemSize; - - PSTGridLayoutItem *layoutItem = [layoutSection addItem]; - layoutItem.itemFrame = (CGRect){.size=itemSize}; - } - // if not, go the fast path - }else { - layoutSection.fixedItemSize = YES; - layoutSection.itemSize = self.itemSize; - layoutSection.itemsCount = numberOfItems; - } - } -} - -- (void)updateItemsLayout { - CGSize contentSize = CGSizeZero; - for (PSTGridLayoutSection *section in _data.sections) { - [section computeLayout]; - - // update section offset to make frame absolute (section only calculates relative) - CGRect sectionFrame = section.frame; - if (_data.horizontal) { - sectionFrame.origin.x += contentSize.width; - contentSize.width += section.frame.size.width + section.frame.origin.x; - contentSize.height = fmax(contentSize.height, sectionFrame.size.height + section.frame.origin.y + section.sectionMargins.top + section.sectionMargins.bottom); - }else { - sectionFrame.origin.y += contentSize.height; - contentSize.height += sectionFrame.size.height + section.frame.origin.y; - contentSize.width = fmax(contentSize.width, sectionFrame.size.width + section.frame.origin.x + section.sectionMargins.left + section.sectionMargins.right); - } - section.frame = sectionFrame; - } - _data.contentSize = contentSize; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h deleted file mode 100644 index ddc91aa..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// PSTCollectionViewItemKey.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewCommon.h" -#import "PSTCollectionViewLayout.h" - -extern NSString *const PSTCollectionElementKindCell; -extern NSString *const PSTCollectionElementKindDecorationView; -@class PSTCollectionViewLayoutAttributes; - -NSString *PSTCollectionViewItemTypeToString(PSTCollectionViewItemType type); // debug helper - -// Used in NSDictionaries -@interface PSTCollectionViewItemKey : NSObject <NSCopying> - -+ (id)collectionItemKeyForLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes; - -+ (id)collectionItemKeyForCellWithIndexPath:(NSIndexPath *)indexPath; - -@property (nonatomic, assign) PSTCollectionViewItemType type; -@property (nonatomic, strong) NSIndexPath *indexPath; -@property (nonatomic, strong) NSString *identifier; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.m deleted file mode 100644 index e9d69f4..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewItemKey.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// PSTCollectionViewItemKey.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewItemKey.h" - -NSString *const PSTCollectionElementKindCell = @"UICollectionElementKindCell"; - -@implementation PSTCollectionViewItemKey - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Static - -+ (id)collectionItemKeyForCellWithIndexPath:(NSIndexPath *)indexPath { - PSTCollectionViewItemKey *key = [self.class new]; - key.indexPath = indexPath; - key.type = PSTCollectionViewItemTypeCell; - key.identifier = PSTCollectionElementKindCell; - return key; -} - -+ (id)collectionItemKeyForLayoutAttributes:(PSTCollectionViewLayoutAttributes *)layoutAttributes { - PSTCollectionViewItemKey *key = [self.class new]; - key.indexPath = layoutAttributes.indexPath; - PSTCollectionViewItemType const itemType = layoutAttributes.representedElementCategory; - key.type = itemType; - key.identifier = layoutAttributes.representedElementKind; - return key; -} - -NSString *PSTCollectionViewItemTypeToString(PSTCollectionViewItemType type) { - switch (type) { - case PSTCollectionViewItemTypeCell: return @"Cell"; - case PSTCollectionViewItemTypeDecorationView: return @"Decoration"; - case PSTCollectionViewItemTypeSupplementaryView: return @"Supplementary"; - default: return @"<INVALID>"; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p Type = %@ Identifier=%@ IndexPath = %@>", NSStringFromClass(self.class), - self, PSTCollectionViewItemTypeToString(self.type), _identifier, self.indexPath]; -} - -- (NSUInteger)hash { - return (([_indexPath hash] + _type) * 31) + [_identifier hash]; -} - -- (BOOL)isEqual:(id)other { - if ([other isKindOfClass:self.class]) { - PSTCollectionViewItemKey *otherKeyItem = (PSTCollectionViewItemKey *)other; - // identifier might be nil? - if (_type == otherKeyItem.type && [_indexPath isEqual:otherKeyItem.indexPath] && ([_identifier isEqualToString:otherKeyItem.identifier] || _identifier == otherKeyItem.identifier)) { - return YES; - } - } - return NO; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - PSTCollectionViewItemKey *itemKey = [self.class new]; - itemKey.indexPath = self.indexPath; - itemKey.type = self.type; - itemKey.identifier = self.identifier; - return itemKey; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h deleted file mode 100644 index 48f7746..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout+Internals.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PSTCollectionViewLayout+Internals.h -// FMPSTCollectionView -// -// Created by Scott Talbot on 27/02/13. -// Copyright (c) 2013 Scott Talbot. All rights reserved. -// - -#import "PSTCollectionViewLayout.h" - - -@interface PSTCollectionViewLayout (Internals) - -@property (nonatomic, copy, readonly) NSDictionary *decorationViewClassDict; -@property (nonatomic, copy, readonly) NSDictionary *decorationViewNibDict; -@property (nonatomic, copy, readonly) NSDictionary *decorationViewExternalObjectsTables; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h deleted file mode 100644 index 3f6f729..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// PSTCollectionViewLayout.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionViewCommon.h" -#import <CoreGraphics/CoreGraphics.h> -#import <QuartzCore/QuartzCore.h> - -typedef NS_ENUM(NSUInteger, PSTCollectionViewItemType) { - PSTCollectionViewItemTypeCell, - PSTCollectionViewItemTypeSupplementaryView, - PSTCollectionViewItemTypeDecorationView -}; - -// The PSTCollectionViewLayout class is provided as an abstract class for subclassing to define custom collection layouts. -// Defining a custom layout is an advanced operation intended for applications with complex needs. -@class PSTCollectionViewLayoutAttributes, PSTCollectionView; - -@interface PSTCollectionViewLayoutAttributes : NSObject <NSCopying> - -@property (nonatomic) CGRect frame; -@property (nonatomic) CGPoint center; -@property (nonatomic) CGSize size; -@property (nonatomic) CATransform3D transform3D; -@property (nonatomic) CGFloat alpha; -@property (nonatomic) NSInteger zIndex; // default is 0 -@property (nonatomic, getter=isHidden) BOOL hidden; // As an optimization, PSTCollectionView might not create a view for items whose hidden attribute is YES -@property (nonatomic, strong) NSIndexPath *indexPath; - -+ (instancetype)layoutAttributesForCellWithIndexPath:(NSIndexPath *)indexPath; - -+ (instancetype)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind withIndexPath:(NSIndexPath *)indexPath; - -+ (instancetype)layoutAttributesForDecorationViewOfKind:(NSString *)kind withIndexPath:(NSIndexPath *)indexPath; - -/* - + (id)layoutAttributesForDecorationViewOfKind:(id)arg1 withIndexPath:(id)arg2; - - (id)initialLayoutAttributesForInsertedDecorationElementOfKind:(id)arg1 atIndexPath:(id)arg2; - - (BOOL)_isEquivalentTo:(id)arg1; - */ -@end - -@interface PSTCollectionViewLayoutAttributes (Private) -@property (nonatomic, readonly) NSString *representedElementKind; -@property (nonatomic, readonly) PSTCollectionViewItemType representedElementCategory; - -- (BOOL)isDecorationView; - -- (BOOL)isSupplementaryView; - -- (BOOL)isCell; -@end - -@interface PSTCollectionViewLayout : NSObject <NSCoding> - -// Methods in this class are meant to be overridden and will be called by its collection view to gather layout information. -// To get the truth on the current state of the collection view, call methods on PSTCollectionView rather than these. -@property (nonatomic, unsafe_unretained, readonly) PSTCollectionView *collectionView; - -// Call -invalidateLayout to indicate that the collection view needs to requery the layout information. -// Subclasses must always call super if they override. -- (void)invalidateLayout; - -/// @name Registering Decoration Views -- (void)registerClass:(Class)viewClass forDecorationViewOfKind:(NSString *)kind; - -- (void)registerNib:(UINib *)nib forDecorationViewOfKind:(NSString *)kind; - -@end - - -@interface PSTCollectionViewLayout (SubclassingHooks) - -+ (Class)layoutAttributesClass; // override this method to provide a custom class to be used when instantiating instances of PSTCollectionViewLayoutAttributes - -// The collection view calls -prepareLayout once at its first layout as the first message to the layout instance. -// The collection view calls -prepareLayout again after layout is invalidated and before requerying the layout information. -// Subclasses should always call super if they override. -- (void)prepareLayout; - -// PSTCollectionView calls these four methods to determine the layout information. -// Implement -layoutAttributesForElementsInRect: to return layout attributes for supplementary or decoration views, or to perform layout in an as-needed-on-screen fashion. -// Additionally, all layout subclasses should implement -layoutAttributesForItemAtIndexPath: to return layout attributes instances on demand for specific index paths. -// If the layout supports any supplementary or decoration view types, it should also implement the respective atIndexPath: methods for those types. -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect; // return an array layout attributes instances for all the views in the given rect -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath; - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForDecorationViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; - -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds; // return YES to cause the collection view to requery the layout for geometry information -- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity; // return a point at which to rest after scrolling - for layouts that want snap-to-point scrolling behavior - -- (CGSize)collectionViewContentSize; // the collection view calls this to update its content size any time it queries new layout information - at least one of the width and height fields must match the respective field of the collection view's bounds - -@end - -@interface PSTCollectionViewLayout (UpdateSupportHooks) - -// This method is called when there is an update with deletes/inserts to the collection view. -// It will be called prior to calling the initial/final layout attribute methods below to give the layout an opportunity to do batch computations for the insertion and deletion layout attributes. -// The updateItems parameter is an array of PSTCollectionViewUpdateItem instances for each element that is moving to a new index path. -- (void)prepareForCollectionViewUpdates:(NSArray *)updateItems; - -// This method is called inside an animation block after all items have been laid out for a collection view update. -// Subclasses can use this opportunity to layout their 'layout-owned' decoration views in response to the update. -- (void)finalizeCollectionViewUpdates; - -// Collection view calls these methods to determine the starting layout for animating in newly inserted views, or the ending layout for animating out deleted views -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath; - -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath; - -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForInsertedSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath; - -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDeletedSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath; - -@end - -@interface PSTCollectionViewLayout (Private) -- (void)setCollectionViewBoundsSize:(CGSize)size; - -- (PSTCollectionReusableView *)decorationViewForCollectionView:(PSTCollectionView *)collectionView withReuseIdentifier:(NSString *)reuseIdentifier indexPath:(NSIndexPath *)indexPath; -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.m deleted file mode 100644 index 65426fb..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewLayout.m +++ /dev/null @@ -1,481 +0,0 @@ -// -// PSTCollectionViewLayout.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionView.h" -#import "PSTCollectionViewItemKey.h" -#import "PSTCollectionViewData.h" - -#import <objc/runtime.h> - -@interface PSTCollectionView () -- (id)currentUpdate; -- (NSDictionary *)visibleViewsDict; -- (PSTCollectionViewData *)collectionViewData; -- (CGRect)visibleBoundRects; // visibleBounds is flagged as private API (wtf) -@end - -@interface PSTCollectionReusableView () -- (void)setIndexPath:(NSIndexPath *)indexPath; -@end - -@interface PSTCollectionViewUpdateItem () -- (BOOL)isSectionOperation; -@end - -@interface PSTCollectionViewLayoutAttributes () { - struct { - unsigned int isCellKind:1; - unsigned int isDecorationView:1; - unsigned int isHidden:1; - }_layoutFlags; - char filler[20]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} -@property (nonatomic) PSTCollectionViewItemType elementCategory; -@property (nonatomic, copy) NSString *elementKind; -@end - -@interface PSTCollectionViewUpdateItem () -- (NSIndexPath *)indexPath; -@end - -@implementation PSTCollectionViewLayoutAttributes - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Static - -+ (instancetype)layoutAttributesForCellWithIndexPath:(NSIndexPath *)indexPath { - PSTCollectionViewLayoutAttributes *attributes = [self new]; - attributes.elementKind = PSTCollectionElementKindCell; - attributes.elementCategory = PSTCollectionViewItemTypeCell; - attributes.indexPath = indexPath; - return attributes; -} - -+ (instancetype)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind withIndexPath:(NSIndexPath *)indexPath { - PSTCollectionViewLayoutAttributes *attributes = [self new]; - attributes.elementCategory = PSTCollectionViewItemTypeSupplementaryView; - attributes.elementKind = elementKind; - attributes.indexPath = indexPath; - return attributes; -} - -+ (instancetype)layoutAttributesForDecorationViewOfKind:(NSString *)elementKind withIndexPath:(NSIndexPath *)indexPath { - PSTCollectionViewLayoutAttributes *attributes = [self new]; - attributes.elementCategory = PSTCollectionViewItemTypeDecorationView; - attributes.elementKind = elementKind; - attributes.indexPath = indexPath; - return attributes; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - _alpha = 1.f; - _transform3D = CATransform3DIdentity; - } - return self; -} - -- (NSUInteger)hash { - return ([_elementKind hash] * 31) + [_indexPath hash]; -} - -- (BOOL)isEqual:(id)other { - if ([other isKindOfClass:self.class]) { - PSTCollectionViewLayoutAttributes *otherLayoutAttributes = (PSTCollectionViewLayoutAttributes *)other; - if (_elementCategory == otherLayoutAttributes.elementCategory && [_elementKind isEqual:otherLayoutAttributes.elementKind] && [_indexPath isEqual:otherLayoutAttributes.indexPath]) { - return YES; - } - } - return NO; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p frame:%@ indexPath:%@ elementKind:%@>", NSStringFromClass(self.class), self, NSStringFromCGRect(self.frame), self.indexPath, self.elementKind]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (PSTCollectionViewItemType)representedElementCategory { - return _elementCategory; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private - -- (NSString *)representedElementKind { - return self.elementKind; -} - -- (BOOL)isDecorationView { - return self.representedElementCategory == PSTCollectionViewItemTypeDecorationView; -} - -- (BOOL)isSupplementaryView { - return self.representedElementCategory == PSTCollectionViewItemTypeSupplementaryView; -} - -- (BOOL)isCell { - return self.representedElementCategory == PSTCollectionViewItemTypeCell; -} - -- (void) updateFrame { - _frame = (CGRect){{_center.x - _size.width / 2, _center.y - _size.height / 2}, _size}; -} - -- (void)setSize:(CGSize)size { - _size = size; - [self updateFrame]; -} - -- (void)setCenter:(CGPoint)center { - _center = center; - [self updateFrame]; -} - -- (void)setFrame:(CGRect)frame { - _frame = frame; - _size = _frame.size; - _center = (CGPoint){CGRectGetMidX(_frame), CGRectGetMidY(_frame)}; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - PSTCollectionViewLayoutAttributes *layoutAttributes = [self.class new]; - layoutAttributes.indexPath = self.indexPath; - layoutAttributes.elementKind = self.elementKind; - layoutAttributes.elementCategory = self.elementCategory; - layoutAttributes.frame = self.frame; - layoutAttributes.center = self.center; - layoutAttributes.size = self.size; - layoutAttributes.transform3D = self.transform3D; - layoutAttributes.alpha = self.alpha; - layoutAttributes.zIndex = self.zIndex; - layoutAttributes.hidden = self.isHidden; - return layoutAttributes; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollection/UICollection interoperability - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - NSMethodSignature *signature = [super methodSignatureForSelector:selector]; - if (!signature) { - NSString *selString = NSStringFromSelector(selector); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - signature = [super methodSignatureForSelector:cleanedSelector]; - } - } - return signature; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - NSString *selString = NSStringFromSelector([invocation selector]); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - if ([self respondsToSelector:cleanedSelector]) { - invocation.selector = cleanedSelector; - [invocation invokeWithTarget:self]; - } - }else { - [super forwardInvocation:invocation]; - } -} - -@end - - -@interface PSTCollectionViewLayout () { - __unsafe_unretained PSTCollectionView *_collectionView; - CGSize _collectionViewBoundsSize; - NSMutableDictionary *_initialAnimationLayoutAttributesDict; - NSMutableDictionary *_finalAnimationLayoutAttributesDict; - NSMutableIndexSet *_deletedSectionsSet; - NSMutableIndexSet *_insertedSectionsSet; - NSMutableDictionary *_decorationViewClassDict; - NSMutableDictionary *_decorationViewNibDict; - NSMutableDictionary *_decorationViewExternalObjectsTables; - char filler[200]; // [HACK] Our class needs to be larger than Apple's class for the superclass change to work. -} -@property (nonatomic, unsafe_unretained) PSTCollectionView *collectionView; -@property (nonatomic, copy, readonly) NSDictionary *decorationViewClassDict; -@property (nonatomic, copy, readonly) NSDictionary *decorationViewNibDict; -@property (nonatomic, copy, readonly) NSDictionary *decorationViewExternalObjectsTables; -@end - -@implementation PSTCollectionViewLayout -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - _decorationViewClassDict = [NSMutableDictionary new]; - _decorationViewNibDict = [NSMutableDictionary new]; - _decorationViewExternalObjectsTables = [NSMutableDictionary new]; - _initialAnimationLayoutAttributesDict = [NSMutableDictionary new]; - _finalAnimationLayoutAttributesDict = [NSMutableDictionary new]; - _insertedSectionsSet = [NSMutableIndexSet new]; - _deletedSectionsSet = [NSMutableIndexSet new]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; -} - -- (void)setCollectionView:(PSTCollectionView *)collectionView { - if (collectionView != _collectionView) { - _collectionView = collectionView; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Invalidating the Layout - -- (void)invalidateLayout { - [[_collectionView collectionViewData] invalidate]; - [_collectionView setNeedsLayout]; -} - -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { - // not sure about his.. - if ((self.collectionView.bounds.size.width != newBounds.size.width) || (self.collectionView.bounds.size.height != newBounds.size.height)) { - return YES; - } - return NO; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Providing Layout Attributes - -+ (Class)layoutAttributesClass { - return PSTCollectionViewLayoutAttributes.class; -} - -- (void)prepareLayout { -} - -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { - return nil; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { - return nil; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { - return nil; -} - -- (PSTCollectionViewLayoutAttributes *)layoutAttributesForDecorationViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { - return nil; -} - -// return a point at which to rest after scrolling - for layouts that want snap-to-point scrolling behavior -- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity { - return proposedContentOffset; -} - -- (CGSize)collectionViewContentSize { - return CGSizeZero; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Responding to Collection View Updates - -- (void)prepareForCollectionViewUpdates:(NSArray *)updateItems { - NSDictionary *update = [_collectionView currentUpdate]; - - for (PSTCollectionReusableView *view in [[_collectionView visibleViewsDict] objectEnumerator]) { - PSTCollectionViewLayoutAttributes *attr = [view.layoutAttributes copy]; - if (attr) { - if (attr.isCell) { - NSInteger index = [update[@"oldModel"] globalIndexForItemAtIndexPath:[attr indexPath]]; - if (index != NSNotFound) { - [attr setIndexPath:[attr indexPath]]; - } - } - _initialAnimationLayoutAttributesDict[[PSTCollectionViewItemKey collectionItemKeyForLayoutAttributes:attr]] = attr; - } - } - - PSTCollectionViewData *collectionViewData = [_collectionView collectionViewData]; - - CGRect bounds = [_collectionView visibleBoundRects]; - - for (PSTCollectionViewLayoutAttributes *attr in [collectionViewData layoutAttributesForElementsInRect:bounds]) { - if (attr.isCell) { - NSInteger index = [collectionViewData globalIndexForItemAtIndexPath:attr.indexPath]; - - index = [update[@"newToOldIndexMap"][index] intValue]; - if (index != NSNotFound) { - PSTCollectionViewLayoutAttributes *finalAttrs = [attr copy]; - [finalAttrs setIndexPath:[update[@"oldModel"] indexPathForItemAtGlobalIndex:index]]; - [finalAttrs setAlpha:0]; - _finalAnimationLayoutAttributesDict[[PSTCollectionViewItemKey collectionItemKeyForLayoutAttributes:finalAttrs]] = finalAttrs; - } - } - } - - for (PSTCollectionViewUpdateItem *updateItem in updateItems) { - PSTCollectionUpdateAction action = updateItem.updateAction; - - if ([updateItem isSectionOperation]) { - if (action == PSTCollectionUpdateActionReload) { - [_deletedSectionsSet addIndex:[[updateItem indexPathBeforeUpdate] section]]; - [_insertedSectionsSet addIndex:[updateItem indexPathAfterUpdate].section]; - } - else { - NSMutableIndexSet *indexSet = action == PSTCollectionUpdateActionInsert ? _insertedSectionsSet : _deletedSectionsSet; - [indexSet addIndex:[updateItem indexPath].section]; - } - } - else { - if (action == PSTCollectionUpdateActionDelete) { - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath: - [updateItem indexPathBeforeUpdate]]; - - PSTCollectionViewLayoutAttributes *attrs = [_finalAnimationLayoutAttributesDict[key] copy]; - - if (attrs) { - [attrs setAlpha:0]; - _finalAnimationLayoutAttributesDict[key] = attrs; - } - } - else if (action == PSTCollectionUpdateActionReload || action == PSTCollectionUpdateActionInsert) { - PSTCollectionViewItemKey *key = [PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath: - [updateItem indexPathAfterUpdate]]; - PSTCollectionViewLayoutAttributes *attrs = [_initialAnimationLayoutAttributesDict[key] copy]; - - if (attrs) { - [attrs setAlpha:0]; - _initialAnimationLayoutAttributesDict[key] = attrs; - } - } - } - } -} - -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { - PSTCollectionViewLayoutAttributes *attrs = _initialAnimationLayoutAttributesDict[[PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:itemIndexPath]]; - - if ([_insertedSectionsSet containsIndex:[itemIndexPath section]]) { - attrs = [attrs copy]; - [attrs setAlpha:0]; - } - return attrs; -} - -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { - PSTCollectionViewLayoutAttributes *attrs = _finalAnimationLayoutAttributesDict[[PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:itemIndexPath]]; - - if ([_deletedSectionsSet containsIndex:[itemIndexPath section]]) { - attrs = [attrs copy]; - [attrs setAlpha:0]; - } - return attrs; - -} - -- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForInsertedSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath { - PSTCollectionViewLayoutAttributes *attrs = _initialAnimationLayoutAttributesDict[[PSTCollectionViewItemKey collectionItemKeyForCellWithIndexPath:elementIndexPath]]; - - if ([_insertedSectionsSet containsIndex:[elementIndexPath section]]) { - attrs = [attrs copy]; - [attrs setAlpha:0]; - } - return attrs; - -} - -- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDeletedSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath { - return nil; -} - -- (void)finalizeCollectionViewUpdates { - [_initialAnimationLayoutAttributesDict removeAllObjects]; - [_finalAnimationLayoutAttributesDict removeAllObjects]; - [_deletedSectionsSet removeAllIndexes]; - [_insertedSectionsSet removeAllIndexes]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Registering Decoration Views - -- (void)registerClass:(Class)viewClass forDecorationViewOfKind:(NSString *)kind { - _decorationViewClassDict[kind] = viewClass; -} - -- (void)registerNib:(UINib *)nib forDecorationViewOfKind:(NSString *)kind { - _decorationViewNibDict[kind] = nib; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private - -- (void)setCollectionViewBoundsSize:(CGSize)size { - _collectionViewBoundsSize = size; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSCoding - -- (id)initWithCoder:(NSCoder *)coder { - if ((self = [self init])) { - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder {} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - PSTCollection/UICollection interoperability - -#ifdef kPSUIInteroperabilityEnabled -#import <objc/runtime.h> -#import <objc/message.h> -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - NSMethodSignature *sig = [super methodSignatureForSelector:selector]; - if(!sig) { - NSString *selString = NSStringFromSelector(selector); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - sig = [super methodSignatureForSelector:cleanedSelector]; - } - } - return sig; -} - -- (void)forwardInvocation:(NSInvocation *)inv { - NSString *selString = NSStringFromSelector([inv selector]); - if ([selString hasPrefix:@"_"]) { - SEL cleanedSelector = NSSelectorFromString([selString substringFromIndex:1]); - if ([self respondsToSelector:cleanedSelector]) { - // dynamically add method for faster resolving - Method newMethod = class_getInstanceMethod(self.class, [inv selector]); - IMP underscoreIMP = imp_implementationWithBlock(^(id _self) { - return objc_msgSend(_self, cleanedSelector); - }); - class_addMethod(self.class, [inv selector], underscoreIMP, method_getTypeEncoding(newMethod)); - // invoke now - inv.selector = cleanedSelector; - [inv invokeWithTarget:self]; - } - }else { - [super forwardInvocation:inv]; - } -} -#endif - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h deleted file mode 100644 index d74c7cf..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// PSTCollectionViewUpdateItem.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// Contributed by Sergey Gavrilyuk. -// - -#import <Foundation/Foundation.h> - -typedef NS_ENUM(NSInteger, PSTCollectionUpdateAction) { - PSTCollectionUpdateActionInsert, - PSTCollectionUpdateActionDelete, - PSTCollectionUpdateActionReload, - PSTCollectionUpdateActionMove, - PSTCollectionUpdateActionNone -}; - -@interface PSTCollectionViewUpdateItem : NSObject - -@property (nonatomic, readonly, strong) NSIndexPath *indexPathBeforeUpdate; // nil for PSTCollectionUpdateActionInsert -@property (nonatomic, readonly, strong) NSIndexPath *indexPathAfterUpdate; // nil for PSTCollectionUpdateActionDelete -@property (nonatomic, readonly, assign) PSTCollectionUpdateAction updateAction; - - -- (id)initWithInitialIndexPath:(NSIndexPath *)arg1 - finalIndexPath:(NSIndexPath *)arg2 - updateAction:(PSTCollectionUpdateAction)arg3; - -- (id)initWithAction:(PSTCollectionUpdateAction)arg1 - forIndexPath:(NSIndexPath *)indexPath; - -- (id)initWithOldIndexPath:(NSIndexPath *)arg1 newIndexPath:(NSIndexPath *)arg2; - -- (PSTCollectionUpdateAction)updateAction; - -- (NSComparisonResult)compareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem; - -- (NSComparisonResult)inverseCompareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.m deleted file mode 100644 index fe019db..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTCollectionViewUpdateItem.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// PSTCollectionViewUpdateItem.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// Contributed by Sergey Gavrilyuk. -// - -#import "PSTCollectionViewUpdateItem.h" -#import "NSIndexPath+PSTCollectionViewAdditions.h" - -@interface PSTCollectionViewUpdateItem () { - NSIndexPath *_initialIndexPath; - NSIndexPath *_finalIndexPath; - PSTCollectionUpdateAction _updateAction; - id _gap; -} -@end - -@implementation PSTCollectionViewUpdateItem - -@synthesize updateAction = _updateAction; -@synthesize indexPathBeforeUpdate = _initialIndexPath; -@synthesize indexPathAfterUpdate = _finalIndexPath; - -- (id)initWithInitialIndexPath:(NSIndexPath *)initialIndexPath finalIndexPath:(NSIndexPath *)finalIndexPath updateAction:(PSTCollectionUpdateAction)updateAction { - if ((self = [super init])) { - _initialIndexPath = initialIndexPath; - _finalIndexPath = finalIndexPath; - _updateAction = updateAction; - } - return self; -} - -- (id)initWithAction:(PSTCollectionUpdateAction)updateAction forIndexPath:(NSIndexPath *)indexPath { - if (updateAction == PSTCollectionUpdateActionInsert) - return [self initWithInitialIndexPath:nil finalIndexPath:indexPath updateAction:updateAction]; - else if (updateAction == PSTCollectionUpdateActionDelete) - return [self initWithInitialIndexPath:indexPath finalIndexPath:nil updateAction:updateAction]; - else if (updateAction == PSTCollectionUpdateActionReload) - return [self initWithInitialIndexPath:indexPath finalIndexPath:indexPath updateAction:updateAction]; - - return nil; -} - -- (id)initWithOldIndexPath:(NSIndexPath *)oldIndexPath newIndexPath:(NSIndexPath *)newIndexPath { - return [self initWithInitialIndexPath:oldIndexPath finalIndexPath:newIndexPath updateAction:PSTCollectionUpdateActionMove]; -} - -- (NSString *)description { - NSString *action = nil; - switch (_updateAction) { - case PSTCollectionUpdateActionInsert: action = @"insert"; break; - case PSTCollectionUpdateActionDelete: action = @"delete"; break; - case PSTCollectionUpdateActionMove: action = @"move"; break; - case PSTCollectionUpdateActionReload: action = @"reload"; break; - default: break; - } - - return [NSString stringWithFormat:@"Index path before update (%@) index path after update (%@) action (%@).", _initialIndexPath, _finalIndexPath, action]; -} - -- (void)setNewIndexPath:(NSIndexPath *)indexPath { - _finalIndexPath = indexPath; -} - -- (void)setGap:(id)gap { - _gap = gap; -} - -- (BOOL)isSectionOperation { - return (_initialIndexPath.item == NSNotFound || _finalIndexPath.item == NSNotFound); -} - -- (NSIndexPath *)newIndexPath { - return _finalIndexPath; -} - -- (id)gap { - return _gap; -} - -- (PSTCollectionUpdateAction)action { - return _updateAction; -} - -- (id)indexPath { - //TODO: check this - return _initialIndexPath; -} - -- (NSComparisonResult)compareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem { - NSComparisonResult result = NSOrderedSame; - NSIndexPath *selfIndexPath = nil; - NSIndexPath *otherIndexPath = nil; - - switch (_updateAction) { - case PSTCollectionUpdateActionInsert: - selfIndexPath = _finalIndexPath; - otherIndexPath = [otherItem newIndexPath]; - break; - case PSTCollectionUpdateActionDelete: - selfIndexPath = _initialIndexPath; - otherIndexPath = [otherItem indexPath]; - default: break; - } - - if (self.isSectionOperation) result = [@(selfIndexPath.section) compare:@(otherIndexPath.section)]; - else result = [selfIndexPath compare:otherIndexPath]; - return result; -} - -- (NSComparisonResult)inverseCompareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem { - return (NSComparisonResult)([self compareIndexPaths:otherItem] * -1); -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h deleted file mode 100644 index c3f215f..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// PSTGridLayoutInfo.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@class PSTGridLayoutSection; - -/* - Every PSTCollectionViewLayout has a PSTGridLayoutInfo attached. - Is used extensively in PSTCollectionViewFlowLayout. - */ -@interface PSTGridLayoutInfo : NSObject - -@property (nonatomic, strong, readonly) NSArray *sections; -@property (nonatomic, strong) NSDictionary *rowAlignmentOptions; -@property (nonatomic, assign) BOOL usesFloatingHeaderFooter; - -// Vertical/horizontal dimension (depending on horizontal) -// Used to create row objects -@property (nonatomic, assign) CGFloat dimension; - -@property (nonatomic, assign) BOOL horizontal; -@property (nonatomic, assign) BOOL leftToRight; -@property (nonatomic, assign) CGSize contentSize; - -// Frame for specific PSTGridLayoutItem. -- (CGRect)frameForItemAtIndexPath:(NSIndexPath *)indexPath; - -// Add new section. Invalidates layout. -- (PSTGridLayoutSection *)addSection; - -// forces the layout to recompute on next access -// TODO; what's the parameter for? -- (void)invalidate:(BOOL)arg; - -// Make a copy of the current state. -- (PSTGridLayoutInfo *)snapshot; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.m deleted file mode 100644 index c4c2746..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutInfo.m +++ /dev/null @@ -1,76 +0,0 @@ -// -// PSTGridLayoutInfo.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTGridLayoutInfo.h" -#import "PSTGridLayoutSection.h" -#import "PSTGridLayoutItem.h" - -@interface PSTGridLayoutInfo () { - NSMutableArray *_sections; - CGRect _visibleBounds; - CGSize _layoutSize; - BOOL _isValid; -} -@property (nonatomic, strong) NSMutableArray *sections; -@end - -@implementation PSTGridLayoutInfo - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - _sections = [NSMutableArray new]; - } - return self; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p dimension:%.1f horizontal:%d contentSize:%@ sections:%@>", NSStringFromClass(self.class), self, self.dimension, self.horizontal, NSStringFromCGSize(self.contentSize), self.sections]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (PSTGridLayoutInfo *)snapshot { - PSTGridLayoutInfo *layoutInfo = [self.class new]; - layoutInfo.sections = self.sections; - layoutInfo.rowAlignmentOptions = self.rowAlignmentOptions; - layoutInfo.usesFloatingHeaderFooter = self.usesFloatingHeaderFooter; - layoutInfo.dimension = self.dimension; - layoutInfo.horizontal = self.horizontal; - layoutInfo.leftToRight = self.leftToRight; - layoutInfo.contentSize = self.contentSize; - return layoutInfo; -} - -- (CGRect)frameForItemAtIndexPath:(NSIndexPath *)indexPath { - PSTGridLayoutSection *section = self.sections[indexPath.section]; - CGRect itemFrame; - if (section.fixedItemSize) { - itemFrame = (CGRect){.size=section.itemSize}; - }else { - itemFrame = [section.items[indexPath.item] itemFrame]; - } - return itemFrame; -} - -- (id)addSection { - PSTGridLayoutSection *section = [PSTGridLayoutSection new]; - section.rowAlignmentOptions = self.rowAlignmentOptions; - section.layoutInfo = self; - [_sections addObject:section]; - [self invalidate:NO]; - return section; -} - -- (void)invalidate:(BOOL)arg { - _isValid = NO; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h deleted file mode 100644 index 380f1a9..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// PSTGridLayoutItem.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@class PSTGridLayoutSection, PSTGridLayoutRow; - -// Represents a single grid item; only created for non-uniform-sized grids. -@interface PSTGridLayoutItem : NSObject - -@property (nonatomic, unsafe_unretained) PSTGridLayoutSection *section; -@property (nonatomic, unsafe_unretained) PSTGridLayoutRow *rowObject; -@property (nonatomic, assign) CGRect itemFrame; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.m deleted file mode 100644 index 69cb63b..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutItem.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// PSTGridLayoutItem.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTGridLayoutItem.h" - -@implementation PSTGridLayoutItem - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p itemFrame:%@>", NSStringFromClass(self.class), self, NSStringFromCGRect(self.itemFrame)]; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h deleted file mode 100644 index 613db1e..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// PSTGridLayoutRow.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@class PSTGridLayoutSection, PSTGridLayoutItem; - -@interface PSTGridLayoutRow : NSObject - -@property (nonatomic, unsafe_unretained) PSTGridLayoutSection *section; -@property (nonatomic, strong, readonly) NSArray *items; -@property (nonatomic, assign) CGSize rowSize; -@property (nonatomic, assign) CGRect rowFrame; -@property (nonatomic, assign) NSInteger index; -@property (nonatomic, assign) BOOL complete; -@property (nonatomic, assign) BOOL fixedItemSize; - -// @steipete addition for row-fastPath -@property (nonatomic, assign) NSInteger itemCount; - -//- (PSTGridLayoutRow *)copyFromSection:(PSTGridLayoutSection *)section; // ??? - -// Add new item to items array. -- (void)addItem:(PSTGridLayoutItem *)item; - -// Layout current row (if invalid) -- (void)layoutRow; - -// @steipete: Helper to save code in PSTCollectionViewFlowLayout. -// Returns the item rects when fixedItemSize is enabled. -- (NSArray *)itemRects; - -// Set current row frame invalid. -- (void)invalidate; - -// Copy a snapshot of the current row data -- (PSTGridLayoutRow *)snapshot; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.m deleted file mode 100644 index ced4aab..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutRow.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// PSTGridLayoutRow.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTCollectionView.h" -#import "PSTGridLayoutRow.h" -#import "PSTGridLayoutSection.h" -#import "PSTGridLayoutItem.h" -#import "PSTGridLayoutInfo.h" - -@interface PSTGridLayoutRow () { - NSMutableArray *_items; - BOOL _isValid; - int _verticalAlignement; - int _horizontalAlignement; -} -@property (nonatomic, strong) NSArray *items; -@end - -@implementation PSTGridLayoutRow - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - _items = [NSMutableArray new]; - } - return self; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p frame:%@ index:%ld items:%@>", NSStringFromClass(self.class), self, NSStringFromCGRect(self.rowFrame), (long)self.index, self.items]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)invalidate { - _isValid = NO; - _rowSize = CGSizeZero; - _rowFrame = CGRectZero; -} - -- (NSArray *)itemRects { - return [self layoutRowAndGenerateRectArray:YES]; -} - -- (void)layoutRow { - [self layoutRowAndGenerateRectArray:NO]; -} - -- (NSArray *)layoutRowAndGenerateRectArray:(BOOL)generateRectArray { - NSMutableArray *rects = generateRectArray ? [NSMutableArray array] : nil; - if (!_isValid || generateRectArray) { - // properties for aligning - BOOL isHorizontal = self.section.layoutInfo.horizontal; - BOOL isLastRow = self.section.indexOfImcompleteRow == self.index; - PSTFlowLayoutHorizontalAlignment horizontalAlignment = [self.section.rowAlignmentOptions[isLastRow ? PSTFlowLayoutLastRowHorizontalAlignmentKey : PSTFlowLayoutCommonRowHorizontalAlignmentKey] integerValue]; - - // calculate space that's left over if we would align it from left to right. - CGFloat leftOverSpace = self.section.layoutInfo.dimension; - if (isHorizontal) { - leftOverSpace -= self.section.sectionMargins.top + self.section.sectionMargins.bottom; - }else { - leftOverSpace -= self.section.sectionMargins.left + self.section.sectionMargins.right; - } - - // calculate the space that we have left after counting all items. - // UICollectionView is smart and lays out items like they would have been placed on a full row - // So we need to calculate the "usedItemCount" with using the last item as a reference size. - // This allows us to correctly justify-place the items in the grid. - NSUInteger usedItemCount = 0; - NSInteger itemIndex = 0; - CGFloat spacing = isHorizontal ? self.section.verticalInterstice : self.section.horizontalInterstice; - // the last row should justify as if it is filled with more (invisible) items so that the whole - // UICollectionView feels more like a grid than a random line of blocks - while (itemIndex < self.itemCount || isLastRow) { - CGFloat nextItemSize; - // first we need to find the size (width/height) of the next item to fit - if (!self.fixedItemSize) { - PSTGridLayoutItem *item = self.items[MIN(itemIndex, self.itemCount - 1)]; - nextItemSize = isHorizontal ? item.itemFrame.size.height : item.itemFrame.size.width; - }else { - nextItemSize = isHorizontal ? self.section.itemSize.height : self.section.itemSize.width; - } - - // the first item does not add a separator spacing, - // every one afterwards in the same row will need this spacing constant - if (itemIndex > 0) { - nextItemSize += spacing; - } - - // check to see if we can at least fit an item (+separator if necessary) - if (leftOverSpace < nextItemSize) { - break; - } - - // we need to maintain the leftover space after the maximum amount of items have - // occupied, so we know how to adjust equal spacing among all the items in a row - leftOverSpace -= nextItemSize; - - itemIndex++; - usedItemCount = itemIndex; - } - - // push everything to the right if right-aligning and divide in half for centered - // currently there is no public API supporting this behavior - CGPoint itemOffset = CGPointZero; - if (horizontalAlignment == PSTFlowLayoutHorizontalAlignmentRight) { - itemOffset.x += leftOverSpace; - }else if (horizontalAlignment == PSTFlowLayoutHorizontalAlignmentCentered || - (horizontalAlignment == PSTFlowLayoutHorizontalAlignmentJustify && usedItemCount == 1)) { - // Special case one item row to split leftover space in half - itemOffset.x += leftOverSpace / 2; - } - - // calculate the justified spacing among all items in a row if we are using - // the default PSTFlowLayoutHorizontalAlignmentJustify layout - CGFloat interSpacing = usedItemCount <= 1 ? 0 : leftOverSpace / (CGFloat)(usedItemCount - 1); - - // calculate row frame as union of all items - CGRect frame = CGRectZero; - CGRect itemFrame = (CGRect){.size=self.section.itemSize}; - for (itemIndex = 0; itemIndex < self.itemCount; itemIndex++) { - PSTGridLayoutItem *item = nil; - if (!self.fixedItemSize) { - item = self.items[itemIndex]; - itemFrame = [item itemFrame]; - } - // depending on horizontal/vertical for an item size (height/width), - // we add the minimum separator then an equally distributed spacing - // (since our default mode is justify) calculated from the total leftover - // space divided by the number of intervals - if (isHorizontal) { - itemFrame.origin.y = itemOffset.y; - itemOffset.y += itemFrame.size.height + self.section.verticalInterstice; - if (horizontalAlignment == PSTFlowLayoutHorizontalAlignmentJustify) { - itemOffset.y += interSpacing; - } - }else { - itemFrame.origin.x = itemOffset.x; - itemOffset.x += itemFrame.size.width + self.section.horizontalInterstice; - if (horizontalAlignment == PSTFlowLayoutHorizontalAlignmentJustify) { - itemOffset.x += interSpacing; - } - } - item.itemFrame = itemFrame; // might call nil; don't care - [rects addObject:[NSValue valueWithCGRect:itemFrame]]; - frame = CGRectUnion(frame, itemFrame); - } - _rowSize = frame.size; - // _rowFrame = frame; // set externally - _isValid = YES; - } - return rects; -} - -- (void)addItem:(PSTGridLayoutItem *)item { - [_items addObject:item]; - item.rowObject = self; - [self invalidate]; -} - -- (PSTGridLayoutRow *)snapshot { - PSTGridLayoutRow *snapshotRow = [self.class new]; - snapshotRow.section = self.section; - snapshotRow.items = self.items; - snapshotRow.rowSize = self.rowSize; - snapshotRow.rowFrame = self.rowFrame; - snapshotRow.index = self.index; - snapshotRow.complete = self.complete; - snapshotRow.fixedItemSize = self.fixedItemSize; - snapshotRow.itemCount = self.itemCount; - return snapshotRow; -} - -- (PSTGridLayoutRow *)copyFromSection:(PSTGridLayoutSection *)section { - return nil; // ??? -} - -- (NSInteger)itemCount { - if (self.fixedItemSize) { - return _itemCount; - }else { - return self.items.count; - } -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h deleted file mode 100644 index 225f370..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// PSTGridLayoutSection.h -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@class PSTGridLayoutInfo, PSTGridLayoutRow, PSTGridLayoutItem; - -@interface PSTGridLayoutSection : NSObject - -@property (nonatomic, strong, readonly) NSArray *items; -@property (nonatomic, strong, readonly) NSArray *rows; - -// fast path for equal-size items -@property (nonatomic, assign) BOOL fixedItemSize; -@property (nonatomic, assign) CGSize itemSize; -// depending on fixedItemSize, this either is a _ivar or queries items. -@property (nonatomic, assign) NSInteger itemsCount; - -@property (nonatomic, assign) CGFloat verticalInterstice; -@property (nonatomic, assign) CGFloat horizontalInterstice; -@property (nonatomic, assign) UIEdgeInsets sectionMargins; - -@property (nonatomic, assign) CGRect frame; -@property (nonatomic, assign) CGRect headerFrame; -@property (nonatomic, assign) CGRect footerFrame; -@property (nonatomic, assign) CGFloat headerDimension; -@property (nonatomic, assign) CGFloat footerDimension; -@property (nonatomic, unsafe_unretained) PSTGridLayoutInfo *layoutInfo; -@property (nonatomic, strong) NSDictionary *rowAlignmentOptions; - -@property (nonatomic, assign, readonly) CGFloat otherMargin; -@property (nonatomic, assign, readonly) CGFloat beginMargin; -@property (nonatomic, assign, readonly) CGFloat endMargin; -@property (nonatomic, assign, readonly) CGFloat actualGap; -@property (nonatomic, assign, readonly) CGFloat lastRowBeginMargin; -@property (nonatomic, assign, readonly) CGFloat lastRowEndMargin; -@property (nonatomic, assign, readonly) CGFloat lastRowActualGap; -@property (nonatomic, assign, readonly) BOOL lastRowIncomplete; -@property (nonatomic, assign, readonly) NSInteger itemsByRowCount; -@property (nonatomic, assign, readonly) NSInteger indexOfImcompleteRow; // typo as of iOS6B3 - -//- (PSTGridLayoutSection *)copyFromLayoutInfo:(PSTGridLayoutInfo *)layoutInfo; - -// Faster variant of invalidate/compute -- (void)recomputeFromIndex:(NSInteger)index; - -// Invalidate layout. Destroys rows. -- (void)invalidate; - -// Compute layout. Creates rows. -- (void)computeLayout; - -- (PSTGridLayoutItem *)addItem; - -- (PSTGridLayoutRow *)addRow; - -// Copy snapshot of current object -- (PSTGridLayoutSection *)snapshot; - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.m b/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.m deleted file mode 100644 index 7fbdb6a..0000000 --- a/TeamTalk/Pods/PSTCollectionView/PSTCollectionView/PSTGridLayoutSection.m +++ /dev/null @@ -1,210 +0,0 @@ -// -// PSTGridLayoutSection.m -// PSPDFKit -// -// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved. -// - -#import "PSTGridLayoutSection.h" -#import "PSTGridLayoutItem.h" -#import "PSTGridLayoutRow.h" -#import "PSTGridLayoutInfo.h" - -@interface PSTGridLayoutSection () { - NSMutableArray *_items; - NSMutableArray *_rows; - BOOL _isValid; -} -@property (nonatomic, strong) NSArray *items; -@property (nonatomic, strong) NSArray *rows; -@property (nonatomic, assign) CGFloat otherMargin; -@property (nonatomic, assign) CGFloat beginMargin; -@property (nonatomic, assign) CGFloat endMargin; -@property (nonatomic, assign) CGFloat actualGap; -@property (nonatomic, assign) CGFloat lastRowBeginMargin; -@property (nonatomic, assign) CGFloat lastRowEndMargin; -@property (nonatomic, assign) CGFloat lastRowActualGap; -@property (nonatomic, assign) BOOL lastRowIncomplete; -@property (nonatomic, assign) NSInteger itemsByRowCount; -@property (nonatomic, assign) NSInteger indexOfImcompleteRow; -@end - -@implementation PSTGridLayoutSection - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - _items = [NSMutableArray new]; - _rows = [NSMutableArray new]; - } - return self; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p itemCount:%ld frame:%@ rows:%@>", NSStringFromClass(self.class), self, (long)self.itemsCount, NSStringFromCGRect(self.frame), self.rows]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public - -- (void)invalidate { - _isValid = NO; - self.rows = [NSMutableArray array]; -} - -- (void)computeLayout { - if (!_isValid) { - NSAssert(self.rows.count == 0, @"No rows shall be at this point."); - - // iterate over all items, turning them into rows. - CGSize sectionSize = CGSizeZero; - NSInteger rowIndex = 0; - NSInteger itemIndex = 0; - NSInteger itemsByRowCount = 0; - CGFloat dimensionLeft = 0; - PSTGridLayoutRow *row = nil; - // get dimension and compensate for section margin - CGFloat headerFooterDimension = self.layoutInfo.dimension; - CGFloat dimension = headerFooterDimension; - - if (self.layoutInfo.horizontal) { - dimension -= self.sectionMargins.top + self.sectionMargins.bottom; - self.headerFrame = CGRectMake(sectionSize.width, 0, self.headerDimension, headerFooterDimension); - sectionSize.width += self.headerDimension + self.sectionMargins.left; - }else { - dimension -= self.sectionMargins.left + self.sectionMargins.right; - self.headerFrame = CGRectMake(0, sectionSize.height, headerFooterDimension, self.headerDimension); - sectionSize.height += self.headerDimension + self.sectionMargins.top; - } - - CGFloat spacing = self.layoutInfo.horizontal ? self.verticalInterstice : self.horizontalInterstice; - - do { - BOOL finishCycle = itemIndex >= self.itemsCount; - // TODO: fast path could even remove row creation and just calculate on the fly - PSTGridLayoutItem *item = nil; - if (!finishCycle) item = self.fixedItemSize ? nil : self.items[itemIndex]; - - CGSize itemSize = self.fixedItemSize ? self.itemSize : item.itemFrame.size; - CGFloat itemDimension = self.layoutInfo.horizontal ? itemSize.height : itemSize.width; - // first item of each row does not add spacing - if (itemsByRowCount > 0) itemDimension += spacing; - if (dimensionLeft < itemDimension || finishCycle) { - // finish current row - if (row) { - // compensate last row - self.itemsByRowCount = fmax(itemsByRowCount, self.itemsByRowCount); - row.itemCount = itemsByRowCount; - - // if current row is done but there are still items left, increase the incomplete row counter - if (!finishCycle) self.indexOfImcompleteRow = rowIndex; - - [row layoutRow]; - - if (self.layoutInfo.horizontal) { - row.rowFrame = CGRectMake(sectionSize.width, self.sectionMargins.top, row.rowSize.width, row.rowSize.height); - sectionSize.height = fmax(row.rowSize.height, sectionSize.height); - sectionSize.width += row.rowSize.width + (finishCycle ? 0 : self.horizontalInterstice); - }else { - row.rowFrame = CGRectMake(self.sectionMargins.left, sectionSize.height, row.rowSize.width, row.rowSize.height); - sectionSize.height += row.rowSize.height + (finishCycle ? 0 : self.verticalInterstice); - sectionSize.width = fmax(row.rowSize.width, sectionSize.width); - } - } - // add new rows until the section is fully laid out - if (!finishCycle) { - // create new row - row.complete = YES; // finish up current row - row = [self addRow]; - row.fixedItemSize = self.fixedItemSize; - row.index = rowIndex; - self.indexOfImcompleteRow = rowIndex; - rowIndex++; - // convert an item from previous row to current, remove spacing for first item - if (itemsByRowCount > 0) itemDimension -= spacing; - dimensionLeft = dimension - itemDimension; - itemsByRowCount = 0; - } - }else { - dimensionLeft -= itemDimension; - } - - // add item on slow path - if (item) [row addItem:item]; - - itemIndex++; - itemsByRowCount++; - } while (itemIndex <= self.itemsCount); // cycle once more to finish last row - - if (self.layoutInfo.horizontal) { - sectionSize.width += self.sectionMargins.right; - self.footerFrame = CGRectMake(sectionSize.width, 0, self.footerDimension, headerFooterDimension); - sectionSize.width += self.footerDimension; - }else { - sectionSize.height += self.sectionMargins.bottom; - self.footerFrame = CGRectMake(0, sectionSize.height, headerFooterDimension, self.footerDimension); - sectionSize.height += self.footerDimension; - } - - _frame = CGRectMake(0, 0, sectionSize.width, sectionSize.height); - _isValid = YES; - } -} - -- (void)recomputeFromIndex:(NSInteger)index { - // TODO: use index. - [self invalidate]; - [self computeLayout]; -} - -- (PSTGridLayoutItem *)addItem { - PSTGridLayoutItem *item = [PSTGridLayoutItem new]; - item.section = self; - [_items addObject:item]; - return item; -} - -- (PSTGridLayoutRow *)addRow { - PSTGridLayoutRow *row = [PSTGridLayoutRow new]; - row.section = self; - [_rows addObject:row]; - return row; -} - -- (PSTGridLayoutSection *)snapshot { - PSTGridLayoutSection *snapshotSection = [PSTGridLayoutSection new]; - snapshotSection.items = [self.items copy]; - snapshotSection.rows = [self.items copy]; - snapshotSection.verticalInterstice = self.verticalInterstice; - snapshotSection.horizontalInterstice = self.horizontalInterstice; - snapshotSection.sectionMargins = self.sectionMargins; - snapshotSection.frame = self.frame; - snapshotSection.headerFrame = self.headerFrame; - snapshotSection.footerFrame = self.footerFrame; - snapshotSection.headerDimension = self.headerDimension; - snapshotSection.footerDimension = self.footerDimension; - snapshotSection.layoutInfo = self.layoutInfo; - snapshotSection.rowAlignmentOptions = self.rowAlignmentOptions; - snapshotSection.fixedItemSize = self.fixedItemSize; - snapshotSection.itemSize = self.itemSize; - snapshotSection.itemsCount = self.itemsCount; - snapshotSection.otherMargin = self.otherMargin; - snapshotSection.beginMargin = self.beginMargin; - snapshotSection.endMargin = self.endMargin; - snapshotSection.actualGap = self.actualGap; - snapshotSection.lastRowBeginMargin = self.lastRowBeginMargin; - snapshotSection.lastRowEndMargin = self.lastRowEndMargin; - snapshotSection.lastRowActualGap = self.lastRowActualGap; - snapshotSection.lastRowIncomplete = self.lastRowIncomplete; - snapshotSection.itemsByRowCount = self.itemsByRowCount; - snapshotSection.indexOfImcompleteRow = self.indexOfImcompleteRow; - return snapshotSection; -} - -- (NSInteger)itemsCount { - return self.fixedItemSize ? _itemsCount : self.items.count; -} - -@end diff --git a/TeamTalk/Pods/PSTCollectionView/README.md b/TeamTalk/Pods/PSTCollectionView/README.md deleted file mode 100644 index 21a071f..0000000 --- a/TeamTalk/Pods/PSTCollectionView/README.md +++ /dev/null @@ -1,57 +0,0 @@ -PSTCollectionView -================= - -UPDATE: I'm no longer using PSTCollectionView in any project, but will still accept pull requests for improvements. - -Open Source, 100% API compatible replacement of UICollectionView for iOS4.3+ - -**You want to use UICollectionView, but still need to support older versions of iOS? Then you're gonna love this project.** -Originally I wrote it for [PSPDFKit](http://PSPDFKit.com), my iOS PDF framework that supports text selection and annotations, but this project seemed way too useful for others to keep it for myself :) - -**If you want to have PSTCollectionView on iOS4.3/5.x and UICollectionView on iOS6, use PSUICollectionView (basically add PS on any UICollectionView* class to get auto-support for older iOS versions)** -If you always want to use PSTCollectionView, use PSTCollectionView as class names. (replace the UI with PST) - -## Current State - -Most features work, including the flow layout with fixed or dynamic cell sizes and supplementary views. If you're not doing something fancy, it should just work. -PSTCollectionView is also internally designed very closely to UICollectionView and thus a great study if you're wondering how UICollectionView works. See [HowTo](HowTo.md) for helpful details. - -## How can I help? - -The best way is if you're already using UICollectionView somewhere. Add PSTCollectionView and try it on iOS4/5. Check if everything works, fix bugs until the result matches 1:1 with iOS6. You can also just pick an issue fron the Issue Tracker and start working there. - -Or start playing around with one of the WWDC examples and try to make them work with PSTCollectionView. Most of them already do, but just not as perfect. - -You could also write a Pinterest-style layout manager. Can't be that hard. - -## Animations - -Thanks to Sergey Gavrilyuk ([@octogavrix](https://twitter.com/octogavrix)), animations are supported. It's not perfect yet (see LineExample), but it's a great start. - -## ARC - -PSTCollectionView works with Xcode 4.5.2+ and ARC. - -## Dependencies - -PSTCollectionView needs the QuartzCore.framework. - -## Interoperability - -Another goal (at least super useful for debugging) is interoperability between UI/PST classes: - -``` objective-c -UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new]; -PSTCollectionView *collectionView = [[PSTCollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:(PSTCollectionViewFlowLayout *)flowLayout]; -``` - -(*) Note that for some methods we can't use the _ underscore variants or we risk to get a false-positive on private API use. I've added some runtime hacks to dynamcially add block forwarders for those cases (mainly for UI/PST interoperability) - -## Creator - -[Peter Steinberger](http://petersteinberger.com) ([@steipete](https://twitter.com/steipete)) -and lots of others! See [Contributors](https://github.com/steipete/PSTCollectionView/graphs/contributors) for a graph. Thanks everyone! - -## License - -PSTCollectionView is available under the MIT license. See the LICENSE file for more info. diff --git a/TeamTalk/Pods/Pods-AFNetworking-Private.xcconfig b/TeamTalk/Pods/Pods-AFNetworking-Private.xcconfig deleted file mode 100644 index c6d6144..0000000 --- a/TeamTalk/Pods/Pods-AFNetworking-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-AFNetworking.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/AFNetworking" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_AFNETWORKING_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-AFNetworking-dummy.m b/TeamTalk/Pods/Pods-AFNetworking-dummy.m deleted file mode 100644 index c50a8c6..0000000 --- a/TeamTalk/Pods/Pods-AFNetworking-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_AFNetworking : NSObject -@end -@implementation PodsDummy_Pods_AFNetworking -@end diff --git a/TeamTalk/Pods/Pods-AFNetworking-prefix.pch b/TeamTalk/Pods/Pods-AFNetworking-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-AFNetworking-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-AFNetworking.xcconfig b/TeamTalk/Pods/Pods-AFNetworking.xcconfig deleted file mode 100644 index 13e3dff..0000000 --- a/TeamTalk/Pods/Pods-AFNetworking.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_AFNETWORKING_OTHER_LDFLAGS = -framework CoreGraphics -framework MobileCoreServices -framework Security -framework SystemConfiguration \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-DACircularProgress-Private.xcconfig b/TeamTalk/Pods/Pods-DACircularProgress-Private.xcconfig deleted file mode 100644 index 4d6b59c..0000000 --- a/TeamTalk/Pods/Pods-DACircularProgress-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-DACircularProgress.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DACircularProgress" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_DACIRCULARPROGRESS_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-DACircularProgress-dummy.m b/TeamTalk/Pods/Pods-DACircularProgress-dummy.m deleted file mode 100644 index 42b1ea3..0000000 --- a/TeamTalk/Pods/Pods-DACircularProgress-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_DACircularProgress : NSObject -@end -@implementation PodsDummy_Pods_DACircularProgress -@end diff --git a/TeamTalk/Pods/Pods-DACircularProgress-prefix.pch b/TeamTalk/Pods/Pods-DACircularProgress-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-DACircularProgress-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-DACircularProgress.xcconfig b/TeamTalk/Pods/Pods-DACircularProgress.xcconfig deleted file mode 100644 index 721807b..0000000 --- a/TeamTalk/Pods/Pods-DACircularProgress.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_DACIRCULARPROGRESS_OTHER_LDFLAGS = -framework QuartzCore \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-FMDB-Private.xcconfig b/TeamTalk/Pods/Pods-FMDB-Private.xcconfig deleted file mode 100644 index eb05165..0000000 --- a/TeamTalk/Pods/Pods-FMDB-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-FMDB.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/FMDB" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_FMDB_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-FMDB-dummy.m b/TeamTalk/Pods/Pods-FMDB-dummy.m deleted file mode 100644 index 9f21ee3..0000000 --- a/TeamTalk/Pods/Pods-FMDB-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_FMDB : NSObject -@end -@implementation PodsDummy_Pods_FMDB -@end diff --git a/TeamTalk/Pods/Pods-FMDB-prefix.pch b/TeamTalk/Pods/Pods-FMDB-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-FMDB-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-FMDB.xcconfig b/TeamTalk/Pods/Pods-FMDB.xcconfig deleted file mode 100644 index 11ee8ea..0000000 --- a/TeamTalk/Pods/Pods-FMDB.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_FMDB_OTHER_LDFLAGS = -lsqlite3 \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-HPGrowingTextView-Private.xcconfig b/TeamTalk/Pods/Pods-HPGrowingTextView-Private.xcconfig deleted file mode 100644 index 7987e58..0000000 --- a/TeamTalk/Pods/Pods-HPGrowingTextView-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-HPGrowingTextView.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/HPGrowingTextView" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-HPGrowingTextView-dummy.m b/TeamTalk/Pods/Pods-HPGrowingTextView-dummy.m deleted file mode 100644 index 0404363..0000000 --- a/TeamTalk/Pods/Pods-HPGrowingTextView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_HPGrowingTextView : NSObject -@end -@implementation PodsDummy_Pods_HPGrowingTextView -@end diff --git a/TeamTalk/Pods/Pods-HPGrowingTextView-prefix.pch b/TeamTalk/Pods/Pods-HPGrowingTextView-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-HPGrowingTextView-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-HPGrowingTextView.xcconfig b/TeamTalk/Pods/Pods-HPGrowingTextView.xcconfig deleted file mode 100644 index e69de29..0000000 diff --git a/TeamTalk/Pods/Pods-MBProgressHUD-Private.xcconfig b/TeamTalk/Pods/Pods-MBProgressHUD-Private.xcconfig deleted file mode 100644 index b5f7f25..0000000 --- a/TeamTalk/Pods/Pods-MBProgressHUD-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-MBProgressHUD.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/MBProgressHUD" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_MBPROGRESSHUD_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-MBProgressHUD-dummy.m b/TeamTalk/Pods/Pods-MBProgressHUD-dummy.m deleted file mode 100644 index 10d445d..0000000 --- a/TeamTalk/Pods/Pods-MBProgressHUD-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_MBProgressHUD : NSObject -@end -@implementation PodsDummy_Pods_MBProgressHUD -@end diff --git a/TeamTalk/Pods/Pods-MBProgressHUD-prefix.pch b/TeamTalk/Pods/Pods-MBProgressHUD-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-MBProgressHUD-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-MBProgressHUD.xcconfig b/TeamTalk/Pods/Pods-MBProgressHUD.xcconfig deleted file mode 100644 index e1c175d..0000000 --- a/TeamTalk/Pods/Pods-MBProgressHUD.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_MBPROGRESSHUD_OTHER_LDFLAGS = -framework CoreGraphics \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-PSTCollectionView-Private.xcconfig b/TeamTalk/Pods/Pods-PSTCollectionView-Private.xcconfig deleted file mode 100644 index 5732e36..0000000 --- a/TeamTalk/Pods/Pods-PSTCollectionView-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-PSTCollectionView.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/PSTCollectionView" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_PSTCOLLECTIONVIEW_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-PSTCollectionView-dummy.m b/TeamTalk/Pods/Pods-PSTCollectionView-dummy.m deleted file mode 100644 index e7afdfb..0000000 --- a/TeamTalk/Pods/Pods-PSTCollectionView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_PSTCollectionView : NSObject -@end -@implementation PodsDummy_Pods_PSTCollectionView -@end diff --git a/TeamTalk/Pods/Pods-PSTCollectionView-prefix.pch b/TeamTalk/Pods/Pods-PSTCollectionView-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-PSTCollectionView-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-PSTCollectionView.xcconfig b/TeamTalk/Pods/Pods-PSTCollectionView.xcconfig deleted file mode 100644 index 1b0d413..0000000 --- a/TeamTalk/Pods/Pods-PSTCollectionView.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_PSTCOLLECTIONVIEW_OTHER_LDFLAGS = -framework QuartzCore -framework UIKit \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-SDWebImage-Private.xcconfig b/TeamTalk/Pods/Pods-SDWebImage-Private.xcconfig deleted file mode 100644 index aa64290..0000000 --- a/TeamTalk/Pods/Pods-SDWebImage-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-SDWebImage.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SDWebImage" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC ${PODS_SDWEBIMAGE_OTHER_LDFLAGS} -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-SDWebImage-dummy.m b/TeamTalk/Pods/Pods-SDWebImage-dummy.m deleted file mode 100644 index 1e978bb..0000000 --- a/TeamTalk/Pods/Pods-SDWebImage-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_SDWebImage : NSObject -@end -@implementation PodsDummy_Pods_SDWebImage -@end diff --git a/TeamTalk/Pods/Pods-SDWebImage-prefix.pch b/TeamTalk/Pods/Pods-SDWebImage-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/TeamTalk/Pods/Pods-SDWebImage-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#endif - -#import "Pods-environment.h" diff --git a/TeamTalk/Pods/Pods-SDWebImage.xcconfig b/TeamTalk/Pods/Pods-SDWebImage.xcconfig deleted file mode 100644 index 46844fa..0000000 --- a/TeamTalk/Pods/Pods-SDWebImage.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_SDWEBIMAGE_OTHER_LDFLAGS = -framework ImageIO \ No newline at end of file diff --git a/TeamTalk/Pods/Pods-acknowledgements.markdown b/TeamTalk/Pods/Pods-acknowledgements.markdown deleted file mode 100644 index 2804a2e..0000000 --- a/TeamTalk/Pods/Pods-acknowledgements.markdown +++ /dev/null @@ -1,172 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## AFNetworking - -Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## DACircularProgress - -# License - -## MIT License - -Copyright (c) 2013 Daniel Amitay (http://danielamitay.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## FMDB - -If you are using fmdb in your project, I'd love to hear about it. Let me -know at gus@flyingmeat.com. - -In short, this is the MIT License. - -Copyright (c) 2008 Flying Meat Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## HPGrowingTextView - -MIT License - -Copyright (c) 2011 Hans Pinckaers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## MBProgressHUD - -Copyright (c) 2013 Matej Bukovinski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## PSTCollectionView - -Copyright (c) 2012-2013 Peter Steinberger <steipete@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## SDWebImage - -Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -Generated by CocoaPods - http://cocoapods.org diff --git a/TeamTalk/Pods/Pods-acknowledgements.plist b/TeamTalk/Pods/Pods-acknowledgements.plist deleted file mode 100644 index 405b041..0000000 --- a/TeamTalk/Pods/Pods-acknowledgements.plist +++ /dev/null @@ -1,226 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>PreferenceSpecifiers</key> - <array> - <dict> - <key>FooterText</key> - <string>This application makes use of the following third party libraries:</string> - <key>Title</key> - <string>Acknowledgements</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2013-2014 AFNetworking (http://afnetworking.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -</string> - <key>Title</key> - <string>AFNetworking</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string># License - -## MIT License - -Copyright (c) 2013 Daniel Amitay (http://danielamitay.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.</string> - <key>Title</key> - <string>DACircularProgress</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>If you are using fmdb in your project, I'd love to hear about it. Let me -know at gus@flyingmeat.com. - -In short, this is the MIT License. - -Copyright (c) 2008 Flying Meat Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.</string> - <key>Title</key> - <string>FMDB</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>MIT License - -Copyright (c) 2011 Hans Pinckaers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.</string> - <key>Title</key> - <string>HPGrowingTextView</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2013 Matej Bukovinski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.</string> - <key>Title</key> - <string>MBProgressHUD</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2012-2013 Peter Steinberger &lt;steipete@gmail.com&gt; - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -</string> - <key>Title</key> - <string>PSTCollectionView</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2009 Olivier Poitrey &lt;rs@dailymotion.com&gt; - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -</string> - <key>Title</key> - <string>SDWebImage</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Generated by CocoaPods - http://cocoapods.org</string> - <key>Title</key> - <string></string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - </array> - <key>StringsTable</key> - <string>Acknowledgements</string> - <key>Title</key> - <string>Acknowledgements</string> -</dict> -</plist> diff --git a/TeamTalk/Pods/Pods-dummy.m b/TeamTalk/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/TeamTalk/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/TeamTalk/Pods/Pods-environment.h b/TeamTalk/Pods/Pods-environment.h deleted file mode 100644 index f7fdd99..0000000 --- a/TeamTalk/Pods/Pods-environment.h +++ /dev/null @@ -1,104 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// AFNetworking -#define COCOAPODS_POD_AVAILABLE_AFNetworking -#define COCOAPODS_VERSION_MAJOR_AFNetworking 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking 1 - -// AFNetworking/NSURLConnection -#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLConnection -#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLConnection 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLConnection 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLConnection 1 - -// AFNetworking/NSURLSession -#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLSession -#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLSession 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLSession 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLSession 1 - -// AFNetworking/Reachability -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Reachability -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Reachability 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Reachability 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Reachability 1 - -// AFNetworking/Security -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Security -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Security 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Security 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Security 1 - -// AFNetworking/Serialization -#define COCOAPODS_POD_AVAILABLE_AFNetworking_Serialization -#define COCOAPODS_VERSION_MAJOR_AFNetworking_Serialization 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_Serialization 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_Serialization 1 - -// AFNetworking/UIKit -#define COCOAPODS_POD_AVAILABLE_AFNetworking_UIKit -#define COCOAPODS_VERSION_MAJOR_AFNetworking_UIKit 2 -#define COCOAPODS_VERSION_MINOR_AFNetworking_UIKit 3 -#define COCOAPODS_VERSION_PATCH_AFNetworking_UIKit 1 - -// DACircularProgress -#define COCOAPODS_POD_AVAILABLE_DACircularProgress -#define COCOAPODS_VERSION_MAJOR_DACircularProgress 2 -#define COCOAPODS_VERSION_MINOR_DACircularProgress 2 -#define COCOAPODS_VERSION_PATCH_DACircularProgress 0 - -// FMDB -#define COCOAPODS_POD_AVAILABLE_FMDB -#define COCOAPODS_VERSION_MAJOR_FMDB 2 -#define COCOAPODS_VERSION_MINOR_FMDB 3 -#define COCOAPODS_VERSION_PATCH_FMDB 0 - -// FMDB/common -#define COCOAPODS_POD_AVAILABLE_FMDB_common -#define COCOAPODS_VERSION_MAJOR_FMDB_common 2 -#define COCOAPODS_VERSION_MINOR_FMDB_common 3 -#define COCOAPODS_VERSION_PATCH_FMDB_common 0 - -// FMDB/standard -#define COCOAPODS_POD_AVAILABLE_FMDB_standard -#define COCOAPODS_VERSION_MAJOR_FMDB_standard 2 -#define COCOAPODS_VERSION_MINOR_FMDB_standard 3 -#define COCOAPODS_VERSION_PATCH_FMDB_standard 0 - -// HPGrowingTextView -#define COCOAPODS_POD_AVAILABLE_HPGrowingTextView -#define COCOAPODS_VERSION_MAJOR_HPGrowingTextView 1 -#define COCOAPODS_VERSION_MINOR_HPGrowingTextView 1 -#define COCOAPODS_VERSION_PATCH_HPGrowingTextView 0 - -// MBProgressHUD -#define COCOAPODS_POD_AVAILABLE_MBProgressHUD -#define COCOAPODS_VERSION_MAJOR_MBProgressHUD 0 -#define COCOAPODS_VERSION_MINOR_MBProgressHUD 8 -#define COCOAPODS_VERSION_PATCH_MBProgressHUD 0 - -// PSTCollectionView -#define COCOAPODS_POD_AVAILABLE_PSTCollectionView -#define COCOAPODS_VERSION_MAJOR_PSTCollectionView 1 -#define COCOAPODS_VERSION_MINOR_PSTCollectionView 2 -#define COCOAPODS_VERSION_PATCH_PSTCollectionView 1 - -// SDWebImage -#define COCOAPODS_POD_AVAILABLE_SDWebImage -#define COCOAPODS_VERSION_MAJOR_SDWebImage 3 -#define COCOAPODS_VERSION_MINOR_SDWebImage 7 -#define COCOAPODS_VERSION_PATCH_SDWebImage 1 - -// SDWebImage/Core -#define COCOAPODS_POD_AVAILABLE_SDWebImage_Core -#define COCOAPODS_VERSION_MAJOR_SDWebImage_Core 3 -#define COCOAPODS_VERSION_MINOR_SDWebImage_Core 7 -#define COCOAPODS_VERSION_PATCH_SDWebImage_Core 1 - diff --git a/TeamTalk/Pods/Pods-resources.sh b/TeamTalk/Pods/Pods-resources.sh deleted file mode 100755 index 39c2549..0000000 --- a/TeamTalk/Pods/Pods-resources.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -set -e - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcassets) - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]]; then - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/TeamTalk/Pods/Pods.xcconfig b/TeamTalk/Pods/Pods.xcconfig deleted file mode 100644 index edccb35..0000000 --- a/TeamTalk/Pods/Pods.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DACircularProgress" "${PODS_ROOT}/Headers/FMDB" "${PODS_ROOT}/Headers/HPGrowingTextView" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/PSTCollectionView" "${PODS_ROOT}/Headers/SDWebImage" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/AFNetworking" -isystem "${PODS_ROOT}/Headers/DACircularProgress" -isystem "${PODS_ROOT}/Headers/FMDB" -isystem "${PODS_ROOT}/Headers/HPGrowingTextView" -isystem "${PODS_ROOT}/Headers/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/PSTCollectionView" -isystem "${PODS_ROOT}/Headers/SDWebImage" -OTHER_LDFLAGS = -ObjC -lsqlite3 -framework CoreGraphics -framework ImageIO -framework MobileCoreServices -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/TeamTalk/Pods/Pods.xcodeproj/project.pbxproj b/TeamTalk/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 9516704..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1922 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 00DA3985117B4FAA84B986B8 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A640D603C5B4F62B3DCAD7B /* AFURLConnectionOperation.h */; }; - 02C6F6108F1B4D46981FBC83 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - 0A27971140E04C71BE5CAF59 /* libPods-SDWebImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EB5E52D126F444A68666F854 /* libPods-SDWebImage.a */; }; - 0A46AC630112494DB8939D46 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 24CE0CEA4432416FA7088581 /* UIImageView+AFNetworking.h */; }; - 0A900B33D8EF4A0B95F78C32 /* PSTCollectionViewFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = ADC186D394DE4ED1AC2D13CE /* PSTCollectionViewFlowLayout.h */; }; - 0BE295CF96454929B1A3419E /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 970A19CE529449678D3BD82E /* UIActivityIndicatorView+AFNetworking.h */; }; - 0D3976EE005B4CCFA00B2294 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = C39A9A58653F4AB8A570C4A7 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 0D8536788E3C4A8FB1F83CCE /* PSTCollectionViewItemKey.h in Headers */ = {isa = PBXBuildFile; fileRef = E585B8F579DE42189F5B3A0B /* PSTCollectionViewItemKey.h */; }; - 0E7F731DB1334957925B6E20 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7663B5C1D0194C5D94369514 /* Pods-dummy.m */; }; - 14A25E185911422F988E1D8A /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CBA3DB9996446D9C561B35 /* FMDatabasePool.h */; }; - 15135AEF6D00476A806240C2 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 471F5ECF9D384E8B91616395 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 192FB37B851443EF929D61A6 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 572B2EF96961482CB412B0A8 /* FMDatabaseAdditions.h */; }; - 1963ACB111E64234B9837C77 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A604F4D1DC4B94B3F02827 /* AFHTTPSessionManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1A9C64267F3E41D39DDC20F8 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 22AB8B1D32C44B6FA6A99234 /* UIButton+AFNetworking.h */; }; - 1CAA20AEB85D4D3580331EE6 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DC636B36A345ACB78EFE6D /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 204218513A494EA0A2120FF4 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F20387993E41CA8804DE0A /* AFHTTPRequestOperation.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 21024E9C4FA8469989DD000C /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 835B486F4654429986A3B06F /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 22EB8D9BA16B488D9A66E83A /* Pods-MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B5D00ECD6594C2F98856070 /* Pods-MBProgressHUD-dummy.m */; }; - 26C7BB1FA96B475095351559 /* PSTCollectionViewUpdateItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E574737E8ED4ADAB4DF85D1 /* PSTCollectionViewUpdateItem.h */; }; - 2C46BDCF68C44865B4251353 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4392F0806DAF4F7E813F2966 /* AFNetworking.h */; }; - 2CF72FBA8BEF404992D523C1 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 645624F192C04C6E862D213F /* UIActivityIndicatorView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 2EDC7EB3BAB34D4384EAFC56 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 768DF77EC3894ABEB64AD7D0 /* AFURLResponseSerialization.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 301131C965E64DF697FCAC02 /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B987BA3B07A4759B8E61A89 /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 3191963D7949466CAC3F39BD /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DEB8498723494C169FA5754B /* AFHTTPRequestOperation.h */; }; - 3247217837D74248A2AF05E4 /* libPods-PSTCollectionView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C5EAA2F518BD4370BC444AF8 /* libPods-PSTCollectionView.a */; }; - 3521F4F82F5249ADBF596F5F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF6871C9C9C54FFB8D1DD0BA /* QuartzCore.framework */; }; - 391ED1EF997146328E54B1CB /* PSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EF9E736EE7D44A05AE2316C2 /* PSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 3DDDD4272B3445FFA440E046 /* PSTCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E1A7FFE054400C8BAFDD62 /* PSTCollectionView.h */; }; - 3E0897CF8D8D4930B7424DAB /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 175E44F8A0454F4789745365 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 3E68D105422C47EBA4A09A19 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F39505D70CB4A2484D55B14 /* AFHTTPRequestOperationManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 3F3768E550DF4F5AB6F758C5 /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 645B91EB11814B2ABADE9613 /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 40A3DF46CA5E497C8056E956 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38D2B2BFA7C843509929DB6D /* CoreGraphics.framework */; }; - 4219B1CC18EA4C41B6E30AA2 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7FA56757614EAB9FD52C4C /* SDWebImageOperation.h */; }; - 42F37EE617C54451899B739F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - 43A15E22388A4B60918C607D /* DACircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = ED465EE3CE8E4749BA0CB762 /* DACircularProgressView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 49986DEDE2894B20B84CEEDB /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FDF8713B81A4441BC487B58 /* FMResultSet.h */; }; - 4B760EDC9C6B4B248FD62711 /* libPods-AFNetworking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DFA6D792E8984E81B1CFBEDB /* libPods-AFNetworking.a */; }; - 4C3641434A474BCEA010ECD4 /* PSTCollectionViewData.m in Sources */ = {isa = PBXBuildFile; fileRef = 699DEF06E3CB4EAA9F52E092 /* PSTCollectionViewData.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 4E7D6BED809547CF8CFD093C /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 76863DDA0F3E485395D258BF /* MBProgressHUD.h */; }; - 50B05A08C75948A9AED4B124 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - 54F4B27B35084BB4B69D6728 /* PSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = DE532058C8094E789971EF76 /* PSTCollectionViewCell.h */; }; - 558525F8840F43B591D43655 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B1979C6F62014B808DC4208E /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 5700999980CD448F9AD8E7B4 /* PSTGridLayoutSection.h in Headers */ = {isa = PBXBuildFile; fileRef = A16B45B6D79E44B2BD8CED26 /* PSTGridLayoutSection.h */; }; - 58FEAA2693F1461C9B757CB1 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 308FE5AA98C344CBB8D2E65D /* SDImageCache.h */; }; - 5B9C409C2660446081107F94 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 770E0036EA7440A39871BBDB /* AFNetworkActivityIndicatorManager.h */; }; - 5BCF0FBEE2B74BD89520B338 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAEA475A56094305863C7A5B /* SystemConfiguration.framework */; }; - 5DC9B667CEC04DAAB3667134 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74F2DA4648204422B46D6432 /* MobileCoreServices.framework */; }; - 5DF181C568AA44F191B518F7 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF442CB31314AA6A20656CB /* AFNetworkReachabilityManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 5EAA59ED593445258953CCC3 /* PSTCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EBA87341EE2463D95723ED9 /* PSTCollectionViewController.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 6276DCEC19D1436199FB102C /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = C1810513982447C19601FED5 /* AFURLRequestSerialization.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 648C6CE43183455B89772B16 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 248A1BEA459F41FC83DB3AF7 /* AFURLConnectionOperation.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 652CCD9C088C42A08657E1A3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - 6600931EAE704CD28A637691 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4DD0DBB2946AFA091BBBF /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 66DB4AA396E64D658033D653 /* PSTCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F66CD5161B194433BCC9EA34 /* PSTCollectionViewController.h */; }; - 688B82CEDD7E43A4AA75F81E /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C09CD913B3D4262BF0F870E /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 6B37E5F7F3E446039525C65E /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A48221FD2A4C05AE8834EC /* FMDB.h */; }; - 6C3FDA049F404412AE9D7321 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1000240CFB7C496695E7355F /* UIAlertView+AFNetworking.h */; }; - 6DE5627DC8714515AA77C4F9 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AC94FE51BABD4D82B84A97A3 /* UIKit+AFNetworking.h */; }; - 6ECB7F7460614347BEB632E0 /* PSTCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7942B997936C46F7920591F7 /* PSTCollectionViewLayout.h */; }; - 777AA3A55E8A495FBE1619F5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF6871C9C9C54FFB8D1DD0BA /* QuartzCore.framework */; }; - 7785A8D5FCDB404C93A5781E /* PSTGridLayoutInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5639D296534E9A860F7A53 /* PSTGridLayoutInfo.h */; }; - 78C12131623C45F48A54761A /* Pods-FMDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 06786C80684D4E66A0F4E9B5 /* Pods-FMDB-dummy.m */; }; - 7917B0A422DA4836B70DEFCE /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D7A48B94C0480B8A804E0F /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 79A7DF9A611F40E08E29ED1F /* PSTGridLayoutInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D411453AC74D228264E8AD /* PSTGridLayoutInfo.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 7AEF48FF92774C0BA70D9D89 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 76375C3B6ECD4B8FA59762E5 /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 7CB9A2BD04A14A898A90CC77 /* Pods-PSTCollectionView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C15B8B2C005249C1BCD13FEB /* Pods-PSTCollectionView-dummy.m */; }; - 7D9EC7603C204A788D17539B /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C54CA9039F0499594A6C9F7 /* SDWebImagePrefetcher.h */; }; - 7E883442FD8345DFB1CED8DE /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E0C3ECB68D4012BA26A784 /* UIView+WebCacheOperation.h */; }; - 80411B8AE4EC4D55AFF973D5 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4316C38BC42D4039B6A628D1 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 81B89AC6C84C4932BCCBAE75 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD2E8AA574245278AC625D0 /* UIAlertView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 8293766528D64E28A215FDCF /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 71467175F54C4EA49894F633 /* UIImageView+WebCache.h */; }; - 848B29C597EF4CB38E6EFFE0 /* HPTextViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7824C344EB8A40EBBA1A3512 /* HPTextViewInternal.h */; }; - 85718E0F4554445FBEED5B35 /* PSTCollectionViewCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB4B63949B743EF83CAFB74 /* PSTCollectionViewCommon.h */; }; - 889D73D677114766945699CB /* PSTGridLayoutRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D7016CE165F4D2E96EC0588 /* PSTGridLayoutRow.h */; }; - 8959BEDB64C54F1DBC9F3593 /* HPGrowingTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F238FF9CF6054215B25494C4 /* HPGrowingTextView.h */; }; - 8A29EE1F72294D3995D7A4D5 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A3F64B2F283493180FEBC97 /* SDWebImageCompat.h */; }; - 8B06361955FD49A6A8F9591D /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AAC91AA259447EF9D8ABAD3 /* FMDatabaseQueue.h */; }; - 8C64454A9F1C46B38C3E854A /* Pods-SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD0D98B01E094A488B96E071 /* Pods-SDWebImage-dummy.m */; }; - 8E53CC6F93B748F5B641E890 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 47203F45DC99423191FDA697 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 9189E98768C44F2B9BD150F8 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B94333C5F443F4BC851921 /* UIProgressView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 94CE8FBA1CE34105A4FD403F /* PSTCollectionViewLayout+Internals.h in Headers */ = {isa = PBXBuildFile; fileRef = B19B67BCAD674EBCAA10E2C6 /* PSTCollectionViewLayout+Internals.h */; }; - 9773C40FF1F64579B7C99430 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EDB1D5A5FEB3485DBA318248 /* AFNetworkReachabilityManager.h */; }; - 97F7D3FA2FDE4C249DD55C82 /* libPods-DACircularProgress.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 76EF45BC6757411F94A04E80 /* libPods-DACircularProgress.a */; }; - 9805191FE2174B56B97CF79E /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48C93DD582CA4F0288FE9FC9 /* AFURLSessionManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 98E6E8411281473A89FB6D6C /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = AD86A6D1780646F492F8E6AA /* UIButton+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 99A8C2CBB6E34CC5B3457525 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D39B7551454967A523B581 /* SDWebImageDownloader.h */; }; - 99AAD451357844F997071564 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7C6233218F4AB48355F509 /* UIImageView+HighlightedWebCache.h */; }; - 9AC5CD580D174D0BA55CFA3B /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CDC4574D35E4FB6BFD5F1D5 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - 9C4A58CAE734428AA9BEC353 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FD0DF68FF234E47B4A2B134 /* UIWebView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 9CDCEB2642CE4713981A1916 /* HPTextViewInternal.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F61B955F4445D88D8C5081 /* HPTextViewInternal.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - A140138F1EBA4570907B378C /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E7566705134649339149AD6E /* UIImage+MultiFormat.h */; }; - A530195B6A9A42208D84983B /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 45262B5120264DCC9043D483 /* AFURLRequestSerialization.h */; }; - A548E62046D84841B23FC1C2 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E831E07B9F44AB4B21065D0 /* AFURLResponseSerialization.h */; }; - A6F7591548944C92BE2A43DC /* PSTCollectionViewUpdateItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C53E3411D3904551914EA143 /* PSTCollectionViewUpdateItem.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - A865A5EC561A46DBA99F5AEA /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA433C44150447E97AC1B21 /* UIWebView+AFNetworking.h */; }; - A8CAA80734A94557BF10EF0D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38D2B2BFA7C843509929DB6D /* CoreGraphics.framework */; }; - AA0E68E025F941CFBCB76143 /* PSTCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 42860755AC8345349F7CBC52 /* PSTCollectionViewFlowLayout.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - AA42E80640DC43B4BACB8CB0 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 35931D6299184F8DBE3A5576 /* UIProgressView+AFNetworking.h */; }; - AAC9253E13AA4F10ABE35976 /* HPGrowingTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = BACD42D68BE547CF93521F63 /* HPGrowingTextView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - AD2B6ED3F0E84BAB98B2D543 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0A5392B73F4CBCAD57F8BE /* SDWebImageDecoder.h */; }; - AF21EE712CEB47869F170AEC /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = F4593046293A420E975CDF90 /* FMDatabase.h */; }; - AFAB3CAB4BE946F3A139738A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 576D3AFEFC3740FBB2520603 /* Security.framework */; }; - B0AEE7A01AF84953ACA68002 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - B3AB4446C0334A1DBC6C0698 /* Pods-AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BEE1D02A32E0473F9E69FADE /* Pods-AFNetworking-dummy.m */; }; - B5DF210A50544F0184AF8974 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A8238AE447460183030650 /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - B6034F0A7F384700AA77DBCB /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E64F367D3FA742E5BB9FE6C9 /* UIButton+WebCache.h */; }; - B63FF86B7FB74745B1F31DB5 /* libPods-FMDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CB16ECCB83864CD2941D5A8A /* libPods-FMDB.a */; }; - B64239213E00485D841095BF /* PSTCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 51ADB617F4CC467CB15C554F /* PSTCollectionView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - B8D6F495AA3F4A44BF30F1DA /* NSIndexPath+PSTCollectionViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 78EB80303B8740C39B9C5930 /* NSIndexPath+PSTCollectionViewAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - BAA6FDD7000E4810B7966FC9 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 56C146BB0AA7498994FE61EC /* UIRefreshControl+AFNetworking.h */; }; - BC29E84D0B8D42E99E79BB0F /* PSTCollectionViewData.h in Headers */ = {isa = PBXBuildFile; fileRef = 52EC6D4C778F4426A388CF33 /* PSTCollectionViewData.h */; }; - BC7C5283976B4F94A34B5544 /* PSTGridLayoutRow.m in Sources */ = {isa = PBXBuildFile; fileRef = EA8364325180415E95B671E0 /* PSTGridLayoutRow.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - BCFCAE99F65247E786632731 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A1E99867848247E5BB2C72AD /* AFURLSessionManager.h */; }; - BD5F01E395634B629F387260 /* libPods-HPGrowingTextView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7415B180D83D4490B7EB6A34 /* libPods-HPGrowingTextView.a */; }; - C3FF0708ABB743EF9AE8E07E /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0D74C95F4C405E98677F17 /* AFHTTPRequestOperationManager.h */; }; - C6B703597C4C4D488B2C0D13 /* DACircularProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 070CE4A5E33A453B9AA91692 /* DACircularProgressView.h */; }; - CDFBD6B51223409794F36489 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = BE69EFFEAB7E48C49CEB7D98 /* UIImage+GIF.h */; }; - CE8B251AA4AB4186A34CFAA3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - D15B18F2CFCA4C29B94C2B78 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E9352C6AB61C4A7EB9163B38 /* SDWebImageManager.h */; }; - D15D1931FE084810B6861CCD /* PSTGridLayoutItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C327FC9C764F498C48A384 /* PSTGridLayoutItem.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - D1A006E873EE420882310C87 /* PSTCollectionViewItemKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E542B419874C60BB204ED5 /* PSTCollectionViewItemKey.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - D8933CCFBB904C608BB88983 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB281B8A60D340629ED91AF2 /* ImageIO.framework */; }; - D9980EDCE64B42F09509B005 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = C8856AD7FAB2438E984ADFF2 /* AFSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - DABA3993F94D4C09BA28C66F /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C08AED07AEF436D9BB7D546 /* AFHTTPSessionManager.h */; }; - DBC2EC0BEC8C4257B9A91F0F /* Pods-HPGrowingTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C18FDA0FB64BCA879F67F0 /* Pods-HPGrowingTextView-dummy.m */; }; - DC03F60342BA4D29AB7BE5F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - DEBDEF29CBB64964BB4FA032 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D694443B619A49FA8CA36106 /* UIImageView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - DFE0E0E0E24747D6A75E3850 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B994E5B70EE24746842F71AB /* UIRefreshControl+AFNetworking.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - E10A833E75244A6E856DF3BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91F563D462584273895F9191 /* UIKit.framework */; }; - E3D3E9599DC14FF690E77CE5 /* PSTCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = CF85D335DC3844119C4DD19F /* PSTCollectionViewLayout.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - E6C7EE9BE9934A43B8B6B383 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = DD35094CD818437682645F8E /* AFSecurityPolicy.h */; }; - EA4148BE13AE46118AD32E8A /* PSTGridLayoutItem.h in Headers */ = {isa = PBXBuildFile; fileRef = FB22391B337C4748AAD86E1B /* PSTGridLayoutItem.h */; }; - EAEEBF5E5D694D6FA5EC7C2C /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 536EE4FA864D4BCABFA44814 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - F1391069CD0141DC92D5BEDD /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 68D75DF8F67448FBB7BF655E /* NSData+ImageContentType.h */; }; - F13E7944DDBD4274A8475DB3 /* PSTGridLayoutSection.m in Sources */ = {isa = PBXBuildFile; fileRef = E670959DE6E6423EA9F24D2C /* PSTGridLayoutSection.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - F25AE2B69201462082A4F6CE /* Pods-DACircularProgress-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D16EC54F704840CEAEFDA33C /* Pods-DACircularProgress-dummy.m */; }; - F384E3513F944A07A3934287 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DF7407E0F4414427A33C4C03 /* SDWebImageDownloaderOperation.h */; }; - F43FAECC076C42CAB5A80905 /* NSIndexPath+PSTCollectionViewAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F57A21A4A32445FEA64AADF6 /* NSIndexPath+PSTCollectionViewAdditions.h */; }; - F67815B75DC74968870C97BD /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EBC97544C9542818E34C8D6 /* AFNetworkActivityIndicatorManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - FA17912E1A444F588E79FA02 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6637B41E999948CC93A9D476 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - FA9210D66B2F4F69876838E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16303EADC8454C8A9A9562C6 /* Foundation.framework */; }; - FB32F919A3224471A7C45160 /* libPods-MBProgressHUD.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 926B61F3686445D0B8793EF1 /* libPods-MBProgressHUD.a */; }; - FB993656A4F54BF5A017B166 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A1865E1191B4FD3B723A2A1 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; - FF99C8A133FB4B3CA0F9C43D /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 59700A4598B545D49A0CC7E1 /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 098BA2FC082F4B4D8E08CFD4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D55CFE933564CFB9B3E3372; - remoteInfo = "Pods-PSTCollectionView"; - }; - 2FDF350788194419B91E9E5E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13A67AD884FF4FBDB442AE71; - remoteInfo = "Pods-FMDB"; - }; - 527F9215C2604C5EA44B4349 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7989B25ABCB44FB88015DE9F; - remoteInfo = "Pods-AFNetworking"; - }; - 9BF6A771D34A49FC8D5B1EAB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = DDC0CD7C0AF648D8B09FA131; - remoteInfo = "Pods-DACircularProgress"; - }; - B6A10F936E6D4DEE85B73443 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2AC3313D48E245198EF6E097; - remoteInfo = "Pods-SDWebImage"; - }; - C4C2D3D87252484D852E9B30 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = EDCC7D9519444E7EA3162ED9; - remoteInfo = "Pods-HPGrowingTextView"; - }; - E9296CE2B0A5448EAE39F267 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F924B23616564ADC807DF70E /* Project object */; - proxyType = 1; - remoteGlobalIDString = D677F7827166425CBE5C8CEB; - remoteInfo = "Pods-MBProgressHUD"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 06786C80684D4E66A0F4E9B5 /* Pods-FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FMDB-dummy.m"; sourceTree = "<group>"; }; - 070CE4A5E33A453B9AA91692 /* DACircularProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DACircularProgressView.h; path = DACircularProgress/DACircularProgressView.h; sourceTree = "<group>"; }; - 073601ED15FD45E48448F6BD /* Pods-HPGrowingTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-HPGrowingTextView-prefix.pch"; sourceTree = "<group>"; }; - 09D411453AC74D228264E8AD /* PSTGridLayoutInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTGridLayoutInfo.m; path = PSTCollectionView/PSTGridLayoutInfo.m; sourceTree = "<group>"; }; - 1000240CFB7C496695E7355F /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = "<group>"; }; - 15C327FC9C764F498C48A384 /* PSTGridLayoutItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTGridLayoutItem.m; path = PSTCollectionView/PSTGridLayoutItem.m; sourceTree = "<group>"; }; - 16303EADC8454C8A9A9562C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 175E44F8A0454F4789745365 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = "<group>"; }; - 1A1865E1191B4FD3B723A2A1 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = "<group>"; }; - 1B5D00ECD6594C2F98856070 /* Pods-MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MBProgressHUD-dummy.m"; sourceTree = "<group>"; }; - 1EBC97544C9542818E34C8D6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = "<group>"; }; - 2126FD0562F442EC930CA696 /* Pods-SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SDWebImage-prefix.pch"; sourceTree = "<group>"; }; - 22AB8B1D32C44B6FA6A99234 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = "<group>"; }; - 22E969682962484B9E64539B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 248A1BEA459F41FC83DB3AF7 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = "<group>"; }; - 24CE0CEA4432416FA7088581 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = "<group>"; }; - 2CD2E8AA574245278AC625D0 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = "<group>"; }; - 2E574737E8ED4ADAB4DF85D1 /* PSTCollectionViewUpdateItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewUpdateItem.h; path = PSTCollectionView/PSTCollectionViewUpdateItem.h; sourceTree = "<group>"; }; - 308FE5AA98C344CBB8D2E65D /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = "<group>"; }; - 3444037FE2D54233B8478C5A /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = "<group>"; }; - 35931D6299184F8DBE3A5576 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = "<group>"; }; - 367CECAE1A46488E88AD08C2 /* Pods-SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SDWebImage.xcconfig"; sourceTree = "<group>"; }; - 38D2B2BFA7C843509929DB6D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 39A17077D593460DA1F54E26 /* Pods-AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AFNetworking.xcconfig"; sourceTree = "<group>"; }; - 41A8238AE447460183030650 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = "<group>"; }; - 42860755AC8345349F7CBC52 /* PSTCollectionViewFlowLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewFlowLayout.m; path = PSTCollectionView/PSTCollectionViewFlowLayout.m; sourceTree = "<group>"; }; - 4316C38BC42D4039B6A628D1 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = "<group>"; }; - 4389A9D80BBD4441848BBE15 /* Pods-DACircularProgress.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DACircularProgress.xcconfig"; sourceTree = "<group>"; }; - 4392F0806DAF4F7E813F2966 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = "<group>"; }; - 44C18FDA0FB64BCA879F67F0 /* Pods-HPGrowingTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-HPGrowingTextView-dummy.m"; sourceTree = "<group>"; }; - 45262B5120264DCC9043D483 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = "<group>"; }; - 471F5ECF9D384E8B91616395 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = "<group>"; }; - 47203F45DC99423191FDA697 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; }; - 47A604F4D1DC4B94B3F02827 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = "<group>"; }; - 48C93DD582CA4F0288FE9FC9 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = "<group>"; }; - 4BE4DD0DBB2946AFA091BBBF /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = "<group>"; }; - 4C54CA9039F0499594A6C9F7 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = "<group>"; }; - 4C7FA56757614EAB9FD52C4C /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = "<group>"; }; - 51ADB617F4CC467CB15C554F /* PSTCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionView.m; path = PSTCollectionView/PSTCollectionView.m; sourceTree = "<group>"; }; - 52EC6D4C778F4426A388CF33 /* PSTCollectionViewData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewData.h; path = PSTCollectionView/PSTCollectionViewData.h; sourceTree = "<group>"; }; - 536EE4FA864D4BCABFA44814 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = "<group>"; }; - 54F20387993E41CA8804DE0A /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = "<group>"; }; - 55E1A7FFE054400C8BAFDD62 /* PSTCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionView.h; path = PSTCollectionView/PSTCollectionView.h; sourceTree = "<group>"; }; - 56C146BB0AA7498994FE61EC /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = "<group>"; }; - 572B2EF96961482CB412B0A8 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = "<group>"; }; - 576D3AFEFC3740FBB2520603 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 59700A4598B545D49A0CC7E1 /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = "<group>"; }; - 59D39B7551454967A523B581 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = "<group>"; }; - 5A3F64B2F283493180FEBC97 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = "<group>"; }; - 5A640D603C5B4F62B3DCAD7B /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = "<group>"; }; - 5AAC91AA259447EF9D8ABAD3 /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseQueue.h; path = src/fmdb/FMDatabaseQueue.h; sourceTree = "<group>"; }; - 5AB4B63949B743EF83CAFB74 /* PSTCollectionViewCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewCommon.h; path = PSTCollectionView/PSTCollectionViewCommon.h; sourceTree = "<group>"; }; - 5BF20DC42EE2480195932C47 /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 5C09CD913B3D4262BF0F870E /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; }; - 5CDC4574D35E4FB6BFD5F1D5 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = "<group>"; }; - 5FDF8713B81A4441BC487B58 /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = "<group>"; }; - 6179568D75F947CB8D983399 /* Pods-PSTCollectionView-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PSTCollectionView-Private.xcconfig"; sourceTree = "<group>"; }; - 63B94333C5F443F4BC851921 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = "<group>"; }; - 645624F192C04C6E862D213F /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = "<group>"; }; - 645B91EB11814B2ABADE9613 /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabasePool.m; path = src/fmdb/FMDatabasePool.m; sourceTree = "<group>"; }; - 6637B41E999948CC93A9D476 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = "<group>"; }; - 68D75DF8F67448FBB7BF655E /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = "<group>"; }; - 699DEF06E3CB4EAA9F52E092 /* PSTCollectionViewData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewData.m; path = PSTCollectionView/PSTCollectionViewData.m; sourceTree = "<group>"; }; - 6ABBB5ADF786435EA7F62EE9 /* Pods-HPGrowingTextView-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HPGrowingTextView-Private.xcconfig"; sourceTree = "<group>"; }; - 6AD4456A53924D1A8F228522 /* Pods-MBProgressHUD-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MBProgressHUD-Private.xcconfig"; sourceTree = "<group>"; }; - 6B987BA3B07A4759B8E61A89 /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = "<group>"; }; - 6D7016CE165F4D2E96EC0588 /* PSTGridLayoutRow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTGridLayoutRow.h; path = PSTCollectionView/PSTGridLayoutRow.h; sourceTree = "<group>"; }; - 71467175F54C4EA49894F633 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = "<group>"; }; - 7415B180D83D4490B7EB6A34 /* libPods-HPGrowingTextView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HPGrowingTextView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 74F2DA4648204422B46D6432 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 76375C3B6ECD4B8FA59762E5 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = "<group>"; }; - 7663B5C1D0194C5D94369514 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = "<group>"; }; - 76863DDA0F3E485395D258BF /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = "<group>"; }; - 768DF77EC3894ABEB64AD7D0 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = "<group>"; }; - 76E542B419874C60BB204ED5 /* PSTCollectionViewItemKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewItemKey.m; path = PSTCollectionView/PSTCollectionViewItemKey.m; sourceTree = "<group>"; }; - 76EF45BC6757411F94A04E80 /* libPods-DACircularProgress.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DACircularProgress.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 770E0036EA7440A39871BBDB /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = "<group>"; }; - 7824C344EB8A40EBBA1A3512 /* HPTextViewInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HPTextViewInternal.h; path = class/HPTextViewInternal.h; sourceTree = "<group>"; }; - 78EB80303B8740C39B9C5930 /* NSIndexPath+PSTCollectionViewAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSIndexPath+PSTCollectionViewAdditions.m"; path = "PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.m"; sourceTree = "<group>"; }; - 7942B997936C46F7920591F7 /* PSTCollectionViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewLayout.h; path = PSTCollectionView/PSTCollectionViewLayout.h; sourceTree = "<group>"; }; - 7A486D468B094639ABF61249 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.xcconfig; sourceTree = "<group>"; }; - 7CA433C44150447E97AC1B21 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = "<group>"; }; - 7E831E07B9F44AB4B21065D0 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = "<group>"; }; - 835B486F4654429986A3B06F /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = "<group>"; }; - 849E590F870F4B2DA9F49727 /* Pods-PSTCollectionView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PSTCollectionView.xcconfig"; sourceTree = "<group>"; }; - 88DC636B36A345ACB78EFE6D /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = "<group>"; }; - 91F563D462584273895F9191 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 926B61F3686445D0B8793EF1 /* libPods-MBProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MBProgressHUD.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 93DDB2FA423A46A49A74E3BF /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = "<group>"; }; - 9401FF4EB0974DD3953FEB42 /* Pods-MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MBProgressHUD-prefix.pch"; sourceTree = "<group>"; }; - 970A19CE529449678D3BD82E /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = "<group>"; }; - 975605BA57264090A92A3B66 /* Pods-SDWebImage-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SDWebImage-Private.xcconfig"; sourceTree = "<group>"; }; - 98981F1BBFBD400A9A06248E /* Pods-FMDB-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FMDB-Private.xcconfig"; sourceTree = "<group>"; }; - 9B5639D296534E9A860F7A53 /* PSTGridLayoutInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTGridLayoutInfo.h; path = PSTCollectionView/PSTGridLayoutInfo.h; sourceTree = "<group>"; }; - 9C08AED07AEF436D9BB7D546 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = "<group>"; }; - 9C27743D382541A6B32A1435 /* Pods-FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FMDB.xcconfig"; sourceTree = "<group>"; }; - 9EAD1056287A44F791985996 /* Pods-HPGrowingTextView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HPGrowingTextView.xcconfig"; sourceTree = "<group>"; }; - 9EBA87341EE2463D95723ED9 /* PSTCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewController.m; path = PSTCollectionView/PSTCollectionViewController.m; sourceTree = "<group>"; }; - 9F39505D70CB4A2484D55B14 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = "<group>"; }; - 9FA5E50E3C2E41AEA3820C44 /* Pods-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-environment.h"; sourceTree = "<group>"; }; - 9FC04AD4707A45B4AFE29A9F /* Pods-FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FMDB-prefix.pch"; sourceTree = "<group>"; }; - 9FD0DF68FF234E47B4A2B134 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = "<group>"; }; - A069415F6AE24E66824E8522 /* Pods-DACircularProgress-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DACircularProgress-prefix.pch"; sourceTree = "<group>"; }; - A16B45B6D79E44B2BD8CED26 /* PSTGridLayoutSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTGridLayoutSection.h; path = PSTCollectionView/PSTGridLayoutSection.h; sourceTree = "<group>"; }; - A1E99867848247E5BB2C72AD /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = "<group>"; }; - A3CBA3DB9996446D9C561B35 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabasePool.h; path = src/fmdb/FMDatabasePool.h; sourceTree = "<group>"; }; - ABF442CB31314AA6A20656CB /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = "<group>"; }; - AC94FE51BABD4D82B84A97A3 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = "<group>"; }; - AD86A6D1780646F492F8E6AA /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = "<group>"; }; - ADC186D394DE4ED1AC2D13CE /* PSTCollectionViewFlowLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewFlowLayout.h; path = PSTCollectionView/PSTCollectionViewFlowLayout.h; sourceTree = "<group>"; }; - AF7C6233218F4AB48355F509 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; }; - B1979C6F62014B808DC4208E /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = "<group>"; }; - B19B67BCAD674EBCAA10E2C6 /* PSTCollectionViewLayout+Internals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PSTCollectionViewLayout+Internals.h"; path = "PSTCollectionView/PSTCollectionViewLayout+Internals.h"; sourceTree = "<group>"; }; - B2A48221FD2A4C05AE8834EC /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = "<group>"; }; - B994E5B70EE24746842F71AB /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = "<group>"; }; - BACD42D68BE547CF93521F63 /* HPGrowingTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HPGrowingTextView.m; path = class/HPGrowingTextView.m; sourceTree = "<group>"; }; - BB281B8A60D340629ED91AF2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - BE69EFFEAB7E48C49CEB7D98 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = "<group>"; }; - BEE1D02A32E0473F9E69FADE /* Pods-AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AFNetworking-dummy.m"; sourceTree = "<group>"; }; - C15B8B2C005249C1BCD13FEB /* Pods-PSTCollectionView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PSTCollectionView-dummy.m"; sourceTree = "<group>"; }; - C1810513982447C19601FED5 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = "<group>"; }; - C39A9A58653F4AB8A570C4A7 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = "<group>"; }; - C53E3411D3904551914EA143 /* PSTCollectionViewUpdateItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewUpdateItem.m; path = PSTCollectionView/PSTCollectionViewUpdateItem.m; sourceTree = "<group>"; }; - C5EAA2F518BD4370BC444AF8 /* libPods-PSTCollectionView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PSTCollectionView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C8856AD7FAB2438E984ADFF2 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = "<group>"; }; - CB16ECCB83864CD2941D5A8A /* libPods-FMDB.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FMDB.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - CF85D335DC3844119C4DD19F /* PSTCollectionViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewLayout.m; path = PSTCollectionView/PSTCollectionViewLayout.m; sourceTree = "<group>"; }; - CFABD4EDD2B44E1FA608D8F1 /* Pods-AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AFNetworking-prefix.pch"; sourceTree = "<group>"; }; - D0D7A48B94C0480B8A804E0F /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = "<group>"; }; - D16EC54F704840CEAEFDA33C /* Pods-DACircularProgress-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DACircularProgress-dummy.m"; sourceTree = "<group>"; }; - D694443B619A49FA8CA36106 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = "<group>"; }; - D6E0C3ECB68D4012BA26A784 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = "<group>"; }; - D860B7B0FDD142528CCEBFBF /* Pods-AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AFNetworking-Private.xcconfig"; sourceTree = "<group>"; }; - DD35094CD818437682645F8E /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = "<group>"; }; - DE532058C8094E789971EF76 /* PSTCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewCell.h; path = PSTCollectionView/PSTCollectionViewCell.h; sourceTree = "<group>"; }; - DEB8498723494C169FA5754B /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = "<group>"; }; - DF6871C9C9C54FFB8D1DD0BA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - DF7407E0F4414427A33C4C03 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = "<group>"; }; - DFA6D792E8984E81B1CFBEDB /* libPods-AFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AFNetworking.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - DFF2900B7BB4473C95FAE85A /* Pods-DACircularProgress-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DACircularProgress-Private.xcconfig"; sourceTree = "<group>"; }; - E0F61B955F4445D88D8C5081 /* HPTextViewInternal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HPTextViewInternal.m; path = class/HPTextViewInternal.m; sourceTree = "<group>"; }; - E1AD75DA708F46A8B21D5360 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = "<group>"; }; - E585B8F579DE42189F5B3A0B /* PSTCollectionViewItemKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewItemKey.h; path = PSTCollectionView/PSTCollectionViewItemKey.h; sourceTree = "<group>"; }; - E64F367D3FA742E5BB9FE6C9 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = "<group>"; }; - E670959DE6E6423EA9F24D2C /* PSTGridLayoutSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTGridLayoutSection.m; path = PSTCollectionView/PSTGridLayoutSection.m; sourceTree = "<group>"; }; - E7566705134649339149AD6E /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = "<group>"; }; - E9352C6AB61C4A7EB9163B38 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = "<group>"; }; - EA8364325180415E95B671E0 /* PSTGridLayoutRow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTGridLayoutRow.m; path = PSTCollectionView/PSTGridLayoutRow.m; sourceTree = "<group>"; }; - EAD0E93B60894D6F9F51999E /* Pods-PSTCollectionView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-PSTCollectionView-prefix.pch"; sourceTree = "<group>"; }; - EAEA475A56094305863C7A5B /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - EB5E52D126F444A68666F854 /* libPods-SDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SDWebImage.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - ED465EE3CE8E4749BA0CB762 /* DACircularProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DACircularProgressView.m; path = DACircularProgress/DACircularProgressView.m; sourceTree = "<group>"; }; - EDB1D5A5FEB3485DBA318248 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = "<group>"; }; - EF0A5392B73F4CBCAD57F8BE /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = "<group>"; }; - EF0D74C95F4C405E98677F17 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = "<group>"; }; - EF9E736EE7D44A05AE2316C2 /* PSTCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSTCollectionViewCell.m; path = PSTCollectionView/PSTCollectionViewCell.m; sourceTree = "<group>"; }; - F238FF9CF6054215B25494C4 /* HPGrowingTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HPGrowingTextView.h; path = class/HPGrowingTextView.h; sourceTree = "<group>"; }; - F4593046293A420E975CDF90 /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = "<group>"; }; - F57A21A4A32445FEA64AADF6 /* NSIndexPath+PSTCollectionViewAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSIndexPath+PSTCollectionViewAdditions.h"; path = "PSTCollectionView/NSIndexPath+PSTCollectionViewAdditions.h"; sourceTree = "<group>"; }; - F66CD5161B194433BCC9EA34 /* PSTCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTCollectionViewController.h; path = PSTCollectionView/PSTCollectionViewController.h; sourceTree = "<group>"; }; - FAF306646E7A488EBDAD7090 /* Pods-MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MBProgressHUD.xcconfig"; sourceTree = "<group>"; }; - FB22391B337C4748AAD86E1B /* PSTGridLayoutItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSTGridLayoutItem.h; path = PSTCollectionView/PSTGridLayoutItem.h; sourceTree = "<group>"; }; - FD0D98B01E094A488B96E071 /* Pods-SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SDWebImage-dummy.m"; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 2C81D6EEDD304F4E98437D23 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DC03F60342BA4D29AB7BE5F4 /* Foundation.framework in Frameworks */, - 777AA3A55E8A495FBE1619F5 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 505E2D918C354B98B3AACEA6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 40A3DF46CA5E497C8056E956 /* CoreGraphics.framework in Frameworks */, - CE8B251AA4AB4186A34CFAA3 /* Foundation.framework in Frameworks */, - 5DC9B667CEC04DAAB3667134 /* MobileCoreServices.framework in Frameworks */, - AFAB3CAB4BE946F3A139738A /* Security.framework in Frameworks */, - 5BCF0FBEE2B74BD89520B338 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 51683355C53747E9B5A1CA76 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 652CCD9C088C42A08657E1A3 /* Foundation.framework in Frameworks */, - 3521F4F82F5249ADBF596F5F /* QuartzCore.framework in Frameworks */, - E10A833E75244A6E856DF3BC /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6537E4E9C71D4E0FA1DAD9CC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 50B05A08C75948A9AED4B124 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 94733210314B44E2807133BF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 02C6F6108F1B4D46981FBC83 /* Foundation.framework in Frameworks */, - D8933CCFBB904C608BB88983 /* ImageIO.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BB8EB13D86BD440D85322D61 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B0AEE7A01AF84953ACA68002 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E777D3BD47844473947C73A5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 42F37EE617C54451899B739F /* Foundation.framework in Frameworks */, - 4B760EDC9C6B4B248FD62711 /* libPods-AFNetworking.a in Frameworks */, - 97F7D3FA2FDE4C249DD55C82 /* libPods-DACircularProgress.a in Frameworks */, - B63FF86B7FB74745B1F31DB5 /* libPods-FMDB.a in Frameworks */, - BD5F01E395634B629F387260 /* libPods-HPGrowingTextView.a in Frameworks */, - FB32F919A3224471A7C45160 /* libPods-MBProgressHUD.a in Frameworks */, - 3247217837D74248A2AF05E4 /* libPods-PSTCollectionView.a in Frameworks */, - 0A27971140E04C71BE5CAF59 /* libPods-SDWebImage.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E7DA9712F4B04668BBD2982E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A8CAA80734A94557BF10EF0D /* CoreGraphics.framework in Frameworks */, - FA9210D66B2F4F69876838E9 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 008844B5C3D2475983725799 /* Support Files */ = { - isa = PBXGroup; - children = ( - 367CECAE1A46488E88AD08C2 /* Pods-SDWebImage.xcconfig */, - 975605BA57264090A92A3B66 /* Pods-SDWebImage-Private.xcconfig */, - FD0D98B01E094A488B96E071 /* Pods-SDWebImage-dummy.m */, - 2126FD0562F442EC930CA696 /* Pods-SDWebImage-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - 0159F46DFDB8462DA6BABAFD /* Core */ = { - isa = PBXGroup; - children = ( - 68D75DF8F67448FBB7BF655E /* NSData+ImageContentType.h */, - 5CDC4574D35E4FB6BFD5F1D5 /* NSData+ImageContentType.m */, - 308FE5AA98C344CBB8D2E65D /* SDImageCache.h */, - 175E44F8A0454F4789745365 /* SDImageCache.m */, - 5A3F64B2F283493180FEBC97 /* SDWebImageCompat.h */, - 6637B41E999948CC93A9D476 /* SDWebImageCompat.m */, - EF0A5392B73F4CBCAD57F8BE /* SDWebImageDecoder.h */, - 536EE4FA864D4BCABFA44814 /* SDWebImageDecoder.m */, - 59D39B7551454967A523B581 /* SDWebImageDownloader.h */, - 4316C38BC42D4039B6A628D1 /* SDWebImageDownloader.m */, - DF7407E0F4414427A33C4C03 /* SDWebImageDownloaderOperation.h */, - 5C09CD913B3D4262BF0F870E /* SDWebImageDownloaderOperation.m */, - E9352C6AB61C4A7EB9163B38 /* SDWebImageManager.h */, - D0D7A48B94C0480B8A804E0F /* SDWebImageManager.m */, - 4C7FA56757614EAB9FD52C4C /* SDWebImageOperation.h */, - 4C54CA9039F0499594A6C9F7 /* SDWebImagePrefetcher.h */, - 471F5ECF9D384E8B91616395 /* SDWebImagePrefetcher.m */, - E64F367D3FA742E5BB9FE6C9 /* UIButton+WebCache.h */, - 4BE4DD0DBB2946AFA091BBBF /* UIButton+WebCache.m */, - BE69EFFEAB7E48C49CEB7D98 /* UIImage+GIF.h */, - C39A9A58653F4AB8A570C4A7 /* UIImage+GIF.m */, - E7566705134649339149AD6E /* UIImage+MultiFormat.h */, - 88DC636B36A345ACB78EFE6D /* UIImage+MultiFormat.m */, - AF7C6233218F4AB48355F509 /* UIImageView+HighlightedWebCache.h */, - 47203F45DC99423191FDA697 /* UIImageView+HighlightedWebCache.m */, - 71467175F54C4EA49894F633 /* UIImageView+WebCache.h */, - B1979C6F62014B808DC4208E /* UIImageView+WebCache.m */, - D6E0C3ECB68D4012BA26A784 /* UIView+WebCacheOperation.h */, - 1A1865E1191B4FD3B723A2A1 /* UIView+WebCacheOperation.m */, - ); - name = Core; - sourceTree = "<group>"; - }; - 06FF23DA78C44536932BDC34 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9C27743D382541A6B32A1435 /* Pods-FMDB.xcconfig */, - 98981F1BBFBD400A9A06248E /* Pods-FMDB-Private.xcconfig */, - 06786C80684D4E66A0F4E9B5 /* Pods-FMDB-dummy.m */, - 9FC04AD4707A45B4AFE29A9F /* Pods-FMDB-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - 0C6A73A12F6E49E398AD609E /* NSURLConnection */ = { - isa = PBXGroup; - children = ( - DEB8498723494C169FA5754B /* AFHTTPRequestOperation.h */, - 54F20387993E41CA8804DE0A /* AFHTTPRequestOperation.m */, - EF0D74C95F4C405E98677F17 /* AFHTTPRequestOperationManager.h */, - 9F39505D70CB4A2484D55B14 /* AFHTTPRequestOperationManager.m */, - 5A640D603C5B4F62B3DCAD7B /* AFURLConnectionOperation.h */, - 248A1BEA459F41FC83DB3AF7 /* AFURLConnectionOperation.m */, - ); - name = NSURLConnection; - sourceTree = "<group>"; - }; - 0D0E1A74A9DA4BAC87EEFEDC /* Support Files */ = { - isa = PBXGroup; - children = ( - 39A17077D593460DA1F54E26 /* Pods-AFNetworking.xcconfig */, - D860B7B0FDD142528CCEBFBF /* Pods-AFNetworking-Private.xcconfig */, - BEE1D02A32E0473F9E69FADE /* Pods-AFNetworking-dummy.m */, - CFABD4EDD2B44E1FA608D8F1 /* Pods-AFNetworking-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - 243752F8D7B94B33BFF01091 /* NSURLSession */ = { - isa = PBXGroup; - children = ( - 9C08AED07AEF436D9BB7D546 /* AFHTTPSessionManager.h */, - 47A604F4D1DC4B94B3F02827 /* AFHTTPSessionManager.m */, - A1E99867848247E5BB2C72AD /* AFURLSessionManager.h */, - 48C93DD582CA4F0288FE9FC9 /* AFURLSessionManager.m */, - ); - name = NSURLSession; - sourceTree = "<group>"; - }; - 256C71EFC1AE4EA78F2C2A27 /* Reachability */ = { - isa = PBXGroup; - children = ( - EDB1D5A5FEB3485DBA318248 /* AFNetworkReachabilityManager.h */, - ABF442CB31314AA6A20656CB /* AFNetworkReachabilityManager.m */, - ); - name = Reachability; - sourceTree = "<group>"; - }; - 2AED60C2C5124477B1D7FA5B /* Pods */ = { - isa = PBXGroup; - children = ( - E685743D80D8421BBFB0BAB4 /* AFNetworking */, - 7D3571DF85934BA2896B3855 /* DACircularProgress */, - 48A30E4D43E740CF9085C275 /* FMDB */, - 55D6D10135274E98B8321A31 /* HPGrowingTextView */, - F46176FC7E224764B1C2B900 /* MBProgressHUD */, - 2D477BCF8B434D21808F3CEB /* PSTCollectionView */, - 9C32ADA6A46F455B9D347262 /* SDWebImage */, - ); - name = Pods; - sourceTree = "<group>"; - }; - 2D477BCF8B434D21808F3CEB /* PSTCollectionView */ = { - isa = PBXGroup; - children = ( - F57A21A4A32445FEA64AADF6 /* NSIndexPath+PSTCollectionViewAdditions.h */, - 78EB80303B8740C39B9C5930 /* NSIndexPath+PSTCollectionViewAdditions.m */, - 55E1A7FFE054400C8BAFDD62 /* PSTCollectionView.h */, - 51ADB617F4CC467CB15C554F /* PSTCollectionView.m */, - DE532058C8094E789971EF76 /* PSTCollectionViewCell.h */, - EF9E736EE7D44A05AE2316C2 /* PSTCollectionViewCell.m */, - 5AB4B63949B743EF83CAFB74 /* PSTCollectionViewCommon.h */, - F66CD5161B194433BCC9EA34 /* PSTCollectionViewController.h */, - 9EBA87341EE2463D95723ED9 /* PSTCollectionViewController.m */, - 52EC6D4C778F4426A388CF33 /* PSTCollectionViewData.h */, - 699DEF06E3CB4EAA9F52E092 /* PSTCollectionViewData.m */, - ADC186D394DE4ED1AC2D13CE /* PSTCollectionViewFlowLayout.h */, - 42860755AC8345349F7CBC52 /* PSTCollectionViewFlowLayout.m */, - E585B8F579DE42189F5B3A0B /* PSTCollectionViewItemKey.h */, - 76E542B419874C60BB204ED5 /* PSTCollectionViewItemKey.m */, - 7942B997936C46F7920591F7 /* PSTCollectionViewLayout.h */, - CF85D335DC3844119C4DD19F /* PSTCollectionViewLayout.m */, - B19B67BCAD674EBCAA10E2C6 /* PSTCollectionViewLayout+Internals.h */, - 2E574737E8ED4ADAB4DF85D1 /* PSTCollectionViewUpdateItem.h */, - C53E3411D3904551914EA143 /* PSTCollectionViewUpdateItem.m */, - 9B5639D296534E9A860F7A53 /* PSTGridLayoutInfo.h */, - 09D411453AC74D228264E8AD /* PSTGridLayoutInfo.m */, - FB22391B337C4748AAD86E1B /* PSTGridLayoutItem.h */, - 15C327FC9C764F498C48A384 /* PSTGridLayoutItem.m */, - 6D7016CE165F4D2E96EC0588 /* PSTGridLayoutRow.h */, - EA8364325180415E95B671E0 /* PSTGridLayoutRow.m */, - A16B45B6D79E44B2BD8CED26 /* PSTGridLayoutSection.h */, - E670959DE6E6423EA9F24D2C /* PSTGridLayoutSection.m */, - A5A4478C7D554E73BB42E897 /* Support Files */, - ); - name = PSTCollectionView; - path = PSTCollectionView; - sourceTree = "<group>"; - }; - 39DDC2EF4BDB44419A543D45 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9EAD1056287A44F791985996 /* Pods-HPGrowingTextView.xcconfig */, - 6ABBB5ADF786435EA7F62EE9 /* Pods-HPGrowingTextView-Private.xcconfig */, - 44C18FDA0FB64BCA879F67F0 /* Pods-HPGrowingTextView-dummy.m */, - 073601ED15FD45E48448F6BD /* Pods-HPGrowingTextView-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - 422B06B3697E48C79A89CDF4 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - CADC84EF2967432199F8CD0D /* Pods */, - ); - name = "Targets Support Files"; - sourceTree = "<group>"; - }; - 48A30E4D43E740CF9085C275 /* FMDB */ = { - isa = PBXGroup; - children = ( - 06FF23DA78C44536932BDC34 /* Support Files */, - F965403D9B73468AB6DC10DD /* common */, - ); - name = FMDB; - path = FMDB; - sourceTree = "<group>"; - }; - 545F432DA1474C45A788E41B /* Security */ = { - isa = PBXGroup; - children = ( - DD35094CD818437682645F8E /* AFSecurityPolicy.h */, - C8856AD7FAB2438E984ADFF2 /* AFSecurityPolicy.m */, - ); - name = Security; - sourceTree = "<group>"; - }; - 55D6D10135274E98B8321A31 /* HPGrowingTextView */ = { - isa = PBXGroup; - children = ( - F238FF9CF6054215B25494C4 /* HPGrowingTextView.h */, - BACD42D68BE547CF93521F63 /* HPGrowingTextView.m */, - 7824C344EB8A40EBBA1A3512 /* HPTextViewInternal.h */, - E0F61B955F4445D88D8C5081 /* HPTextViewInternal.m */, - 39DDC2EF4BDB44419A543D45 /* Support Files */, - ); - name = HPGrowingTextView; - path = HPGrowingTextView; - sourceTree = "<group>"; - }; - 6F9D5E7A41A542C58D072E1D /* Support Files */ = { - isa = PBXGroup; - children = ( - FAF306646E7A488EBDAD7090 /* Pods-MBProgressHUD.xcconfig */, - 6AD4456A53924D1A8F228522 /* Pods-MBProgressHUD-Private.xcconfig */, - 1B5D00ECD6594C2F98856070 /* Pods-MBProgressHUD-dummy.m */, - 9401FF4EB0974DD3953FEB42 /* Pods-MBProgressHUD-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - 72CB042FA60F4C01A4D1BB6D /* UIKit */ = { - isa = PBXGroup; - children = ( - 770E0036EA7440A39871BBDB /* AFNetworkActivityIndicatorManager.h */, - 1EBC97544C9542818E34C8D6 /* AFNetworkActivityIndicatorManager.m */, - 970A19CE529449678D3BD82E /* UIActivityIndicatorView+AFNetworking.h */, - 645624F192C04C6E862D213F /* UIActivityIndicatorView+AFNetworking.m */, - 1000240CFB7C496695E7355F /* UIAlertView+AFNetworking.h */, - 2CD2E8AA574245278AC625D0 /* UIAlertView+AFNetworking.m */, - 22AB8B1D32C44B6FA6A99234 /* UIButton+AFNetworking.h */, - AD86A6D1780646F492F8E6AA /* UIButton+AFNetworking.m */, - 24CE0CEA4432416FA7088581 /* UIImageView+AFNetworking.h */, - D694443B619A49FA8CA36106 /* UIImageView+AFNetworking.m */, - AC94FE51BABD4D82B84A97A3 /* UIKit+AFNetworking.h */, - 35931D6299184F8DBE3A5576 /* UIProgressView+AFNetworking.h */, - 63B94333C5F443F4BC851921 /* UIProgressView+AFNetworking.m */, - 56C146BB0AA7498994FE61EC /* UIRefreshControl+AFNetworking.h */, - B994E5B70EE24746842F71AB /* UIRefreshControl+AFNetworking.m */, - 7CA433C44150447E97AC1B21 /* UIWebView+AFNetworking.h */, - 9FD0DF68FF234E47B4A2B134 /* UIWebView+AFNetworking.m */, - ); - name = UIKit; - sourceTree = "<group>"; - }; - 7D3571DF85934BA2896B3855 /* DACircularProgress */ = { - isa = PBXGroup; - children = ( - 070CE4A5E33A453B9AA91692 /* DACircularProgressView.h */, - ED465EE3CE8E4749BA0CB762 /* DACircularProgressView.m */, - B2EE53D59ED041A88ACD4CCB /* Support Files */, - ); - name = DACircularProgress; - path = DACircularProgress; - sourceTree = "<group>"; - }; - 907728F4438F4EBE8DEDE9A7 /* Products */ = { - isa = PBXGroup; - children = ( - 22E969682962484B9E64539B /* libPods.a */, - DFA6D792E8984E81B1CFBEDB /* libPods-AFNetworking.a */, - 76EF45BC6757411F94A04E80 /* libPods-DACircularProgress.a */, - CB16ECCB83864CD2941D5A8A /* libPods-FMDB.a */, - 7415B180D83D4490B7EB6A34 /* libPods-HPGrowingTextView.a */, - 926B61F3686445D0B8793EF1 /* libPods-MBProgressHUD.a */, - C5EAA2F518BD4370BC444AF8 /* libPods-PSTCollectionView.a */, - EB5E52D126F444A68666F854 /* libPods-SDWebImage.a */, - ); - name = Products; - sourceTree = "<group>"; - }; - 9C32ADA6A46F455B9D347262 /* SDWebImage */ = { - isa = PBXGroup; - children = ( - 0159F46DFDB8462DA6BABAFD /* Core */, - 008844B5C3D2475983725799 /* Support Files */, - ); - name = SDWebImage; - path = SDWebImage; - sourceTree = "<group>"; - }; - A5A4478C7D554E73BB42E897 /* Support Files */ = { - isa = PBXGroup; - children = ( - 849E590F870F4B2DA9F49727 /* Pods-PSTCollectionView.xcconfig */, - 6179568D75F947CB8D983399 /* Pods-PSTCollectionView-Private.xcconfig */, - C15B8B2C005249C1BCD13FEB /* Pods-PSTCollectionView-dummy.m */, - EAD0E93B60894D6F9F51999E /* Pods-PSTCollectionView-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - ACA5BD51AF6D4B73B711452B /* Frameworks */ = { - isa = PBXGroup; - children = ( - B9612D2AC13644248C3F3E0F /* iOS */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - B2EE53D59ED041A88ACD4CCB /* Support Files */ = { - isa = PBXGroup; - children = ( - 4389A9D80BBD4441848BBE15 /* Pods-DACircularProgress.xcconfig */, - DFF2900B7BB4473C95FAE85A /* Pods-DACircularProgress-Private.xcconfig */, - D16EC54F704840CEAEFDA33C /* Pods-DACircularProgress-dummy.m */, - A069415F6AE24E66824E8522 /* Pods-DACircularProgress-prefix.pch */, - ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; - }; - B9612D2AC13644248C3F3E0F /* iOS */ = { - isa = PBXGroup; - children = ( - 38D2B2BFA7C843509929DB6D /* CoreGraphics.framework */, - 16303EADC8454C8A9A9562C6 /* Foundation.framework */, - BB281B8A60D340629ED91AF2 /* ImageIO.framework */, - 74F2DA4648204422B46D6432 /* MobileCoreServices.framework */, - DF6871C9C9C54FFB8D1DD0BA /* QuartzCore.framework */, - 576D3AFEFC3740FBB2520603 /* Security.framework */, - EAEA475A56094305863C7A5B /* SystemConfiguration.framework */, - 91F563D462584273895F9191 /* UIKit.framework */, - ); - name = iOS; - sourceTree = "<group>"; - }; - CADC84EF2967432199F8CD0D /* Pods */ = { - isa = PBXGroup; - children = ( - 7A486D468B094639ABF61249 /* Pods.xcconfig */, - 3444037FE2D54233B8478C5A /* Pods-acknowledgements.markdown */, - 93DDB2FA423A46A49A74E3BF /* Pods-acknowledgements.plist */, - 7663B5C1D0194C5D94369514 /* Pods-dummy.m */, - 9FA5E50E3C2E41AEA3820C44 /* Pods-environment.h */, - E1AD75DA708F46A8B21D5360 /* Pods-resources.sh */, - ); - name = Pods; - sourceTree = "<group>"; - }; - E05629AE55244E17960A3D38 /* Serialization */ = { - isa = PBXGroup; - children = ( - 45262B5120264DCC9043D483 /* AFURLRequestSerialization.h */, - C1810513982447C19601FED5 /* AFURLRequestSerialization.m */, - 7E831E07B9F44AB4B21065D0 /* AFURLResponseSerialization.h */, - 768DF77EC3894ABEB64AD7D0 /* AFURLResponseSerialization.m */, - ); - name = Serialization; - sourceTree = "<group>"; - }; - E685743D80D8421BBFB0BAB4 /* AFNetworking */ = { - isa = PBXGroup; - children = ( - 4392F0806DAF4F7E813F2966 /* AFNetworking.h */, - 0C6A73A12F6E49E398AD609E /* NSURLConnection */, - 243752F8D7B94B33BFF01091 /* NSURLSession */, - 256C71EFC1AE4EA78F2C2A27 /* Reachability */, - 545F432DA1474C45A788E41B /* Security */, - E05629AE55244E17960A3D38 /* Serialization */, - 0D0E1A74A9DA4BAC87EEFEDC /* Support Files */, - 72CB042FA60F4C01A4D1BB6D /* UIKit */, - ); - name = AFNetworking; - path = AFNetworking; - sourceTree = "<group>"; - }; - F46176FC7E224764B1C2B900 /* MBProgressHUD */ = { - isa = PBXGroup; - children = ( - 76863DDA0F3E485395D258BF /* MBProgressHUD.h */, - 41A8238AE447460183030650 /* MBProgressHUD.m */, - 6F9D5E7A41A542C58D072E1D /* Support Files */, - ); - name = MBProgressHUD; - path = MBProgressHUD; - sourceTree = "<group>"; - }; - F73DF86B0E21443384F71EB3 = { - isa = PBXGroup; - children = ( - 5BF20DC42EE2480195932C47 /* Podfile */, - ACA5BD51AF6D4B73B711452B /* Frameworks */, - 2AED60C2C5124477B1D7FA5B /* Pods */, - 907728F4438F4EBE8DEDE9A7 /* Products */, - 422B06B3697E48C79A89CDF4 /* Targets Support Files */, - ); - sourceTree = "<group>"; - }; - F965403D9B73468AB6DC10DD /* common */ = { - isa = PBXGroup; - children = ( - B2A48221FD2A4C05AE8834EC /* FMDB.h */, - F4593046293A420E975CDF90 /* FMDatabase.h */, - 59700A4598B545D49A0CC7E1 /* FMDatabase.m */, - 572B2EF96961482CB412B0A8 /* FMDatabaseAdditions.h */, - 76375C3B6ECD4B8FA59762E5 /* FMDatabaseAdditions.m */, - A3CBA3DB9996446D9C561B35 /* FMDatabasePool.h */, - 645B91EB11814B2ABADE9613 /* FMDatabasePool.m */, - 5AAC91AA259447EF9D8ABAD3 /* FMDatabaseQueue.h */, - 835B486F4654429986A3B06F /* FMDatabaseQueue.m */, - 5FDF8713B81A4441BC487B58 /* FMResultSet.h */, - 6B987BA3B07A4759B8E61A89 /* FMResultSet.m */, - ); - name = common; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 39B0E03F5C0D4B09A0DB08EA /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4E7D6BED809547CF8CFD093C /* MBProgressHUD.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6B3E1E21C4E04B91892F4EF4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F1391069CD0141DC92D5BEDD /* NSData+ImageContentType.h in Headers */, - 58FEAA2693F1461C9B757CB1 /* SDImageCache.h in Headers */, - 8A29EE1F72294D3995D7A4D5 /* SDWebImageCompat.h in Headers */, - AD2B6ED3F0E84BAB98B2D543 /* SDWebImageDecoder.h in Headers */, - 99A8C2CBB6E34CC5B3457525 /* SDWebImageDownloader.h in Headers */, - F384E3513F944A07A3934287 /* SDWebImageDownloaderOperation.h in Headers */, - D15B18F2CFCA4C29B94C2B78 /* SDWebImageManager.h in Headers */, - 4219B1CC18EA4C41B6E30AA2 /* SDWebImageOperation.h in Headers */, - 7D9EC7603C204A788D17539B /* SDWebImagePrefetcher.h in Headers */, - B6034F0A7F384700AA77DBCB /* UIButton+WebCache.h in Headers */, - CDFBD6B51223409794F36489 /* UIImage+GIF.h in Headers */, - A140138F1EBA4570907B378C /* UIImage+MultiFormat.h in Headers */, - 99AAD451357844F997071564 /* UIImageView+HighlightedWebCache.h in Headers */, - 8293766528D64E28A215FDCF /* UIImageView+WebCache.h in Headers */, - 7E883442FD8345DFB1CED8DE /* UIView+WebCacheOperation.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A21781F7B9D04CD09CBDED8E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3191963D7949466CAC3F39BD /* AFHTTPRequestOperation.h in Headers */, - C3FF0708ABB743EF9AE8E07E /* AFHTTPRequestOperationManager.h in Headers */, - DABA3993F94D4C09BA28C66F /* AFHTTPSessionManager.h in Headers */, - 5B9C409C2660446081107F94 /* AFNetworkActivityIndicatorManager.h in Headers */, - 9773C40FF1F64579B7C99430 /* AFNetworkReachabilityManager.h in Headers */, - 2C46BDCF68C44865B4251353 /* AFNetworking.h in Headers */, - E6C7EE9BE9934A43B8B6B383 /* AFSecurityPolicy.h in Headers */, - 00DA3985117B4FAA84B986B8 /* AFURLConnectionOperation.h in Headers */, - A530195B6A9A42208D84983B /* AFURLRequestSerialization.h in Headers */, - A548E62046D84841B23FC1C2 /* AFURLResponseSerialization.h in Headers */, - BCFCAE99F65247E786632731 /* AFURLSessionManager.h in Headers */, - 0BE295CF96454929B1A3419E /* UIActivityIndicatorView+AFNetworking.h in Headers */, - 6C3FDA049F404412AE9D7321 /* UIAlertView+AFNetworking.h in Headers */, - 1A9C64267F3E41D39DDC20F8 /* UIButton+AFNetworking.h in Headers */, - 0A46AC630112494DB8939D46 /* UIImageView+AFNetworking.h in Headers */, - 6DE5627DC8714515AA77C4F9 /* UIKit+AFNetworking.h in Headers */, - AA42E80640DC43B4BACB8CB0 /* UIProgressView+AFNetworking.h in Headers */, - BAA6FDD7000E4810B7966FC9 /* UIRefreshControl+AFNetworking.h in Headers */, - A865A5EC561A46DBA99F5AEA /* UIWebView+AFNetworking.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B18F8EFFDEBE4A24A6F4DDBF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8959BEDB64C54F1DBC9F3593 /* HPGrowingTextView.h in Headers */, - 848B29C597EF4CB38E6EFFE0 /* HPTextViewInternal.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F196B6C6AB5A47CE98BC9844 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F43FAECC076C42CAB5A80905 /* NSIndexPath+PSTCollectionViewAdditions.h in Headers */, - 3DDDD4272B3445FFA440E046 /* PSTCollectionView.h in Headers */, - 54F4B27B35084BB4B69D6728 /* PSTCollectionViewCell.h in Headers */, - 85718E0F4554445FBEED5B35 /* PSTCollectionViewCommon.h in Headers */, - 66DB4AA396E64D658033D653 /* PSTCollectionViewController.h in Headers */, - BC29E84D0B8D42E99E79BB0F /* PSTCollectionViewData.h in Headers */, - 0A900B33D8EF4A0B95F78C32 /* PSTCollectionViewFlowLayout.h in Headers */, - 0D8536788E3C4A8FB1F83CCE /* PSTCollectionViewItemKey.h in Headers */, - 94CE8FBA1CE34105A4FD403F /* PSTCollectionViewLayout+Internals.h in Headers */, - 6ECB7F7460614347BEB632E0 /* PSTCollectionViewLayout.h in Headers */, - 26C7BB1FA96B475095351559 /* PSTCollectionViewUpdateItem.h in Headers */, - 7785A8D5FCDB404C93A5781E /* PSTGridLayoutInfo.h in Headers */, - EA4148BE13AE46118AD32E8A /* PSTGridLayoutItem.h in Headers */, - 889D73D677114766945699CB /* PSTGridLayoutRow.h in Headers */, - 5700999980CD448F9AD8E7B4 /* PSTGridLayoutSection.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8DC86D6E0E14F2DBA9EA963 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6B37E5F7F3E446039525C65E /* FMDB.h in Headers */, - AF21EE712CEB47869F170AEC /* FMDatabase.h in Headers */, - 192FB37B851443EF929D61A6 /* FMDatabaseAdditions.h in Headers */, - 14A25E185911422F988E1D8A /* FMDatabasePool.h in Headers */, - 8B06361955FD49A6A8F9591D /* FMDatabaseQueue.h in Headers */, - 49986DEDE2894B20B84CEEDB /* FMResultSet.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F96025119C4D4F47832F3B86 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C6B703597C4C4D488B2C0D13 /* DACircularProgressView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 13A67AD884FF4FBDB442AE71 /* Pods-FMDB */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2E500EA584884F3A848C086A /* Build configuration list for PBXNativeTarget "Pods-FMDB" */; - buildPhases = ( - 8072D66286AB41FBB90B3181 /* Sources */, - BB8EB13D86BD440D85322D61 /* Frameworks */, - F8DC86D6E0E14F2DBA9EA963 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-FMDB"; - productName = "Pods-FMDB"; - productReference = CB16ECCB83864CD2941D5A8A /* libPods-FMDB.a */; - productType = "com.apple.product-type.library.static"; - }; - 2AC3313D48E245198EF6E097 /* Pods-SDWebImage */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6BEDC58360134F5B9BC193AA /* Build configuration list for PBXNativeTarget "Pods-SDWebImage" */; - buildPhases = ( - 8EFF097F6A04473E86893A32 /* Sources */, - 94733210314B44E2807133BF /* Frameworks */, - 6B3E1E21C4E04B91892F4EF4 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-SDWebImage"; - productName = "Pods-SDWebImage"; - productReference = EB5E52D126F444A68666F854 /* libPods-SDWebImage.a */; - productType = "com.apple.product-type.library.static"; - }; - 7989B25ABCB44FB88015DE9F /* Pods-AFNetworking */ = { - isa = PBXNativeTarget; - buildConfigurationList = F97E16127BCB490BAF7650F5 /* Build configuration list for PBXNativeTarget "Pods-AFNetworking" */; - buildPhases = ( - CF87F470DB4142ECBA110F63 /* Sources */, - 505E2D918C354B98B3AACEA6 /* Frameworks */, - A21781F7B9D04CD09CBDED8E /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-AFNetworking"; - productName = "Pods-AFNetworking"; - productReference = DFA6D792E8984E81B1CFBEDB /* libPods-AFNetworking.a */; - productType = "com.apple.product-type.library.static"; - }; - 84CFA08D163D4AD0BEC37ABA /* Pods */ = { - isa = PBXNativeTarget; - buildConfigurationList = EB280B5D4532425AAB5F363C /* Build configuration list for PBXNativeTarget "Pods" */; - buildPhases = ( - 898758C82C794BE2B55853DD /* Sources */, - E777D3BD47844473947C73A5 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - FA9BEB71242A48D89451E67C /* PBXTargetDependency */, - A1AFA03CC5E84D689C1D4645 /* PBXTargetDependency */, - 8004840C45E04F1D9EBF144F /* PBXTargetDependency */, - 9B63CED9B7E94D96808AA9A5 /* PBXTargetDependency */, - 5059E28E5BA343F787F92AB8 /* PBXTargetDependency */, - 4718E64B24D84A2B9ECE9F5F /* PBXTargetDependency */, - 0F15DB79859C46309DF2BB06 /* PBXTargetDependency */, - ); - name = Pods; - productName = Pods; - productReference = 22E969682962484B9E64539B /* libPods.a */; - productType = "com.apple.product-type.library.static"; - }; - 8D55CFE933564CFB9B3E3372 /* Pods-PSTCollectionView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0370C49996B6471FAB0EB4C9 /* Build configuration list for PBXNativeTarget "Pods-PSTCollectionView" */; - buildPhases = ( - 3F1FA81AA00E4138B7FACF9D /* Sources */, - 51683355C53747E9B5A1CA76 /* Frameworks */, - F196B6C6AB5A47CE98BC9844 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-PSTCollectionView"; - productName = "Pods-PSTCollectionView"; - productReference = C5EAA2F518BD4370BC444AF8 /* libPods-PSTCollectionView.a */; - productType = "com.apple.product-type.library.static"; - }; - D677F7827166425CBE5C8CEB /* Pods-MBProgressHUD */ = { - isa = PBXNativeTarget; - buildConfigurationList = DBD29FC343874C21BC3B45ED /* Build configuration list for PBXNativeTarget "Pods-MBProgressHUD" */; - buildPhases = ( - DD5550D77C4A494DA8CBBB8B /* Sources */, - E7DA9712F4B04668BBD2982E /* Frameworks */, - 39B0E03F5C0D4B09A0DB08EA /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-MBProgressHUD"; - productName = "Pods-MBProgressHUD"; - productReference = 926B61F3686445D0B8793EF1 /* libPods-MBProgressHUD.a */; - productType = "com.apple.product-type.library.static"; - }; - DDC0CD7C0AF648D8B09FA131 /* Pods-DACircularProgress */ = { - isa = PBXNativeTarget; - buildConfigurationList = D88DD284AF454143A7B7787C /* Build configuration list for PBXNativeTarget "Pods-DACircularProgress" */; - buildPhases = ( - 01F4C25DB97E446BA18D820A /* Sources */, - 2C81D6EEDD304F4E98437D23 /* Frameworks */, - F96025119C4D4F47832F3B86 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-DACircularProgress"; - productName = "Pods-DACircularProgress"; - productReference = 76EF45BC6757411F94A04E80 /* libPods-DACircularProgress.a */; - productType = "com.apple.product-type.library.static"; - }; - EDCC7D9519444E7EA3162ED9 /* Pods-HPGrowingTextView */ = { - isa = PBXNativeTarget; - buildConfigurationList = F5EA1DFD27314D8EB3E093FC /* Build configuration list for PBXNativeTarget "Pods-HPGrowingTextView" */; - buildPhases = ( - 3C9C0A7DCDA04A53BD893EED /* Sources */, - 6537E4E9C71D4E0FA1DAD9CC /* Frameworks */, - B18F8EFFDEBE4A24A6F4DDBF /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-HPGrowingTextView"; - productName = "Pods-HPGrowingTextView"; - productReference = 7415B180D83D4490B7EB6A34 /* libPods-HPGrowingTextView.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - F924B23616564ADC807DF70E /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0510; - }; - buildConfigurationList = 7C3A20DE53D345DD941A6CE7 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = F73DF86B0E21443384F71EB3; - productRefGroup = 907728F4438F4EBE8DEDE9A7 /* Products */; - projectDirPath = ""; - projectReferences = ( - ); - projectRoot = ""; - targets = ( - 84CFA08D163D4AD0BEC37ABA /* Pods */, - 7989B25ABCB44FB88015DE9F /* Pods-AFNetworking */, - DDC0CD7C0AF648D8B09FA131 /* Pods-DACircularProgress */, - 13A67AD884FF4FBDB442AE71 /* Pods-FMDB */, - EDCC7D9519444E7EA3162ED9 /* Pods-HPGrowingTextView */, - D677F7827166425CBE5C8CEB /* Pods-MBProgressHUD */, - 8D55CFE933564CFB9B3E3372 /* Pods-PSTCollectionView */, - 2AC3313D48E245198EF6E097 /* Pods-SDWebImage */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 01F4C25DB97E446BA18D820A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43A15E22388A4B60918C607D /* DACircularProgressView.m in Sources */, - F25AE2B69201462082A4F6CE /* Pods-DACircularProgress-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3C9C0A7DCDA04A53BD893EED /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAC9253E13AA4F10ABE35976 /* HPGrowingTextView.m in Sources */, - 9CDCEB2642CE4713981A1916 /* HPTextViewInternal.m in Sources */, - DBC2EC0BEC8C4257B9A91F0F /* Pods-HPGrowingTextView-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3F1FA81AA00E4138B7FACF9D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B8D6F495AA3F4A44BF30F1DA /* NSIndexPath+PSTCollectionViewAdditions.m in Sources */, - B64239213E00485D841095BF /* PSTCollectionView.m in Sources */, - 391ED1EF997146328E54B1CB /* PSTCollectionViewCell.m in Sources */, - 5EAA59ED593445258953CCC3 /* PSTCollectionViewController.m in Sources */, - 4C3641434A474BCEA010ECD4 /* PSTCollectionViewData.m in Sources */, - AA0E68E025F941CFBCB76143 /* PSTCollectionViewFlowLayout.m in Sources */, - D1A006E873EE420882310C87 /* PSTCollectionViewItemKey.m in Sources */, - E3D3E9599DC14FF690E77CE5 /* PSTCollectionViewLayout.m in Sources */, - A6F7591548944C92BE2A43DC /* PSTCollectionViewUpdateItem.m in Sources */, - 79A7DF9A611F40E08E29ED1F /* PSTGridLayoutInfo.m in Sources */, - D15D1931FE084810B6861CCD /* PSTGridLayoutItem.m in Sources */, - BC7C5283976B4F94A34B5544 /* PSTGridLayoutRow.m in Sources */, - F13E7944DDBD4274A8475DB3 /* PSTGridLayoutSection.m in Sources */, - 7CB9A2BD04A14A898A90CC77 /* Pods-PSTCollectionView-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8072D66286AB41FBB90B3181 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FF99C8A133FB4B3CA0F9C43D /* FMDatabase.m in Sources */, - 7AEF48FF92774C0BA70D9D89 /* FMDatabaseAdditions.m in Sources */, - 3F3768E550DF4F5AB6F758C5 /* FMDatabasePool.m in Sources */, - 21024E9C4FA8469989DD000C /* FMDatabaseQueue.m in Sources */, - 301131C965E64DF697FCAC02 /* FMResultSet.m in Sources */, - 78C12131623C45F48A54761A /* Pods-FMDB-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 898758C82C794BE2B55853DD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0E7F731DB1334957925B6E20 /* Pods-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8EFF097F6A04473E86893A32 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9AC5CD580D174D0BA55CFA3B /* NSData+ImageContentType.m in Sources */, - 8C64454A9F1C46B38C3E854A /* Pods-SDWebImage-dummy.m in Sources */, - 3E0897CF8D8D4930B7424DAB /* SDImageCache.m in Sources */, - FA17912E1A444F588E79FA02 /* SDWebImageCompat.m in Sources */, - EAEEBF5E5D694D6FA5EC7C2C /* SDWebImageDecoder.m in Sources */, - 80411B8AE4EC4D55AFF973D5 /* SDWebImageDownloader.m in Sources */, - 688B82CEDD7E43A4AA75F81E /* SDWebImageDownloaderOperation.m in Sources */, - 7917B0A422DA4836B70DEFCE /* SDWebImageManager.m in Sources */, - 15135AEF6D00476A806240C2 /* SDWebImagePrefetcher.m in Sources */, - 6600931EAE704CD28A637691 /* UIButton+WebCache.m in Sources */, - 0D3976EE005B4CCFA00B2294 /* UIImage+GIF.m in Sources */, - 1CAA20AEB85D4D3580331EE6 /* UIImage+MultiFormat.m in Sources */, - 8E53CC6F93B748F5B641E890 /* UIImageView+HighlightedWebCache.m in Sources */, - 558525F8840F43B591D43655 /* UIImageView+WebCache.m in Sources */, - FB993656A4F54BF5A017B166 /* UIView+WebCacheOperation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CF87F470DB4142ECBA110F63 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 204218513A494EA0A2120FF4 /* AFHTTPRequestOperation.m in Sources */, - 3E68D105422C47EBA4A09A19 /* AFHTTPRequestOperationManager.m in Sources */, - 1963ACB111E64234B9837C77 /* AFHTTPSessionManager.m in Sources */, - F67815B75DC74968870C97BD /* AFNetworkActivityIndicatorManager.m in Sources */, - 5DF181C568AA44F191B518F7 /* AFNetworkReachabilityManager.m in Sources */, - D9980EDCE64B42F09509B005 /* AFSecurityPolicy.m in Sources */, - 648C6CE43183455B89772B16 /* AFURLConnectionOperation.m in Sources */, - 6276DCEC19D1436199FB102C /* AFURLRequestSerialization.m in Sources */, - 2EDC7EB3BAB34D4384EAFC56 /* AFURLResponseSerialization.m in Sources */, - 9805191FE2174B56B97CF79E /* AFURLSessionManager.m in Sources */, - B3AB4446C0334A1DBC6C0698 /* Pods-AFNetworking-dummy.m in Sources */, - 2CF72FBA8BEF404992D523C1 /* UIActivityIndicatorView+AFNetworking.m in Sources */, - 81B89AC6C84C4932BCCBAE75 /* UIAlertView+AFNetworking.m in Sources */, - 98E6E8411281473A89FB6D6C /* UIButton+AFNetworking.m in Sources */, - DEBDEF29CBB64964BB4FA032 /* UIImageView+AFNetworking.m in Sources */, - 9189E98768C44F2B9BD150F8 /* UIProgressView+AFNetworking.m in Sources */, - DFE0E0E0E24747D6A75E3850 /* UIRefreshControl+AFNetworking.m in Sources */, - 9C4A58CAE734428AA9BEC353 /* UIWebView+AFNetworking.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DD5550D77C4A494DA8CBBB8B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B5DF210A50544F0184AF8974 /* MBProgressHUD.m in Sources */, - 22EB8D9BA16B488D9A66E83A /* Pods-MBProgressHUD-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 0F15DB79859C46309DF2BB06 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2AC3313D48E245198EF6E097 /* Pods-SDWebImage */; - targetProxy = B6A10F936E6D4DEE85B73443 /* PBXContainerItemProxy */; - }; - 4718E64B24D84A2B9ECE9F5F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D55CFE933564CFB9B3E3372 /* Pods-PSTCollectionView */; - targetProxy = 098BA2FC082F4B4D8E08CFD4 /* PBXContainerItemProxy */; - }; - 5059E28E5BA343F787F92AB8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D677F7827166425CBE5C8CEB /* Pods-MBProgressHUD */; - targetProxy = E9296CE2B0A5448EAE39F267 /* PBXContainerItemProxy */; - }; - 8004840C45E04F1D9EBF144F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13A67AD884FF4FBDB442AE71 /* Pods-FMDB */; - targetProxy = 2FDF350788194419B91E9E5E /* PBXContainerItemProxy */; - }; - 9B63CED9B7E94D96808AA9A5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EDCC7D9519444E7EA3162ED9 /* Pods-HPGrowingTextView */; - targetProxy = C4C2D3D87252484D852E9B30 /* PBXContainerItemProxy */; - }; - A1AFA03CC5E84D689C1D4645 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DDC0CD7C0AF648D8B09FA131 /* Pods-DACircularProgress */; - targetProxy = 9BF6A771D34A49FC8D5B1EAB /* PBXContainerItemProxy */; - }; - FA9BEB71242A48D89451E67C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7989B25ABCB44FB88015DE9F /* Pods-AFNetworking */; - targetProxy = 527F9215C2604C5EA44B4349 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 19F0C18A683E4AF4AA08409B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6179568D75F947CB8D983399 /* Pods-PSTCollectionView-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-PSTCollectionView-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 25D9840704B4475BAB992450 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6AD4456A53924D1A8F228522 /* Pods-MBProgressHUD-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-MBProgressHUD-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 25EE787CDE7541B58FC6513B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6179568D75F947CB8D983399 /* Pods-PSTCollectionView-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-PSTCollectionView-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3885A92451FF4720AB864741 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D860B7B0FDD142528CCEBFBF /* Pods-AFNetworking-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-AFNetworking-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3E04BDD7A44841F4A95051B8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 98981F1BBFBD400A9A06248E /* Pods-FMDB-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-FMDB-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 446AD1B8E11B4210AA4C5BCC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - COPY_PHASE_STRIP = NO; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - STRIP_INSTALLED_PRODUCT = NO; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 470495BF3A5A472BB335620E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 98981F1BBFBD400A9A06248E /* Pods-FMDB-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-FMDB-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 62C894A753BD44E8810812E2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DFF2900B7BB4473C95FAE85A /* Pods-DACircularProgress-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-DACircularProgress-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8161E79CC7CE4C4FBA0E7973 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - }; - name = Debug; - }; - 8F0E153042C64A90856D05CC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7A486D468B094639ABF61249 /* Pods.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 9F0E54B8EFC44F89ADBD70D4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6ABBB5ADF786435EA7F62EE9 /* Pods-HPGrowingTextView-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-HPGrowingTextView-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - A111A2D894354484A86CDADE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6AD4456A53924D1A8F228522 /* Pods-MBProgressHUD-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-MBProgressHUD-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - ABC4C08B82EC497AA196332A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7A486D468B094639ABF61249 /* Pods.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - C55F9DF655AF4049AA504D6C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D860B7B0FDD142528CCEBFBF /* Pods-AFNetworking-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-AFNetworking-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - D3D483DB2AD04AE690FA0CEF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DFF2900B7BB4473C95FAE85A /* Pods-DACircularProgress-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-DACircularProgress-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - F2DFA98BDE434196B5934D39 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 975605BA57264090A92A3B66 /* Pods-SDWebImage-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-SDWebImage-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - F7BD9CC3D9BC4408BAA31026 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6ABBB5ADF786435EA7F62EE9 /* Pods-HPGrowingTextView-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-HPGrowingTextView-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - F9A528943CEC4FD9A847B865 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 975605BA57264090A92A3B66 /* Pods-SDWebImage-Private.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-SDWebImage-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0370C49996B6471FAB0EB4C9 /* Build configuration list for PBXNativeTarget "Pods-PSTCollectionView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 19F0C18A683E4AF4AA08409B /* Debug */, - 25EE787CDE7541B58FC6513B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2E500EA584884F3A848C086A /* Build configuration list for PBXNativeTarget "Pods-FMDB" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 470495BF3A5A472BB335620E /* Debug */, - 3E04BDD7A44841F4A95051B8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6BEDC58360134F5B9BC193AA /* Build configuration list for PBXNativeTarget "Pods-SDWebImage" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F2DFA98BDE434196B5934D39 /* Debug */, - F9A528943CEC4FD9A847B865 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7C3A20DE53D345DD941A6CE7 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8161E79CC7CE4C4FBA0E7973 /* Debug */, - 446AD1B8E11B4210AA4C5BCC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D88DD284AF454143A7B7787C /* Build configuration list for PBXNativeTarget "Pods-DACircularProgress" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D3D483DB2AD04AE690FA0CEF /* Debug */, - 62C894A753BD44E8810812E2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DBD29FC343874C21BC3B45ED /* Build configuration list for PBXNativeTarget "Pods-MBProgressHUD" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 25D9840704B4475BAB992450 /* Debug */, - A111A2D894354484A86CDADE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EB280B5D4532425AAB5F363C /* Build configuration list for PBXNativeTarget "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABC4C08B82EC497AA196332A /* Debug */, - 8F0E153042C64A90856D05CC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F5EA1DFD27314D8EB3E093FC /* Build configuration list for PBXNativeTarget "Pods-HPGrowingTextView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9F0E54B8EFC44F89ADBD70D4 /* Debug */, - F7BD9CC3D9BC4408BAA31026 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F97E16127BCB490BAF7650F5 /* Build configuration list for PBXNativeTarget "Pods-AFNetworking" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C55F9DF655AF4049AA504D6C /* Debug */, - 3885A92451FF4720AB864741 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = F924B23616564ADC807DF70E /* Project object */; -} diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme deleted file mode 100644 index 5f5079c..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7989B25ABCB44FB88015DE9F" - BuildableName = "libPods-AFNetworking.a" - BlueprintName = "Pods-AFNetworking" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7989B25ABCB44FB88015DE9F" - BuildableName = "libPods-AFNetworking.a" - BlueprintName = "Pods-AFNetworking" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7989B25ABCB44FB88015DE9F" - BuildableName = "libPods-AFNetworking.a" - BlueprintName = "Pods-AFNetworking" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme deleted file mode 100644 index 3720625..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "DDC0CD7C0AF648D8B09FA131" - BuildableName = "libPods-DACircularProgress.a" - BlueprintName = "Pods-DACircularProgress" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "DDC0CD7C0AF648D8B09FA131" - BuildableName = "libPods-DACircularProgress.a" - BlueprintName = "Pods-DACircularProgress" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "DDC0CD7C0AF648D8B09FA131" - BuildableName = "libPods-DACircularProgress.a" - BlueprintName = "Pods-DACircularProgress" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-FMDB.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-FMDB.xcscheme deleted file mode 100644 index 9c10a8a..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-FMDB.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "13A67AD884FF4FBDB442AE71" - BuildableName = "libPods-FMDB.a" - BlueprintName = "Pods-FMDB" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "13A67AD884FF4FBDB442AE71" - BuildableName = "libPods-FMDB.a" - BlueprintName = "Pods-FMDB" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "13A67AD884FF4FBDB442AE71" - BuildableName = "libPods-FMDB.a" - BlueprintName = "Pods-FMDB" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme deleted file mode 100644 index 605b953..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "EDCC7D9519444E7EA3162ED9" - BuildableName = "libPods-HPGrowingTextView.a" - BlueprintName = "Pods-HPGrowingTextView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "EDCC7D9519444E7EA3162ED9" - BuildableName = "libPods-HPGrowingTextView.a" - BlueprintName = "Pods-HPGrowingTextView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "EDCC7D9519444E7EA3162ED9" - BuildableName = "libPods-HPGrowingTextView.a" - BlueprintName = "Pods-HPGrowingTextView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme deleted file mode 100644 index 00d98c4..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D677F7827166425CBE5C8CEB" - BuildableName = "libPods-MBProgressHUD.a" - BlueprintName = "Pods-MBProgressHUD" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D677F7827166425CBE5C8CEB" - BuildableName = "libPods-MBProgressHUD.a" - BlueprintName = "Pods-MBProgressHUD" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D677F7827166425CBE5C8CEB" - BuildableName = "libPods-MBProgressHUD.a" - BlueprintName = "Pods-MBProgressHUD" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme deleted file mode 100644 index cc10222..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8D55CFE933564CFB9B3E3372" - BuildableName = "libPods-PSTCollectionView.a" - BlueprintName = "Pods-PSTCollectionView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8D55CFE933564CFB9B3E3372" - BuildableName = "libPods-PSTCollectionView.a" - BlueprintName = "Pods-PSTCollectionView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8D55CFE933564CFB9B3E3372" - BuildableName = "libPods-PSTCollectionView.a" - BlueprintName = "Pods-PSTCollectionView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme deleted file mode 100644 index 23c7576..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "2AC3313D48E245198EF6E097" - BuildableName = "libPods-SDWebImage.a" - BlueprintName = "Pods-SDWebImage" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "2AC3313D48E245198EF6E097" - BuildableName = "libPods-SDWebImage.a" - BlueprintName = "Pods-SDWebImage" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "2AC3313D48E245198EF6E097" - BuildableName = "libPods-SDWebImage.a" - BlueprintName = "Pods-SDWebImage" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods.xcscheme deleted file mode 100644 index 2cca963..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/Pods.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "84CFA08D163D4AD0BEC37ABA" - BuildableName = "libPods.a" - BlueprintName = "Pods" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "84CFA08D163D4AD0BEC37ABA" - BuildableName = "libPods.a" - BlueprintName = "Pods" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "84CFA08D163D4AD0BEC37ABA" - BuildableName = "libPods.a" - BlueprintName = "Pods" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index e79dd3e..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,92 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>Pods-AFNetworking.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>2</integer> - </dict> - <key>Pods-DACircularProgress.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>3</integer> - </dict> - <key>Pods-FMDB.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>4</integer> - </dict> - <key>Pods-HPGrowingTextView.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>5</integer> - </dict> - <key>Pods-MBProgressHUD.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>6</integer> - </dict> - <key>Pods-PSTCollectionView.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>7</integer> - </dict> - <key>Pods-SDWebImage.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>8</integer> - </dict> - <key>Pods.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>1</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict> - <key>13A67AD884FF4FBDB442AE71</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>2AC3313D48E245198EF6E097</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>7989B25ABCB44FB88015DE9F</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>84CFA08D163D4AD0BEC37ABA</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>8D55CFE933564CFB9B3E3372</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>D677F7827166425CBE5C8CEB</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>DDC0CD7C0AF648D8B09FA131</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>EDCC7D9519444E7EA3162ED9</key> - <dict> - <key>primary</key> - <true/> - </dict> - </dict> -</dict> -</plist> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme deleted file mode 100644 index 8965027..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-AFNetworking.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7989B25ABCB44FB88015DE9F" - BuildableName = "libPods-AFNetworking.a" - BlueprintName = "Pods-AFNetworking" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme deleted file mode 100644 index 5a75dab..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-DACircularProgress.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "DDC0CD7C0AF648D8B09FA131" - BuildableName = "libPods-DACircularProgress.a" - BlueprintName = "Pods-DACircularProgress" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-FMDB.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-FMDB.xcscheme deleted file mode 100644 index 469d681..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-FMDB.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "13A67AD884FF4FBDB442AE71" - BuildableName = "libPods-FMDB.a" - BlueprintName = "Pods-FMDB" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme deleted file mode 100644 index 8acb040..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-HPGrowingTextView.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "EDCC7D9519444E7EA3162ED9" - BuildableName = "libPods-HPGrowingTextView.a" - BlueprintName = "Pods-HPGrowingTextView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme deleted file mode 100644 index 98133dd..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-MBProgressHUD.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D677F7827166425CBE5C8CEB" - BuildableName = "libPods-MBProgressHUD.a" - BlueprintName = "Pods-MBProgressHUD" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme deleted file mode 100644 index 36f8750..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-PSTCollectionView.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8D55CFE933564CFB9B3E3372" - BuildableName = "libPods-PSTCollectionView.a" - BlueprintName = "Pods-PSTCollectionView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme deleted file mode 100644 index 1f003b6..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "2AC3313D48E245198EF6E097" - BuildableName = "libPods-SDWebImage.a" - BlueprintName = "Pods-SDWebImage" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods.xcscheme b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods.xcscheme deleted file mode 100644 index fa807fc..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/Pods.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "84CFA08D163D4AD0BEC37ABA" - BuildableName = "libPods.a" - BlueprintName = "Pods" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist b/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 46ee3c3..0000000 --- a/TeamTalk/Pods/Pods.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,148 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>Pods-AFNetworking.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>2</integer> - </dict> - <key>Pods-DACircularProgress.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>3</integer> - </dict> - <key>Pods-FMDB.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>4</integer> - </dict> - <key>Pods-HPGrowingTextView.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>5</integer> - </dict> - <key>Pods-MBProgressHUD.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>6</integer> - </dict> - <key>Pods-PSTCollectionView.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>7</integer> - </dict> - <key>Pods-SDWebImage.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>8</integer> - </dict> - <key>Pods.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>1</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict> - <key>0DBC2E66E110159B754A3C3C</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>13A67AD884FF4FBDB442AE71</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>2AC3313D48E245198EF6E097</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>2F6A9424F0612C79D2DF6895</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>4C55C5F8269F25D7F2A4DB84</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>74BAC1BA207E148F4A4441EC</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>7989B25ABCB44FB88015DE9F</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>84CFA08D163D4AD0BEC37ABA</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>8A5DDABA98206E7C2CCF8FCB</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>8D55CFE933564CFB9B3E3372</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>D677F7827166425CBE5C8CEB</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>D72DC15BE5A2019FF211DC0C</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>DDC0CD7C0AF648D8B09FA131</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>EDCC7D9519444E7EA3162ED9</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>F5019AACF8EB777C5C2631EB</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>FB0655E381F380B3F193243A</key> - <dict> - <key>primary</key> - <true/> - </dict> - </dict> -</dict> -</plist> diff --git a/TeamTalk/Pods/SDWebImage/LICENSE b/TeamTalk/Pods/SDWebImage/LICENSE deleted file mode 100644 index ae783e1..0000000 --- a/TeamTalk/Pods/SDWebImage/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/TeamTalk/Pods/SDWebImage/README.md b/TeamTalk/Pods/SDWebImage/README.md deleted file mode 100644 index 9bbcca5..0000000 --- a/TeamTalk/Pods/SDWebImage/README.md +++ /dev/null @@ -1,280 +0,0 @@ -Web Image -========= -[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage) -[![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) -[![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) -[![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html) - -This library provides a category for UIImageView with support for remote images coming from the web. - -It provides: - -- An UIImageView category adding web image and cache management to the Cocoa Touch framework -- An asynchronous image downloader -- An asynchronous memory + disk image caching with automatic cache expiration handling -- Animated GIF support -- WebP format support -- A background image decompression -- A guarantee that the same URL won't be downloaded several times -- A guarantee that bogus URLs won't be retried again and again -- A guarantee that main thread will never be blocked -- Performances! -- Use GCD and ARC -- Arm64 support - -NOTE: The version 3.0 of SDWebImage isn't fully backward compatible with 2.0 and requires iOS 5.1.1 -minimum deployement version. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat). - -[How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F) - -Who Use It ----------- - -Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list. - -How To Use ----------- - -API documentation is available at [http://hackemist.com/SDWebImage/doc/](http://hackemist.com/SDWebImage/doc/) - -### Using UIImageView+WebCache category with UITableView - -Just #import the UIImageView+WebCache.h header, and call the setImageWithURL:placeholderImage: -method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be -handled for you, from async downloads to caching management. - -```objective-c -#import <SDWebImage/UIImageView+WebCache.h> - -... - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *MyIdentifier = @"MyIdentifier"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) - { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:MyIdentifier] autorelease]; - } - - // Here we use the new provided setImageWithURL: method to load the web image - [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; - - cell.textLabel.text = @"My Text"; - return cell; -} -``` - -### Using blocks - -With blocks, you can be notified about the image download progress and whenever the image retrival -has completed with success or not: - -```objective-c -// Here we use the new provided setImageWithURL: method to load the web image -[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"] - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... completion code here ...}]; -``` - -Note: neither your success nor failure block will be call if your image request is canceled before completion. - -### Using SDWebImageManager - -The SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the -asynchronous downloader with the image cache store. You can use this class directly to benefit -from web image downloading with caching in another context than a UIView (ie: with Cocoa). - -Here is a simple example of how to use SDWebImageManager: - -```objective-c -SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) - { - // progression tracking code - } - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) - { - if (image) - { - // do something with image - } - }]; -``` - -### Using Asynchronous Image Downloader Independently - -It's also possible to use the async image downloader independently: - -```objective-c -[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) - { - // progression tracking code - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) - { - if (image && finished) - { - // do something with image - } - }]; -``` - -### Using Asynchronous Image Caching Independently - -It is also possible to use the aync based image cache store independently. SDImageCache -maintains a memory cache and an optional disk cache. Disk cache write operations are performed -asynchronous so it doesn't add unnecessary latency to the UI. - -The SDImageCache class provides a singleton instance for convenience but you can create your own -instance if you want to create separated cache namespace. - -To lookup the cache, you use the `queryDiskCacheForKey:done:` method. If the method returns nil, it means the cache -doesn't currently own the image. You are thus responsible for generating and caching it. The cache -key is an application unique identifier for the image to cache. It is generally the absolute URL of -the image. - -```objective-c -SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"]; -[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) -{ - // image is not nil if image was found -}]; -``` - -By default SDImageCache will lookup the disk cache if an image can't be found in the memory cache. -You can prevent this from happening by calling the alternative method `imageFromMemoryCacheForKey:`. - -To store an image into the cache, you use the storeImage:forKey: method: - -```objective-c -[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]; -``` - -By default, the image will be stored in memory cache as well as on disk cache (asynchronously). If -you want only the memory cache, use the alternative method storeImage:forKey:toDisk: with a negative -third argument. - -### Using cache key filter - -Sometime, you may not want to use the image URL as cache key because part of the URL is dynamic -(i.e.: for access control purpose). SDWebImageManager provides a way to set a cache key filter that -takes the NSURL as input, and output a cache key NSString. - -The following example sets a filter in the application delegate that will remove any query-string from -the URL before to use it as a cache key: - -```objective-c -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - SDWebImageManager.sharedManager.cacheKeyFilter:^(NSURL *url) - { - url = [[[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path] autorelease]; - return [url absoluteString]; - }; - - // Your app init code... - return YES; -} -``` - - -Common Problems ---------------- - -### Using dynamic image size with UITableViewCell - -UITableView determins the size of the image by the first image set for a cell. If your remote images -don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue. -The following article gives a way to workaround this issue: - -[http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/](http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/) - - -### Handle image refresh - -SDWebImage does very aggressive caching by default. It ignores all kind of caching control header returned by the HTTP server and cache the returned images with no time restriction. It implies your images URLs are static URLs pointing to images that never change. If the pointed image happen to change, some parts of the URL should change accordingly. - -If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers: - -``` objective-c -[imageView setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"] - placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"] - options:SDWebImageRefreshCached]; -``` - -### Add a progress indicator - -See this category: https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage - -Installation ------------- - -There are three ways to use SDWebImage in your project: -- using Cocoapods -- copying all the files into your project -- importing the project as a static library - -### Installation with CocoaPods - -[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details. - -#### Podfile -``` -platform :ios, '6.1' -pod 'SDWebImage', '~>3.6' -``` - -### Add the SDWebImage project to your project - -- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases) -- Right-click on the project navigator and select "Add Files to "Your Project": -- In the dialog, select SDWebImage.framework: -- Check the "Copy items into destination group's folder (if needed)" checkbox - -### Add dependencies - -- In you application project app’s target settings, find the "Build Phases" section and open the "Link Binary With Libraries" block: -- Click the "+" button again and select the "ImageIO.framework", this is needed by the progressive download feature: - -### Add Linker Flag - -Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linker Flags" setting and add the "-ObjC" flag: - -![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg) - -Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse, RestKit or opencv2, instead of the -ObjC flag use: - -``` --force_load SDWebImage.framework/Versions/Current/SDWebImage -``` - -### Import headers in your source files - -In the source files where you need to use the library, import the header file: - -```objective-c -#import <SDWebImage/UIImageView+WebCache.h> -``` - -### Build Project - -At this point your workspace should build without error. If you are having problem, post to the Issue and the -community can help you solve it. - -Future Enhancements -------------------- - -- LRU memory cache cleanup instead of reset on memory warning - -## Licenses - -All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE). diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h b/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h deleted file mode 100644 index 69c76dc..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface NSData (ImageContentType) - -/** - * Compute the content type for an image data - * - * @param data the input data - * - * @return the content type as string (i.e. image/jpeg, image/gif) - */ -+ (NSString *)sd_contentTypeForImageData:(NSData *)data; - -@end - - -@interface NSData (ImageContentTypeDeprecated) - -+ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`"); - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m b/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m deleted file mode 100644 index 0941cfa..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import "NSData+ImageContentType.h" - - -@implementation NSData (ImageContentType) - -+ (NSString *)sd_contentTypeForImageData:(NSData *)data { - uint8_t c; - [data getBytes:&c length:1]; - switch (c) { - case 0xFF: - return @"image/jpeg"; - case 0x89: - return @"image/png"; - case 0x47: - return @"image/gif"; - case 0x49: - case 0x4D: - return @"image/tiff"; - case 0x52: - // R as RIFF for WEBP - if ([data length] < 12) { - return nil; - } - - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; - if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { - return @"image/webp"; - } - - return nil; - } - return nil; -} - -@end - - -@implementation NSData (ImageContentTypeDeprecated) - -+ (NSString *)contentTypeForImageData:(NSData *)data { - return [self sd_contentTypeForImageData:data]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.h deleted file mode 100644 index bde9d5d..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> -#import "SDWebImageCompat.h" - -typedef NS_ENUM(NSInteger, SDImageCacheType) { - /** - * The image wasn't available the SDWebImage caches, but was downloaded from the web. - */ - SDImageCacheTypeNone, - /** - * The image was obtained from the disk cache. - */ - SDImageCacheTypeDisk, - /** - * The image was obtained from the memory cache. - */ - SDImageCacheTypeMemory -}; - -typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType); - -typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache); - -typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize); - -/** - * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed - * asynchronous so it doesn’t add unnecessary latency to the UI. - */ -@interface SDImageCache : NSObject - -/** - * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory. - */ -@property (assign, nonatomic) NSUInteger maxMemoryCost; - -/** - * The maximum length of time to keep an image in the cache, in seconds - */ -@property (assign, nonatomic) NSInteger maxCacheAge; - -/** - * The maximum size of the cache, in bytes. - */ -@property (assign, nonatomic) NSUInteger maxCacheSize; - -/** - * Returns global shared cache instance - * - * @return SDImageCache global instance - */ -+ (SDImageCache *)sharedImageCache; - -/** - * Init a new cache store with a specific namespace - * - * @param ns The namespace to use for this cache store - */ -- (id)initWithNamespace:(NSString *)ns; - -/** - * Add a read-only cache path to search for images pre-cached by SDImageCache - * Useful if you want to bundle pre-loaded images with your app - * - * @param path The path to use for this read-only cache path - */ -- (void)addReadOnlyCachePath:(NSString *)path; - -/** - * Store an image into memory and disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - */ -- (void)storeImage:(UIImage *)image forKey:(NSString *)key; - -/** - * Store an image into memory and optionally disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES - */ -- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; - -/** - * Store an image into memory and optionally disk cache at the given key. - * - * @param image The image to store - * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage - * @param imageData The image data as returned by the server, this representation will be used for disk storage - * instead of converting the given image object into a storable/compressed image format in order - * to save quality and CPU - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES - */ -- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk; - -/** - * Query the disk cache asynchronously. - * - * @param key The unique key used to store the wanted image - */ -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock; - -/** - * Query the memory cache synchronously. - * - * @param key The unique key used to store the wanted image - */ -- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key; - -/** - * Query the disk cache synchronously after checking the memory cache. - * - * @param key The unique key used to store the wanted image - */ -- (UIImage *)imageFromDiskCacheForKey:(NSString *)key; - -/** - * Remove the image from memory and disk cache synchronously - * - * @param key The unique image cache key - */ -- (void)removeImageForKey:(NSString *)key; - - -/** - * Remove the image from memory and disk cache synchronously - * - * @param key The unique image cache key - * @param completionBlock An block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Remove the image from memory and optionally disk cache synchronously - * - * @param key The unique image cache key - * @param fromDisk Also remove cache entry from disk if YES - */ -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk; - -/** - * Remove the image from memory and optionally disk cache synchronously - * - * @param key The unique image cache key - * @param fromDisk Also remove cache entry from disk if YES - * @param completionBlock An block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Clear all memory cached images - */ -- (void)clearMemory; - -/** - * Clear all disk cached images. Non-blocking method - returns immediately. - * @param completionBlock An block that should be executed after cache expiration completes (optional) - */ -- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Clear all disk cached images - * @see clearDiskOnCompletion: - */ -- (void)clearDisk; - -/** - * Remove all expired cached image from disk. Non-blocking method - returns immediately. - * @param completionBlock An block that should be executed after cache expiration completes (optional) - */ -- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock; - -/** - * Remove all expired cached image from disk - * @see cleanDiskWithCompletionBlock: - */ -- (void)cleanDisk; - -/** - * Get the size used by the disk cache - */ -- (NSUInteger)getSize; - -/** - * Get the number of images in the disk cache - */ -- (NSUInteger)getDiskCount; - -/** - * Asynchronously calculate the disk cache's size. - */ -- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock; - -/** - * Async check if image exists in disk cache already (does not load the image) - * - * @param key the key describing the url - * @param completionBlock the block to be executed when the check is done. - * @note the completion block will be always executed on the main queue - */ -- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - -/** - * Check if image exists in disk cache already (does not load the image) - * - * @param key the key describing the url - * - * @return YES if an image exists for the given key - */ -- (BOOL)diskImageExistsWithKey:(NSString *)key; - -/** - * Get the cache path for a certain key (needs the cache path root folder) - * - * @param key the key (can be obtained from url using cacheKeyForURL) - * @param path the cach path root folder - * - * @return the cache path - */ -- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path; - -/** - * Get the default cache path for a certain key - * - * @param key the key (can be obtained from url using cacheKeyForURL) - * - * @return the default cache path - */ -- (NSString *)defaultCachePathForKey:(NSString *)key; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.m deleted file mode 100644 index 59c3471..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDImageCache.m +++ /dev/null @@ -1,534 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCache.h" -#import "SDWebImageDecoder.h" -#import "UIImage+MultiFormat.h" -#import <CommonCrypto/CommonDigest.h> - -static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week -// PNG signature bytes and data (below) -static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; -static NSData *kPNGSignatureData = nil; - -BOOL ImageDataHasPNGPreffix(NSData *data); - -BOOL ImageDataHasPNGPreffix(NSData *data) { - NSUInteger pngSignatureLength = [kPNGSignatureData length]; - if ([data length] >= pngSignatureLength) { - if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) { - return YES; - } - } - - return NO; -} - -@interface SDImageCache () - -@property (strong, nonatomic) NSCache *memCache; -@property (strong, nonatomic) NSString *diskCachePath; -@property (strong, nonatomic) NSMutableArray *customPaths; -@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue; - -@end - - -@implementation SDImageCache { - NSFileManager *_fileManager; -} - -+ (SDImageCache *)sharedImageCache { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8]; - }); - return instance; -} - -- (id)init { - return [self initWithNamespace:@"default"]; -} - -- (id)initWithNamespace:(NSString *)ns { - if ((self = [super init])) { - NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns]; - - // Create IO serial queue - _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL); - - // Init default values - _maxCacheAge = kDefaultCacheMaxCacheAge; - - // Init the memory cache - _memCache = [[NSCache alloc] init]; - _memCache.name = fullNamespace; - - // Init the disk cache - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - _diskCachePath = [paths[0] stringByAppendingPathComponent:fullNamespace]; - - dispatch_sync(_ioQueue, ^{ - _fileManager = [NSFileManager new]; - }); - -#if TARGET_OS_IPHONE - // Subscribe to app events - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(clearMemory) - name:UIApplicationDidReceiveMemoryWarningNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(cleanDisk) - name:UIApplicationWillTerminateNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(backgroundCleanDisk) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; -#endif - } - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - SDDispatchQueueRelease(_ioQueue); -} - -- (void)addReadOnlyCachePath:(NSString *)path { - if (!self.customPaths) { - self.customPaths = [NSMutableArray new]; - } - - if (![self.customPaths containsObject:path]) { - [self.customPaths addObject:path]; - } -} - -- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path { - NSString *filename = [self cachedFileNameForKey:key]; - return [path stringByAppendingPathComponent:filename]; -} - -- (NSString *)defaultCachePathForKey:(NSString *)key { - return [self cachePathForKey:key inPath:self.diskCachePath]; -} - -#pragma mark SDImageCache (private) - -- (NSString *)cachedFileNameForKey:(NSString *)key { - const char *str = [key UTF8String]; - if (str == NULL) { - str = ""; - } - unsigned char r[CC_MD5_DIGEST_LENGTH]; - CC_MD5(str, (CC_LONG)strlen(str), r); - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]]; - - return filename; -} - -#pragma mark ImageCache - -- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk { - if (!image || !key) { - return; - } - - [self.memCache setObject:image forKey:key cost:image.size.height * image.size.width * image.scale]; - - if (toDisk) { - dispatch_async(self.ioQueue, ^{ - NSData *data = imageData; - - if (image && (recalculate || !data)) { -#if TARGET_OS_IPHONE - // We need to determine if the image is a PNG or a JPEG - // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html) - // The first eight bytes of a PNG file always contain the following (decimal) values: - // 137 80 78 71 13 10 26 10 - - // We assume the image is PNG, in case the imageData is nil (i.e. if trying to save a UIImage directly), - // we will consider it PNG to avoid loosing the transparency - BOOL imageIsPng = YES; - - // But if we have an image data, we will look at the preffix - if ([imageData length] >= [kPNGSignatureData length]) { - imageIsPng = ImageDataHasPNGPreffix(imageData); - } - - if (imageIsPng) { - data = UIImagePNGRepresentation(image); - } - else { - data = UIImageJPEGRepresentation(image, (CGFloat)1.0); - } -#else - data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil]; -#endif - } - - if (data) { - if (![_fileManager fileExistsAtPath:_diskCachePath]) { - [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; - } - - [_fileManager createFileAtPath:[self defaultCachePathForKey:key] contents:data attributes:nil]; - } - }); - } -} - -- (void)storeImage:(UIImage *)image forKey:(NSString *)key { - [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES]; -} - -- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk { - [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk]; -} - -- (BOOL)diskImageExistsWithKey:(NSString *)key { - BOOL exists = NO; - - // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance - // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely. - exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]]; - - return exists; -} - -- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - dispatch_async(_ioQueue, ^{ - BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(exists); - }); - } - }); -} - -- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key { - return [self.memCache objectForKey:key]; -} - -- (UIImage *)imageFromDiskCacheForKey:(NSString *)key { - // First check the in-memory cache... - UIImage *image = [self imageFromMemoryCacheForKey:key]; - if (image) { - return image; - } - - // Second check the disk cache... - UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale; - [self.memCache setObject:diskImage forKey:key cost:cost]; - } - - return diskImage; -} - -- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key { - NSString *defaultPath = [self defaultCachePathForKey:key]; - NSData *data = [NSData dataWithContentsOfFile:defaultPath]; - if (data) { - return data; - } - - for (NSString *path in self.customPaths) { - NSString *filePath = [self cachePathForKey:key inPath:path]; - NSData *imageData = [NSData dataWithContentsOfFile:filePath]; - if (imageData) { - return imageData; - } - } - - return nil; -} - -- (UIImage *)diskImageForKey:(NSString *)key { - NSData *data = [self diskImageDataBySearchingAllPathsForKey:key]; - if (data) { - UIImage *image = [UIImage sd_imageWithData:data]; - image = [self scaledImageForKey:key image:image]; - image = [UIImage decodedImageWithImage:image]; - return image; - } - else { - return nil; - } -} - -- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { - return SDScaledImageForKey(key, image); -} - -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock { - if (!doneBlock) { - return nil; - } - - if (!key) { - doneBlock(nil, SDImageCacheTypeNone); - return nil; - } - - // First check the in-memory cache... - UIImage *image = [self imageFromMemoryCacheForKey:key]; - if (image) { - doneBlock(image, SDImageCacheTypeMemory); - return nil; - } - - NSOperation *operation = [NSOperation new]; - dispatch_async(self.ioQueue, ^{ - if (operation.isCancelled) { - return; - } - - @autoreleasepool { - UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale; - [self.memCache setObject:diskImage forKey:key cost:cost]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - doneBlock(diskImage, SDImageCacheTypeDisk); - }); - } - }); - - return operation; -} - -- (void)removeImageForKey:(NSString *)key { - [self removeImageForKey:key withCompletion:nil]; -} - -- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion { - [self removeImageForKey:key fromDisk:YES withCompletion:completion]; -} - -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk { - [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil]; -} - -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion { - - if (key == nil) { - return; - } - - [self.memCache removeObjectForKey:key]; - - if (fromDisk) { - dispatch_async(self.ioQueue, ^{ - [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); - } else if (completion){ - completion(); - } - -} - -- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost { - self.memCache.totalCostLimit = maxMemoryCost; -} - -- (NSUInteger)maxMemoryCost { - return self.memCache.totalCostLimit; -} - -- (void)clearMemory { - [self.memCache removeAllObjects]; -} - -- (void)clearDisk { - [self clearDiskOnCompletion:nil]; -} - -- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion -{ - dispatch_async(self.ioQueue, ^{ - [_fileManager removeItemAtPath:self.diskCachePath error:nil]; - [_fileManager createDirectoryAtPath:self.diskCachePath - withIntermediateDirectories:YES - attributes:nil - error:NULL]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); -} - -- (void)cleanDisk { - [self cleanDiskWithCompletionBlock:nil]; -} - -- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey]; - - // This enumerator prefetches useful properties for our cache files. - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:resourceKeys - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge]; - NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary]; - NSUInteger currentCacheSize = 0; - - // Enumerate all of the files in the cache directory. This loop has two purposes: - // - // 1. Removing files that are older than the expiration date. - // 2. Storing file attributes for the size-based cleanup pass. - NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init]; - for (NSURL *fileURL in fileEnumerator) { - NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL]; - - // Skip directories. - if ([resourceValues[NSURLIsDirectoryKey] boolValue]) { - continue; - } - - // Remove files that are older than the expiration date; - NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey]; - if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) { - [urlsToDelete addObject:fileURL]; - continue; - } - - // Store a reference to this file and account for its total size. - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize += [totalAllocatedSize unsignedIntegerValue]; - [cacheFiles setObject:resourceValues forKey:fileURL]; - } - - for (NSURL *fileURL in urlsToDelete) { - [_fileManager removeItemAtURL:fileURL error:nil]; - } - - // If our remaining disk cache exceeds a configured maximum size, perform a second - // size-based cleanup pass. We delete the oldest files first. - if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) { - // Target half of our maximum cache size for this cleanup pass. - const NSUInteger desiredCacheSize = self.maxCacheSize / 2; - - // Sort the remaining cache files by their last modification time (oldest first). - NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent - usingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]]; - }]; - - // Delete files until we fall below our desired cache size. - for (NSURL *fileURL in sortedFiles) { - if ([_fileManager removeItemAtURL:fileURL error:nil]) { - NSDictionary *resourceValues = cacheFiles[fileURL]; - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize -= [totalAllocatedSize unsignedIntegerValue]; - - if (currentCacheSize < desiredCacheSize) { - break; - } - } - } - } - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(); - }); - } - }); -} - -- (void)backgroundCleanDisk { - UIApplication *application = [UIApplication sharedApplication]; - __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ - // Clean up any unfinished task business by marking where you - // stopped or ending the task outright. - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; - - // Start the long-running task and return immediately. - [self cleanDiskWithCompletionBlock:^{ - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; -} - -- (NSUInteger)getSize { - __block NSUInteger size = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; - for (NSString *fileName in fileEnumerator) { - NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; - NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil]; - size += [attrs fileSize]; - } - }); - return size; -} - -- (NSUInteger)getDiskCount { - __block NSUInteger count = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; - count = [[fileEnumerator allObjects] count]; - }); - return count; -} - -- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock { - NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - - dispatch_async(self.ioQueue, ^{ - NSUInteger fileCount = 0; - NSUInteger totalSize = 0; - - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:@[NSFileSize] - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - for (NSURL *fileURL in fileEnumerator) { - NSNumber *fileSize; - [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL]; - totalSize += [fileSize unsignedIntegerValue]; - fileCount += 1; - } - - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(fileCount, totalSize); - }); - } - }); -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h deleted file mode 100644 index a0555fd..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * (c) Jamie Pinkham - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <TargetConditionals.h> - -#ifdef __OBJC_GC__ -#error SDWebImage does not support Objective-C Garbage Collection -#endif - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 -#error SDWebImage doesn't support Deployement Target version < 5.0 -#endif - -#if !TARGET_OS_IPHONE -#import <AppKit/AppKit.h> -#ifndef UIImage -#define UIImage NSImage -#endif -#ifndef UIImageView -#define UIImageView NSImageView -#endif -#else - -#import <UIKit/UIKit.h> - -#endif - -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#ifndef NS_OPTIONS -#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#if OS_OBJECT_USE_OBJC - #undef SDDispatchQueueRelease - #undef SDDispatchQueueSetterSementics - #define SDDispatchQueueRelease(q) - #define SDDispatchQueueSetterSementics strong -#else -#undef SDDispatchQueueRelease -#undef SDDispatchQueueSetterSementics -#define SDDispatchQueueRelease(q) (dispatch_release(q)) -#define SDDispatchQueueSetterSementics assign -#endif - -extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); - -typedef void(^SDWebImageNoParamsBlock)(); - -#define dispatch_main_sync_safe(block)\ - if ([NSThread isMainThread]) {\ - block();\ - } else {\ - dispatch_sync(dispatch_get_main_queue(), block);\ - } - -#define dispatch_main_async_safe(block)\ - if ([NSThread isMainThread]) {\ - block();\ - } else {\ - dispatch_async(dispatch_get_main_queue(), block);\ - } diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m deleted file mode 100644 index 8c7d345..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// SDWebImageCompat.m -// SDWebImage -// -// Created by Olivier Poitrey on 11/12/12. -// Copyright (c) 2012 Dailymotion. All rights reserved. -// - -#import "SDWebImageCompat.h" - -#if !__has_feature(objc_arc) -#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag -#endif - -inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) { - if (!image) { - return nil; - } - - if ([image.images count] > 0) { - NSMutableArray *scaledImages = [NSMutableArray array]; - - for (UIImage *tempImage in image.images) { - [scaledImages addObject:SDScaledImageForKey(key, tempImage)]; - } - - return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; - } - else { - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { - CGFloat scale = 1.0; - if (key.length >= 8) { - // Search @2x. at the end of the string, before a 3 to 4 extension length (only if key len is 8 or more @2x. + 4 len ext) - NSRange range = [key rangeOfString:@"@2x." options:0 range:NSMakeRange(key.length - 8, 5)]; - if (range.location != NSNotFound) { - scale = 2.0; - } - } - - UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; - image = scaledImage; - } - return image; - } -} diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h deleted file mode 100644 index 0176a7b..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * Created by james <https://github.com/mystcolor> on 9/28/11. - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> -#import "SDWebImageCompat.h" - -@interface UIImage (ForceDecode) - -+ (UIImage *)decodedImageWithImage:(UIImage *)image; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m deleted file mode 100644 index 79ddb30..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * Created by james <https://github.com/mystcolor> on 9/28/11. - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDecoder.h" - -@implementation UIImage (ForceDecode) - -+ (UIImage *)decodedImageWithImage:(UIImage *)image { - if (image.images) { - // Do not decode animated images - return image; - } - - CGImageRef imageRef = image.CGImage; - CGSize imageSize = CGSizeMake(CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)); - CGRect imageRect = (CGRect){.origin = CGPointZero, .size = imageSize}; - - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - int infoMask = (bitmapInfo & kCGBitmapAlphaInfoMask); - BOOL anyNonAlpha = (infoMask == kCGImageAlphaNone || - infoMask == kCGImageAlphaNoneSkipFirst || - infoMask == kCGImageAlphaNoneSkipLast); - - // CGBitmapContextCreate doesn't support kCGImageAlphaNone with RGB. - // https://developer.apple.com/library/mac/#qa/qa1037/_index.html - if (infoMask == kCGImageAlphaNone && CGColorSpaceGetNumberOfComponents(colorSpace) > 1) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - - // Set noneSkipFirst. - bitmapInfo |= kCGImageAlphaNoneSkipFirst; - } - // Some PNGs tell us they have alpha but only 3 components. Odd. - else if (!anyNonAlpha && CGColorSpaceGetNumberOfComponents(colorSpace) == 3) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaPremultipliedFirst; - } - - // It calculates the bytes-per-row based on the bitsPerComponent and width arguments. - CGContextRef context = CGBitmapContextCreate(NULL, - imageSize.width, - imageSize.height, - CGImageGetBitsPerComponent(imageRef), - 0, - colorSpace, - bitmapInfo); - CGColorSpaceRelease(colorSpace); - - // If failed, return undecompressed image - if (!context) return image; - - CGContextDrawImage(context, imageRect, imageRef); - CGImageRef decompressedImageRef = CGBitmapContextCreateImage(context); - - CGContextRelease(context); - - UIImage *decompressedImage = [UIImage imageWithCGImage:decompressedImageRef scale:image.scale orientation:image.imageOrientation]; - CGImageRelease(decompressedImageRef); - return decompressedImage; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h deleted file mode 100644 index 008231a..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" - -typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { - SDWebImageDownloaderLowPriority = 1 << 0, - SDWebImageDownloaderProgressiveDownload = 1 << 1, - - /** - * By default, request prevent the of NSURLCache. With this flag, NSURLCache - * is used with default policies. - */ - SDWebImageDownloaderUseNSURLCache = 1 << 2, - - /** - * Call completion block with nil image/imageData if the image was read from NSURLCache - * (to be combined with `SDWebImageDownloaderUseNSURLCache`). - */ - - SDWebImageDownloaderIgnoreCachedResponse = 1 << 3, - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - - SDWebImageDownloaderContinueInBackground = 1 << 4, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageDownloaderHandleCookies = 1 << 5, - - /** - * Enable to allow untrusted SSL ceriticates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, - - /** - * Put the image in the high priority queue. - */ - SDWebImageDownloaderHighPriority = 1 << 7, - - -}; - -typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { - /** - * Default value. All download operations will execute in queue style (first-in-first-out). - */ - SDWebImageDownloaderFIFOExecutionOrder, - - /** - * All download operations will execute in stack style (last-in-first-out). - */ - SDWebImageDownloaderLIFOExecutionOrder -}; - -extern NSString *const SDWebImageDownloadStartNotification; -extern NSString *const SDWebImageDownloadStopNotification; - -typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize); - -typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished); - -typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers); - -/** - * Asynchronous downloader dedicated and optimized for image loading. - */ -@interface SDWebImageDownloader : NSObject - -@property (assign, nonatomic) NSInteger maxConcurrentDownloads; - -/** - * Shows the current amount of downloads that still need to be downloaded - */ - -@property (readonly, nonatomic) NSUInteger currentDownloadCount; - - -/** - * The timeout value (in seconds) for the download operation. Default: 15.0. - */ -@property (assign, nonatomic) NSTimeInterval downloadTimeout; - - -/** - * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`. - */ -@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder; - -/** - * Singleton method, returns the shared instance - * - * @return global shared instance of downloader class - */ -+ (SDWebImageDownloader *)sharedDownloader; - -/** - * Set username - */ -@property (strong, nonatomic) NSString *username; - -/** - * Set password - */ -@property (strong, nonatomic) NSString *password; - -/** - * Set filter to pick headers for downloading image HTTP request. - * - * This block will be invoked for each downloading image request, returned - * NSDictionary will be used as headers in corresponding HTTP request. - */ -@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter; - -/** - * Set a value for a HTTP header to be appended to each download HTTP request. - * - * @param value The value for the header field. Use `nil` value to remove the header. - * @param field The name of the header field to set. - */ -- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; - -/** - * Returns the value of the specified HTTP header field. - * - * @return The value associated with the header field field, or `nil` if there is no corresponding header field. - */ -- (NSString *)valueForHTTPHeaderField:(NSString *)field; - -/** - * Creates a SDWebImageDownloader async downloader instance with a given URL - * - * The delegate will be informed when the image is finish downloaded or an error has happen. - * - * @see SDWebImageDownloaderDelegate - * - * @param url The URL to the image to download - * @param options The options to be used for this download - * @param progressBlock A block called repeatedly while the image is downloading - * @param completedBlock A block called once the download is completed. - * If the download succeeded, the image parameter is set, in case of error, - * error parameter is set with the error. The last parameter is always YES - * if SDWebImageDownloaderProgressiveDownload isn't use. With the - * SDWebImageDownloaderProgressiveDownload option, this block is called - * repeatedly with the partial image object and the finished argument set to NO - * before to be called a last time with the full image and finished argument - * set to YES. In case of error, the finished argument is always YES. - * - * @return A cancellable SDWebImageOperation - */ -- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Sets the download queue suspension state - */ -- (void)setSuspended:(BOOL)suspended; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m deleted file mode 100644 index 60914db..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m +++ /dev/null @@ -1,225 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloader.h" -#import "SDWebImageDownloaderOperation.h" -#import <ImageIO/ImageIO.h> - -NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; -NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; - -static NSString *const kProgressCallbackKey = @"progress"; -static NSString *const kCompletedCallbackKey = @"completed"; - -@interface SDWebImageDownloader () - -@property (strong, nonatomic) NSOperationQueue *downloadQueue; -@property (weak, nonatomic) NSOperation *lastAddedOperation; -@property (strong, nonatomic) NSMutableDictionary *URLCallbacks; -@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders; -// This queue is used to serialize the handling of the network responses of all the download operation in a single queue -@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue; - -@end - -@implementation SDWebImageDownloader - -+ (void)initialize { - // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator ) - // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import - if (NSClassFromString(@"SDNetworkActivityIndicator")) { - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")]; -#pragma clang diagnostic pop - - // Remove observer in case it was previously added. - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"startActivity") - name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"stopActivity") - name:SDWebImageDownloadStopNotification object:nil]; - } -} - -+ (SDWebImageDownloader *)sharedDownloader { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; - _downloadQueue = [NSOperationQueue new]; - _downloadQueue.maxConcurrentOperationCount = 2; - _URLCallbacks = [NSMutableDictionary new]; - _HTTPHeaders = [NSMutableDictionary dictionaryWithObject:@"image/webp,image/*;q=0.8" forKey:@"Accept"]; - _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT); - _downloadTimeout = 15.0; - } - return self; -} - -- (void)dealloc { - [self.downloadQueue cancelAllOperations]; - SDDispatchQueueRelease(_barrierQueue); -} - -- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { - if (value) { - self.HTTPHeaders[field] = value; - } - else { - [self.HTTPHeaders removeObjectForKey:field]; - } -} - -- (NSString *)valueForHTTPHeaderField:(NSString *)field { - return self.HTTPHeaders[field]; -} - -- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads { - _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads; -} - -- (NSUInteger)currentDownloadCount { - return _downloadQueue.operationCount; -} - -- (NSInteger)maxConcurrentDownloads { - return _downloadQueue.maxConcurrentOperationCount; -} - -- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock { - __block SDWebImageDownloaderOperation *operation; - __weak SDWebImageDownloader *wself = self; - - [self addProgressCallback:progressBlock andCompletedBlock:completedBlock forURL:url createCallback:^{ - NSTimeInterval timeoutInterval = wself.downloadTimeout; - if (timeoutInterval == 0.0) { - timeoutInterval = 15.0; - } - - // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval]; - request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies); - request.HTTPShouldUsePipelining = YES; - if (wself.headersFilter) { - request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]); - } - else { - request.allHTTPHeaderFields = wself.HTTPHeaders; - } - operation = [[SDWebImageDownloaderOperation alloc] initWithRequest:request - options:options - progress:^(NSInteger receivedSize, NSInteger expectedSize) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - NSArray *callbacksForURL = [sself callbacksForURL:url]; - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey]; - if (callback) callback(receivedSize, expectedSize); - } - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - NSArray *callbacksForURL = [sself callbacksForURL:url]; - if (finished) { - [sself removeCallbacksForURL:url]; - } - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey]; - if (callback) callback(image, data, error, finished); - } - } - cancelled:^{ - SDWebImageDownloader *sself = wself; - if (!sself) return; - [sself removeCallbacksForURL:url]; - }]; - - if (wself.username && wself.password) { - operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession]; - } - - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } - - [wself.downloadQueue addOperation:operation]; - if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { - // Emulate LIFO execution order by systematically adding new operations as last operation's dependency - [wself.lastAddedOperation addDependency:operation]; - wself.lastAddedOperation = operation; - } - }]; - - return operation; -} - -- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock andCompletedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback { - // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. - if (url == nil) { - if (completedBlock != nil) { - completedBlock(nil, nil, nil, NO); - } - return; - } - - dispatch_barrier_sync(self.barrierQueue, ^{ - BOOL first = NO; - if (!self.URLCallbacks[url]) { - self.URLCallbacks[url] = [NSMutableArray new]; - first = YES; - } - - // Handle single download of simultaneous download request for the same URL - NSMutableArray *callbacksForURL = self.URLCallbacks[url]; - NSMutableDictionary *callbacks = [NSMutableDictionary new]; - if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy]; - if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy]; - [callbacksForURL addObject:callbacks]; - self.URLCallbacks[url] = callbacksForURL; - - if (first) { - createCallback(); - } - }); -} - -- (NSArray *)callbacksForURL:(NSURL *)url { - __block NSArray *callbacksForURL; - dispatch_sync(self.barrierQueue, ^{ - callbacksForURL = self.URLCallbacks[url]; - }); - return [callbacksForURL copy]; -} - -- (void)removeCallbacksForURL:(NSURL *)url { - dispatch_barrier_async(self.barrierQueue, ^{ - [self.URLCallbacks removeObjectForKey:url]; - }); -} - -- (void)setSuspended:(BOOL)suspended { - [self.downloadQueue setSuspended:suspended]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h deleted file mode 100644 index 21a3106..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> -#import "SDWebImageDownloader.h" -#import "SDWebImageOperation.h" - -@interface SDWebImageDownloaderOperation : NSOperation <SDWebImageOperation> - -/** - * The request used by the operation's connection. - */ -@property (strong, nonatomic, readonly) NSURLRequest *request; - -/** - * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. - * - * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. - * - * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. - */ -@property (nonatomic, strong) NSURLCredential *credential; - -/** - * The SDWebImageDownloaderOptions for the receiver. - */ -@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; - -/** - * Initializes a `SDWebImageDownloaderOperation` object - * - * @see SDWebImageDownloaderOperation - * - * @param request the URL request - * @param options downloader options - * @param progressBlock the block executed when a new chunk of data arrives. - * @note the progress block is executed on a background queue - * @param completedBlock the block executed when the download is done. - * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue - * @param cancelBlock the block executed if the download (operation) is cancelled - * - * @return the initialized instance - */ -- (id)initWithRequest:(NSURLRequest *)request - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock - cancelled:(SDWebImageNoParamsBlock)cancelBlock; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m deleted file mode 100644 index 333e316..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m +++ /dev/null @@ -1,414 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloaderOperation.h" -#import "SDWebImageDecoder.h" -#import "UIImage+MultiFormat.h" -#import <ImageIO/ImageIO.h> -#import "SDWebImageManager.h" - -@interface SDWebImageDownloaderOperation () <NSURLConnectionDataDelegate> - -@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock; -@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock; -@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; - -@property (assign, nonatomic, getter = isExecuting) BOOL executing; -@property (assign, nonatomic, getter = isFinished) BOOL finished; -@property (assign, nonatomic) NSInteger expectedSize; -@property (strong, nonatomic) NSMutableData *imageData; -@property (strong, nonatomic) NSURLConnection *connection; -@property (strong, atomic) NSThread *thread; - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 -@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; -#endif - -@end - -@implementation SDWebImageDownloaderOperation { - size_t width, height; - UIImageOrientation orientation; - BOOL responseFromCached; -} - -@synthesize executing = _executing; -@synthesize finished = _finished; - -- (id)initWithRequest:(NSURLRequest *)request - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock - cancelled:(SDWebImageNoParamsBlock)cancelBlock { - if ((self = [super init])) { - _request = request; - _shouldUseCredentialStorage = YES; - _options = options; - _progressBlock = [progressBlock copy]; - _completedBlock = [completedBlock copy]; - _cancelBlock = [cancelBlock copy]; - _executing = NO; - _finished = NO; - _expectedSize = 0; - responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called - } - return self; -} - -- (void)start { - @synchronized (self) { - if (self.isCancelled) { - self.finished = YES; - [self reset]; - return; - } - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 - if ([self shouldContinueWhenAppEntersBackground]) { - __weak __typeof__ (self) wself = self; - self.backgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ - __strong __typeof (wself) sself = wself; - - if (sself) { - [sself cancel]; - - [[UIApplication sharedApplication] endBackgroundTask:sself.backgroundTaskId]; - sself.backgroundTaskId = UIBackgroundTaskInvalid; - } - }]; - } -#endif - - self.executing = YES; - self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; - self.thread = [NSThread currentThread]; - } - - [self.connection start]; - - if (self.connection) { - if (self.progressBlock) { - self.progressBlock(0, NSURLResponseUnknownLength); - } - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self]; - - if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) { - // Make sure to run the runloop in our background thread so it can process downloaded data - // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5 - // not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466) - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false); - } - else { - CFRunLoopRun(); - } - - if (!self.isFinished) { - [self.connection cancel]; - [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]]; - } - } - else { - if (self.completedBlock) { - self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Connection can't be initialized"}], YES); - } - } - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 - if (self.backgroundTaskId != UIBackgroundTaskInvalid) { - [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskId]; - self.backgroundTaskId = UIBackgroundTaskInvalid; - } -#endif -} - -- (void)cancel { - @synchronized (self) { - if (self.thread) { - [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO]; - } - else { - [self cancelInternal]; - } - } -} - -- (void)cancelInternalAndStop { - if (self.isFinished) return; - [self cancelInternal]; - CFRunLoopStop(CFRunLoopGetCurrent()); -} - -- (void)cancelInternal { - if (self.isFinished) return; - [super cancel]; - if (self.cancelBlock) self.cancelBlock(); - - if (self.connection) { - [self.connection cancel]; - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; - - // As we cancelled the connection, its callback won't be called and thus won't - // maintain the isFinished and isExecuting flags. - if (self.isExecuting) self.executing = NO; - if (!self.isFinished) self.finished = YES; - } - - [self reset]; -} - -- (void)done { - self.finished = YES; - self.executing = NO; - [self reset]; -} - -- (void)reset { - self.cancelBlock = nil; - self.completedBlock = nil; - self.progressBlock = nil; - self.connection = nil; - self.imageData = nil; - self.thread = nil; -} - -- (void)setFinished:(BOOL)finished { - [self willChangeValueForKey:@"isFinished"]; - _finished = finished; - [self didChangeValueForKey:@"isFinished"]; -} - -- (void)setExecuting:(BOOL)executing { - [self willChangeValueForKey:@"isExecuting"]; - _executing = executing; - [self didChangeValueForKey:@"isExecuting"]; -} - -- (BOOL)isConcurrent { - return YES; -} - -#pragma mark NSURLConnection (delegate) - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - if (![response respondsToSelector:@selector(statusCode)] || [((NSHTTPURLResponse *)response) statusCode] < 400) { - NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0; - self.expectedSize = expected; - if (self.progressBlock) { - self.progressBlock(0, expected); - } - - self.imageData = [[NSMutableData alloc] initWithCapacity:expected]; - } - else { - [self.connection cancel]; - - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - - if (self.completedBlock) { - self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES); - } - CFRunLoopStop(CFRunLoopGetCurrent()); - [self done]; - } -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - [self.imageData appendData:data]; - - if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) { - // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ - // Thanks to the author @Nyx0uf - - // Get the total bytes downloaded - const NSInteger totalSize = self.imageData.length; - - // Update the data source, we must pass ALL the data, not just the new bytes - CGImageSourceRef imageSource = CGImageSourceCreateIncremental(NULL); - CGImageSourceUpdateData(imageSource, (__bridge CFDataRef)self.imageData, totalSize == self.expectedSize); - - if (width + height == 0) { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); - if (properties) { - NSInteger orientationValue = -1; - CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); - if (val) CFNumberGetValue(val, kCFNumberLongType, &height); - val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); - if (val) CFNumberGetValue(val, kCFNumberLongType, &width); - val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); - if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue); - CFRelease(properties); - - // When we draw to Core Graphics, we lose orientation information, - // which means the image below born of initWithCGIImage will be - // oriented incorrectly sometimes. (Unlike the image born of initWithData - // in connectionDidFinishLoading.) So save it here and pass it on later. - orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)]; - } - - } - - if (width + height > 0 && totalSize < self.expectedSize) { - // Create the image - CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); - -#ifdef TARGET_OS_IPHONE - // Workaround for iOS anamorphic image - if (partialImageRef) { - const size_t partialHeight = CGImageGetHeight(partialImageRef); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); - CGColorSpaceRelease(colorSpace); - if (bmContext) { - CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef); - CGImageRelease(partialImageRef); - partialImageRef = CGBitmapContextCreateImage(bmContext); - CGContextRelease(bmContext); - } - else { - CGImageRelease(partialImageRef); - partialImageRef = nil; - } - } -#endif - - if (partialImageRef) { - UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - UIImage *scaledImage = [self scaledImageForKey:key image:image]; - image = [UIImage decodedImageWithImage:scaledImage]; - CGImageRelease(partialImageRef); - dispatch_main_sync_safe(^{ - if (self.completedBlock) { - self.completedBlock(image, nil, nil, NO); - } - }); - } - } - - CFRelease(imageSource); - } - - if (self.progressBlock) { - self.progressBlock(self.imageData.length, self.expectedSize); - } -} - -+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value { - switch (value) { - case 1: - return UIImageOrientationUp; - case 3: - return UIImageOrientationDown; - case 8: - return UIImageOrientationLeft; - case 6: - return UIImageOrientationRight; - case 2: - return UIImageOrientationUpMirrored; - case 4: - return UIImageOrientationDownMirrored; - case 5: - return UIImageOrientationLeftMirrored; - case 7: - return UIImageOrientationRightMirrored; - default: - return UIImageOrientationUp; - } -} - -- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { - return SDScaledImageForKey(key, image); -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection { - SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; - @synchronized(self) { - CFRunLoopStop(CFRunLoopGetCurrent()); - self.thread = nil; - self.connection = nil; - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - } - - if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) { - responseFromCached = NO; - } - - if (completionBlock) - { - if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) { - completionBlock(nil, nil, nil, YES); - } - else { - UIImage *image = [UIImage sd_imageWithData:self.imageData]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - image = [self scaledImageForKey:key image:image]; - - // Do not force decoding animated GIFs - if (!image.images) { - image = [UIImage decodedImageWithImage:image]; - } - if (CGSizeEqualToSize(image.size, CGSizeZero)) { - completionBlock(nil, nil, [NSError errorWithDomain:@"SDWebImageErrorDomain" code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES); - } - else { - completionBlock(image, self.imageData, nil, YES); - } - } - } - self.completionBlock = nil; - [self done]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - CFRunLoopStop(CFRunLoopGetCurrent()); - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - - if (self.completedBlock) { - self.completedBlock(nil, nil, error, YES); - } - - [self done]; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { - responseFromCached = NO; // If this method is called, it means the response wasn't read from cache - if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) { - // Prevents caching of responses - return nil; - } - else { - return cachedResponse; - } -} - -- (BOOL)shouldContinueWhenAppEntersBackground { - return self.options & SDWebImageDownloaderContinueInBackground; -} - -- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { - return self.shouldUseCredentialStorage; -} - -- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; - } else { - if ([challenge previousFailureCount] == 0) { - if (self.credential) { - [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.h deleted file mode 100644 index 6bb0dcf..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" -#import "SDWebImageDownloader.h" -#import "SDImageCache.h" - -typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { - /** - * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying. - * This flag disable this blacklisting. - */ - SDWebImageRetryFailed = 1 << 0, - - /** - * By default, image downloads are started during UI interactions, this flags disable this feature, - * leading to delayed download on UIScrollView deceleration for instance. - */ - SDWebImageLowPriority = 1 << 1, - - /** - * This flag disables on-disk caching - */ - SDWebImageCacheMemoryOnly = 1 << 2, - - /** - * This flag enables progressive download, the image is displayed progressively during download as a browser would do. - * By default, the image is only displayed once completely downloaded. - */ - SDWebImageProgressiveDownload = 1 << 3, - - /** - * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed. - * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation. - * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics. - * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image. - * - * Use this flag only if you can't make your URLs static with embeded cache busting parameter. - */ - SDWebImageRefreshCached = 1 << 4, - - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - SDWebImageContinueInBackground = 1 << 5, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageHandleCookies = 1 << 6, - - /** - * Enable to allow untrusted SSL ceriticates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageAllowInvalidSSLCertificates = 1 << 7, - - /** - * By default, image are loaded in the order they were queued. This flag move them to - * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which - * could take a while). - */ - SDWebImageHighPriority = 1 << 8, - - /** - * By default, placeholder images are loaded while the image is loading. This flag will delay the loading - * of the placeholder image until after the image has finished loading. - */ - SDWebImageDelayPlaceholder = 1 << 9 -}; - -typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL); - -typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL); - -typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url); - - -@class SDWebImageManager; - -@protocol SDWebImageManagerDelegate <NSObject> - -@optional - -/** - * Controls which image should be downloaded when the image is not found in the cache. - * - * @param imageManager The current `SDWebImageManager` - * @param imageURL The url of the image to be downloaded - * - * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied. - */ -- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL; - -/** - * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory. - * NOTE: This method is called from a global queue in order to not to block the main thread. - * - * @param imageManager The current `SDWebImageManager` - * @param image The image to transform - * @param imageURL The url of the image to transform - * - * @return The transformed image object. - */ -- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL; - -@end - -/** - * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes. - * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache). - * You can use this class directly to benefit from web image downloading with caching in another context than - * a UIView. - * - * Here is a simple example of how to use SDWebImageManager: - * - * @code - -SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadWithURL:imageURL - options:0 - progress:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (image) { - // do something with image - } - }]; - - * @endcode - */ -@interface SDWebImageManager : NSObject - -@property (weak, nonatomic) id <SDWebImageManagerDelegate> delegate; - -@property (strong, nonatomic, readonly) SDImageCache *imageCache; -@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader; - -/** - * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can - * be used to remove dynamic part of an image URL. - * - * The following example sets a filter in the application delegate that will remove any query-string from the - * URL before to use it as a cache key: - * - * @code - -[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) { - url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; - return [url absoluteString]; -}]; - - * @endcode - */ -@property (copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; - -/** - * Returns global SDWebImageManager instance. - * - * @return SDWebImageManager shared instance - */ -+ (SDWebImageManager *)sharedManager; - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @param url The URL to the image - * @param options A mask to specify options to use for this request - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. - * - * This parameter is required. - * - * This block has no return value and takes the requested UIImage as first parameter. - * In case of error the image parameter is nil and the second parameter may contain an NSError. - * - * The third parameter is an `SDImageCacheType` enum indicating if the image was retrived from the local cache - * or from the memory cache or from the network. - * - * The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is - * downloading. This block is thus called repetidly with a partial image. When image is fully downloaded, the - * block is called a last time with the full image and the last parameter set to YES. - * - * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation - */ -- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletionWithFinishedBlock)completedBlock; - -/** - * Saves image to cache for given URL - * - * @param image The image to cache - * @param url The URL to the image - * - */ - -- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url; - -/** - * Cancel all current opreations - */ -- (void)cancelAll; - -/** - * Check one or more operations running - */ -- (BOOL)isRunning; - -/** - * Check if image has already been cached - * - * @param url image url - * - * @return if the image was already cached - */ -- (BOOL)cachedImageExistsForURL:(NSURL *)url; - -/** - * Check if image has already been cached on disk only - * - * @param url image url - * - * @return if the image was already cached (disk only) - */ -- (BOOL)diskImageExistsForURL:(NSURL *)url; - -/** - * Async check if image has already been cached - * - * @param url image url - * @param completionBlock the block to be executed when the check is finished - * - * @note the completion block is always executed on the main queue - */ -- (void)cachedImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - -/** - * Async check if image has already been cached on disk only - * - * @param url image url - * @param completionBlock the block to be executed when the check is finished - * - * @note the completion block is always executed on the main queue - */ -- (void)diskImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - - -/** - *Return the cache key for a given URL - */ -- (NSString *)cacheKeyForURL:(NSURL *)url; - -@end - - -#pragma mark - Deprecated - -typedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionBlock`"); -typedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`"); - - -@interface SDWebImageManager (Deprecated) - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:` - */ -- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg("Method deprecated. Use `downloadImageWithURL:options:progress:completed:`"); - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.m deleted file mode 100644 index 2781ec8..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageManager.m +++ /dev/null @@ -1,346 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageManager.h" -#import <objc/message.h> - -@interface SDWebImageCombinedOperation : NSObject <SDWebImageOperation> - -@property (assign, nonatomic, getter = isCancelled) BOOL cancelled; -@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; -@property (strong, nonatomic) NSOperation *cacheOperation; - -@end - -@interface SDWebImageManager () - -@property (strong, nonatomic, readwrite) SDImageCache *imageCache; -@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader; -@property (strong, nonatomic) NSMutableArray *failedURLs; -@property (strong, nonatomic) NSMutableArray *runningOperations; - -@end - -@implementation SDWebImageManager - -+ (id)sharedManager { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _imageCache = [self createCache]; - _imageDownloader = [SDWebImageDownloader sharedDownloader]; - _failedURLs = [NSMutableArray new]; - _runningOperations = [NSMutableArray new]; - } - return self; -} - -- (SDImageCache *)createCache { - return [SDImageCache sharedImageCache]; -} - -- (NSString *)cacheKeyForURL:(NSURL *)url { - if (self.cacheKeyFilter) { - return self.cacheKeyFilter(url); - } - else { - return [url absoluteString]; - } -} - -- (BOOL)cachedImageExistsForURL:(NSURL *)url { - NSString *key = [self cacheKeyForURL:url]; - if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES; - return [self.imageCache diskImageExistsWithKey:key]; -} - -- (BOOL)diskImageExistsForURL:(NSURL *)url { - NSString *key = [self cacheKeyForURL:url]; - return [self.imageCache diskImageExistsWithKey:key]; -} - -- (void)cachedImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - NSString *key = [self cacheKeyForURL:url]; - - BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil); - - if (isInMemoryCache) { - // making sure we call the completion block on the main queue - dispatch_async(dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(YES); - } - }); - return; - } - - [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch - if (completionBlock) { - completionBlock(isInDiskCache); - } - }]; -} - -- (void)diskImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - NSString *key = [self cacheKeyForURL:url]; - - [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch - if (completionBlock) { - completionBlock(isInDiskCache); - } - }]; -} - -- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletionWithFinishedBlock)completedBlock { - // Invoking this method without a completedBlock is pointless - NSParameterAssert(completedBlock); - - // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't - // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString. - if ([url isKindOfClass:NSString.class]) { - url = [NSURL URLWithString:(NSString *)url]; - } - - // Prevents app crashing on argument type error like sending NSNull instead of NSURL - if (![url isKindOfClass:NSURL.class]) { - url = nil; - } - - __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new]; - __weak SDWebImageCombinedOperation *weakOperation = operation; - - BOOL isFailedUrl = NO; - @synchronized (self.failedURLs) { - isFailedUrl = [self.failedURLs containsObject:url]; - } - - if (!url || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { - dispatch_main_sync_safe(^{ - NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]; - completedBlock(nil, error, SDImageCacheTypeNone, YES, url); - }); - return operation; - } - - @synchronized (self.runningOperations) { - [self.runningOperations addObject:operation]; - } - NSString *key = [self cacheKeyForURL:url]; - - operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) { - if (operation.isCancelled) { - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - - return; - } - - if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) { - if (image && options & SDWebImageRefreshCached) { - dispatch_main_sync_safe(^{ - // If image was found in the cache bug SDWebImageRefreshCached is provided, notify about the cached image - // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server. - completedBlock(image, nil, cacheType, YES, url); - }); - } - - // download if no image or requested to refresh anyway, and download allowed by delegate - SDWebImageDownloaderOptions downloaderOptions = 0; - if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; - if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload; - if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache; - if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground; - if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies; - if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates; - if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority; - if (image && options & SDWebImageRefreshCached) { - // force progressive off if image already cached but forced refreshing - downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload; - // ignore image read from NSURLCache if image if cached but force refreshing - downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; - } - id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { - if (weakOperation.isCancelled) { - // Do nothing if the operation was cancelled - // See #699 for more details - // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data - } - else if (error) { - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(nil, error, SDImageCacheTypeNone, finished, url); - } - }); - - if (error.code != NSURLErrorNotConnectedToInternet && error.code != NSURLErrorCancelled && error.code != NSURLErrorTimedOut) { - @synchronized (self.failedURLs) { - [self.failedURLs addObject:url]; - } - } - } - else { - BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly); - - if (options & SDWebImageRefreshCached && image && !downloadedImage) { - // Image refresh hit the NSURLCache cache, do not call the completion block - } - // NOTE: We don't call transformDownloadedImage delegate method on animated images as most transformation code would mangle it - else if (downloadedImage && !downloadedImage.images && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; - - if (transformedImage && finished) { - BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; - [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:data forKey:key toDisk:cacheOnDisk]; - } - - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url); - } - }); - }); - } - else { - if (downloadedImage && finished) { - [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk]; - } - - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url); - } - }); - } - } - - if (finished) { - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - }]; - operation.cancelBlock = ^{ - [subOperation cancel]; - - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:weakOperation]; - } - }; - } - else if (image) { - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(image, nil, cacheType, YES, url); - } - }); - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - else { - // Image not in cache and download disallowed by delegate - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(nil, nil, SDImageCacheTypeNone, YES, url); - } - }); - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - }]; - - return operation; -} - -- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url { - if (image && url) { - NSString *key = [self cacheKeyForURL:url]; - [self.imageCache storeImage:image forKey:key toDisk:YES]; - } -} - -- (void)cancelAll { - @synchronized (self.runningOperations) { - [self.runningOperations makeObjectsPerformSelector:@selector(cancel)]; - [self.runningOperations removeAllObjects]; - } -} - -- (BOOL)isRunning { - return self.runningOperations.count > 0; -} - -@end - - -@implementation SDWebImageCombinedOperation - -- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock { - // check if the operation is already cancelled, then we just call the cancelBlock - if (self.isCancelled) { - if (cancelBlock) { - cancelBlock(); - } - _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes - } else { - _cancelBlock = [cancelBlock copy]; - } -} - -- (void)cancel { - self.cancelled = YES; - if (self.cacheOperation) { - [self.cacheOperation cancel]; - self.cacheOperation = nil; - } - if (self.cancelBlock) { - self.cancelBlock(); - - // TODO: this is a temporary fix to #809. - // Until we can figure the exact cause of the crash, going with the ivar instead of the setter -// self.cancelBlock = nil; - _cancelBlock = nil; - } -} - -@end - - -@implementation SDWebImageManager (Deprecated) - -// deprecated method, uses the non deprecated method -// adapter for the completion block -- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock { - return [self downloadImageWithURL:url - options:options - progress:progressBlock - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, finished); - } - }]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h deleted file mode 100644 index 71094ee..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> - -@protocol SDWebImageOperation <NSObject> - -- (void)cancel; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h deleted file mode 100644 index 4f14fa2..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <Foundation/Foundation.h> -#import "SDWebImageManager.h" - -@class SDWebImagePrefetcher; - -@protocol SDWebImagePrefetcherDelegate <NSObject> - -@optional - -/** - * Called when an image was prefetched. - * - * @param imagePrefetcher The current image prefetcher - * @param imageURL The image url that was prefetched - * @param finishedCount The total number of images that were prefetched (successful or not) - * @param totalCount The total number of images that were to be prefetched - */ -- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount; - -/** - * Called when all images are prefetched. - * @param imagePrefetcher The current image prefetcher - * @param totalCount The total number of images that were prefetched (whether successful or not) - * @param skippedCount The total number of images that were skipped - */ -- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount; - -@end - -typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls); -typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls); - -/** - * Prefetch some URLs in the cache for future use. Images are downloaded in low priority. - */ -@interface SDWebImagePrefetcher : NSObject - -/** - * The web image manager - */ -@property (strong, nonatomic, readonly) SDWebImageManager *manager; - -/** - * Maximum number of URLs to prefetch at the same time. Defaults to 3. - */ -@property (nonatomic, assign) NSUInteger maxConcurrentDownloads; - -/** - * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority. - */ -@property (nonatomic, assign) SDWebImageOptions options; - -@property (weak, nonatomic) id <SDWebImagePrefetcherDelegate> delegate; - -/** - * Return the global image prefetcher instance. - */ -+ (SDWebImagePrefetcher *)sharedImagePrefetcher; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, - * currently one image is downloaded at a time, - * and skips images for failed downloads and proceed to the next image in the list - * - * @param urls list of URLs to prefetch - */ -- (void)prefetchURLs:(NSArray *)urls; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, - * currently one image is downloaded at a time, - * and skips images for failed downloads and proceed to the next image in the list - * - * @param urls list of URLs to prefetch - * @param progressBlock block to be called when progress updates; - * first parameter is the number of completed (successful or not) requests, - * second parameter is the total number of images originally requested to be prefetched - * @param completionBlock block to be called when prefetching is completed - * first param is the number of completed (successful or not) requests, - * second parameter is the number of skipped requests - */ -- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock; - -/** - * Remove and cancel queued list - */ -- (void)cancelPrefetching; - - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m b/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m deleted file mode 100644 index 4087e4a..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImagePrefetcher.h" - -#if !defined(DEBUG) && !defined (SD_VERBOSE) -#define NSLog(...) -#endif - -@interface SDWebImagePrefetcher () - -@property (strong, nonatomic) SDWebImageManager *manager; -@property (strong, nonatomic) NSArray *prefetchURLs; -@property (assign, nonatomic) NSUInteger requestedCount; -@property (assign, nonatomic) NSUInteger skippedCount; -@property (assign, nonatomic) NSUInteger finishedCount; -@property (assign, nonatomic) NSTimeInterval startedTime; -@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock; -@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock; - -@end - -@implementation SDWebImagePrefetcher - -+ (SDWebImagePrefetcher *)sharedImagePrefetcher { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _manager = [SDWebImageManager new]; - _options = SDWebImageLowPriority; - self.maxConcurrentDownloads = 3; - } - return self; -} - -- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads { - self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads; -} - -- (NSUInteger)maxConcurrentDownloads { - return self.manager.imageDownloader.maxConcurrentDownloads; -} - -- (void)startPrefetchingAtIndex:(NSUInteger)index { - if (index >= self.prefetchURLs.count) return; - self.requestedCount++; - [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!finished) return; - self.finishedCount++; - - if (image) { - if (self.progressBlock) { - self.progressBlock(self.finishedCount,[self.prefetchURLs count]); - } - NSLog(@"Prefetched %@ out of %@", @(self.finishedCount), @(self.prefetchURLs.count)); - } - else { - if (self.progressBlock) { - self.progressBlock(self.finishedCount,[self.prefetchURLs count]); - } - NSLog(@"Prefetched %@ out of %@ (Failed)", @(self.finishedCount), @(self.prefetchURLs.count)); - - // Add last failed - self.skippedCount++; - } - if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) { - [self.delegate imagePrefetcher:self - didPrefetchURL:self.prefetchURLs[index] - finishedCount:self.finishedCount - totalCount:self.prefetchURLs.count - ]; - } - - if (self.prefetchURLs.count > self.requestedCount) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self startPrefetchingAtIndex:self.requestedCount]; - }); - } - else if (self.finishedCount == self.requestedCount) { - [self reportStatus]; - if (self.completionBlock) { - self.completionBlock(self.finishedCount, self.skippedCount); - self.completionBlock = nil; - } - } - }]; -} - -- (void)reportStatus { - NSUInteger total = [self.prefetchURLs count]; - NSLog(@"Finished prefetching (%@ successful, %@ skipped, timeElasped %.2f)", @(total - self.skippedCount), @(self.skippedCount), CFAbsoluteTimeGetCurrent() - self.startedTime); - if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) { - [self.delegate imagePrefetcher:self - didFinishWithTotalCount:(total - self.skippedCount) - skippedCount:self.skippedCount - ]; - } -} - -- (void)prefetchURLs:(NSArray *)urls { - [self prefetchURLs:urls progress:nil completed:nil]; -} - -- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock { - [self cancelPrefetching]; // Prevent duplicate prefetch request - self.startedTime = CFAbsoluteTimeGetCurrent(); - self.prefetchURLs = urls; - self.completionBlock = completionBlock; - self.progressBlock = progressBlock; - - // Starts prefetching from the very first image on the list with the max allowed concurrency - NSUInteger listCount = self.prefetchURLs.count; - for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) { - [self startPrefetchingAtIndex:i]; - } -} - -- (void)cancelPrefetching { - self.prefetchURLs = nil; - self.skippedCount = 0; - self.requestedCount = 0; - self.finishedCount = 0; - [self.manager cancelAll]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h deleted file mode 100644 index 7a6e867..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIButtonView. - */ -@interface UIButton (WebCache) - -/** - * Get the current image URL. - */ -- (NSURL *)sd_currentImageURL; - -/** - * Get the image URL for a control state. - * - * @param state Which state you want to know the URL for. The values are described in UIControlState. - */ -- (NSURL *)sd_imageURLForState:(UIControlState)state; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state; - -/** - * Set the backgroundImageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the backgroundImageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Cancel the current image download - */ -- (void)sd_cancelImageLoadForState:(UIControlState)state; - -/** - * Cancel the current backgroundImage download - */ -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state; - -@end - - -@interface UIButton (WebCacheDeprecated) - -- (NSURL *)currentImageURL __deprecated_msg("Use `sd_currentImageURL`"); -- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg("Use `sd_imageURLForState:`"); - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`"); - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:completed:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`"); - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`"); - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`"); - -- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelImageLoadForState:`"); -- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg("Use `sd_cancelBackgroundImageLoadForState:`"); - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m deleted file mode 100644 index 8e076ae..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m +++ /dev/null @@ -1,260 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIButton+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" - -static char imageURLStorageKey; - -@implementation UIButton (WebCache) - -- (NSURL *)sd_currentImageURL { - NSURL *url = self.imageURLStorage[@(self.state)]; - - if (!url) { - url = self.imageURLStorage[@(UIControlStateNormal)]; - } - - return url; -} - -- (NSURL *)sd_imageURLForState:(UIControlState)state { - return self.imageURLStorage[@(state)]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - - [self setImage:placeholder forState:state]; - [self sd_cancelImageLoadForState:state]; - - if (!url) { - [self.imageURLStorage removeObjectForKey:@(state)]; - - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - - return; - } - - self.imageURLStorage[@(state)] = url; - - __weak UIButton *wself = self; - id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIButton *sself = wself; - if (!sself) return; - if (image) { - [sself setImage:image forState:state]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forState:state]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelImageLoadForState:state]; - - [self setBackgroundImage:placeholder forState:state]; - - if (url) { - __weak UIButton *wself = self; - id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIButton *sself = wself; - if (!sself) return; - if (image) { - [sself setBackgroundImage:image forState:state]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setBackgroundImageLoadOperation:operation forState:state]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_setImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state { - [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; -} - -- (void)sd_cancelImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; -} - -- (void)sd_setBackgroundImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state { - [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; -} - -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; -} - -- (NSMutableDictionary *)imageURLStorage { - NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey); - if (!storage) - { - storage = [NSMutableDictionary dictionary]; - objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - - return storage; -} - -@end - - -@implementation UIButton (WebCacheDeprecated) - -- (NSURL *)currentImageURL { - return [self sd_currentImageURL]; -} - -- (NSURL *)imageURLForState:(UIControlState)state { - return [self sd_imageURLForState:state]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentImageLoad { - // in a backwards compatible manner, cancel for current state - [self sd_cancelImageLoadForState:self.state]; -} - -- (void)cancelBackgroundImageLoadForState:(UIControlState)state { - [self sd_cancelBackgroundImageLoadForState:state]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.h deleted file mode 100755 index 084f424..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIImage+GIF.h -// LBGIFImage -// -// Created by Laurin Brandner on 06.01.12. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface UIImage (GIF) - -+ (UIImage *)sd_animatedGIFNamed:(NSString *)name; - -+ (UIImage *)sd_animatedGIFWithData:(NSData *)data; - -- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.m deleted file mode 100755 index a703637..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// UIImage+GIF.m -// LBGIFImage -// -// Created by Laurin Brandner on 06.01.12. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import "UIImage+GIF.h" -#import <ImageIO/ImageIO.h> - -@implementation UIImage (GIF) - -+ (UIImage *)sd_animatedGIFWithData:(NSData *)data { - if (!data) { - return nil; - } - - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - - size_t count = CGImageSourceGetCount(source); - - UIImage *animatedImage; - - if (count <= 1) { - animatedImage = [[UIImage alloc] initWithData:data]; - } - else { - NSMutableArray *images = [NSMutableArray array]; - - NSTimeInterval duration = 0.0f; - - for (size_t i = 0; i < count; i++) { - CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL); - - duration += [self sd_frameDurationAtIndex:i source:source]; - - [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]]; - - CGImageRelease(image); - } - - if (!duration) { - duration = (1.0f / 10.0f) * count; - } - - animatedImage = [UIImage animatedImageWithImages:images duration:duration]; - } - - CFRelease(source); - - return animatedImage; -} - -+ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source { - float frameDuration = 0.1f; - CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil); - NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties; - NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary]; - - NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; - if (delayTimeUnclampedProp) { - frameDuration = [delayTimeUnclampedProp floatValue]; - } - else { - - NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime]; - if (delayTimeProp) { - frameDuration = [delayTimeProp floatValue]; - } - } - - // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. - // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify - // a duration of <= 10 ms. See <rdar://problem/7689300> and <http://webkit.org/b/36082> - // for more information. - - if (frameDuration < 0.011f) { - frameDuration = 0.100f; - } - - CFRelease(cfFrameProperties); - return frameDuration; -} - -+ (UIImage *)sd_animatedGIFNamed:(NSString *)name { - CGFloat scale = [UIScreen mainScreen].scale; - - if (scale > 1.0f) { - NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"gif"]; - - NSData *data = [NSData dataWithContentsOfFile:retinaPath]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; - - data = [NSData dataWithContentsOfFile:path]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - return [UIImage imageNamed:name]; - } - else { - NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; - - NSData *data = [NSData dataWithContentsOfFile:path]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - return [UIImage imageNamed:name]; - } -} - -- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size { - if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) { - return self; - } - - CGSize scaledSize = size; - CGPoint thumbnailPoint = CGPointZero; - - CGFloat widthFactor = size.width / self.size.width; - CGFloat heightFactor = size.height / self.size.height; - CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor; - scaledSize.width = self.size.width * scaleFactor; - scaledSize.height = self.size.height * scaleFactor; - - if (widthFactor > heightFactor) { - thumbnailPoint.y = (size.height - scaledSize.height) * 0.5; - } - else if (widthFactor < heightFactor) { - thumbnailPoint.x = (size.width - scaledSize.width) * 0.5; - } - - NSMutableArray *scaledImages = [NSMutableArray array]; - - UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); - - for (UIImage *image in self.images) { - [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - - [scaledImages addObject:newImage]; - } - - UIGraphicsEndImageContext(); - - return [UIImage animatedImageWithImages:scaledImages duration:self.duration]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h deleted file mode 100644 index 186ebc0..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIImage+MultiFormat.h -// SDWebImage -// -// Created by Olivier Poitrey on 07/06/13. -// Copyright (c) 2013 Dailymotion. All rights reserved. -// - -#import <UIKit/UIKit.h> - -@interface UIImage (MultiFormat) - -+ (UIImage *)sd_imageWithData:(NSData *)data; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m deleted file mode 100644 index 5395280..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// UIImage+MultiFormat.m -// SDWebImage -// -// Created by Olivier Poitrey on 07/06/13. -// Copyright (c) 2013 Dailymotion. All rights reserved. -// - -#import "UIImage+MultiFormat.h" -#import "UIImage+GIF.h" -#import "NSData+ImageContentType.h" -#import <ImageIO/ImageIO.h> - -#ifdef SD_WEBP -#import "UIImage+WebP.h" -#endif - -@implementation UIImage (MultiFormat) - -+ (UIImage *)sd_imageWithData:(NSData *)data { - UIImage *image; - NSString *imageContentType = [NSData sd_contentTypeForImageData:data]; - if ([imageContentType isEqualToString:@"image/gif"]) { - image = [UIImage sd_animatedGIFWithData:data]; - } -#ifdef SD_WEBP - else if ([imageContentType isEqualToString:@"image/webp"]) - { - image = [UIImage sd_imageWithWebPData:data]; - } -#endif - else { - image = [[UIImage alloc] initWithData:data]; - UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data]; - if (orientation != UIImageOrientationUp) { - image = [UIImage imageWithCGImage:image.CGImage - scale:image.scale - orientation:orientation]; - } - } - - - return image; -} - - -+(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData { - UIImageOrientation result = UIImageOrientationUp; - CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); - if (imageSource) { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); - if (properties) { - CFTypeRef val; - int exifOrientation; - val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); - if (val) { - CFNumberGetValue(val, kCFNumberIntType, &exifOrientation); - result = [self sd_exifOrientationToiOSOrientation:exifOrientation]; - } // else - if it's not set it remains at up - CFRelease((CFTypeRef) properties); - } else { - //NSLog(@"NO PROPERTIES, FAIL"); - } - CFRelease(imageSource); - } - return result; -} - -#pragma mark EXIF orientation tag converter -// Convert an EXIF image orientation to an iOS one. -// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html -+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation { - UIImageOrientation orientation = UIImageOrientationUp; - switch (exifOrientation) { - case 1: - orientation = UIImageOrientationUp; - break; - - case 3: - orientation = UIImageOrientationDown; - break; - - case 8: - orientation = UIImageOrientationLeft; - break; - - case 6: - orientation = UIImageOrientationRight; - break; - - case 2: - orientation = UIImageOrientationUpMirrored; - break; - - case 4: - orientation = UIImageOrientationDownMirrored; - break; - - case 5: - orientation = UIImageOrientationLeftMirrored; - break; - - case 7: - orientation = UIImageOrientationRightMirrored; - break; - default: - break; - } - return orientation; -} - - - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h deleted file mode 100644 index 6b00366..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <UIKit/UIKit.h> -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state. - */ -@interface UIImageView (HighlightedWebCache) - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options; - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Cancel the current download - */ -- (void)sd_cancelCurrentHighlightedImageLoad; - -@end - - -@interface UIImageView (HighlightedWebCacheDeprecated) - -- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`"); - -- (void)cancelCurrentHighlightedImageLoad __deprecated_msg("Use `sd_cancelCurrentHighlightedImageLoad`"); - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m deleted file mode 100644 index ae73610..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+HighlightedWebCache.h" -#import "UIView+WebCacheOperation.h" - -#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage" - -@implementation UIImageView (HighlightedWebCache) - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelCurrentHighlightedImageLoad]; - - if (url) { - __weak UIImageView *wself = self; - id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe (^ - { - if (!wself) return; - if (image) { - wself.highlightedImage = image; - [wself setNeedsLayout]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_cancelCurrentHighlightedImageLoad { - [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey]; -} - -@end - - -@implementation UIImageView (HighlightedWebCacheDeprecated) - -- (void)setHighlightedImageWithURL:(NSURL *)url { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentHighlightedImageLoad { - [self sd_cancelCurrentHighlightedImageLoad]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h deleted file mode 100644 index 717d393..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView. - * - * Usage with a UITableViewCell sub-class: - * - * @code - -#import <SDWebImage/UIImageView+WebCache.h> - -... - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *MyIdentifier = @"MyIdentifier"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] - autorelease]; - } - - // Here we use the provided sd_setImageWithURL: method to load the web image - // Ensure you use a placeholder image otherwise cells will be initialized with no image - [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder"]]; - - cell.textLabel.text = @"My Text"; - return cell; -} - - * @endcode - */ -@interface UIImageView (WebCache) - -/** - * Get the current image URL. - * - * Note that because of the limitations of categories this property can get out of sync - * if you use sd_setImage: directly. - */ -- (NSURL *)sd_imageURL; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(NSURL *)url; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url` and a optionaly placeholder image. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. - */ -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Download an array of images and starts them in an animation loop - * - * @param arrayOfURLs An array of NSURL - */ -- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs; - -/** - * Cancel the current download - */ -- (void)sd_cancelCurrentImageLoad; - -- (void)sd_cancelCurrentAnimationImagesLoad; - -@end - - -@interface UIImageView (WebCacheDeprecated) - -- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`"); - -- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`"); - -- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`"); - -- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`"); - -- (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`"); - -- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`"); - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m deleted file mode 100644 index 51663dd..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m +++ /dev/null @@ -1,195 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" - -static char imageURLKey; - -@implementation UIImageView (WebCache) - -- (void)sd_setImageWithURL:(NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelCurrentImageLoad]; - objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - if (!(options & SDWebImageDelayPlaceholder)) { - self.image = placeholder; - } - - if (url) { - __weak UIImageView *wself = self; - id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - if (!wself) return; - if (image) { - wself.image = image; - [wself setNeedsLayout]; - } else { - if ((options & SDWebImageDelayPlaceholder)) { - wself.image = placeholder; - [wself setNeedsLayout]; - } - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url]; - UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key]; - - [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock]; -} - -- (NSURL *)sd_imageURL { - return objc_getAssociatedObject(self, &imageURLKey); -} - -- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { - [self sd_cancelCurrentAnimationImagesLoad]; - __weak UIImageView *wself = self; - - NSMutableArray *operationsArray = [[NSMutableArray alloc] init]; - - for (NSURL *logoImageURL in arrayOfURLs) { - id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIImageView *sself = wself; - [sself stopAnimating]; - if (sself && image) { - NSMutableArray *currentImages = [[sself animationImages] mutableCopy]; - if (!currentImages) { - currentImages = [[NSMutableArray alloc] init]; - } - [currentImages addObject:image]; - - sself.animationImages = currentImages; - [sself setNeedsLayout]; - } - [sself startAnimating]; - }); - }]; - [operationsArray addObject:operation]; - } - - [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"]; -} - -- (void)sd_cancelCurrentImageLoad { - [self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"]; -} - -- (void)sd_cancelCurrentAnimationImagesLoad { - [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"]; -} - -@end - - -@implementation UIImageView (WebCacheDeprecated) - -- (NSURL *)imageURL { - return [self sd_imageURL]; -} - -- (void)setImageWithURL:(NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentArrayLoad { - [self sd_cancelCurrentAnimationImagesLoad]; -} - -- (void)cancelCurrentImageLoad { - [self sd_cancelCurrentImageLoad]; -} - -- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { - [self sd_setAnimationImagesWithURLs:arrayOfURLs]; -} - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h b/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h deleted file mode 100644 index 6719036..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import <UIKit/UIKit.h> -#import "SDWebImageManager.h" - -@interface UIView (WebCacheOperation) - -/** - * Set the image load operation (storage in a UIView based dictionary) - * - * @param operation the operation - * @param key key for storing the operation - */ -- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key; - -/** - * Cancel all operations for the current UIView and key - * - * @param key key for identifying the operations - */ -- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key; - -/** - * Just remove the operations corresponding to the current UIView and key without cancelling them - * - * @param key key for identifying the operations - */ -- (void)sd_removeImageLoadOperationWithKey:(NSString *)key; - -@end diff --git a/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m b/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m deleted file mode 100644 index 9219478..0000000 --- a/TeamTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey <rs@dailymotion.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIView+WebCacheOperation.h" -#import "objc/runtime.h" - -static char loadOperationKey; - -@implementation UIView (WebCacheOperation) - -- (NSMutableDictionary *)operationDictionary { - NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); - if (operations) { - return operations; - } - operations = [NSMutableDictionary dictionary]; - objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - return operations; -} - -- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key { - [self sd_cancelImageLoadOperationWithKey:key]; - NSMutableDictionary *operationDictionary = [self operationDictionary]; - [operationDictionary setObject:operation forKey:key]; -} - -- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key { - // Cancel in progress downloader from queue - NSMutableDictionary *operationDictionary = [self operationDictionary]; - id operations = [operationDictionary objectForKey:key]; - if (operations) { - if ([operations isKindOfClass:[NSArray class]]) { - for (id <SDWebImageOperation> operation in operations) { - if (operation) { - [operation cancel]; - } - } - } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ - [(id<SDWebImageOperation>) operations cancel]; - } - [operationDictionary removeObjectForKey:key]; - } -} - -- (void)sd_removeImageLoadOperationWithKey:(NSString *)key { - NSMutableDictionary *operationDictionary = [self operationDictionary]; - [operationDictionary removeObjectForKey:key]; -} - -@end diff --git a/TeamTalk/README.md b/TeamTalk/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/TeamTalk/RuntimeStatus.h b/TeamTalk/RuntimeStatus.h deleted file mode 100644 index cc3f0cc..0000000 --- a/TeamTalk/RuntimeStatus.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// RuntimeStatus.h -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-31. -// Copyright (c) 2014 dujia. All rights reserved. -// -#define TOPKEY @"fixedTop" -#import <Foundation/Foundation.h> -#import "DDUserEntity.h" -#import "std.h" -#define TheRuntime [RuntimeStatus instance] -@interface RuntimeStatus : NSObject - -@property(strong)DDUserEntity *user; -@property(strong)NSMutableArray *isFixedArray; -@property(assign)int groupCount; -@property(copy)NSString *token; -@property(copy)NSString *userID; -@property(strong)NSString *username; -@property(copy)NSString *dao; -@property(copy)NSString *pushToken; -+ (instancetype)instance; --(void)insertToFixedTop:(NSString *)idString; --(void)removeFromFixedTop:(NSString *)idString; --(BOOL)isInFixedTop:(NSString *)idString; --(NSUInteger)getFixedTopCount; --(BOOL)isInShielding:(NSString *)idString; --(void)removeIDFromShielding:(NSString *)idString; --(void)addToShielding:(NSString *)string; --(void)showAlertView:(NSString *)title Description:(NSString *)string; --(void)updateData; -@end diff --git a/TeamTalk/RuntimeStatus.m b/TeamTalk/RuntimeStatus.m deleted file mode 100644 index 938fa64..0000000 --- a/TeamTalk/RuntimeStatus.m +++ /dev/null @@ -1,152 +0,0 @@ -// -// RuntimeStatus.m -// IOSDuoduo -// -// Created by Michael Scofield on 2014-07-31. -// Copyright (c) 2014 dujia. All rights reserved. -// -#define TOPKEY @"fixedTop" -#define SHIELDINGKEY @"shieldingkey" -#import "RuntimeStatus.h" -#import "DDUserEntity.h" -#import "DDGroupModule.h" -#import "std.h" -#import "DDMessageModule.h" -#import "DDClientStateMaintenanceManager.h" -#import "LoginViewController.h" -#import "DDAppDelegate.h" -#import "NSString+Additions.h" -@interface RuntimeStatus() -@property(strong)NSMutableArray *userDefaults; -@property(strong)NSMutableArray *shieldingArray; - -@end -@implementation RuntimeStatus - -+ (instancetype)instance -{ - static RuntimeStatus* g_runtimeState; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_runtimeState = [[RuntimeStatus alloc] init]; - - }); - return g_runtimeState; -} -- (instancetype)init -{ - self = [super init]; - if (self) { - self.user = [DDUserEntity new]; - self.userDefaults =[NSMutableArray arrayWithContentsOfFile:fixedlist]; - self.shieldingArray = [NSMutableArray arrayWithContentsOfFile:shieldinglist]; - } - return self; -} --(void)updateData -{ - [DDMessageModule shareInstance]; - [DDClientStateMaintenanceManager shareInstance]; - [DDGroupModule instance]; -} --(void)insertToFixedTop:(NSString *)idString -{ - - - - if (self.userDefaults == nil || [self.userDefaults count] == 0) { - self.userDefaults = [NSMutableArray new]; - [self.userDefaults addObject:idString]; - - }else - { - if (![self.userDefaults containsObject:idString]) { - [self.userDefaults addObject:idString]; - - } - } - [self.userDefaults writeToFile:fixedlist atomically:YES]; -} --(void)removeFromFixedTop:(NSString *)idString -{ - - if (self.userDefaults != nil) { - [self.userDefaults removeObject:idString]; - - } - [self.userDefaults writeToFile:fixedlist atomically:YES]; - // [self.userDefaults synchronize]; -} --(BOOL)isInFixedTop:(NSString *)idString -{ - - if (self.userDefaults == nil) { - return NO; - }else - { - if (![self.userDefaults containsObject:idString]) { - return NO; - }else - { - return YES; - } - } - return NO; - -} --(NSUInteger)getFixedTopCount -{ - - return [self.userDefaults count]; -} --(void)addToShielding:(NSString *)string -{ - - - if (self.shieldingArray == nil || [self.shieldingArray count] == 0) { - self.shieldingArray =[NSMutableArray new]; - [self.shieldingArray addObject:string]; - - }else - { - if (![self.shieldingArray containsObject:string]) { - [self.shieldingArray addObject:string]; - // [self.userDefaults setObject:array forKey:SHIELDINGKEY]; - } - } - [self.shieldingArray writeToFile:shieldinglist atomically:YES]; - //[self.userDefaults synchronize]; -} --(void)removeIDFromShielding:(NSString *)idString -{ - if (self.shieldingArray != nil) { - [self.shieldingArray removeObject:idString]; - // [self.userDefaults setObject:array forKey:SHIELDINGKEY]; - } - //[self.userDefaults synchronize]; - [self.shieldingArray writeToFile:shieldinglist atomically:YES]; -} --(BOOL)isInShielding:(NSString *)idString -{ - // NSMutableArray *array = [self.userDefaults objectForKey:SHIELDINGKEY]; - if (self.shieldingArray == nil) { - return NO; - }else - { - if (![self.shieldingArray containsObject:idString]) { - return NO; - }else - { - return YES; - } - } - return NO; - -} --(void)showAlertView:(NSString *)title Description:(NSString *)string -{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:string delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; - [alert show]; -} - -@end diff --git a/TeamTalk/TeamTalk-Info.plist b/TeamTalk/TeamTalk-Info.plist deleted file mode 100644 index 750e284..0000000 --- a/TeamTalk/TeamTalk-Info.plist +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleDisplayName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIcons</key> - <dict/> - <key>CFBundleIcons~ipad</key> - <dict/> - <key>CFBundleIdentifier</key> - <string>com.juangua.teamtalk</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>UIRequiredDeviceCapabilities</key> - <array> - <string>armv7</string> - </array> - <key>UIStatusBarHidden</key> - <false/> - <key>UIStatusBarStyle</key> - <string>UIStatusBarStyleLightContent</string> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - </array> - <key>UIViewControllerBasedStatusBarAppearance</key> - <false/> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcodeproj/project.pbxproj b/TeamTalk/TeamTalk.xcodeproj/project.pbxproj deleted file mode 100644 index 07ccdad..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2664 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 20429AA3EA084D9C821BEC3E /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EFE09922227481999813B37 /* libPods.a */; }; - 4C1E441919961889005CB2DB /* DDReceiveMessageACKAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E441819961889005CB2DB /* DDReceiveMessageACKAPI.m */; }; - 4C21748F19C16B56006F4BFC /* edit.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C21748D19C16B56006F4BFC /* edit.png */; }; - 4C21749019C16B56006F4BFC /* edit@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C21748E19C16B56006F4BFC /* edit@2x.png */; }; - 4C21749319C195CF006F4BFC /* x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C21749119C195CF006F4BFC /* x.png */; }; - 4C21749419C195CF006F4BFC /* x@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C21749219C195CF006F4BFC /* x@2x.png */; }; - 4C21749719C197F3006F4BFC /* DDUserDetailInfoAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C21749619C197F3006F4BFC /* DDUserDetailInfoAPI.m */; }; - 4C31EB5619CAB471004A3B2C /* GetGroupInfoAPi.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C31EB5519CAB471004A3B2C /* GetGroupInfoAPi.m */; }; - 4C39B7FE1974D6E4001B4AEF /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C39B7FD1974D6E4001B4AEF /* Images.xcassets */; }; - 4C39B8071974EF18001B4AEF /* MainViewControll.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C39B8051974EF18001B4AEF /* MainViewControll.m */; }; - 4C39B8081974EF18001B4AEF /* MainViewControll.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C39B8061974EF18001B4AEF /* MainViewControll.xib */; }; - 4C39B80F1974F388001B4AEF /* MyProfileViewControll.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C39B80D1974F388001B4AEF /* MyProfileViewControll.m */; }; - 4C39B8101974F388001B4AEF /* MyProfileViewControll.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C39B80E1974F388001B4AEF /* MyProfileViewControll.xib */; }; - 4C3F74951999EAC100510159 /* DDRecentGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3F74941999EAC100510159 /* DDRecentGroupAPI.m */; }; - 4C4657BD19EF5DC300334DD2 /* UnAckMessageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4657BC19EF5DC300334DD2 /* UnAckMessageManager.m */; }; - 4C510AD21A09D928002ECBAB /* launchimage.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C510AD11A09D928002ECBAB /* launchimage.png */; }; - 4C510AD71A0A2DFC002ECBAB /* NSString+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C510AD61A0A2DFC002ECBAB /* NSString+Additions.m */; }; - 4C5CA06019C13341007CE792 /* DDDeleteMemberFromGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5CA05F19C13341007CE792 /* DDDeleteMemberFromGroupAPI.m */; }; - 4C5D70571990C1AE009AF959 /* DDDepartmentAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5D70561990C1AE009AF959 /* DDDepartmentAPI.m */; }; - 4C5E374419D408CE00D1042B /* GroupAvatarImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5E374319D408CE00D1042B /* GroupAvatarImage.m */; }; - 4C600BAE1A090B22000252E9 /* group_default.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C600BAC1A090B22000252E9 /* group_default.png */; }; - 4C600BAF1A090B22000252E9 /* group_default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C600BAD1A090B22000252E9 /* group_default@2x.png */; }; - 4C62464219F10C980015440D /* loginlogo.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C62464119F10C980015440D /* loginlogo.png */; }; - 4C70BA47199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C70BA46199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.m */; }; - 4C7E4A63198B5EC300B96751 /* ClearImageCacheViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7E4A61198B5EC300B96751 /* ClearImageCacheViewController.m */; }; - 4C7E4A64198B5EC300B96751 /* ClearImageCacheViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7E4A62198B5EC300B96751 /* ClearImageCacheViewController.xib */; }; - 4C7E4A67198B634F00B96751 /* ClearImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7E4A66198B634F00B96751 /* ClearImageCell.m */; }; - 4C837EE9197F949300C3D758 /* DDAllUserAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837EE8197F949300C3D758 /* DDAllUserAPI.m */; }; - 4C837F38197F94F400C3D758 /* ContactsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F32197F94F400C3D758 /* ContactsModule.m */; }; - 4C837F3A197F94F400C3D758 /* PublicProfileViewControll.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F36197F94F400C3D758 /* PublicProfileViewControll.m */; }; - 4C837F3B197F94F400C3D758 /* PublicProfileViewControll.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C837F37197F94F400C3D758 /* PublicProfileViewControll.xib */; }; - 4C837F3F197F951600C3D758 /* DDChattingEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F3D197F951600C3D758 /* DDChattingEditViewController.m */; }; - 4C837F40197F951600C3D758 /* DDChattingEditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C837F3E197F951600C3D758 /* DDChattingEditViewController.xib */; }; - 4C837F43197F952800C3D758 /* ChattingEditModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F42197F952800C3D758 /* ChattingEditModule.m */; }; - 4C837F46197F954500C3D758 /* DDCreateGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F45197F954500C3D758 /* DDCreateGroupAPI.m */; }; - 4C837F49197F95A400C3D758 /* DDGroupEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F48197F95A400C3D758 /* DDGroupEntity.m */; }; - 4C837F4C197F95FF00C3D758 /* ContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C837F4B197F95FF00C3D758 /* ContactsViewController.m */; }; - 4C88A0C519D50FFA0071DA9C /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C88A0C419D50FFA0071DA9C /* libz.dylib */; }; - 4C891F8D19B04C990006E3DF /* add.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3319B04C980006E3DF /* add.png */; }; - 4C891F8E19B04C9A0006E3DF /* add@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3419B04C980006E3DF /* add@2x.png */; }; - 4C891F8F19B04C9A0006E3DF /* chat.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3519B04C980006E3DF /* chat.png */; }; - 4C891F9019B04C9A0006E3DF /* chat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3619B04C980006E3DF /* chat@2x.png */; }; - 4C891F9119B04C9A0006E3DF /* contact_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3719B04C980006E3DF /* contact_selected.png */; }; - 4C891F9219B04C9A0006E3DF /* contact_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3819B04C980006E3DF /* contact_selected@2x.png */; }; - 4C891F9319B04C9A0006E3DF /* contact.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3919B04C980006E3DF /* contact.png */; }; - 4C891F9419B04C9A0006E3DF /* contact@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3A19B04C980006E3DF /* contact@2x.png */; }; - 4C891F9519B04C9A0006E3DF /* conversation_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3B19B04C980006E3DF /* conversation_selected.png */; }; - 4C891F9619B04C9A0006E3DF /* conversation_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3C19B04C980006E3DF /* conversation_selected@2x.png */; }; - 4C891F9719B04C9A0006E3DF /* conversation.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3D19B04C980006E3DF /* conversation.png */; }; - 4C891F9819B04C9A0006E3DF /* conversation@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3E19B04C980006E3DF /* conversation@2x.png */; }; - 4C891F9919B04C9A0006E3DF /* dd_album.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F3F19B04C990006E3DF /* dd_album.png */; }; - 4C891F9A19B04C9A0006E3DF /* dd_album@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4019B04C990006E3DF /* dd_album@2x.png */; }; - 4C891F9B19B04C9A0006E3DF /* dd_cancel_send_record.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4119B04C990006E3DF /* dd_cancel_send_record.png */; }; - 4C891F9C19B04C9A0006E3DF /* dd_cancel_send_record@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4219B04C990006E3DF /* dd_cancel_send_record@2x.png */; }; - 4C891F9D19B04C9A0006E3DF /* dd_emoji_delete.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4319B04C990006E3DF /* dd_emoji_delete.png */; }; - 4C891F9E19B04C9A0006E3DF /* dd_emoji_delete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4419B04C990006E3DF /* dd_emoji_delete@2x.png */; }; - 4C891F9F19B04C9A0006E3DF /* dd_emotion.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4519B04C990006E3DF /* dd_emotion.png */; }; - 4C891FA019B04C9A0006E3DF /* dd_emotion@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4619B04C990006E3DF /* dd_emotion@2x.png */; }; - 4C891FA119B04C9A0006E3DF /* dd_has_unread_message.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4719B04C990006E3DF /* dd_has_unread_message.png */; }; - 4C891FA219B04C9A0006E3DF /* dd_has_unread_message@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4819B04C990006E3DF /* dd_has_unread_message@2x.png */; }; - 4C891FA319B04C9A0006E3DF /* dd_image_send.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4919B04C990006E3DF /* dd_image_send.png */; }; - 4C891FA419B04C9A0006E3DF /* dd_image_send@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4A19B04C990006E3DF /* dd_image_send@2x.png */; }; - 4C891FA519B04C9A0006E3DF /* dd_input_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4B19B04C990006E3DF /* dd_input_normal.png */; }; - 4C891FA619B04C9A0006E3DF /* dd_input_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4C19B04C990006E3DF /* dd_input_normal@2x.png */; }; - 4C891FA719B04C9A0006E3DF /* dd_left_voice_one.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4D19B04C990006E3DF /* dd_left_voice_one.png */; }; - 4C891FA819B04C9A0006E3DF /* dd_left_voice_one@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4E19B04C990006E3DF /* dd_left_voice_one@2x.png */; }; - 4C891FA919B04C9A0006E3DF /* dd_left_voice_three.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F4F19B04C990006E3DF /* dd_left_voice_three.png */; }; - 4C891FAA19B04C9A0006E3DF /* dd_left_voice_three@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5019B04C990006E3DF /* dd_left_voice_three@2x.png */; }; - 4C891FAB19B04C9A0006E3DF /* dd_left_voice_two.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5119B04C990006E3DF /* dd_left_voice_two.png */; }; - 4C891FAC19B04C9A0006E3DF /* dd_left_voice_two@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5219B04C990006E3DF /* dd_left_voice_two@2x.png */; }; - 4C891FAD19B04C9A0006E3DF /* dd_photo_back.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5319B04C990006E3DF /* dd_photo_back.png */; }; - 4C891FAE19B04C9A0006E3DF /* dd_photo_back@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5419B04C990006E3DF /* dd_photo_back@2x.png */; }; - 4C891FAF19B04C9A0006E3DF /* dd_press_to_say_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5519B04C990006E3DF /* dd_press_to_say_normal.png */; }; - 4C891FB019B04C9A0006E3DF /* dd_press_to_say_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5619B04C990006E3DF /* dd_press_to_say_normal@2x.png */; }; - 4C891FB119B04C9A0006E3DF /* dd_preview_select.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5719B04C990006E3DF /* dd_preview_select.png */; }; - 4C891FB219B04C9A0006E3DF /* dd_preview_select@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5819B04C990006E3DF /* dd_preview_select@2x.png */; }; - 4C891FB319B04C9A0006E3DF /* dd_preview_unselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5919B04C990006E3DF /* dd_preview_unselected.png */; }; - 4C891FB419B04C9A0006E3DF /* dd_recent_contacts.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5A19B04C990006E3DF /* dd_recent_contacts.png */; }; - 4C891FB519B04C9A0006E3DF /* dd_recent_contacts@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5B19B04C990006E3DF /* dd_recent_contacts@2x.png */; }; - 4C891FB619B04C9A0006E3DF /* dd_record_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5C19B04C990006E3DF /* dd_record_normal.png */; }; - 4C891FB719B04C9A0006E3DF /* dd_record_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5D19B04C990006E3DF /* dd_record_normal@2x.png */; }; - 4C891FB819B04C9A0006E3DF /* dd_record_release_end.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5E19B04C990006E3DF /* dd_record_release_end.png */; }; - 4C891FB919B04C9A0006E3DF /* dd_record_release_end@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F5F19B04C990006E3DF /* dd_record_release_end@2x.png */; }; - 4C891FBA19B04C9A0006E3DF /* dd_record_too_short.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6019B04C990006E3DF /* dd_record_too_short.png */; }; - 4C891FBB19B04C9A0006E3DF /* dd_record_too_short@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6119B04C990006E3DF /* dd_record_too_short@2x.png */; }; - 4C891FBC19B04C9A0006E3DF /* dd_recording.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6219B04C990006E3DF /* dd_recording.png */; }; - 4C891FBD19B04C9A0006E3DF /* dd_recording@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6319B04C990006E3DF /* dd_recording@2x.png */; }; - 4C891FBE19B04C9A0006E3DF /* dd_right_voice_one.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6419B04C990006E3DF /* dd_right_voice_one.png */; }; - 4C891FBF19B04C9A0006E3DF /* dd_right_voice_one@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6519B04C990006E3DF /* dd_right_voice_one@2x.png */; }; - 4C891FC019B04C9A0006E3DF /* dd_right_voice_three.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6619B04C990006E3DF /* dd_right_voice_three.png */; }; - 4C891FC119B04C9A0006E3DF /* dd_right_voice_three@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6719B04C990006E3DF /* dd_right_voice_three@2x.png */; }; - 4C891FC219B04C9A0006E3DF /* dd_right_voice_two.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6819B04C990006E3DF /* dd_right_voice_two.png */; }; - 4C891FC319B04C9A0006E3DF /* dd_right_voice_two@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6919B04C990006E3DF /* dd_right_voice_two@2x.png */; }; - 4C891FC419B04C9A0006E3DF /* dd_selected_photo.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6A19B04C990006E3DF /* dd_selected_photo.png */; }; - 4C891FC519B04C9A0006E3DF /* dd_selected_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6B19B04C990006E3DF /* dd_selected_photo@2x.png */; }; - 4C891FC619B04C9A0006E3DF /* dd_send_failed.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6C19B04C990006E3DF /* dd_send_failed.png */; }; - 4C891FC719B04C9A0006E3DF /* dd_send_failed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6D19B04C990006E3DF /* dd_send_failed@2x.png */; }; - 4C891FC819B04C9A0006E3DF /* dd_take-photo.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6E19B04C990006E3DF /* dd_take-photo.png */; }; - 4C891FC919B04C9A0006E3DF /* dd_take-photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F6F19B04C990006E3DF /* dd_take-photo@2x.png */; }; - 4C891FCA19B04C9A0006E3DF /* dd_utility.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7019B04C990006E3DF /* dd_utility.png */; }; - 4C891FCB19B04C9A0006E3DF /* dd_utility@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7119B04C990006E3DF /* dd_utility@2x.png */; }; - 4C891FCC19B04C9A0006E3DF /* dd_volumn.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7219B04C990006E3DF /* dd_volumn.png */; }; - 4C891FCD19B04C9A0006E3DF /* dd_volumn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7319B04C990006E3DF /* dd_volumn@2x.png */; }; - 4C891FCE19B04C9A0006E3DF /* delete.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7419B04C990006E3DF /* delete.png */; }; - 4C891FCF19B04C9A0006E3DF /* delete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7519B04C990006E3DF /* delete@2x.png */; }; - 4C891FD019B04C9A0006E3DF /* email.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7619B04C990006E3DF /* email.png */; }; - 4C891FD119B04C9A0006E3DF /* email@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7719B04C990006E3DF /* email@2x.png */; }; - 4C891FD219B04C9A0006E3DF /* jiantou.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7819B04C990006E3DF /* jiantou.png */; }; - 4C891FD319B04C9A0006E3DF /* jiantou@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7919B04C990006E3DF /* jiantou@2x.png */; }; - 4C891FD419B04C9A0006E3DF /* left.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7A19B04C990006E3DF /* left.png */; }; - 4C891FD519B04C9A0006E3DF /* left@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7B19B04C990006E3DF /* left@2x.png */; }; - 4C891FD619B04C9A0006E3DF /* loginlogo.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7C19B04C990006E3DF /* loginlogo.jpg */; }; - 4C891FD719B04C9A0006E3DF /* msg.caf in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7D19B04C990006E3DF /* msg.caf */; }; - 4C891FD819B04C9A0006E3DF /* myprofile_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7E19B04C990006E3DF /* myprofile_selected.png */; }; - 4C891FD919B04C9A0006E3DF /* myprofile_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F7F19B04C990006E3DF /* myprofile_selected@2x.png */; }; - 4C891FDA19B04C9A0006E3DF /* myprofile.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8019B04C990006E3DF /* myprofile.png */; }; - 4C891FDB19B04C9A0006E3DF /* myprofile@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8119B04C990006E3DF /* myprofile@2x.png */; }; - 4C891FDC19B04C9A0006E3DF /* password.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8219B04C990006E3DF /* password.png */; }; - 4C891FDD19B04C9A0006E3DF /* password@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8319B04C990006E3DF /* password@2x.png */; }; - 4C891FDE19B04C9A0006E3DF /* right.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8419B04C990006E3DF /* right.png */; }; - 4C891FDF19B04C9A0006E3DF /* right@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8519B04C990006E3DF /* right@2x.png */; }; - 4C891FE019B04C9A0006E3DF /* setting.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8619B04C990006E3DF /* setting.png */; }; - 4C891FE119B04C9A0006E3DF /* setting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8719B04C990006E3DF /* setting@2x.png */; }; - 4C891FE219B04C9A0006E3DF /* tel.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8819B04C990006E3DF /* tel.png */; }; - 4C891FE519B04C9A0006E3DF /* username.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8B19B04C990006E3DF /* username.png */; }; - 4C891FE619B04C9A0006E3DF /* username@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C891F8C19B04C990006E3DF /* username@2x.png */; }; - 4C92734819EB9C8200F6C370 /* NetwrokStatusNotifyUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C92734719EB9C8200F6C370 /* NetwrokStatusNotifyUI.m */; }; - 4C98355419C06F6D00DE8874 /* EditContactsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C98355319C06F6D00DE8874 /* EditContactsCell.m */; }; - 4C98355719C070A200DE8874 /* select.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C98355519C070A200DE8874 /* select.png */; }; - 4C98355819C070A200DE8874 /* select@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C98355619C070A200DE8874 /* select@2x.png */; }; - 4C98355B19C070BD00DE8874 /* unselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C98355919C070BD00DE8874 /* unselected.png */; }; - 4C98355C19C070BD00DE8874 /* unselected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C98355A19C070BD00DE8874 /* unselected@2x.png */; }; - 4CA50CC919A435E20032DE24 /* DDPersonEditCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA50CC819A435E20032DE24 /* DDPersonEditCollectionCell.m */; }; - 4CA50CCD19A47B9A0032DE24 /* SpellLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA50CCC19A47B9A0032DE24 /* SpellLibrary.m */; }; - 4CA50CD019A47C690032DE24 /* DDSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA50CCF19A47C690032DE24 /* DDSearch.m */; }; - 4CA82AD919D29FAD00F20D01 /* star.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CA82AD719D29FAD00F20D01 /* star.png */; }; - 4CA82ADA19D29FAD00F20D01 /* star@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CA82AD819D29FAD00F20D01 /* star@2x.png */; }; - 4CB23CAB19B457AD004FCF10 /* EditGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB23CA919B457AD004FCF10 /* EditGroupViewController.m */; }; - 4CB23CAC19B457AD004FCF10 /* EditGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CB23CAA19B457AD004FCF10 /* EditGroupViewController.xib */; }; - 4CB23CAF19B4590D004FCF10 /* EditGroupViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB23CAE19B4590D004FCF10 /* EditGroupViewCell.m */; }; - 4CB3D91A19F4A22800DC9B9D /* ShieldGroupMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB3D91919F4A22800DC9B9D /* ShieldGroupMessageAPI.m */; }; - 4CB3D91D19F4B48200DC9B9D /* LogoutAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB3D91C19F4B48200DC9B9D /* LogoutAPI.m */; }; - 4CB3D92119F4FA7F00DC9B9D /* SearchContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB3D91F19F4FA7F00DC9B9D /* SearchContentViewController.m */; }; - 4CB3D92219F4FA7F00DC9B9D /* SearchContentViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CB3D92019F4FA7F00DC9B9D /* SearchContentViewController.xib */; }; - 4CB58EAC1991FF98006B24D3 /* DDepartment.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB58EAB1991FF98006B24D3 /* DDepartment.m */; }; - 4CB6AA0D198F7F550075BDB4 /* ChatEditTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB6AA0C198F7F550075BDB4 /* ChatEditTableViewCell.m */; }; - 4CB8F6D319A7171800C4C27D /* DDContactsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8F6D219A7171800C4C27D /* DDContactsCell.m */; }; - 4CCE6BB61A11D6F700CD0A24 /* DDMsgServer.h in Sources */ = {isa = PBXBuildFile; fileRef = C493DE0B1962A50900B39106 /* DDMsgServer.h */; }; - 4CD156681998A36300B11233 /* DDAddMemberToGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD156591998A36300B11233 /* DDAddMemberToGroupAPI.m */; }; - 4CD156691998A36300B11233 /* DDFixedGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD1565B1998A36300B11233 /* DDFixedGroupAPI.m */; }; - 4CD1566A1998A36300B11233 /* DDGroupInfoAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD1565D1998A36300B11233 /* DDGroupInfoAPI.m */; }; - 4CD1566B1998A36300B11233 /* DDGroupMsgReadACKAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD1565F1998A36300B11233 /* DDGroupMsgReadACKAPI.m */; }; - 4CD1566C1998A36300B11233 /* DDGroupsUnreadMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD156611998A36300B11233 /* DDGroupsUnreadMessageAPI.m */; }; - 4CD1566D1998A36300B11233 /* DDReceiveGroupAddMemberAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD156631998A36300B11233 /* DDReceiveGroupAddMemberAPI.m */; }; - 4CD1566F1998A36300B11233 /* DDUnreadMessageGroupAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD156671998A36300B11233 /* DDUnreadMessageGroupAPI.m */; }; - 4CD156781998B70D00B11233 /* DDGroupModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD156771998B70D00B11233 /* DDGroupModule.m */; }; - 4CD995F5199F420700025C9C /* DDBaseEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD995F4199F420700025C9C /* DDBaseEntity.m */; }; - 4CE95F3119AAD0E8000CD0C6 /* ContactAvatarTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE95F3019AAD0E8000CD0C6 /* ContactAvatarTools.m */; }; - 4CEFE75019A31D0600156D26 /* SettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEFE74E19A31D0600156D26 /* SettingViewController.m */; }; - 4CEFE75119A31D0600156D26 /* SettingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CEFE74F19A31D0600156D26 /* SettingViewController.xib */; }; - 4CF7D511198A11E800F0272B /* RuntimeStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF7D510198A11E800F0272B /* RuntimeStatus.m */; }; - 4CF7D530198A268500F0272B /* JSDismissiveTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF7D523198A268500F0272B /* JSDismissiveTextView.m */; }; - 4CF7D531198A268500F0272B /* JSMessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF7D525198A268500F0272B /* JSMessageInputView.m */; }; - 4CF7D532198A268500F0272B /* JSMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF7D527198A268500F0272B /* JSMessageTextView.m */; }; - C4254B5A1962B29600B05CAF /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C4254B581962B29600B05CAF /* LoginViewController.m */; }; - C4254B5B1962B29600B05CAF /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C4254B591962B29600B05CAF /* LoginViewController.xib */; }; - C46061D6194E9D8A00FF3966 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C46061D5194E9D8A00FF3966 /* SystemConfiguration.framework */; }; - C46061D8194E9D9300FF3966 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C46061D7194E9D9300FF3966 /* MobileCoreServices.framework */; }; - C493DFB61962A50900B39106 /* NSDate+DDAddition.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDCD1962A50900B39106 /* NSDate+DDAddition.m */; }; - C493DFB71962A50900B39106 /* NSDictionary+JSON.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDCF1962A50900B39106 /* NSDictionary+JSON.m */; }; - C493DFB81962A50900B39106 /* NSDictionary+Safe.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDD11962A50900B39106 /* NSDictionary+Safe.m */; }; - C493DFB91962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDD31962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.m */; }; - C493DFBA1962A50900B39106 /* NSIndexSet+AQIsSetContiguous.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDD51962A50900B39106 /* NSIndexSet+AQIsSetContiguous.m */; }; - C493DFBD1962A50900B39106 /* NSString+DDPath.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDDB1962A50900B39106 /* NSString+DDPath.m */; }; - C493DFBE1962A50900B39106 /* NSString+JSMessagesView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDDD1962A50900B39106 /* NSString+JSMessagesView.m */; }; - C493DFBF1962A50900B39106 /* UIButton+JSMessagesView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDDF1962A50900B39106 /* UIButton+JSMessagesView.m */; }; - C493DFC01962A50900B39106 /* UIColor+AQGridView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDE11962A50900B39106 /* UIColor+AQGridView.m */; }; - C493DFC11962A50900B39106 /* UIColor+JSMessagesView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDE31962A50900B39106 /* UIColor+JSMessagesView.m */; }; - C493DFC31962A50900B39106 /* UIImage+JSMessagesView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDE71962A50900B39106 /* UIImage+JSMessagesView.m */; }; - C493DFC41962A50900B39106 /* UIView+AnimationOptionsForCurve.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDE91962A50900B39106 /* UIView+AnimationOptionsForCurve.m */; }; - C493DFC51962A50900B39106 /* UIView+DDAddition.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDEB1962A50900B39106 /* UIView+DDAddition.m */; }; - C493DFC61962A50900B39106 /* DDMessageEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDEF1962A50900B39106 /* DDMessageEntity.m */; }; - C493DFC71962A50900B39106 /* DDSessionEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDF11962A50900B39106 /* DDSessionEntity.m */; }; - C493DFC81962A50900B39106 /* DDUserEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDF31962A50900B39106 /* DDUserEntity.m */; }; - C493DFC91962A50900B39106 /* MD5.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDF51962A50900B39106 /* MD5.m */; }; - C493DFCA1962A50900B39106 /* DDDatabaseUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDF91962A50900B39106 /* DDDatabaseUtil.m */; }; - C493DFCC1962A50900B39106 /* DDAFClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DDFF1962A50900B39106 /* DDAFClient.m */; }; - C493DFCF1962A50900B39106 /* DDHttpServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE061962A50900B39106 /* DDHttpServer.m */; }; - C493DFD11962A50900B39106 /* DDLoginServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE0A1962A50900B39106 /* DDLoginServer.m */; }; - C493DFD21962A50900B39106 /* DDMsgServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE0C1962A50900B39106 /* DDMsgServer.m */; }; - C493DFD31962A50900B39106 /* DDTcpServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE0E1962A50900B39106 /* DDTcpServer.m */; }; - C493DFD41962A50900B39106 /* DDTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE101962A50900B39106 /* DDTokenManager.m */; }; - C493DFD51962A50900B39106 /* DDMessageModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE131962A50900B39106 /* DDMessageModule.m */; }; - C493DFD61962A50900B39106 /* DDMessageSendManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE151962A50900B39106 /* DDMessageSendManager.m */; }; - C493DFD71962A50900B39106 /* DDUserModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE181962A50900B39106 /* DDUserModule.m */; }; - C493E0141962A50A00B39106 /* DDClientState.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE581962A50900B39106 /* DDClientState.m */; }; - C493E0151962A50A00B39106 /* DDClientStateMaintenanceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE5A1962A50900B39106 /* DDClientStateMaintenanceManager.m */; }; - C493E0161962A50A00B39106 /* std.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE5B1962A50900B39106 /* std.m */; }; - C493E0171962A50A00B39106 /* DDNotificationHelp.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE5E1962A50900B39106 /* DDNotificationHelp.m */; }; - C493E0181962A50A00B39106 /* DDSundriesCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE601962A50900B39106 /* DDSundriesCenter.m */; }; - C493E0191962A50A00B39106 /* DataOutputStream+Addition.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE631962A50900B39106 /* DataOutputStream+Addition.m */; }; - C493E01A1962A50A00B39106 /* DDAPISchedule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE651962A50900B39106 /* DDAPISchedule.m */; }; - C493E01B1962A50A00B39106 /* DDDataInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE691962A50900B39106 /* DDDataInputStream.m */; }; - C493E01C1962A50A00B39106 /* DDDataOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE6B1962A50900B39106 /* DDDataOutputStream.m */; }; - C493E01D1962A50A00B39106 /* DDReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE6D1962A50900B39106 /* DDReachability.m */; }; - C493E01E1962A50A00B39106 /* DDSendBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE6F1962A50900B39106 /* DDSendBuffer.m */; }; - C493E01F1962A50A00B39106 /* DDSuperAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE711962A50900B39106 /* DDSuperAPI.m */; }; - C493E0201962A50A00B39106 /* DDTcpClientManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE731962A50900B39106 /* DDTcpClientManager.m */; }; - C493E0211962A50A00B39106 /* DDTcpProtocolHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE751962A50900B39106 /* DDTcpProtocolHeader.m */; }; - C493E0221962A50A00B39106 /* DDUnrequestSuperAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE771962A50900B39106 /* DDUnrequestSuperAPI.m */; }; - C493E0231962A50A00B39106 /* NSStream+NSStreamAddition.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE791962A50900B39106 /* NSStream+NSStreamAddition.m */; }; - C493E0251962A50A00B39106 /* DDHeartbeatAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE801962A50900B39106 /* DDHeartbeatAPI.m */; }; - C493E0261962A50A00B39106 /* DDLoginAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE821962A50900B39106 /* DDLoginAPI.m */; }; - C493E0271962A50A00B39106 /* DDMsgServerIPAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE841962A50900B39106 /* DDMsgServerIPAPI.m */; }; - C493E0281962A50A00B39106 /* DDGetUnreadMessageUsersAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE871962A50900B39106 /* DDGetUnreadMessageUsersAPI.m */; }; - C493E0291962A50A00B39106 /* DDGetUserUnreadMessagesAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE891962A50900B39106 /* DDGetUserUnreadMessagesAPI.m */; }; - C493E02A1962A50A00B39106 /* DDSendMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE8B1962A50900B39106 /* DDSendMessageAPI.m */; }; - C493E02B1962A50A00B39106 /* DDSendMessageReadACKAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE8D1962A50900B39106 /* DDSendMessageReadACKAPI.m */; }; - C493E02C1962A50A00B39106 /* DDSendPhotoMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE8F1962A50900B39106 /* DDSendPhotoMessageAPI.m */; }; - C493E02D1962A50A00B39106 /* DDSendVoiceMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE911962A50900B39106 /* DDSendVoiceMessageAPI.m */; }; - C493E02E1962A50A00B39106 /* DDAllotServiceAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE941962A50900B39106 /* DDAllotServiceAPI.m */; }; - C493E02F1962A50A00B39106 /* DDGetUserInfoAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE961962A50900B39106 /* DDGetUserInfoAPI.m */; }; - C493E0301962A50A00B39106 /* RecentConactsAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE981962A50900B39106 /* RecentConactsAPI.m */; }; - C493E0311962A50A00B39106 /* ReceiveKickoffAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE9C1962A50900B39106 /* ReceiveKickoffAPI.m */; }; - C493E0321962A50A00B39106 /* DDReceiveMessageAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DE9F1962A50900B39106 /* DDReceiveMessageAPI.m */; }; - C493E0331962A50A00B39106 /* AQGridView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEA51962A50900B39106 /* AQGridView.m */; }; - C493E0341962A50A00B39106 /* AQGridViewAnimatorItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEA71962A50900B39106 /* AQGridViewAnimatorItem.m */; }; - C493E0351962A50A00B39106 /* AQGridViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEAA1962A50900B39106 /* AQGridViewCell.m */; }; - C493E0361962A50A00B39106 /* AQGridViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEAC1962A50900B39106 /* AQGridViewController.m */; }; - C493E0371962A50A00B39106 /* AQGridViewData.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEAE1962A50900B39106 /* AQGridViewData.m */; }; - C493E0381962A50A00B39106 /* AQGridViewUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEB01962A50900B39106 /* AQGridViewUpdateInfo.m */; }; - C493E0391962A50A00B39106 /* AQGridViewUpdateItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEB21962A50900B39106 /* AQGridViewUpdateItem.m */; }; - C493E03A1962A50A00B39106 /* MWCaptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEB51962A50900B39106 /* MWCaptionView.m */; }; - C493E03B1962A50A00B39106 /* MWGridCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEB81962A50900B39106 /* MWGridCell.m */; }; - C493E03C1962A50A00B39106 /* MWGridViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEBA1962A50900B39106 /* MWGridViewController.m */; }; - C493E03D1962A50A00B39106 /* MWPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEBC1962A50900B39106 /* MWPhoto.m */; }; - C493E03E1962A50A00B39106 /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEBE1962A50900B39106 /* MWPhotoBrowser.m */; }; - C493E03F1962A50A00B39106 /* MWTapDetectingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEC21962A50900B39106 /* MWTapDetectingImageView.m */; }; - C493E0401962A50A00B39106 /* MWTapDetectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEC41962A50900B39106 /* MWTapDetectingView.m */; }; - C493E0411962A50A00B39106 /* MWZoomingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEC61962A50900B39106 /* MWZoomingScrollView.m */; }; - C493E04D1962A50A00B39106 /* DDChatBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEE21962A50900B39106 /* DDChatBaseCell.m */; }; - C493E04E1962A50A00B39106 /* DDChatImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEE51962A50900B39106 /* DDChatImageCell.m */; }; - C493E04F1962A50A00B39106 /* DDChatImagePreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEE71962A50900B39106 /* DDChatImagePreviewViewController.m */; }; - C493E0501962A50A00B39106 /* DDChatTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEE91962A50900B39106 /* DDChatTextCell.m */; }; - C493E0511962A50A00B39106 /* DDChatTextCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C493DEEA1962A50900B39106 /* DDChatTextCell.xib */; }; - C493E0521962A50A00B39106 /* DDChatVoiceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEEC1962A50900B39106 /* DDChatVoiceCell.m */; }; - C493E0541962A50A00B39106 /* DDPromptCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEF01962A50900B39106 /* DDPromptCell.m */; }; - C493E0551962A50A00B39106 /* DDAlbumDetailsViewControll.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEF31962A50900B39106 /* DDAlbumDetailsViewControll.m */; }; - C493E0561962A50A00B39106 /* AlbumViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEF51962A50900B39106 /* AlbumViewController.m */; }; - C493E0571962A50A00B39106 /* ChatUtilityItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEF71962A50900B39106 /* ChatUtilityItem.m */; }; - C493E0581962A50A00B39106 /* ChatUtilityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEF91962A50900B39106 /* ChatUtilityViewController.m */; }; - C493E0591962A50A00B39106 /* EmojiFaceView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEFB1962A50900B39106 /* EmojiFaceView.m */; }; - C493E05A1962A50A00B39106 /* EmotionsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEFD1962A50900B39106 /* EmotionsModule.m */; }; - C493E05B1962A50A00B39106 /* EmotionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DEFF1962A50900B39106 /* EmotionsViewController.m */; }; - C493E05C1962A50A00B39106 /* UtililyItemCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF011962A50900B39106 /* UtililyItemCell.m */; }; - C493E05D1962A50A00B39106 /* AnalysisImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF031962A50900B39106 /* AnalysisImage.m */; }; - C493E05F1962A50A00B39106 /* ChattingMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF071962A50900B39106 /* ChattingMainViewController.m */; }; - C493E0601962A50A00B39106 /* ChattingMainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C493DF081962A50900B39106 /* ChattingMainViewController.xib */; }; - C493E0611962A50A00B39106 /* ChattingModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF0A1962A50900B39106 /* ChattingModule.m */; }; - C493E0621962A50A00B39106 /* CommodityCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF0C1962A50900B39106 /* CommodityCell.m */; }; - C493E0631962A50A00B39106 /* CommodityCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C493DF0D1962A50900B39106 /* CommodityCell.xib */; }; - C493E0641962A50A00B39106 /* MenuImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF0F1962A50900B39106 /* MenuImageView.m */; }; - C493E0651962A50A00B39106 /* RecordingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF111962A50900B39106 /* RecordingView.m */; }; - C493E0661962A50A00B39106 /* TouchDownGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF131962A50900B39106 /* TouchDownGestureRecognizer.m */; }; - C493E0671962A50A00B39106 /* AlbumDetailsBottomBar.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF151962A50900B39106 /* AlbumDetailsBottomBar.m */; }; - C493E0681962A50A00B39106 /* ImagesPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF171962A50900B39106 /* ImagesPreviewViewController.m */; }; - C493E0691962A50A00B39106 /* LoginModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF191962A50900B39106 /* LoginModule.m */; }; - C493E06C1962A50A00B39106 /* Photo.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF1E1962A50900B39106 /* Photo.m */; }; - C493E06D1962A50A00B39106 /* PhotosCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF201962A50900B39106 /* PhotosCache.m */; }; - C493E06E1962A50A00B39106 /* ImageGridViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF221962A50900B39106 /* ImageGridViewCell.m */; }; - C493E06F1962A50A00B39106 /* RecentUserCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF251962A50900B39106 /* RecentUserCell.m */; }; - C493E0701962A50A00B39106 /* RecentUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C493DF261962A50900B39106 /* RecentUserCell.xib */; }; - C493E0711962A50A00B39106 /* RecentUsersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF281962A50900B39106 /* RecentUsersViewController.m */; }; - C493E0721962A50A00B39106 /* RecentUsersViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C493DF291962A50900B39106 /* RecentUsersViewController.xib */; }; - C493E0731962A50A00B39106 /* RecentUserVCModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DF2B1962A50900B39106 /* RecentUserVCModule.m */; }; - C493E0741962A50A00B39106 /* bitwise.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF311962A50900B39106 /* bitwise.c */; }; - C493E0751962A50A00B39106 /* framing.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF321962A50900B39106 /* framing.c */; }; - C493E0761962A50A00B39106 /* bits.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF391962A50900B39106 /* bits.c */; }; - C493E0771962A50A00B39106 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF3A1962A50900B39106 /* buffer.c */; }; - C493E0781962A50A00B39106 /* cb_search.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF3B1962A50900B39106 /* cb_search.c */; }; - C493E0791962A50A00B39106 /* exc_10_16_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF401962A50900B39106 /* exc_10_16_table.c */; }; - C493E07A1962A50A00B39106 /* exc_10_32_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF411962A50900B39106 /* exc_10_32_table.c */; }; - C493E07B1962A50A00B39106 /* exc_20_32_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF421962A50900B39106 /* exc_20_32_table.c */; }; - C493E07C1962A50A00B39106 /* exc_5_256_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF431962A50900B39106 /* exc_5_256_table.c */; }; - C493E07D1962A50A00B39106 /* exc_5_64_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF441962A50900B39106 /* exc_5_64_table.c */; }; - C493E07E1962A50A00B39106 /* exc_8_128_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF451962A50900B39106 /* exc_8_128_table.c */; }; - C493E07F1962A50A00B39106 /* fftwrap.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF461962A50900B39106 /* fftwrap.c */; }; - C493E0801962A50A00B39106 /* filterbank.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF481962A50900B39106 /* filterbank.c */; }; - C493E0811962A50A00B39106 /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF4A1962A50900B39106 /* filters.c */; }; - C493E0821962A50A00B39106 /* gain_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF541962A50900B39106 /* gain_table.c */; }; - C493E0831962A50A00B39106 /* gain_table_lbr.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF551962A50900B39106 /* gain_table_lbr.c */; }; - C493E0841962A50A00B39106 /* hexc_10_32_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF561962A50900B39106 /* hexc_10_32_table.c */; }; - C493E0851962A50A00B39106 /* hexc_table.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF571962A50900B39106 /* hexc_table.c */; }; - C493E0861962A50A00B39106 /* high_lsp_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF581962A50900B39106 /* high_lsp_tables.c */; }; - C493E0871962A50A00B39106 /* jitter.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF591962A50900B39106 /* jitter.c */; }; - C493E0881962A50A00B39106 /* kiss_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF5A1962A50900B39106 /* kiss_fft.c */; }; - C493E0891962A50A00B39106 /* kiss_fftr.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF5C1962A50900B39106 /* kiss_fftr.c */; }; - C493E08A1962A50A00B39106 /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF5E1962A50900B39106 /* lpc.c */; }; - C493E08B1962A50A00B39106 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF611962A50900B39106 /* lsp.c */; }; - C493E08C1962A50A00B39106 /* lsp_tables_nb.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF641962A50900B39106 /* lsp_tables_nb.c */; }; - C493E08D1962A50A00B39106 /* ltp.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF651962A50900B39106 /* ltp.c */; }; - C493E08E1962A50A00B39106 /* mdf.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF6B1962A50900B39106 /* mdf.c */; }; - C493E08F1962A50A00B39106 /* modes.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF6D1962A50900B39106 /* modes.c */; }; - C493E0901962A50A00B39106 /* modes_wb.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF6F1962A50900B39106 /* modes_wb.c */; }; - C493E0911962A50A00B39106 /* nb_celp.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF701962A50900B39106 /* nb_celp.c */; }; - C493E0921962A50A00B39106 /* preprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF731962A50900B39106 /* preprocess.c */; }; - C493E0931962A50A00B39106 /* quant_lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF751962A50900B39106 /* quant_lsp.c */; }; - C493E0941962A50A00B39106 /* resample.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF781962A50900B39106 /* resample.c */; }; - C493E0951962A50A00B39106 /* sb_celp.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF7A1962A50900B39106 /* sb_celp.c */; }; - C493E0961962A50A00B39106 /* scal.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF7C1962A50900B39106 /* scal.c */; }; - C493E0971962A50A00B39106 /* smallft.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF7D1962A50900B39106 /* smallft.c */; }; - C493E0981962A50A00B39106 /* speex_config_types.h.in in Resources */ = {isa = PBXBuildFile; fileRef = C493DF851962A50900B39106 /* speex_config_types.h.in */; }; - C493E0991962A50A00B39106 /* speex.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF8D1962A50900B39106 /* speex.c */; }; - C493E09A1962A50A00B39106 /* speex_callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF8E1962A50900B39106 /* speex_callbacks.c */; }; - C493E09B1962A50A00B39106 /* speex_header.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF8F1962A50900B39106 /* speex_header.c */; }; - C493E09C1962A50A00B39106 /* stereo.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF911962A50900B39106 /* stereo.c */; }; - C493E09D1962A50A00B39106 /* vbr.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF921962A50900B39106 /* vbr.c */; }; - C493E09E1962A50A00B39106 /* vq.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF951962A50900B39106 /* vq.c */; }; - C493E09F1962A50A00B39106 /* window.c in Sources */ = {isa = PBXBuildFile; fileRef = C493DF9A1962A50900B39106 /* window.c */; }; - C493E0A01962A50A00B39106 /* AQRecorder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C493DF9D1962A50900B39106 /* AQRecorder.mm */; }; - C493E0A11962A50A00B39106 /* SpeexCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DFA11962A50900B39106 /* SpeexCodec.m */; }; - C493E0A21962A50A00B39106 /* Decapsulator.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DFA31962A50900B39106 /* Decapsulator.m */; }; - C493E0A31962A50A00B39106 /* Encapsulator.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DFA51962A50900B39106 /* Encapsulator.m */; }; - C493E0A41962A50A00B39106 /* PlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DFA71962A50900B39106 /* PlayerManager.m */; }; - C493E0A51962A50A00B39106 /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C493DFA91962A50900B39106 /* CADebugMacros.cpp */; }; - C493E0A61962A50A00B39106 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C493DFAC1962A50900B39106 /* CAStreamBasicDescription.cpp */; }; - C493E0A71962A50A00B39106 /* CAXException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C493DFAE1962A50900B39106 /* CAXException.cpp */; }; - C493E0A81962A50A00B39106 /* RawAudioDataPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C493DFB11962A50900B39106 /* RawAudioDataPlayer.m */; }; - C493E0A91962A50A00B39106 /* RecorderManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C493DFB31962A50900B39106 /* RecorderManager.mm */; }; - C493E0AC1962A51900B39106 /* DDAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C493E0AB1962A51900B39106 /* DDAppDelegate.m */; }; - C493E0B21962A54F00B39106 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C493E0B11962A54F00B39106 /* main.m */; }; - C4AFD7D6193D67350054ECFD /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4AFD7D5193D67350054ECFD /* AVFoundation.framework */; }; - C4AFD883193D7B490054ECFD /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4AFD882193D7B490054ECFD /* CoreAudio.framework */; }; - C4AFD885193D7B580054ECFD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4AFD884193D7B580054ECFD /* AudioToolbox.framework */; }; - C4EBA738192F279100B72723 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA737192F279100B72723 /* Foundation.framework */; }; - C4EBA73A192F279100B72723 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA739192F279100B72723 /* CoreGraphics.framework */; }; - C4EBA73C192F279100B72723 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA73B192F279100B72723 /* UIKit.framework */; }; - C4EBA751192F279100B72723 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA750192F279100B72723 /* XCTest.framework */; }; - C4EBA752192F279100B72723 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA737192F279100B72723 /* Foundation.framework */; }; - C4EBA753192F279100B72723 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EBA73B192F279100B72723 /* UIKit.framework */; }; - C4EBA75B192F279100B72723 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C4EBA759192F279100B72723 /* InfoPlist.strings */; }; - C4EBA75D192F279100B72723 /* IOSDuoduoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C4EBA75C192F279100B72723 /* IOSDuoduoTests.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C4EBA754192F279100B72723 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C4EBA72C192F279100B72723 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C4EBA733192F279100B72723; - remoteInfo = IOSDuoduo; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 3EFE09922227481999813B37 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 45A51128555C4595B33CE39C /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = "<group>"; }; - 4C1E441719961889005CB2DB /* DDReceiveMessageACKAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDReceiveMessageACKAPI.h; sourceTree = "<group>"; }; - 4C1E441819961889005CB2DB /* DDReceiveMessageACKAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDReceiveMessageACKAPI.m; sourceTree = "<group>"; }; - 4C21748D19C16B56006F4BFC /* edit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = edit.png; sourceTree = "<group>"; }; - 4C21748E19C16B56006F4BFC /* edit@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "edit@2x.png"; sourceTree = "<group>"; }; - 4C21749119C195CF006F4BFC /* x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = x.png; sourceTree = "<group>"; }; - 4C21749219C195CF006F4BFC /* x@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "x@2x.png"; sourceTree = "<group>"; }; - 4C21749519C197F3006F4BFC /* DDUserDetailInfoAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUserDetailInfoAPI.h; sourceTree = "<group>"; }; - 4C21749619C197F3006F4BFC /* DDUserDetailInfoAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUserDetailInfoAPI.m; sourceTree = "<group>"; }; - 4C31EB5419CAB471004A3B2C /* GetGroupInfoAPi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetGroupInfoAPi.h; sourceTree = "<group>"; }; - 4C31EB5519CAB471004A3B2C /* GetGroupInfoAPi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetGroupInfoAPi.m; sourceTree = "<group>"; }; - 4C39B7FD1974D6E4001B4AEF /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; - 4C39B8041974EF18001B4AEF /* MainViewControll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewControll.h; sourceTree = "<group>"; }; - 4C39B8051974EF18001B4AEF /* MainViewControll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewControll.m; sourceTree = "<group>"; }; - 4C39B8061974EF18001B4AEF /* MainViewControll.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainViewControll.xib; sourceTree = "<group>"; }; - 4C39B80C1974F388001B4AEF /* MyProfileViewControll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyProfileViewControll.h; sourceTree = "<group>"; }; - 4C39B80D1974F388001B4AEF /* MyProfileViewControll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyProfileViewControll.m; sourceTree = "<group>"; }; - 4C39B80E1974F388001B4AEF /* MyProfileViewControll.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyProfileViewControll.xib; sourceTree = "<group>"; }; - 4C3F74931999EAC100510159 /* DDRecentGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDRecentGroupAPI.h; sourceTree = "<group>"; }; - 4C3F74941999EAC100510159 /* DDRecentGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDRecentGroupAPI.m; sourceTree = "<group>"; }; - 4C4657BB19EF5DC300334DD2 /* UnAckMessageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnAckMessageManager.h; sourceTree = "<group>"; }; - 4C4657BC19EF5DC300334DD2 /* UnAckMessageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UnAckMessageManager.m; sourceTree = "<group>"; }; - 4C510AD11A09D928002ECBAB /* launchimage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launchimage.png; sourceTree = "<group>"; }; - 4C510AD51A0A2DFC002ECBAB /* NSString+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Additions.h"; sourceTree = "<group>"; }; - 4C510AD61A0A2DFC002ECBAB /* NSString+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Additions.m"; sourceTree = "<group>"; }; - 4C5CA05E19C13341007CE792 /* DDDeleteMemberFromGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDeleteMemberFromGroupAPI.h; sourceTree = "<group>"; }; - 4C5CA05F19C13341007CE792 /* DDDeleteMemberFromGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDeleteMemberFromGroupAPI.m; sourceTree = "<group>"; }; - 4C5D70551990C1AE009AF959 /* DDDepartmentAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDepartmentAPI.h; sourceTree = "<group>"; }; - 4C5D70561990C1AE009AF959 /* DDDepartmentAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDepartmentAPI.m; sourceTree = "<group>"; }; - 4C5E374219D408CE00D1042B /* GroupAvatarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupAvatarImage.h; sourceTree = "<group>"; }; - 4C5E374319D408CE00D1042B /* GroupAvatarImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupAvatarImage.m; sourceTree = "<group>"; }; - 4C600BAC1A090B22000252E9 /* group_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = group_default.png; sourceTree = "<group>"; }; - 4C600BAD1A090B22000252E9 /* group_default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "group_default@2x.png"; sourceTree = "<group>"; }; - 4C62464119F10C980015440D /* loginlogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = loginlogo.png; sourceTree = "<group>"; }; - 4C70BA45199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDReceiveFixedGroupMemberChanged.h; sourceTree = "<group>"; }; - 4C70BA46199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDReceiveFixedGroupMemberChanged.m; sourceTree = "<group>"; }; - 4C7E4A60198B5EC300B96751 /* ClearImageCacheViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearImageCacheViewController.h; sourceTree = "<group>"; }; - 4C7E4A61198B5EC300B96751 /* ClearImageCacheViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClearImageCacheViewController.m; sourceTree = "<group>"; }; - 4C7E4A62198B5EC300B96751 /* ClearImageCacheViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ClearImageCacheViewController.xib; sourceTree = "<group>"; }; - 4C7E4A65198B634F00B96751 /* ClearImageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearImageCell.h; sourceTree = "<group>"; }; - 4C7E4A66198B634F00B96751 /* ClearImageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClearImageCell.m; sourceTree = "<group>"; }; - 4C837EE7197F949300C3D758 /* DDAllUserAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAllUserAPI.h; sourceTree = "<group>"; }; - 4C837EE8197F949300C3D758 /* DDAllUserAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAllUserAPI.m; sourceTree = "<group>"; }; - 4C837F31197F94F400C3D758 /* ContactsModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsModule.h; sourceTree = "<group>"; }; - 4C837F32197F94F400C3D758 /* ContactsModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsModule.m; sourceTree = "<group>"; }; - 4C837F35197F94F400C3D758 /* PublicProfileViewControll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublicProfileViewControll.h; sourceTree = "<group>"; }; - 4C837F36197F94F400C3D758 /* PublicProfileViewControll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PublicProfileViewControll.m; sourceTree = "<group>"; }; - 4C837F37197F94F400C3D758 /* PublicProfileViewControll.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PublicProfileViewControll.xib; sourceTree = "<group>"; }; - 4C837F3C197F951600C3D758 /* DDChattingEditViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChattingEditViewController.h; sourceTree = "<group>"; }; - 4C837F3D197F951600C3D758 /* DDChattingEditViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChattingEditViewController.m; sourceTree = "<group>"; }; - 4C837F3E197F951600C3D758 /* DDChattingEditViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DDChattingEditViewController.xib; sourceTree = "<group>"; }; - 4C837F41197F952800C3D758 /* ChattingEditModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChattingEditModule.h; path = Chatting/ChattingEditModule.h; sourceTree = "<group>"; }; - 4C837F42197F952800C3D758 /* ChattingEditModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ChattingEditModule.m; path = Chatting/ChattingEditModule.m; sourceTree = "<group>"; }; - 4C837F44197F954500C3D758 /* DDCreateGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDCreateGroupAPI.h; sourceTree = "<group>"; }; - 4C837F45197F954500C3D758 /* DDCreateGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDCreateGroupAPI.m; sourceTree = "<group>"; }; - 4C837F47197F95A400C3D758 /* DDGroupEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGroupEntity.h; sourceTree = "<group>"; }; - 4C837F48197F95A400C3D758 /* DDGroupEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGroupEntity.m; sourceTree = "<group>"; }; - 4C837F4A197F95FF00C3D758 /* ContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsViewController.h; sourceTree = "<group>"; }; - 4C837F4B197F95FF00C3D758 /* ContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsViewController.m; sourceTree = "<group>"; }; - 4C88A0C419D50FFA0071DA9C /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - 4C891F3319B04C980006E3DF /* add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add.png; path = resources/add.png; sourceTree = "<group>"; }; - 4C891F3419B04C980006E3DF /* add@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "add@2x.png"; path = "resources/add@2x.png"; sourceTree = "<group>"; }; - 4C891F3519B04C980006E3DF /* chat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat.png; path = resources/chat.png; sourceTree = "<group>"; }; - 4C891F3619B04C980006E3DF /* chat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "chat@2x.png"; path = "resources/chat@2x.png"; sourceTree = "<group>"; }; - 4C891F3719B04C980006E3DF /* contact_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_selected.png; path = resources/contact_selected.png; sourceTree = "<group>"; }; - 4C891F3819B04C980006E3DF /* contact_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "contact_selected@2x.png"; path = "resources/contact_selected@2x.png"; sourceTree = "<group>"; }; - 4C891F3919B04C980006E3DF /* contact.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact.png; path = resources/contact.png; sourceTree = "<group>"; }; - 4C891F3A19B04C980006E3DF /* contact@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "contact@2x.png"; path = "resources/contact@2x.png"; sourceTree = "<group>"; }; - 4C891F3B19B04C980006E3DF /* conversation_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = conversation_selected.png; path = resources/conversation_selected.png; sourceTree = "<group>"; }; - 4C891F3C19B04C980006E3DF /* conversation_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "conversation_selected@2x.png"; path = "resources/conversation_selected@2x.png"; sourceTree = "<group>"; }; - 4C891F3D19B04C980006E3DF /* conversation.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = conversation.png; path = resources/conversation.png; sourceTree = "<group>"; }; - 4C891F3E19B04C980006E3DF /* conversation@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "conversation@2x.png"; path = "resources/conversation@2x.png"; sourceTree = "<group>"; }; - 4C891F3F19B04C990006E3DF /* dd_album.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_album.png; path = resources/dd_album.png; sourceTree = "<group>"; }; - 4C891F4019B04C990006E3DF /* dd_album@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_album@2x.png"; path = "resources/dd_album@2x.png"; sourceTree = "<group>"; }; - 4C891F4119B04C990006E3DF /* dd_cancel_send_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_cancel_send_record.png; path = resources/dd_cancel_send_record.png; sourceTree = "<group>"; }; - 4C891F4219B04C990006E3DF /* dd_cancel_send_record@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_cancel_send_record@2x.png"; path = "resources/dd_cancel_send_record@2x.png"; sourceTree = "<group>"; }; - 4C891F4319B04C990006E3DF /* dd_emoji_delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_emoji_delete.png; path = resources/dd_emoji_delete.png; sourceTree = "<group>"; }; - 4C891F4419B04C990006E3DF /* dd_emoji_delete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_emoji_delete@2x.png"; path = "resources/dd_emoji_delete@2x.png"; sourceTree = "<group>"; }; - 4C891F4519B04C990006E3DF /* dd_emotion.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_emotion.png; path = resources/dd_emotion.png; sourceTree = "<group>"; }; - 4C891F4619B04C990006E3DF /* dd_emotion@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_emotion@2x.png"; path = "resources/dd_emotion@2x.png"; sourceTree = "<group>"; }; - 4C891F4719B04C990006E3DF /* dd_has_unread_message.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_has_unread_message.png; path = resources/dd_has_unread_message.png; sourceTree = "<group>"; }; - 4C891F4819B04C990006E3DF /* dd_has_unread_message@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_has_unread_message@2x.png"; path = "resources/dd_has_unread_message@2x.png"; sourceTree = "<group>"; }; - 4C891F4919B04C990006E3DF /* dd_image_send.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_image_send.png; path = resources/dd_image_send.png; sourceTree = "<group>"; }; - 4C891F4A19B04C990006E3DF /* dd_image_send@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_image_send@2x.png"; path = "resources/dd_image_send@2x.png"; sourceTree = "<group>"; }; - 4C891F4B19B04C990006E3DF /* dd_input_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_input_normal.png; path = resources/dd_input_normal.png; sourceTree = "<group>"; }; - 4C891F4C19B04C990006E3DF /* dd_input_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_input_normal@2x.png"; path = "resources/dd_input_normal@2x.png"; sourceTree = "<group>"; }; - 4C891F4D19B04C990006E3DF /* dd_left_voice_one.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_left_voice_one.png; path = resources/dd_left_voice_one.png; sourceTree = "<group>"; }; - 4C891F4E19B04C990006E3DF /* dd_left_voice_one@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_left_voice_one@2x.png"; path = "resources/dd_left_voice_one@2x.png"; sourceTree = "<group>"; }; - 4C891F4F19B04C990006E3DF /* dd_left_voice_three.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_left_voice_three.png; path = resources/dd_left_voice_three.png; sourceTree = "<group>"; }; - 4C891F5019B04C990006E3DF /* dd_left_voice_three@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_left_voice_three@2x.png"; path = "resources/dd_left_voice_three@2x.png"; sourceTree = "<group>"; }; - 4C891F5119B04C990006E3DF /* dd_left_voice_two.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_left_voice_two.png; path = resources/dd_left_voice_two.png; sourceTree = "<group>"; }; - 4C891F5219B04C990006E3DF /* dd_left_voice_two@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_left_voice_two@2x.png"; path = "resources/dd_left_voice_two@2x.png"; sourceTree = "<group>"; }; - 4C891F5319B04C990006E3DF /* dd_photo_back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_photo_back.png; path = resources/dd_photo_back.png; sourceTree = "<group>"; }; - 4C891F5419B04C990006E3DF /* dd_photo_back@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_photo_back@2x.png"; path = "resources/dd_photo_back@2x.png"; sourceTree = "<group>"; }; - 4C891F5519B04C990006E3DF /* dd_press_to_say_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_press_to_say_normal.png; path = resources/dd_press_to_say_normal.png; sourceTree = "<group>"; }; - 4C891F5619B04C990006E3DF /* dd_press_to_say_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_press_to_say_normal@2x.png"; path = "resources/dd_press_to_say_normal@2x.png"; sourceTree = "<group>"; }; - 4C891F5719B04C990006E3DF /* dd_preview_select.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_preview_select.png; path = resources/dd_preview_select.png; sourceTree = "<group>"; }; - 4C891F5819B04C990006E3DF /* dd_preview_select@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_preview_select@2x.png"; path = "resources/dd_preview_select@2x.png"; sourceTree = "<group>"; }; - 4C891F5919B04C990006E3DF /* dd_preview_unselected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_preview_unselected.png; path = resources/dd_preview_unselected.png; sourceTree = "<group>"; }; - 4C891F5A19B04C990006E3DF /* dd_recent_contacts.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_recent_contacts.png; path = resources/dd_recent_contacts.png; sourceTree = "<group>"; }; - 4C891F5B19B04C990006E3DF /* dd_recent_contacts@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_recent_contacts@2x.png"; path = "resources/dd_recent_contacts@2x.png"; sourceTree = "<group>"; }; - 4C891F5C19B04C990006E3DF /* dd_record_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_record_normal.png; path = resources/dd_record_normal.png; sourceTree = "<group>"; }; - 4C891F5D19B04C990006E3DF /* dd_record_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_record_normal@2x.png"; path = "resources/dd_record_normal@2x.png"; sourceTree = "<group>"; }; - 4C891F5E19B04C990006E3DF /* dd_record_release_end.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_record_release_end.png; path = resources/dd_record_release_end.png; sourceTree = "<group>"; }; - 4C891F5F19B04C990006E3DF /* dd_record_release_end@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_record_release_end@2x.png"; path = "resources/dd_record_release_end@2x.png"; sourceTree = "<group>"; }; - 4C891F6019B04C990006E3DF /* dd_record_too_short.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_record_too_short.png; path = resources/dd_record_too_short.png; sourceTree = "<group>"; }; - 4C891F6119B04C990006E3DF /* dd_record_too_short@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_record_too_short@2x.png"; path = "resources/dd_record_too_short@2x.png"; sourceTree = "<group>"; }; - 4C891F6219B04C990006E3DF /* dd_recording.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_recording.png; path = resources/dd_recording.png; sourceTree = "<group>"; }; - 4C891F6319B04C990006E3DF /* dd_recording@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_recording@2x.png"; path = "resources/dd_recording@2x.png"; sourceTree = "<group>"; }; - 4C891F6419B04C990006E3DF /* dd_right_voice_one.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_right_voice_one.png; path = resources/dd_right_voice_one.png; sourceTree = "<group>"; }; - 4C891F6519B04C990006E3DF /* dd_right_voice_one@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_right_voice_one@2x.png"; path = "resources/dd_right_voice_one@2x.png"; sourceTree = "<group>"; }; - 4C891F6619B04C990006E3DF /* dd_right_voice_three.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_right_voice_three.png; path = resources/dd_right_voice_three.png; sourceTree = "<group>"; }; - 4C891F6719B04C990006E3DF /* dd_right_voice_three@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_right_voice_three@2x.png"; path = "resources/dd_right_voice_three@2x.png"; sourceTree = "<group>"; }; - 4C891F6819B04C990006E3DF /* dd_right_voice_two.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_right_voice_two.png; path = resources/dd_right_voice_two.png; sourceTree = "<group>"; }; - 4C891F6919B04C990006E3DF /* dd_right_voice_two@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_right_voice_two@2x.png"; path = "resources/dd_right_voice_two@2x.png"; sourceTree = "<group>"; }; - 4C891F6A19B04C990006E3DF /* dd_selected_photo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_selected_photo.png; path = resources/dd_selected_photo.png; sourceTree = "<group>"; }; - 4C891F6B19B04C990006E3DF /* dd_selected_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_selected_photo@2x.png"; path = "resources/dd_selected_photo@2x.png"; sourceTree = "<group>"; }; - 4C891F6C19B04C990006E3DF /* dd_send_failed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_send_failed.png; path = resources/dd_send_failed.png; sourceTree = "<group>"; }; - 4C891F6D19B04C990006E3DF /* dd_send_failed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_send_failed@2x.png"; path = "resources/dd_send_failed@2x.png"; sourceTree = "<group>"; }; - 4C891F6E19B04C990006E3DF /* dd_take-photo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_take-photo.png"; path = "resources/dd_take-photo.png"; sourceTree = "<group>"; }; - 4C891F6F19B04C990006E3DF /* dd_take-photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_take-photo@2x.png"; path = "resources/dd_take-photo@2x.png"; sourceTree = "<group>"; }; - 4C891F7019B04C990006E3DF /* dd_utility.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_utility.png; path = resources/dd_utility.png; sourceTree = "<group>"; }; - 4C891F7119B04C990006E3DF /* dd_utility@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_utility@2x.png"; path = "resources/dd_utility@2x.png"; sourceTree = "<group>"; }; - 4C891F7219B04C990006E3DF /* dd_volumn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dd_volumn.png; path = resources/dd_volumn.png; sourceTree = "<group>"; }; - 4C891F7319B04C990006E3DF /* dd_volumn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dd_volumn@2x.png"; path = "resources/dd_volumn@2x.png"; sourceTree = "<group>"; }; - 4C891F7419B04C990006E3DF /* delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = delete.png; path = resources/delete.png; sourceTree = "<group>"; }; - 4C891F7519B04C990006E3DF /* delete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "delete@2x.png"; path = "resources/delete@2x.png"; sourceTree = "<group>"; }; - 4C891F7619B04C990006E3DF /* email.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = email.png; path = resources/email.png; sourceTree = "<group>"; }; - 4C891F7719B04C990006E3DF /* email@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "email@2x.png"; path = "resources/email@2x.png"; sourceTree = "<group>"; }; - 4C891F7819B04C990006E3DF /* jiantou.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = jiantou.png; path = resources/jiantou.png; sourceTree = "<group>"; }; - 4C891F7919B04C990006E3DF /* jiantou@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "jiantou@2x.png"; path = "resources/jiantou@2x.png"; sourceTree = "<group>"; }; - 4C891F7A19B04C990006E3DF /* left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = left.png; path = resources/left.png; sourceTree = "<group>"; }; - 4C891F7B19B04C990006E3DF /* left@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "left@2x.png"; path = "resources/left@2x.png"; sourceTree = "<group>"; }; - 4C891F7C19B04C990006E3DF /* loginlogo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = loginlogo.jpg; path = resources/loginlogo.jpg; sourceTree = "<group>"; }; - 4C891F7D19B04C990006E3DF /* msg.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = msg.caf; path = resources/msg.caf; sourceTree = "<group>"; }; - 4C891F7E19B04C990006E3DF /* myprofile_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = myprofile_selected.png; path = resources/myprofile_selected.png; sourceTree = "<group>"; }; - 4C891F7F19B04C990006E3DF /* myprofile_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "myprofile_selected@2x.png"; path = "resources/myprofile_selected@2x.png"; sourceTree = "<group>"; }; - 4C891F8019B04C990006E3DF /* myprofile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = myprofile.png; path = resources/myprofile.png; sourceTree = "<group>"; }; - 4C891F8119B04C990006E3DF /* myprofile@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "myprofile@2x.png"; path = "resources/myprofile@2x.png"; sourceTree = "<group>"; }; - 4C891F8219B04C990006E3DF /* password.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = password.png; path = resources/password.png; sourceTree = "<group>"; }; - 4C891F8319B04C990006E3DF /* password@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "password@2x.png"; path = "resources/password@2x.png"; sourceTree = "<group>"; }; - 4C891F8419B04C990006E3DF /* right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = right.png; path = resources/right.png; sourceTree = "<group>"; }; - 4C891F8519B04C990006E3DF /* right@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "right@2x.png"; path = "resources/right@2x.png"; sourceTree = "<group>"; }; - 4C891F8619B04C990006E3DF /* setting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = setting.png; path = resources/setting.png; sourceTree = "<group>"; }; - 4C891F8719B04C990006E3DF /* setting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "setting@2x.png"; path = "resources/setting@2x.png"; sourceTree = "<group>"; }; - 4C891F8819B04C990006E3DF /* tel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tel.png; path = resources/tel.png; sourceTree = "<group>"; }; - 4C891F8B19B04C990006E3DF /* username.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = username.png; path = resources/username.png; sourceTree = "<group>"; }; - 4C891F8C19B04C990006E3DF /* username@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "username@2x.png"; path = "resources/username@2x.png"; sourceTree = "<group>"; }; - 4C92734619EB9C8200F6C370 /* NetwrokStatusNotifyUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetwrokStatusNotifyUI.h; sourceTree = "<group>"; }; - 4C92734719EB9C8200F6C370 /* NetwrokStatusNotifyUI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetwrokStatusNotifyUI.m; sourceTree = "<group>"; }; - 4C98355219C06F6D00DE8874 /* EditContactsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditContactsCell.h; sourceTree = "<group>"; }; - 4C98355319C06F6D00DE8874 /* EditContactsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditContactsCell.m; sourceTree = "<group>"; }; - 4C98355519C070A200DE8874 /* select.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = select.png; sourceTree = "<group>"; }; - 4C98355619C070A200DE8874 /* select@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "select@2x.png"; sourceTree = "<group>"; }; - 4C98355919C070BD00DE8874 /* unselected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unselected.png; sourceTree = "<group>"; }; - 4C98355A19C070BD00DE8874 /* unselected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unselected@2x.png"; sourceTree = "<group>"; }; - 4CA50CC719A435E20032DE24 /* DDPersonEditCollectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDPersonEditCollectionCell.h; sourceTree = "<group>"; }; - 4CA50CC819A435E20032DE24 /* DDPersonEditCollectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDPersonEditCollectionCell.m; sourceTree = "<group>"; }; - 4CA50CCB19A47B9A0032DE24 /* SpellLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpellLibrary.h; sourceTree = "<group>"; }; - 4CA50CCC19A47B9A0032DE24 /* SpellLibrary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpellLibrary.m; sourceTree = "<group>"; }; - 4CA50CCE19A47C690032DE24 /* DDSearch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSearch.h; sourceTree = "<group>"; }; - 4CA50CCF19A47C690032DE24 /* DDSearch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSearch.m; sourceTree = "<group>"; }; - 4CA82AD719D29FAD00F20D01 /* star.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star.png; sourceTree = "<group>"; }; - 4CA82AD819D29FAD00F20D01 /* star@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "star@2x.png"; sourceTree = "<group>"; }; - 4CB23CA819B457AD004FCF10 /* EditGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditGroupViewController.h; sourceTree = "<group>"; }; - 4CB23CA919B457AD004FCF10 /* EditGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditGroupViewController.m; sourceTree = "<group>"; }; - 4CB23CAA19B457AD004FCF10 /* EditGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EditGroupViewController.xib; sourceTree = "<group>"; }; - 4CB23CAD19B4590D004FCF10 /* EditGroupViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditGroupViewCell.h; sourceTree = "<group>"; }; - 4CB23CAE19B4590D004FCF10 /* EditGroupViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditGroupViewCell.m; sourceTree = "<group>"; }; - 4CB3D91819F4A22800DC9B9D /* ShieldGroupMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShieldGroupMessageAPI.h; sourceTree = "<group>"; }; - 4CB3D91919F4A22800DC9B9D /* ShieldGroupMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShieldGroupMessageAPI.m; sourceTree = "<group>"; }; - 4CB3D91B19F4B48200DC9B9D /* LogoutAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogoutAPI.h; sourceTree = "<group>"; }; - 4CB3D91C19F4B48200DC9B9D /* LogoutAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LogoutAPI.m; sourceTree = "<group>"; }; - 4CB3D91E19F4FA7F00DC9B9D /* SearchContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchContentViewController.h; sourceTree = "<group>"; }; - 4CB3D91F19F4FA7F00DC9B9D /* SearchContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchContentViewController.m; sourceTree = "<group>"; }; - 4CB3D92019F4FA7F00DC9B9D /* SearchContentViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchContentViewController.xib; sourceTree = "<group>"; }; - 4CB58EAA1991FF98006B24D3 /* DDepartment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDepartment.h; sourceTree = "<group>"; }; - 4CB58EAB1991FF98006B24D3 /* DDepartment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDepartment.m; sourceTree = "<group>"; }; - 4CB6AA0B198F7F550075BDB4 /* ChatEditTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatEditTableViewCell.h; sourceTree = "<group>"; }; - 4CB6AA0C198F7F550075BDB4 /* ChatEditTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatEditTableViewCell.m; sourceTree = "<group>"; }; - 4CB8F6C119A6D97D00C4C27D /* IOSDuoduo Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "IOSDuoduo Tests-Info.plist"; sourceTree = "<group>"; }; - 4CB8F6C319A6D97D00C4C27D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - 4CB8F6C519A6D97D00C4C27D /* IOSDuoduo_Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IOSDuoduo_Tests.m; sourceTree = "<group>"; }; - 4CB8F6C719A6D97D00C4C27D /* IOSDuoduo Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "IOSDuoduo Tests-Prefix.pch"; sourceTree = "<group>"; }; - 4CB8F6D119A7171800C4C27D /* DDContactsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDContactsCell.h; sourceTree = "<group>"; }; - 4CB8F6D219A7171800C4C27D /* DDContactsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDContactsCell.m; sourceTree = "<group>"; }; - 4CD156581998A36300B11233 /* DDAddMemberToGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAddMemberToGroupAPI.h; sourceTree = "<group>"; }; - 4CD156591998A36300B11233 /* DDAddMemberToGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAddMemberToGroupAPI.m; sourceTree = "<group>"; }; - 4CD1565A1998A36300B11233 /* DDFixedGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDFixedGroupAPI.h; sourceTree = "<group>"; }; - 4CD1565B1998A36300B11233 /* DDFixedGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDFixedGroupAPI.m; sourceTree = "<group>"; }; - 4CD1565C1998A36300B11233 /* DDGroupInfoAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGroupInfoAPI.h; sourceTree = "<group>"; }; - 4CD1565D1998A36300B11233 /* DDGroupInfoAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGroupInfoAPI.m; sourceTree = "<group>"; }; - 4CD1565E1998A36300B11233 /* DDGroupMsgReadACKAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGroupMsgReadACKAPI.h; sourceTree = "<group>"; }; - 4CD1565F1998A36300B11233 /* DDGroupMsgReadACKAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGroupMsgReadACKAPI.m; sourceTree = "<group>"; }; - 4CD156601998A36300B11233 /* DDGroupsUnreadMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGroupsUnreadMessageAPI.h; sourceTree = "<group>"; }; - 4CD156611998A36300B11233 /* DDGroupsUnreadMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGroupsUnreadMessageAPI.m; sourceTree = "<group>"; }; - 4CD156621998A36300B11233 /* DDReceiveGroupAddMemberAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDReceiveGroupAddMemberAPI.h; sourceTree = "<group>"; }; - 4CD156631998A36300B11233 /* DDReceiveGroupAddMemberAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDReceiveGroupAddMemberAPI.m; sourceTree = "<group>"; }; - 4CD156661998A36300B11233 /* DDUnreadMessageGroupAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUnreadMessageGroupAPI.h; sourceTree = "<group>"; }; - 4CD156671998A36300B11233 /* DDUnreadMessageGroupAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUnreadMessageGroupAPI.m; sourceTree = "<group>"; }; - 4CD156761998B70D00B11233 /* DDGroupModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGroupModule.h; sourceTree = "<group>"; }; - 4CD156771998B70D00B11233 /* DDGroupModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGroupModule.m; sourceTree = "<group>"; }; - 4CD995F3199F420700025C9C /* DDBaseEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDBaseEntity.h; sourceTree = "<group>"; }; - 4CD995F4199F420700025C9C /* DDBaseEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDBaseEntity.m; sourceTree = "<group>"; }; - 4CE95F2F19AAD0E8000CD0C6 /* ContactAvatarTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactAvatarTools.h; sourceTree = "<group>"; }; - 4CE95F3019AAD0E8000CD0C6 /* ContactAvatarTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactAvatarTools.m; sourceTree = "<group>"; }; - 4CEFE74D19A31D0600156D26 /* SettingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingViewController.h; sourceTree = "<group>"; }; - 4CEFE74E19A31D0600156D26 /* SettingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingViewController.m; sourceTree = "<group>"; }; - 4CEFE74F19A31D0600156D26 /* SettingViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingViewController.xib; sourceTree = "<group>"; }; - 4CF7D50F198A11E700F0272B /* RuntimeStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeStatus.h; sourceTree = "<group>"; }; - 4CF7D510198A11E800F0272B /* RuntimeStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RuntimeStatus.m; sourceTree = "<group>"; }; - 4CF7D522198A268500F0272B /* JSDismissiveTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDismissiveTextView.h; sourceTree = "<group>"; }; - 4CF7D523198A268500F0272B /* JSDismissiveTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSDismissiveTextView.m; sourceTree = "<group>"; }; - 4CF7D524198A268500F0272B /* JSMessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMessageInputView.h; sourceTree = "<group>"; }; - 4CF7D525198A268500F0272B /* JSMessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSMessageInputView.m; sourceTree = "<group>"; }; - 4CF7D526198A268500F0272B /* JSMessageTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMessageTextView.h; sourceTree = "<group>"; }; - 4CF7D527198A268500F0272B /* JSMessageTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSMessageTextView.m; sourceTree = "<group>"; }; - C4254B571962B29600B05CAF /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = SOURCE_ROOT; }; - C4254B581962B29600B05CAF /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = SOURCE_ROOT; }; - C4254B591962B29600B05CAF /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = SOURCE_ROOT; }; - C46061D5194E9D8A00FF3966 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - C46061D7194E9D9300FF3966 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - C493DDCC1962A50900B39106 /* NSDate+DDAddition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+DDAddition.h"; sourceTree = "<group>"; }; - C493DDCD1962A50900B39106 /* NSDate+DDAddition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+DDAddition.m"; sourceTree = "<group>"; }; - C493DDCE1962A50900B39106 /* NSDictionary+JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+JSON.h"; sourceTree = "<group>"; }; - C493DDCF1962A50900B39106 /* NSDictionary+JSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+JSON.m"; sourceTree = "<group>"; }; - C493DDD01962A50900B39106 /* NSDictionary+Safe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Safe.h"; sourceTree = "<group>"; }; - C493DDD11962A50900B39106 /* NSDictionary+Safe.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Safe.m"; sourceTree = "<group>"; }; - C493DDD21962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+AQIndexesOutsideSet.h"; sourceTree = "<group>"; }; - C493DDD31962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+AQIndexesOutsideSet.m"; sourceTree = "<group>"; }; - C493DDD41962A50900B39106 /* NSIndexSet+AQIsSetContiguous.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+AQIsSetContiguous.h"; sourceTree = "<group>"; }; - C493DDD51962A50900B39106 /* NSIndexSet+AQIsSetContiguous.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+AQIsSetContiguous.m"; sourceTree = "<group>"; }; - C493DDDA1962A50900B39106 /* NSString+DDPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+DDPath.h"; sourceTree = "<group>"; }; - C493DDDB1962A50900B39106 /* NSString+DDPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+DDPath.m"; sourceTree = "<group>"; }; - C493DDDC1962A50900B39106 /* NSString+JSMessagesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+JSMessagesView.h"; sourceTree = "<group>"; }; - C493DDDD1962A50900B39106 /* NSString+JSMessagesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+JSMessagesView.m"; sourceTree = "<group>"; }; - C493DDDE1962A50900B39106 /* UIButton+JSMessagesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+JSMessagesView.h"; sourceTree = "<group>"; }; - C493DDDF1962A50900B39106 /* UIButton+JSMessagesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+JSMessagesView.m"; sourceTree = "<group>"; }; - C493DDE01962A50900B39106 /* UIColor+AQGridView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+AQGridView.h"; sourceTree = "<group>"; }; - C493DDE11962A50900B39106 /* UIColor+AQGridView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+AQGridView.m"; sourceTree = "<group>"; }; - C493DDE21962A50900B39106 /* UIColor+JSMessagesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+JSMessagesView.h"; sourceTree = "<group>"; }; - C493DDE31962A50900B39106 /* UIColor+JSMessagesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+JSMessagesView.m"; sourceTree = "<group>"; }; - C493DDE61962A50900B39106 /* UIImage+JSMessagesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+JSMessagesView.h"; sourceTree = "<group>"; }; - C493DDE71962A50900B39106 /* UIImage+JSMessagesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+JSMessagesView.m"; sourceTree = "<group>"; }; - C493DDE81962A50900B39106 /* UIView+AnimationOptionsForCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+AnimationOptionsForCurve.h"; sourceTree = "<group>"; }; - C493DDE91962A50900B39106 /* UIView+AnimationOptionsForCurve.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+AnimationOptionsForCurve.m"; sourceTree = "<group>"; }; - C493DDEA1962A50900B39106 /* UIView+DDAddition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+DDAddition.h"; sourceTree = "<group>"; }; - C493DDEB1962A50900B39106 /* UIView+DDAddition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+DDAddition.m"; sourceTree = "<group>"; }; - C493DDEC1962A50900B39106 /* DDCONSTANT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDCONSTANT.h; sourceTree = "<group>"; }; - C493DDEE1962A50900B39106 /* DDMessageEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMessageEntity.h; sourceTree = "<group>"; }; - C493DDEF1962A50900B39106 /* DDMessageEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDMessageEntity.m; sourceTree = "<group>"; }; - C493DDF01962A50900B39106 /* DDSessionEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSessionEntity.h; sourceTree = "<group>"; }; - C493DDF11962A50900B39106 /* DDSessionEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSessionEntity.m; sourceTree = "<group>"; }; - C493DDF21962A50900B39106 /* DDUserEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUserEntity.h; sourceTree = "<group>"; }; - C493DDF31962A50900B39106 /* DDUserEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUserEntity.m; sourceTree = "<group>"; }; - C493DDF41962A50900B39106 /* MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5.h; sourceTree = "<group>"; }; - C493DDF51962A50900B39106 /* MD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MD5.m; sourceTree = "<group>"; }; - C493DDF81962A50900B39106 /* DDDatabaseUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDatabaseUtil.h; sourceTree = "<group>"; }; - C493DDF91962A50900B39106 /* DDDatabaseUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDatabaseUtil.m; sourceTree = "<group>"; }; - C493DDFE1962A50900B39106 /* DDAFClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAFClient.h; sourceTree = "<group>"; }; - C493DDFF1962A50900B39106 /* DDAFClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAFClient.m; sourceTree = "<group>"; }; - C493DE051962A50900B39106 /* DDHttpServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDHttpServer.h; sourceTree = "<group>"; }; - C493DE061962A50900B39106 /* DDHttpServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDHttpServer.m; sourceTree = "<group>"; }; - C493DE091962A50900B39106 /* DDLoginServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLoginServer.h; sourceTree = "<group>"; }; - C493DE0A1962A50900B39106 /* DDLoginServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLoginServer.m; sourceTree = "<group>"; }; - C493DE0B1962A50900B39106 /* DDMsgServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMsgServer.h; sourceTree = "<group>"; }; - C493DE0C1962A50900B39106 /* DDMsgServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDMsgServer.m; sourceTree = "<group>"; }; - C493DE0D1962A50900B39106 /* DDTcpServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTcpServer.h; sourceTree = "<group>"; }; - C493DE0E1962A50900B39106 /* DDTcpServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTcpServer.m; sourceTree = "<group>"; }; - C493DE0F1962A50900B39106 /* DDTokenManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTokenManager.h; sourceTree = "<group>"; }; - C493DE101962A50900B39106 /* DDTokenManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTokenManager.m; sourceTree = "<group>"; }; - C493DE121962A50900B39106 /* DDMessageModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMessageModule.h; sourceTree = "<group>"; }; - C493DE131962A50900B39106 /* DDMessageModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDMessageModule.m; sourceTree = "<group>"; }; - C493DE141962A50900B39106 /* DDMessageSendManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMessageSendManager.h; sourceTree = "<group>"; }; - C493DE151962A50900B39106 /* DDMessageSendManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDMessageSendManager.m; sourceTree = "<group>"; }; - C493DE171962A50900B39106 /* DDUserModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUserModule.h; sourceTree = "<group>"; }; - C493DE181962A50900B39106 /* DDUserModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUserModule.m; sourceTree = "<group>"; }; - C493DE571962A50900B39106 /* DDClientState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDClientState.h; sourceTree = "<group>"; }; - C493DE581962A50900B39106 /* DDClientState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDClientState.m; sourceTree = "<group>"; }; - C493DE591962A50900B39106 /* DDClientStateMaintenanceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDClientStateMaintenanceManager.h; sourceTree = "<group>"; }; - C493DE5A1962A50900B39106 /* DDClientStateMaintenanceManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDClientStateMaintenanceManager.m; sourceTree = "<group>"; }; - C493DE5B1962A50900B39106 /* std.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = std.m; sourceTree = "<group>"; }; - C493DE5D1962A50900B39106 /* DDNotificationHelp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDNotificationHelp.h; sourceTree = "<group>"; }; - C493DE5E1962A50900B39106 /* DDNotificationHelp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDNotificationHelp.m; sourceTree = "<group>"; }; - C493DE5F1962A50900B39106 /* DDSundriesCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSundriesCenter.h; sourceTree = "<group>"; }; - C493DE601962A50900B39106 /* DDSundriesCenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSundriesCenter.m; sourceTree = "<group>"; }; - C493DE621962A50900B39106 /* DataOutputStream+Addition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DataOutputStream+Addition.h"; sourceTree = "<group>"; }; - C493DE631962A50900B39106 /* DataOutputStream+Addition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DataOutputStream+Addition.m"; sourceTree = "<group>"; }; - C493DE641962A50900B39106 /* DDAPISchedule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAPISchedule.h; sourceTree = "<group>"; }; - C493DE651962A50900B39106 /* DDAPISchedule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAPISchedule.m; sourceTree = "<group>"; }; - C493DE661962A50900B39106 /* DDAPIScheduleProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAPIScheduleProtocol.h; sourceTree = "<group>"; }; - C493DE671962A50900B39106 /* DDAPIUnrequestScheduleProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAPIUnrequestScheduleProtocol.h; sourceTree = "<group>"; }; - C493DE681962A50900B39106 /* DDDataInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDataInputStream.h; sourceTree = "<group>"; }; - C493DE691962A50900B39106 /* DDDataInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDataInputStream.m; sourceTree = "<group>"; }; - C493DE6A1962A50900B39106 /* DDDataOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDataOutputStream.h; sourceTree = "<group>"; }; - C493DE6B1962A50900B39106 /* DDDataOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDataOutputStream.m; sourceTree = "<group>"; }; - C493DE6C1962A50900B39106 /* DDReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDReachability.h; sourceTree = "<group>"; }; - C493DE6D1962A50900B39106 /* DDReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDReachability.m; sourceTree = "<group>"; }; - C493DE6E1962A50900B39106 /* DDSendBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSendBuffer.h; sourceTree = "<group>"; }; - C493DE6F1962A50900B39106 /* DDSendBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSendBuffer.m; sourceTree = "<group>"; }; - C493DE701962A50900B39106 /* DDSuperAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSuperAPI.h; sourceTree = "<group>"; }; - C493DE711962A50900B39106 /* DDSuperAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSuperAPI.m; sourceTree = "<group>"; }; - C493DE721962A50900B39106 /* DDTcpClientManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTcpClientManager.h; sourceTree = "<group>"; }; - C493DE731962A50900B39106 /* DDTcpClientManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTcpClientManager.m; sourceTree = "<group>"; }; - C493DE741962A50900B39106 /* DDTcpProtocolHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTcpProtocolHeader.h; sourceTree = "<group>"; }; - C493DE751962A50900B39106 /* DDTcpProtocolHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTcpProtocolHeader.m; sourceTree = "<group>"; }; - C493DE761962A50900B39106 /* DDUnrequestSuperAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUnrequestSuperAPI.h; sourceTree = "<group>"; }; - C493DE771962A50900B39106 /* DDUnrequestSuperAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUnrequestSuperAPI.m; sourceTree = "<group>"; }; - C493DE781962A50900B39106 /* NSStream+NSStreamAddition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSStream+NSStreamAddition.h"; sourceTree = "<group>"; }; - C493DE791962A50900B39106 /* NSStream+NSStreamAddition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSStream+NSStreamAddition.m"; sourceTree = "<group>"; }; - C493DE7F1962A50900B39106 /* DDHeartbeatAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDHeartbeatAPI.h; sourceTree = "<group>"; }; - C493DE801962A50900B39106 /* DDHeartbeatAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDHeartbeatAPI.m; sourceTree = "<group>"; }; - C493DE811962A50900B39106 /* DDLoginAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLoginAPI.h; sourceTree = "<group>"; }; - C493DE821962A50900B39106 /* DDLoginAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLoginAPI.m; sourceTree = "<group>"; }; - C493DE831962A50900B39106 /* DDMsgServerIPAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMsgServerIPAPI.h; sourceTree = "<group>"; }; - C493DE841962A50900B39106 /* DDMsgServerIPAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDMsgServerIPAPI.m; sourceTree = "<group>"; }; - C493DE861962A50900B39106 /* DDGetUnreadMessageUsersAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGetUnreadMessageUsersAPI.h; sourceTree = "<group>"; }; - C493DE871962A50900B39106 /* DDGetUnreadMessageUsersAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGetUnreadMessageUsersAPI.m; sourceTree = "<group>"; }; - C493DE881962A50900B39106 /* DDGetUserUnreadMessagesAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGetUserUnreadMessagesAPI.h; sourceTree = "<group>"; }; - C493DE891962A50900B39106 /* DDGetUserUnreadMessagesAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGetUserUnreadMessagesAPI.m; sourceTree = "<group>"; }; - C493DE8A1962A50900B39106 /* DDSendMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSendMessageAPI.h; sourceTree = "<group>"; }; - C493DE8B1962A50900B39106 /* DDSendMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSendMessageAPI.m; sourceTree = "<group>"; }; - C493DE8C1962A50900B39106 /* DDSendMessageReadACKAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSendMessageReadACKAPI.h; sourceTree = "<group>"; }; - C493DE8D1962A50900B39106 /* DDSendMessageReadACKAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSendMessageReadACKAPI.m; sourceTree = "<group>"; }; - C493DE8E1962A50900B39106 /* DDSendPhotoMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSendPhotoMessageAPI.h; sourceTree = "<group>"; }; - C493DE8F1962A50900B39106 /* DDSendPhotoMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSendPhotoMessageAPI.m; sourceTree = "<group>"; }; - C493DE901962A50900B39106 /* DDSendVoiceMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSendVoiceMessageAPI.h; sourceTree = "<group>"; }; - C493DE911962A50900B39106 /* DDSendVoiceMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSendVoiceMessageAPI.m; sourceTree = "<group>"; }; - C493DE931962A50900B39106 /* DDAllotServiceAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAllotServiceAPI.h; sourceTree = "<group>"; }; - C493DE941962A50900B39106 /* DDAllotServiceAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAllotServiceAPI.m; sourceTree = "<group>"; }; - C493DE951962A50900B39106 /* DDGetUserInfoAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDGetUserInfoAPI.h; sourceTree = "<group>"; }; - C493DE961962A50900B39106 /* DDGetUserInfoAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDGetUserInfoAPI.m; sourceTree = "<group>"; }; - C493DE971962A50900B39106 /* RecentConactsAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecentConactsAPI.h; sourceTree = "<group>"; }; - C493DE981962A50900B39106 /* RecentConactsAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentConactsAPI.m; sourceTree = "<group>"; }; - C493DE9B1962A50900B39106 /* ReceiveKickoffAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReceiveKickoffAPI.h; sourceTree = "<group>"; }; - C493DE9C1962A50900B39106 /* ReceiveKickoffAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReceiveKickoffAPI.m; sourceTree = "<group>"; }; - C493DE9E1962A50900B39106 /* DDReceiveMessageAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDReceiveMessageAPI.h; sourceTree = "<group>"; }; - C493DE9F1962A50900B39106 /* DDReceiveMessageAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDReceiveMessageAPI.m; sourceTree = "<group>"; }; - C493DEA21962A50900B39106 /* AQGridView+CellLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AQGridView+CellLayout.h"; sourceTree = "<group>"; }; - C493DEA31962A50900B39106 /* AQGridView+CellLocationDelegation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AQGridView+CellLocationDelegation.h"; sourceTree = "<group>"; }; - C493DEA41962A50900B39106 /* AQGridView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridView.h; sourceTree = "<group>"; }; - C493DEA51962A50900B39106 /* AQGridView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridView.m; sourceTree = "<group>"; }; - C493DEA61962A50900B39106 /* AQGridViewAnimatorItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewAnimatorItem.h; sourceTree = "<group>"; }; - C493DEA71962A50900B39106 /* AQGridViewAnimatorItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewAnimatorItem.m; sourceTree = "<group>"; }; - C493DEA81962A50900B39106 /* AQGridViewCell+AQGridViewCellPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AQGridViewCell+AQGridViewCellPrivate.h"; sourceTree = "<group>"; }; - C493DEA91962A50900B39106 /* AQGridViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewCell.h; sourceTree = "<group>"; }; - C493DEAA1962A50900B39106 /* AQGridViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewCell.m; sourceTree = "<group>"; }; - C493DEAB1962A50900B39106 /* AQGridViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewController.h; sourceTree = "<group>"; }; - C493DEAC1962A50900B39106 /* AQGridViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewController.m; sourceTree = "<group>"; }; - C493DEAD1962A50900B39106 /* AQGridViewData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewData.h; sourceTree = "<group>"; }; - C493DEAE1962A50900B39106 /* AQGridViewData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewData.m; sourceTree = "<group>"; }; - C493DEAF1962A50900B39106 /* AQGridViewUpdateInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewUpdateInfo.h; sourceTree = "<group>"; }; - C493DEB01962A50900B39106 /* AQGridViewUpdateInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewUpdateInfo.m; sourceTree = "<group>"; }; - C493DEB11962A50900B39106 /* AQGridViewUpdateItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQGridViewUpdateItem.h; sourceTree = "<group>"; }; - C493DEB21962A50900B39106 /* AQGridViewUpdateItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AQGridViewUpdateItem.m; sourceTree = "<group>"; }; - C493DEB41962A50900B39106 /* MWCaptionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWCaptionView.h; sourceTree = "<group>"; }; - C493DEB51962A50900B39106 /* MWCaptionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWCaptionView.m; sourceTree = "<group>"; }; - C493DEB61962A50900B39106 /* MWCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWCommon.h; sourceTree = "<group>"; }; - C493DEB71962A50900B39106 /* MWGridCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWGridCell.h; sourceTree = "<group>"; }; - C493DEB81962A50900B39106 /* MWGridCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridCell.m; sourceTree = "<group>"; }; - C493DEB91962A50900B39106 /* MWGridViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWGridViewController.h; sourceTree = "<group>"; }; - C493DEBA1962A50900B39106 /* MWGridViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridViewController.m; sourceTree = "<group>"; }; - C493DEBB1962A50900B39106 /* MWPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhoto.h; sourceTree = "<group>"; }; - C493DEBC1962A50900B39106 /* MWPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWPhoto.m; sourceTree = "<group>"; }; - C493DEBD1962A50900B39106 /* MWPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoBrowser.h; sourceTree = "<group>"; }; - C493DEBE1962A50900B39106 /* MWPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWPhotoBrowser.m; sourceTree = "<group>"; }; - C493DEBF1962A50900B39106 /* MWPhotoBrowserPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoBrowserPrivate.h; sourceTree = "<group>"; }; - C493DEC01962A50900B39106 /* MWPhotoProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoProtocol.h; sourceTree = "<group>"; }; - C493DEC11962A50900B39106 /* MWTapDetectingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingImageView.h; sourceTree = "<group>"; }; - C493DEC21962A50900B39106 /* MWTapDetectingImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWTapDetectingImageView.m; sourceTree = "<group>"; }; - C493DEC31962A50900B39106 /* MWTapDetectingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingView.h; sourceTree = "<group>"; }; - C493DEC41962A50900B39106 /* MWTapDetectingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWTapDetectingView.m; sourceTree = "<group>"; }; - C493DEC51962A50900B39106 /* MWZoomingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWZoomingScrollView.h; sourceTree = "<group>"; }; - C493DEC61962A50900B39106 /* MWZoomingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWZoomingScrollView.m; sourceTree = "<group>"; }; - C493DEE11962A50900B39106 /* DDChatBaseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatBaseCell.h; sourceTree = "<group>"; }; - C493DEE21962A50900B39106 /* DDChatBaseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChatBaseCell.m; sourceTree = "<group>"; }; - C493DEE31962A50900B39106 /* DDChatCellProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatCellProtocol.h; sourceTree = "<group>"; }; - C493DEE41962A50900B39106 /* DDChatImageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatImageCell.h; sourceTree = "<group>"; }; - C493DEE51962A50900B39106 /* DDChatImageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChatImageCell.m; sourceTree = "<group>"; }; - C493DEE61962A50900B39106 /* DDChatImagePreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatImagePreviewViewController.h; sourceTree = "<group>"; }; - C493DEE71962A50900B39106 /* DDChatImagePreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChatImagePreviewViewController.m; sourceTree = "<group>"; }; - C493DEE81962A50900B39106 /* DDChatTextCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatTextCell.h; sourceTree = "<group>"; }; - C493DEE91962A50900B39106 /* DDChatTextCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChatTextCell.m; sourceTree = "<group>"; }; - C493DEEA1962A50900B39106 /* DDChatTextCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DDChatTextCell.xib; sourceTree = "<group>"; }; - C493DEEB1962A50900B39106 /* DDChatVoiceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDChatVoiceCell.h; sourceTree = "<group>"; }; - C493DEEC1962A50900B39106 /* DDChatVoiceCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDChatVoiceCell.m; sourceTree = "<group>"; }; - C493DEEF1962A50900B39106 /* DDPromptCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDPromptCell.h; sourceTree = "<group>"; }; - C493DEF01962A50900B39106 /* DDPromptCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDPromptCell.m; sourceTree = "<group>"; }; - C493DEF21962A50900B39106 /* DDAlbumDetailsViewControll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAlbumDetailsViewControll.h; sourceTree = "<group>"; }; - C493DEF31962A50900B39106 /* DDAlbumDetailsViewControll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAlbumDetailsViewControll.m; sourceTree = "<group>"; }; - C493DEF41962A50900B39106 /* AlbumViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlbumViewController.h; sourceTree = "<group>"; }; - C493DEF51962A50900B39106 /* AlbumViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlbumViewController.m; sourceTree = "<group>"; }; - C493DEF61962A50900B39106 /* ChatUtilityItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatUtilityItem.h; sourceTree = "<group>"; }; - C493DEF71962A50900B39106 /* ChatUtilityItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatUtilityItem.m; sourceTree = "<group>"; }; - C493DEF81962A50900B39106 /* ChatUtilityViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatUtilityViewController.h; sourceTree = "<group>"; }; - C493DEF91962A50900B39106 /* ChatUtilityViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatUtilityViewController.m; sourceTree = "<group>"; }; - C493DEFA1962A50900B39106 /* EmojiFaceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmojiFaceView.h; sourceTree = "<group>"; }; - C493DEFB1962A50900B39106 /* EmojiFaceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmojiFaceView.m; sourceTree = "<group>"; }; - C493DEFC1962A50900B39106 /* EmotionsModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmotionsModule.h; sourceTree = "<group>"; }; - C493DEFD1962A50900B39106 /* EmotionsModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmotionsModule.m; sourceTree = "<group>"; }; - C493DEFE1962A50900B39106 /* EmotionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmotionsViewController.h; sourceTree = "<group>"; }; - C493DEFF1962A50900B39106 /* EmotionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmotionsViewController.m; sourceTree = "<group>"; }; - C493DF001962A50900B39106 /* UtililyItemCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UtililyItemCell.h; sourceTree = "<group>"; }; - C493DF011962A50900B39106 /* UtililyItemCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UtililyItemCell.m; sourceTree = "<group>"; }; - C493DF021962A50900B39106 /* AnalysisImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnalysisImage.h; sourceTree = "<group>"; }; - C493DF031962A50900B39106 /* AnalysisImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnalysisImage.m; sourceTree = "<group>"; }; - C493DF061962A50900B39106 /* ChattingMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChattingMainViewController.h; sourceTree = "<group>"; }; - C493DF071962A50900B39106 /* ChattingMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChattingMainViewController.m; sourceTree = "<group>"; }; - C493DF081962A50900B39106 /* ChattingMainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ChattingMainViewController.xib; sourceTree = "<group>"; }; - C493DF091962A50900B39106 /* ChattingModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChattingModule.h; sourceTree = "<group>"; }; - C493DF0A1962A50900B39106 /* ChattingModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChattingModule.m; sourceTree = "<group>"; }; - C493DF0B1962A50900B39106 /* CommodityCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommodityCell.h; sourceTree = "<group>"; }; - C493DF0C1962A50900B39106 /* CommodityCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommodityCell.m; sourceTree = "<group>"; }; - C493DF0D1962A50900B39106 /* CommodityCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CommodityCell.xib; sourceTree = "<group>"; }; - C493DF0E1962A50900B39106 /* MenuImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuImageView.h; sourceTree = "<group>"; }; - C493DF0F1962A50900B39106 /* MenuImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuImageView.m; sourceTree = "<group>"; }; - C493DF101962A50900B39106 /* RecordingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecordingView.h; sourceTree = "<group>"; }; - C493DF111962A50900B39106 /* RecordingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecordingView.m; sourceTree = "<group>"; }; - C493DF121962A50900B39106 /* TouchDownGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchDownGestureRecognizer.h; sourceTree = "<group>"; }; - C493DF131962A50900B39106 /* TouchDownGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchDownGestureRecognizer.m; sourceTree = "<group>"; }; - C493DF141962A50900B39106 /* AlbumDetailsBottomBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlbumDetailsBottomBar.h; sourceTree = "<group>"; }; - C493DF151962A50900B39106 /* AlbumDetailsBottomBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlbumDetailsBottomBar.m; sourceTree = "<group>"; }; - C493DF161962A50900B39106 /* ImagesPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImagesPreviewViewController.h; sourceTree = "<group>"; }; - C493DF171962A50900B39106 /* ImagesPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImagesPreviewViewController.m; sourceTree = "<group>"; }; - C493DF181962A50900B39106 /* LoginModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginModule.h; sourceTree = "<group>"; }; - C493DF191962A50900B39106 /* LoginModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginModule.m; sourceTree = "<group>"; }; - C493DF1D1962A50900B39106 /* Photo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Photo.h; sourceTree = "<group>"; }; - C493DF1E1962A50900B39106 /* Photo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Photo.m; sourceTree = "<group>"; }; - C493DF1F1962A50900B39106 /* PhotosCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotosCache.h; sourceTree = "<group>"; }; - C493DF201962A50900B39106 /* PhotosCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotosCache.m; sourceTree = "<group>"; }; - C493DF211962A50900B39106 /* ImageGridViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageGridViewCell.h; sourceTree = "<group>"; }; - C493DF221962A50900B39106 /* ImageGridViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageGridViewCell.m; sourceTree = "<group>"; }; - C493DF241962A50900B39106 /* RecentUserCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecentUserCell.h; sourceTree = "<group>"; }; - C493DF251962A50900B39106 /* RecentUserCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentUserCell.m; sourceTree = "<group>"; }; - C493DF261962A50900B39106 /* RecentUserCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RecentUserCell.xib; sourceTree = "<group>"; }; - C493DF271962A50900B39106 /* RecentUsersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecentUsersViewController.h; sourceTree = "<group>"; }; - C493DF281962A50900B39106 /* RecentUsersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentUsersViewController.m; sourceTree = "<group>"; }; - C493DF291962A50900B39106 /* RecentUsersViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RecentUsersViewController.xib; sourceTree = "<group>"; }; - C493DF2A1962A50900B39106 /* RecentUserVCModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecentUserVCModule.h; sourceTree = "<group>"; }; - C493DF2B1962A50900B39106 /* RecentUserVCModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentUserVCModule.m; sourceTree = "<group>"; }; - C493DF2F1962A50900B39106 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; - C493DF311962A50900B39106 /* bitwise.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bitwise.c; sourceTree = "<group>"; }; - C493DF321962A50900B39106 /* framing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = framing.c; sourceTree = "<group>"; }; - C493DF341962A50900B39106 /* ogg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ogg.h; sourceTree = "<group>"; }; - C493DF351962A50900B39106 /* os_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = os_types.h; sourceTree = "<group>"; }; - C493DF371962A50900B39106 /* _kiss_fft_guts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _kiss_fft_guts.h; sourceTree = "<group>"; }; - C493DF381962A50900B39106 /* arch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arch.h; sourceTree = "<group>"; }; - C493DF391962A50900B39106 /* bits.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bits.c; sourceTree = "<group>"; }; - C493DF3A1962A50900B39106 /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = "<group>"; }; - C493DF3B1962A50900B39106 /* cb_search.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cb_search.c; sourceTree = "<group>"; }; - C493DF3C1962A50900B39106 /* cb_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cb_search.h; sourceTree = "<group>"; }; - C493DF3D1962A50900B39106 /* cb_search_arm4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cb_search_arm4.h; sourceTree = "<group>"; }; - C493DF3E1962A50900B39106 /* cb_search_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cb_search_bfin.h; sourceTree = "<group>"; }; - C493DF3F1962A50900B39106 /* cb_search_sse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cb_search_sse.h; sourceTree = "<group>"; }; - C493DF401962A50900B39106 /* exc_10_16_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_10_16_table.c; sourceTree = "<group>"; }; - C493DF411962A50900B39106 /* exc_10_32_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_10_32_table.c; sourceTree = "<group>"; }; - C493DF421962A50900B39106 /* exc_20_32_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_20_32_table.c; sourceTree = "<group>"; }; - C493DF431962A50900B39106 /* exc_5_256_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_5_256_table.c; sourceTree = "<group>"; }; - C493DF441962A50900B39106 /* exc_5_64_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_5_64_table.c; sourceTree = "<group>"; }; - C493DF451962A50900B39106 /* exc_8_128_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exc_8_128_table.c; sourceTree = "<group>"; }; - C493DF461962A50900B39106 /* fftwrap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fftwrap.c; sourceTree = "<group>"; }; - C493DF471962A50900B39106 /* fftwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fftwrap.h; sourceTree = "<group>"; }; - C493DF481962A50900B39106 /* filterbank.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filterbank.c; sourceTree = "<group>"; }; - C493DF491962A50900B39106 /* filterbank.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filterbank.h; sourceTree = "<group>"; }; - C493DF4A1962A50900B39106 /* filters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters.c; sourceTree = "<group>"; }; - C493DF4B1962A50900B39106 /* filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = "<group>"; }; - C493DF4C1962A50900B39106 /* filters_arm4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters_arm4.h; sourceTree = "<group>"; }; - C493DF4D1962A50900B39106 /* filters_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters_bfin.h; sourceTree = "<group>"; }; - C493DF4E1962A50900B39106 /* filters_sse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters_sse.h; sourceTree = "<group>"; }; - C493DF4F1962A50900B39106 /* fixed_arm4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed_arm4.h; sourceTree = "<group>"; }; - C493DF501962A50900B39106 /* fixed_arm5e.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed_arm5e.h; sourceTree = "<group>"; }; - C493DF511962A50900B39106 /* fixed_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed_bfin.h; sourceTree = "<group>"; }; - C493DF521962A50900B39106 /* fixed_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed_debug.h; sourceTree = "<group>"; }; - C493DF531962A50900B39106 /* fixed_generic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed_generic.h; sourceTree = "<group>"; }; - C493DF541962A50900B39106 /* gain_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gain_table.c; sourceTree = "<group>"; }; - C493DF551962A50900B39106 /* gain_table_lbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gain_table_lbr.c; sourceTree = "<group>"; }; - C493DF561962A50900B39106 /* hexc_10_32_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hexc_10_32_table.c; sourceTree = "<group>"; }; - C493DF571962A50900B39106 /* hexc_table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hexc_table.c; sourceTree = "<group>"; }; - C493DF581962A50900B39106 /* high_lsp_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = high_lsp_tables.c; sourceTree = "<group>"; }; - C493DF591962A50900B39106 /* jitter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jitter.c; sourceTree = "<group>"; }; - C493DF5A1962A50900B39106 /* kiss_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kiss_fft.c; sourceTree = "<group>"; }; - C493DF5B1962A50900B39106 /* kiss_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kiss_fft.h; sourceTree = "<group>"; }; - C493DF5C1962A50900B39106 /* kiss_fftr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kiss_fftr.c; sourceTree = "<group>"; }; - C493DF5D1962A50900B39106 /* kiss_fftr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kiss_fftr.h; sourceTree = "<group>"; }; - C493DF5E1962A50900B39106 /* lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lpc.c; sourceTree = "<group>"; }; - C493DF5F1962A50900B39106 /* lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lpc.h; sourceTree = "<group>"; }; - C493DF601962A50900B39106 /* lpc_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lpc_bfin.h; sourceTree = "<group>"; }; - C493DF611962A50900B39106 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lsp.c; sourceTree = "<group>"; }; - C493DF621962A50900B39106 /* lsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lsp.h; sourceTree = "<group>"; }; - C493DF631962A50900B39106 /* lsp_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lsp_bfin.h; sourceTree = "<group>"; }; - C493DF641962A50900B39106 /* lsp_tables_nb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lsp_tables_nb.c; sourceTree = "<group>"; }; - C493DF651962A50900B39106 /* ltp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltp.c; sourceTree = "<group>"; }; - C493DF661962A50900B39106 /* ltp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltp.h; sourceTree = "<group>"; }; - C493DF671962A50900B39106 /* ltp_arm4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltp_arm4.h; sourceTree = "<group>"; }; - C493DF681962A50900B39106 /* ltp_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltp_bfin.h; sourceTree = "<group>"; }; - C493DF691962A50900B39106 /* ltp_sse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltp_sse.h; sourceTree = "<group>"; }; - C493DF6A1962A50900B39106 /* math_approx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_approx.h; sourceTree = "<group>"; }; - C493DF6B1962A50900B39106 /* mdf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mdf.c; sourceTree = "<group>"; }; - C493DF6C1962A50900B39106 /* misc_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = misc_bfin.h; sourceTree = "<group>"; }; - C493DF6D1962A50900B39106 /* modes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = modes.c; sourceTree = "<group>"; }; - C493DF6E1962A50900B39106 /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = "<group>"; }; - C493DF6F1962A50900B39106 /* modes_wb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = modes_wb.c; sourceTree = "<group>"; }; - C493DF701962A50900B39106 /* nb_celp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nb_celp.c; sourceTree = "<group>"; }; - C493DF711962A50900B39106 /* nb_celp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nb_celp.h; sourceTree = "<group>"; }; - C493DF721962A50900B39106 /* os_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = os_support.h; sourceTree = "<group>"; }; - C493DF731962A50900B39106 /* preprocess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = preprocess.c; sourceTree = "<group>"; }; - C493DF741962A50900B39106 /* pseudofloat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pseudofloat.h; sourceTree = "<group>"; }; - C493DF751962A50900B39106 /* quant_lsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_lsp.c; sourceTree = "<group>"; }; - C493DF761962A50900B39106 /* quant_lsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quant_lsp.h; sourceTree = "<group>"; }; - C493DF771962A50900B39106 /* quant_lsp_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quant_lsp_bfin.h; sourceTree = "<group>"; }; - C493DF781962A50900B39106 /* resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resample.c; sourceTree = "<group>"; }; - C493DF791962A50900B39106 /* resample_sse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resample_sse.h; sourceTree = "<group>"; }; - C493DF7A1962A50900B39106 /* sb_celp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sb_celp.c; sourceTree = "<group>"; }; - C493DF7B1962A50900B39106 /* sb_celp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sb_celp.h; sourceTree = "<group>"; }; - C493DF7C1962A50900B39106 /* scal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scal.c; sourceTree = "<group>"; }; - C493DF7D1962A50900B39106 /* smallft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smallft.c; sourceTree = "<group>"; }; - C493DF7E1962A50900B39106 /* smallft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smallft.h; sourceTree = "<group>"; }; - C493DF801962A50900B39106 /* speex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex.h; sourceTree = "<group>"; }; - C493DF811962A50900B39106 /* speex_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_bits.h; sourceTree = "<group>"; }; - C493DF821962A50900B39106 /* speex_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_buffer.h; sourceTree = "<group>"; }; - C493DF831962A50900B39106 /* speex_callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_callbacks.h; sourceTree = "<group>"; }; - C493DF841962A50900B39106 /* speex_config_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_config_types.h; sourceTree = "<group>"; }; - C493DF851962A50900B39106 /* speex_config_types.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = speex_config_types.h.in; sourceTree = "<group>"; }; - C493DF861962A50900B39106 /* speex_echo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_echo.h; sourceTree = "<group>"; }; - C493DF871962A50900B39106 /* speex_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_header.h; sourceTree = "<group>"; }; - C493DF881962A50900B39106 /* speex_jitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_jitter.h; sourceTree = "<group>"; }; - C493DF891962A50900B39106 /* speex_preprocess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_preprocess.h; sourceTree = "<group>"; }; - C493DF8A1962A50900B39106 /* speex_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_resampler.h; sourceTree = "<group>"; }; - C493DF8B1962A50900B39106 /* speex_stereo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_stereo.h; sourceTree = "<group>"; }; - C493DF8C1962A50900B39106 /* speex_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speex_types.h; sourceTree = "<group>"; }; - C493DF8D1962A50900B39106 /* speex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = speex.c; sourceTree = "<group>"; }; - C493DF8E1962A50900B39106 /* speex_callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = speex_callbacks.c; sourceTree = "<group>"; }; - C493DF8F1962A50900B39106 /* speex_header.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = speex_header.c; sourceTree = "<group>"; }; - C493DF901962A50900B39106 /* stack_alloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack_alloc.h; sourceTree = "<group>"; }; - C493DF911962A50900B39106 /* stereo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stereo.c; sourceTree = "<group>"; }; - C493DF921962A50900B39106 /* vbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vbr.c; sourceTree = "<group>"; }; - C493DF931962A50900B39106 /* vbr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vbr.h; sourceTree = "<group>"; }; - C493DF941962A50900B39106 /* vorbis_psy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vorbis_psy.h; sourceTree = "<group>"; }; - C493DF951962A50900B39106 /* vq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vq.c; sourceTree = "<group>"; }; - C493DF961962A50900B39106 /* vq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vq.h; sourceTree = "<group>"; }; - C493DF971962A50900B39106 /* vq_arm4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vq_arm4.h; sourceTree = "<group>"; }; - C493DF981962A50900B39106 /* vq_bfin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vq_bfin.h; sourceTree = "<group>"; }; - C493DF991962A50900B39106 /* vq_sse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vq_sse.h; sourceTree = "<group>"; }; - C493DF9A1962A50900B39106 /* window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = window.c; sourceTree = "<group>"; }; - C493DF9C1962A50900B39106 /* AQRecorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AQRecorder.h; sourceTree = "<group>"; }; - C493DF9D1962A50900B39106 /* AQRecorder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AQRecorder.mm; sourceTree = "<group>"; }; - C493DF9F1962A50900B39106 /* SpeexAllHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeexAllHeaders.h; sourceTree = "<group>"; }; - C493DFA01962A50900B39106 /* SpeexCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeexCodec.h; sourceTree = "<group>"; }; - C493DFA11962A50900B39106 /* SpeexCodec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpeexCodec.m; sourceTree = "<group>"; }; - C493DFA21962A50900B39106 /* Decapsulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decapsulator.h; sourceTree = "<group>"; }; - C493DFA31962A50900B39106 /* Decapsulator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Decapsulator.m; sourceTree = "<group>"; }; - C493DFA41962A50900B39106 /* Encapsulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Encapsulator.h; sourceTree = "<group>"; }; - C493DFA51962A50900B39106 /* Encapsulator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Encapsulator.m; sourceTree = "<group>"; }; - C493DFA61962A50900B39106 /* PlayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayerManager.h; sourceTree = "<group>"; }; - C493DFA71962A50900B39106 /* PlayerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayerManager.m; sourceTree = "<group>"; }; - C493DFA91962A50900B39106 /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; }; - C493DFAA1962A50900B39106 /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; }; - C493DFAB1962A50900B39106 /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; }; - C493DFAC1962A50900B39106 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; }; - C493DFAD1962A50900B39106 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; }; - C493DFAE1962A50900B39106 /* CAXException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAXException.cpp; sourceTree = "<group>"; }; - C493DFAF1962A50900B39106 /* CAXException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAXException.h; sourceTree = "<group>"; }; - C493DFB01962A50900B39106 /* RawAudioDataPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RawAudioDataPlayer.h; sourceTree = "<group>"; }; - C493DFB11962A50900B39106 /* RawAudioDataPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RawAudioDataPlayer.m; sourceTree = "<group>"; }; - C493DFB21962A50900B39106 /* RecorderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecorderManager.h; sourceTree = "<group>"; }; - C493DFB31962A50900B39106 /* RecorderManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RecorderManager.mm; sourceTree = "<group>"; }; - C493DFB41962A50900B39106 /* SpeexAllHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeexAllHeaders.h; sourceTree = "<group>"; }; - C493DFB51962A50900B39106 /* XLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLog.h; sourceTree = "<group>"; }; - C493E0AA1962A51900B39106 /* DDAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAppDelegate.h; sourceTree = "<group>"; }; - C493E0AB1962A51900B39106 /* DDAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAppDelegate.m; sourceTree = "<group>"; }; - C493E0AE1962A53C00B39106 /* std.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = std.h; sourceTree = "<group>"; }; - C493E0AF1962A54900B39106 /* TeamTalk-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "TeamTalk-Info.plist"; sourceTree = "<group>"; }; - C493E0B11962A54F00B39106 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; - C493E0B31962A62100B39106 /* TeamTalk-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "TeamTalk-Prefix.pch"; path = "IOSDuoduo/TeamTalk-Prefix.pch"; sourceTree = "<group>"; }; - C4AFD7D5193D67350054ECFD /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - C4AFD882193D7B490054ECFD /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - C4AFD884193D7B580054ECFD /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - C4EBA734192F279100B72723 /* TeamTalk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TeamTalk.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C4EBA737192F279100B72723 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C4EBA739192F279100B72723 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C4EBA73B192F279100B72723 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C4EBA74F192F279100B72723 /* TeamTalkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TeamTalkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - C4EBA750192F279100B72723 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - C4EBA758192F279100B72723 /* TeamTalkTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TeamTalkTests-Info.plist"; sourceTree = "<group>"; }; - C4EBA75A192F279100B72723 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - C4EBA75C192F279100B72723 /* IOSDuoduoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IOSDuoduoTests.m; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C4EBA731192F279100B72723 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4C88A0C519D50FFA0071DA9C /* libz.dylib in Frameworks */, - C46061D8194E9D9300FF3966 /* MobileCoreServices.framework in Frameworks */, - C46061D6194E9D8A00FF3966 /* SystemConfiguration.framework in Frameworks */, - C4AFD885193D7B580054ECFD /* AudioToolbox.framework in Frameworks */, - C4AFD883193D7B490054ECFD /* CoreAudio.framework in Frameworks */, - C4AFD7D6193D67350054ECFD /* AVFoundation.framework in Frameworks */, - C4EBA73A192F279100B72723 /* CoreGraphics.framework in Frameworks */, - C4EBA73C192F279100B72723 /* UIKit.framework in Frameworks */, - C4EBA738192F279100B72723 /* Foundation.framework in Frameworks */, - 20429AA3EA084D9C821BEC3E /* libPods.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C4EBA74C192F279100B72723 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C4EBA751192F279100B72723 /* XCTest.framework in Frameworks */, - C4EBA753192F279100B72723 /* UIKit.framework in Frameworks */, - C4EBA752192F279100B72723 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4C1367ED194AF9440094E87D /* New Group */ = { - isa = PBXGroup; - children = ( - C4EBA735192F279100B72723 /* Products */, - ); - name = "New Group"; - sourceTree = "<group>"; - }; - 4CA50CCA19A47B7A0032DE24 /* Search */ = { - isa = PBXGroup; - children = ( - 4CA50CCE19A47C690032DE24 /* DDSearch.h */, - 4CA50CCF19A47C690032DE24 /* DDSearch.m */, - 4CA50CCB19A47B9A0032DE24 /* SpellLibrary.h */, - 4CA50CCC19A47B9A0032DE24 /* SpellLibrary.m */, - ); - name = Search; - sourceTree = "<group>"; - }; - 4CB8F6BF19A6D97D00C4C27D /* IOSDuoduo Tests */ = { - isa = PBXGroup; - children = ( - 4CB8F6C519A6D97D00C4C27D /* IOSDuoduo_Tests.m */, - 4CB8F6C019A6D97D00C4C27D /* Supporting Files */, - ); - path = "IOSDuoduo Tests"; - sourceTree = "<group>"; - }; - 4CB8F6C019A6D97D00C4C27D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 4CB8F6C119A6D97D00C4C27D /* IOSDuoduo Tests-Info.plist */, - 4CB8F6C219A6D97D00C4C27D /* InfoPlist.strings */, - 4CB8F6C719A6D97D00C4C27D /* IOSDuoduo Tests-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; - 4CE2F7C519B0242000415778 /* resources */ = { - isa = PBXGroup; - children = ( - 4C510AD11A09D928002ECBAB /* launchimage.png */, - 4C600BAC1A090B22000252E9 /* group_default.png */, - 4C600BAD1A090B22000252E9 /* group_default@2x.png */, - 4CA82AD719D29FAD00F20D01 /* star.png */, - 4CA82AD819D29FAD00F20D01 /* star@2x.png */, - 4C21748D19C16B56006F4BFC /* edit.png */, - 4C21748E19C16B56006F4BFC /* edit@2x.png */, - 4C891F3319B04C980006E3DF /* add.png */, - 4C891F3419B04C980006E3DF /* add@2x.png */, - 4C891F3519B04C980006E3DF /* chat.png */, - 4C891F3619B04C980006E3DF /* chat@2x.png */, - 4C891F3719B04C980006E3DF /* contact_selected.png */, - 4C891F3819B04C980006E3DF /* contact_selected@2x.png */, - 4C891F3919B04C980006E3DF /* contact.png */, - 4C891F3A19B04C980006E3DF /* contact@2x.png */, - 4C891F3B19B04C980006E3DF /* conversation_selected.png */, - 4C891F3C19B04C980006E3DF /* conversation_selected@2x.png */, - 4C891F3D19B04C980006E3DF /* conversation.png */, - 4C98355519C070A200DE8874 /* select.png */, - 4C98355619C070A200DE8874 /* select@2x.png */, - 4C891F3E19B04C980006E3DF /* conversation@2x.png */, - 4C891F3F19B04C990006E3DF /* dd_album.png */, - 4C891F4019B04C990006E3DF /* dd_album@2x.png */, - 4C891F4119B04C990006E3DF /* dd_cancel_send_record.png */, - 4C891F4219B04C990006E3DF /* dd_cancel_send_record@2x.png */, - 4C891F4319B04C990006E3DF /* dd_emoji_delete.png */, - 4C98355919C070BD00DE8874 /* unselected.png */, - 4C98355A19C070BD00DE8874 /* unselected@2x.png */, - 4C891F4419B04C990006E3DF /* dd_emoji_delete@2x.png */, - 4C891F4519B04C990006E3DF /* dd_emotion.png */, - 4C62464119F10C980015440D /* loginlogo.png */, - 4C891F4619B04C990006E3DF /* dd_emotion@2x.png */, - 4C891F4719B04C990006E3DF /* dd_has_unread_message.png */, - 4C891F4819B04C990006E3DF /* dd_has_unread_message@2x.png */, - 4C21749119C195CF006F4BFC /* x.png */, - 4C21749219C195CF006F4BFC /* x@2x.png */, - 4C891F4919B04C990006E3DF /* dd_image_send.png */, - 4C891F4A19B04C990006E3DF /* dd_image_send@2x.png */, - 4C891F4B19B04C990006E3DF /* dd_input_normal.png */, - 4C891F4C19B04C990006E3DF /* dd_input_normal@2x.png */, - 4C891F4D19B04C990006E3DF /* dd_left_voice_one.png */, - 4C891F4E19B04C990006E3DF /* dd_left_voice_one@2x.png */, - 4C891F4F19B04C990006E3DF /* dd_left_voice_three.png */, - 4C891F5019B04C990006E3DF /* dd_left_voice_three@2x.png */, - 4C891F5119B04C990006E3DF /* dd_left_voice_two.png */, - 4C891F5219B04C990006E3DF /* dd_left_voice_two@2x.png */, - 4C891F5319B04C990006E3DF /* dd_photo_back.png */, - 4C891F5419B04C990006E3DF /* dd_photo_back@2x.png */, - 4C891F5519B04C990006E3DF /* dd_press_to_say_normal.png */, - 4C891F5619B04C990006E3DF /* dd_press_to_say_normal@2x.png */, - 4C891F5719B04C990006E3DF /* dd_preview_select.png */, - 4C891F5819B04C990006E3DF /* dd_preview_select@2x.png */, - 4C891F5919B04C990006E3DF /* dd_preview_unselected.png */, - 4C891F5A19B04C990006E3DF /* dd_recent_contacts.png */, - 4C891F5B19B04C990006E3DF /* dd_recent_contacts@2x.png */, - 4C891F5C19B04C990006E3DF /* dd_record_normal.png */, - 4C891F5D19B04C990006E3DF /* dd_record_normal@2x.png */, - 4C891F5E19B04C990006E3DF /* dd_record_release_end.png */, - 4C891F5F19B04C990006E3DF /* dd_record_release_end@2x.png */, - 4C891F6019B04C990006E3DF /* dd_record_too_short.png */, - 4C891F6119B04C990006E3DF /* dd_record_too_short@2x.png */, - 4C891F6219B04C990006E3DF /* dd_recording.png */, - 4C891F6319B04C990006E3DF /* dd_recording@2x.png */, - 4C891F6419B04C990006E3DF /* dd_right_voice_one.png */, - 4C891F6519B04C990006E3DF /* dd_right_voice_one@2x.png */, - 4C891F6619B04C990006E3DF /* dd_right_voice_three.png */, - 4C891F6719B04C990006E3DF /* dd_right_voice_three@2x.png */, - 4C891F6819B04C990006E3DF /* dd_right_voice_two.png */, - 4C891F6919B04C990006E3DF /* dd_right_voice_two@2x.png */, - 4C891F6A19B04C990006E3DF /* dd_selected_photo.png */, - 4C891F6B19B04C990006E3DF /* dd_selected_photo@2x.png */, - 4C891F6C19B04C990006E3DF /* dd_send_failed.png */, - 4C891F6D19B04C990006E3DF /* dd_send_failed@2x.png */, - 4C891F6E19B04C990006E3DF /* dd_take-photo.png */, - 4C891F6F19B04C990006E3DF /* dd_take-photo@2x.png */, - 4C891F7019B04C990006E3DF /* dd_utility.png */, - 4C891F7119B04C990006E3DF /* dd_utility@2x.png */, - 4C891F7219B04C990006E3DF /* dd_volumn.png */, - 4C891F7319B04C990006E3DF /* dd_volumn@2x.png */, - 4C891F7419B04C990006E3DF /* delete.png */, - 4C891F7519B04C990006E3DF /* delete@2x.png */, - 4C891F7619B04C990006E3DF /* email.png */, - 4C891F7719B04C990006E3DF /* email@2x.png */, - 4C891F7819B04C990006E3DF /* jiantou.png */, - 4C891F7919B04C990006E3DF /* jiantou@2x.png */, - 4C891F7A19B04C990006E3DF /* left.png */, - 4C891F7B19B04C990006E3DF /* left@2x.png */, - 4C891F7C19B04C990006E3DF /* loginlogo.jpg */, - 4C891F7D19B04C990006E3DF /* msg.caf */, - 4C891F7E19B04C990006E3DF /* myprofile_selected.png */, - 4C891F7F19B04C990006E3DF /* myprofile_selected@2x.png */, - 4C891F8019B04C990006E3DF /* myprofile.png */, - 4C891F8119B04C990006E3DF /* myprofile@2x.png */, - 4C891F8219B04C990006E3DF /* password.png */, - 4C891F8319B04C990006E3DF /* password@2x.png */, - 4C891F8419B04C990006E3DF /* right.png */, - 4C891F8519B04C990006E3DF /* right@2x.png */, - 4C891F8619B04C990006E3DF /* setting.png */, - 4C891F8719B04C990006E3DF /* setting@2x.png */, - 4C891F8819B04C990006E3DF /* tel.png */, - 4C891F8B19B04C990006E3DF /* username.png */, - 4C891F8C19B04C990006E3DF /* username@2x.png */, - ); - name = resources; - sourceTree = "<group>"; - }; - C485E8E319F78D380061DAFE /* Finder */ = { - isa = PBXGroup; - children = ( - ); - name = Finder; - sourceTree = "<group>"; - }; - C493DDCA1962A50900B39106 /* TeamTalk */ = { - isa = PBXGroup; - children = ( - 4CA50CCA19A47B7A0032DE24 /* Search */, - C493E0AE1962A53C00B39106 /* std.h */, - C493DE5B1962A50900B39106 /* std.m */, - C493DDF41962A50900B39106 /* MD5.h */, - C493DDF51962A50900B39106 /* MD5.m */, - C493DDEC1962A50900B39106 /* DDCONSTANT.h */, - C493DDCB1962A50900B39106 /* Category */, - C493DDED1962A50900B39106 /* Entity */, - C493DDF61962A50900B39106 /* Module */, - C493DE561962A50900B39106 /* StateMaintance */, - C493DE5C1962A50900B39106 /* SundriesCenter */, - C493DE611962A50900B39106 /* TCPAPI */, - C493DEA01962A50900B39106 /* ThridFramework */, - C493DEC71962A50900B39106 /* ToRemove */, - C493DEDE1962A50900B39106 /* VC */, - C493DF2C1962A50900B39106 /* Voice */, - C493DFB51962A50900B39106 /* XLog.h */, - 4C39B7FD1974D6E4001B4AEF /* Images.xcassets */, - ); - name = TeamTalk; - path = IOSDuoduo; - sourceTree = "<group>"; - }; - C493DDCB1962A50900B39106 /* Category */ = { - isa = PBXGroup; - children = ( - 4C510AD51A0A2DFC002ECBAB /* NSString+Additions.h */, - 4C510AD61A0A2DFC002ECBAB /* NSString+Additions.m */, - C493DDCC1962A50900B39106 /* NSDate+DDAddition.h */, - C493DDCD1962A50900B39106 /* NSDate+DDAddition.m */, - C493DDCE1962A50900B39106 /* NSDictionary+JSON.h */, - C493DDCF1962A50900B39106 /* NSDictionary+JSON.m */, - C493DDD01962A50900B39106 /* NSDictionary+Safe.h */, - C493DDD11962A50900B39106 /* NSDictionary+Safe.m */, - C493DDD21962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.h */, - C493DDD31962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.m */, - C493DDD41962A50900B39106 /* NSIndexSet+AQIsSetContiguous.h */, - C493DDD51962A50900B39106 /* NSIndexSet+AQIsSetContiguous.m */, - C493DDDA1962A50900B39106 /* NSString+DDPath.h */, - C493DDDB1962A50900B39106 /* NSString+DDPath.m */, - C493DDDC1962A50900B39106 /* NSString+JSMessagesView.h */, - C493DDDD1962A50900B39106 /* NSString+JSMessagesView.m */, - C493DDDE1962A50900B39106 /* UIButton+JSMessagesView.h */, - C493DDDF1962A50900B39106 /* UIButton+JSMessagesView.m */, - C493DDE01962A50900B39106 /* UIColor+AQGridView.h */, - C493DDE11962A50900B39106 /* UIColor+AQGridView.m */, - C493DDE21962A50900B39106 /* UIColor+JSMessagesView.h */, - C493DDE31962A50900B39106 /* UIColor+JSMessagesView.m */, - C493DDE61962A50900B39106 /* UIImage+JSMessagesView.h */, - C493DDE71962A50900B39106 /* UIImage+JSMessagesView.m */, - C493DDE81962A50900B39106 /* UIView+AnimationOptionsForCurve.h */, - C493DDE91962A50900B39106 /* UIView+AnimationOptionsForCurve.m */, - C493DDEA1962A50900B39106 /* UIView+DDAddition.h */, - C493DDEB1962A50900B39106 /* UIView+DDAddition.m */, - ); - path = Category; - sourceTree = "<group>"; - }; - C493DDED1962A50900B39106 /* Entity */ = { - isa = PBXGroup; - children = ( - 4CD995F3199F420700025C9C /* DDBaseEntity.h */, - 4CD995F4199F420700025C9C /* DDBaseEntity.m */, - 4C837F47197F95A400C3D758 /* DDGroupEntity.h */, - 4C837F48197F95A400C3D758 /* DDGroupEntity.m */, - C493DDEE1962A50900B39106 /* DDMessageEntity.h */, - C493DDEF1962A50900B39106 /* DDMessageEntity.m */, - C493DDF01962A50900B39106 /* DDSessionEntity.h */, - C493DDF11962A50900B39106 /* DDSessionEntity.m */, - C493DDF21962A50900B39106 /* DDUserEntity.h */, - C493DDF31962A50900B39106 /* DDUserEntity.m */, - ); - path = Entity; - sourceTree = "<group>"; - }; - C493DDF61962A50900B39106 /* Module */ = { - isa = PBXGroup; - children = ( - C493DDF71962A50900B39106 /* DataBase */, - C493DDFA1962A50900B39106 /* Entrance */, - C493DDFD1962A50900B39106 /* Http */, - C493DE041962A50900B39106 /* Login */, - C493DE111962A50900B39106 /* Messages */, - C493DE161962A50900B39106 /* Users */, - 4CD156761998B70D00B11233 /* DDGroupModule.h */, - 4CD156771998B70D00B11233 /* DDGroupModule.m */, - ); - path = Module; - sourceTree = "<group>"; - }; - C493DDF71962A50900B39106 /* DataBase */ = { - isa = PBXGroup; - children = ( - C493DDF81962A50900B39106 /* DDDatabaseUtil.h */, - C493DDF91962A50900B39106 /* DDDatabaseUtil.m */, - ); - path = DataBase; - sourceTree = "<group>"; - }; - C493DDFA1962A50900B39106 /* Entrance */ = { - isa = PBXGroup; - children = ( - ); - path = Entrance; - sourceTree = "<group>"; - }; - C493DDFD1962A50900B39106 /* Http */ = { - isa = PBXGroup; - children = ( - C493DDFE1962A50900B39106 /* DDAFClient.h */, - C493DDFF1962A50900B39106 /* DDAFClient.m */, - ); - path = Http; - sourceTree = "<group>"; - }; - C493DE041962A50900B39106 /* Login */ = { - isa = PBXGroup; - children = ( - C493DE051962A50900B39106 /* DDHttpServer.h */, - C493DE061962A50900B39106 /* DDHttpServer.m */, - C493DE091962A50900B39106 /* DDLoginServer.h */, - C493DE0A1962A50900B39106 /* DDLoginServer.m */, - C493DE0B1962A50900B39106 /* DDMsgServer.h */, - C493DE0C1962A50900B39106 /* DDMsgServer.m */, - C493DE0D1962A50900B39106 /* DDTcpServer.h */, - C493DE0E1962A50900B39106 /* DDTcpServer.m */, - C493DE0F1962A50900B39106 /* DDTokenManager.h */, - C493DE101962A50900B39106 /* DDTokenManager.m */, - ); - path = Login; - sourceTree = "<group>"; - }; - C493DE111962A50900B39106 /* Messages */ = { - isa = PBXGroup; - children = ( - C493DE121962A50900B39106 /* DDMessageModule.h */, - C493DE131962A50900B39106 /* DDMessageModule.m */, - C493DE141962A50900B39106 /* DDMessageSendManager.h */, - C493DE151962A50900B39106 /* DDMessageSendManager.m */, - 4C4657BB19EF5DC300334DD2 /* UnAckMessageManager.h */, - 4C4657BC19EF5DC300334DD2 /* UnAckMessageManager.m */, - ); - path = Messages; - sourceTree = "<group>"; - }; - C493DE161962A50900B39106 /* Users */ = { - isa = PBXGroup; - children = ( - C493DE171962A50900B39106 /* DDUserModule.h */, - C493DE181962A50900B39106 /* DDUserModule.m */, - ); - path = Users; - sourceTree = "<group>"; - }; - C493DE561962A50900B39106 /* StateMaintance */ = { - isa = PBXGroup; - children = ( - C493DE571962A50900B39106 /* DDClientState.h */, - C493DE581962A50900B39106 /* DDClientState.m */, - C493DE591962A50900B39106 /* DDClientStateMaintenanceManager.h */, - C493DE5A1962A50900B39106 /* DDClientStateMaintenanceManager.m */, - ); - path = StateMaintance; - sourceTree = "<group>"; - }; - C493DE5C1962A50900B39106 /* SundriesCenter */ = { - isa = PBXGroup; - children = ( - C493DE5D1962A50900B39106 /* DDNotificationHelp.h */, - C493DE5E1962A50900B39106 /* DDNotificationHelp.m */, - C493DE5F1962A50900B39106 /* DDSundriesCenter.h */, - C493DE601962A50900B39106 /* DDSundriesCenter.m */, - ); - path = SundriesCenter; - sourceTree = "<group>"; - }; - C493DE611962A50900B39106 /* TCPAPI */ = { - isa = PBXGroup; - children = ( - 4C21749519C197F3006F4BFC /* DDUserDetailInfoAPI.h */, - 4C21749619C197F3006F4BFC /* DDUserDetailInfoAPI.m */, - 4C5CA05E19C13341007CE792 /* DDDeleteMemberFromGroupAPI.h */, - 4C5CA05F19C13341007CE792 /* DDDeleteMemberFromGroupAPI.m */, - 4C3F74931999EAC100510159 /* DDRecentGroupAPI.h */, - 4C3F74941999EAC100510159 /* DDRecentGroupAPI.m */, - 4CD156581998A36300B11233 /* DDAddMemberToGroupAPI.h */, - 4CD156591998A36300B11233 /* DDAddMemberToGroupAPI.m */, - 4CD1565A1998A36300B11233 /* DDFixedGroupAPI.h */, - 4CD1565B1998A36300B11233 /* DDFixedGroupAPI.m */, - 4CD1565C1998A36300B11233 /* DDGroupInfoAPI.h */, - 4CD1565D1998A36300B11233 /* DDGroupInfoAPI.m */, - 4CD1565E1998A36300B11233 /* DDGroupMsgReadACKAPI.h */, - 4CD1565F1998A36300B11233 /* DDGroupMsgReadACKAPI.m */, - 4CD156601998A36300B11233 /* DDGroupsUnreadMessageAPI.h */, - 4CD156611998A36300B11233 /* DDGroupsUnreadMessageAPI.m */, - 4CD156621998A36300B11233 /* DDReceiveGroupAddMemberAPI.h */, - 4CD156631998A36300B11233 /* DDReceiveGroupAddMemberAPI.m */, - 4C70BA45199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.h */, - 4C70BA46199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.m */, - 4CD156661998A36300B11233 /* DDUnreadMessageGroupAPI.h */, - 4CD156671998A36300B11233 /* DDUnreadMessageGroupAPI.m */, - 4C837F44197F954500C3D758 /* DDCreateGroupAPI.h */, - 4C837F45197F954500C3D758 /* DDCreateGroupAPI.m */, - 4C837EE7197F949300C3D758 /* DDAllUserAPI.h */, - 4C837EE8197F949300C3D758 /* DDAllUserAPI.m */, - C493DE621962A50900B39106 /* DataOutputStream+Addition.h */, - C493DE631962A50900B39106 /* DataOutputStream+Addition.m */, - C493DE641962A50900B39106 /* DDAPISchedule.h */, - C493DE651962A50900B39106 /* DDAPISchedule.m */, - C493DE661962A50900B39106 /* DDAPIScheduleProtocol.h */, - C493DE671962A50900B39106 /* DDAPIUnrequestScheduleProtocol.h */, - C493DE681962A50900B39106 /* DDDataInputStream.h */, - C493DE691962A50900B39106 /* DDDataInputStream.m */, - C493DE6A1962A50900B39106 /* DDDataOutputStream.h */, - C493DE6B1962A50900B39106 /* DDDataOutputStream.m */, - C493DE6C1962A50900B39106 /* DDReachability.h */, - C493DE6D1962A50900B39106 /* DDReachability.m */, - C493DE6E1962A50900B39106 /* DDSendBuffer.h */, - C493DE6F1962A50900B39106 /* DDSendBuffer.m */, - C493DE701962A50900B39106 /* DDSuperAPI.h */, - C493DE711962A50900B39106 /* DDSuperAPI.m */, - C493DE721962A50900B39106 /* DDTcpClientManager.h */, - C493DE731962A50900B39106 /* DDTcpClientManager.m */, - C493DE741962A50900B39106 /* DDTcpProtocolHeader.h */, - C493DE751962A50900B39106 /* DDTcpProtocolHeader.m */, - C493DE761962A50900B39106 /* DDUnrequestSuperAPI.h */, - C493DE771962A50900B39106 /* DDUnrequestSuperAPI.m */, - 4C5D70551990C1AE009AF959 /* DDDepartmentAPI.h */, - 4C5D70561990C1AE009AF959 /* DDDepartmentAPI.m */, - 4CB58EAA1991FF98006B24D3 /* DDepartment.h */, - 4CB58EAB1991FF98006B24D3 /* DDepartment.m */, - C493DE781962A50900B39106 /* NSStream+NSStreamAddition.h */, - C493DE791962A50900B39106 /* NSStream+NSStreamAddition.m */, - 4CB3D91819F4A22800DC9B9D /* ShieldGroupMessageAPI.h */, - 4CB3D91919F4A22800DC9B9D /* ShieldGroupMessageAPI.m */, - C493DE7A1962A50900B39106 /* RequestAPI */, - C493DE991962A50900B39106 /* UnrequestAPI */, - 4CB3D91B19F4B48200DC9B9D /* LogoutAPI.h */, - 4CB3D91C19F4B48200DC9B9D /* LogoutAPI.m */, - ); - path = TCPAPI; - sourceTree = "<group>"; - }; - C493DE7A1962A50900B39106 /* RequestAPI */ = { - isa = PBXGroup; - children = ( - C493DE7E1962A50900B39106 /* Login */, - C493DE851962A50900B39106 /* Msg */, - C493DE921962A50900B39106 /* Users */, - ); - path = RequestAPI; - sourceTree = "<group>"; - }; - C493DE7E1962A50900B39106 /* Login */ = { - isa = PBXGroup; - children = ( - C493DE7F1962A50900B39106 /* DDHeartbeatAPI.h */, - C493DE801962A50900B39106 /* DDHeartbeatAPI.m */, - C493DE811962A50900B39106 /* DDLoginAPI.h */, - C493DE821962A50900B39106 /* DDLoginAPI.m */, - C493DE831962A50900B39106 /* DDMsgServerIPAPI.h */, - C493DE841962A50900B39106 /* DDMsgServerIPAPI.m */, - ); - path = Login; - sourceTree = "<group>"; - }; - C493DE851962A50900B39106 /* Msg */ = { - isa = PBXGroup; - children = ( - C493DE861962A50900B39106 /* DDGetUnreadMessageUsersAPI.h */, - C493DE871962A50900B39106 /* DDGetUnreadMessageUsersAPI.m */, - C493DE881962A50900B39106 /* DDGetUserUnreadMessagesAPI.h */, - C493DE891962A50900B39106 /* DDGetUserUnreadMessagesAPI.m */, - C493DE8A1962A50900B39106 /* DDSendMessageAPI.h */, - C493DE8B1962A50900B39106 /* DDSendMessageAPI.m */, - C493DE8C1962A50900B39106 /* DDSendMessageReadACKAPI.h */, - C493DE8D1962A50900B39106 /* DDSendMessageReadACKAPI.m */, - C493DE8E1962A50900B39106 /* DDSendPhotoMessageAPI.h */, - C493DE8F1962A50900B39106 /* DDSendPhotoMessageAPI.m */, - C493DE901962A50900B39106 /* DDSendVoiceMessageAPI.h */, - C493DE911962A50900B39106 /* DDSendVoiceMessageAPI.m */, - ); - path = Msg; - sourceTree = "<group>"; - }; - C493DE921962A50900B39106 /* Users */ = { - isa = PBXGroup; - children = ( - C493DE931962A50900B39106 /* DDAllotServiceAPI.h */, - C493DE941962A50900B39106 /* DDAllotServiceAPI.m */, - C493DE951962A50900B39106 /* DDGetUserInfoAPI.h */, - C493DE961962A50900B39106 /* DDGetUserInfoAPI.m */, - 4C31EB5419CAB471004A3B2C /* GetGroupInfoAPi.h */, - 4C31EB5519CAB471004A3B2C /* GetGroupInfoAPi.m */, - C493DE971962A50900B39106 /* RecentConactsAPI.h */, - C493DE981962A50900B39106 /* RecentConactsAPI.m */, - ); - path = Users; - sourceTree = "<group>"; - }; - C493DE991962A50900B39106 /* UnrequestAPI */ = { - isa = PBXGroup; - children = ( - C493DE9A1962A50900B39106 /* Kickoff */, - C493DE9D1962A50900B39106 /* Msg */, - ); - path = UnrequestAPI; - sourceTree = "<group>"; - }; - C493DE9A1962A50900B39106 /* Kickoff */ = { - isa = PBXGroup; - children = ( - C493DE9B1962A50900B39106 /* ReceiveKickoffAPI.h */, - C493DE9C1962A50900B39106 /* ReceiveKickoffAPI.m */, - ); - path = Kickoff; - sourceTree = "<group>"; - }; - C493DE9D1962A50900B39106 /* Msg */ = { - isa = PBXGroup; - children = ( - C493DE9E1962A50900B39106 /* DDReceiveMessageAPI.h */, - C493DE9F1962A50900B39106 /* DDReceiveMessageAPI.m */, - 4C1E441719961889005CB2DB /* DDReceiveMessageACKAPI.h */, - 4C1E441819961889005CB2DB /* DDReceiveMessageACKAPI.m */, - ); - path = Msg; - sourceTree = "<group>"; - }; - C493DEA01962A50900B39106 /* ThridFramework */ = { - isa = PBXGroup; - children = ( - C493DEA11962A50900B39106 /* AQ */, - C493DEB31962A50900B39106 /* MW */, - ); - path = ThridFramework; - sourceTree = "<group>"; - }; - C493DEA11962A50900B39106 /* AQ */ = { - isa = PBXGroup; - children = ( - C493DEA21962A50900B39106 /* AQGridView+CellLayout.h */, - C493DEA31962A50900B39106 /* AQGridView+CellLocationDelegation.h */, - C493DEA41962A50900B39106 /* AQGridView.h */, - C493DEA51962A50900B39106 /* AQGridView.m */, - C493DEA61962A50900B39106 /* AQGridViewAnimatorItem.h */, - C493DEA71962A50900B39106 /* AQGridViewAnimatorItem.m */, - C493DEA81962A50900B39106 /* AQGridViewCell+AQGridViewCellPrivate.h */, - C493DEA91962A50900B39106 /* AQGridViewCell.h */, - C493DEAA1962A50900B39106 /* AQGridViewCell.m */, - C493DEAB1962A50900B39106 /* AQGridViewController.h */, - C493DEAC1962A50900B39106 /* AQGridViewController.m */, - C493DEAD1962A50900B39106 /* AQGridViewData.h */, - C493DEAE1962A50900B39106 /* AQGridViewData.m */, - C493DEAF1962A50900B39106 /* AQGridViewUpdateInfo.h */, - C493DEB01962A50900B39106 /* AQGridViewUpdateInfo.m */, - C493DEB11962A50900B39106 /* AQGridViewUpdateItem.h */, - C493DEB21962A50900B39106 /* AQGridViewUpdateItem.m */, - ); - path = AQ; - sourceTree = "<group>"; - }; - C493DEB31962A50900B39106 /* MW */ = { - isa = PBXGroup; - children = ( - C493DEB41962A50900B39106 /* MWCaptionView.h */, - C493DEB51962A50900B39106 /* MWCaptionView.m */, - C493DEB61962A50900B39106 /* MWCommon.h */, - C493DEB71962A50900B39106 /* MWGridCell.h */, - C493DEB81962A50900B39106 /* MWGridCell.m */, - C493DEB91962A50900B39106 /* MWGridViewController.h */, - C493DEBA1962A50900B39106 /* MWGridViewController.m */, - C493DEBB1962A50900B39106 /* MWPhoto.h */, - C493DEBC1962A50900B39106 /* MWPhoto.m */, - C493DEBD1962A50900B39106 /* MWPhotoBrowser.h */, - C493DEBE1962A50900B39106 /* MWPhotoBrowser.m */, - C493DEBF1962A50900B39106 /* MWPhotoBrowserPrivate.h */, - C493DEC01962A50900B39106 /* MWPhotoProtocol.h */, - C493DEC11962A50900B39106 /* MWTapDetectingImageView.h */, - C493DEC21962A50900B39106 /* MWTapDetectingImageView.m */, - C493DEC31962A50900B39106 /* MWTapDetectingView.h */, - C493DEC41962A50900B39106 /* MWTapDetectingView.m */, - C493DEC51962A50900B39106 /* MWZoomingScrollView.h */, - C493DEC61962A50900B39106 /* MWZoomingScrollView.m */, - ); - path = MW; - sourceTree = "<group>"; - }; - C493DEC71962A50900B39106 /* ToRemove */ = { - isa = PBXGroup; - children = ( - 4CF7D522198A268500F0272B /* JSDismissiveTextView.h */, - 4CF7D523198A268500F0272B /* JSDismissiveTextView.m */, - 4CF7D524198A268500F0272B /* JSMessageInputView.h */, - 4CF7D525198A268500F0272B /* JSMessageInputView.m */, - 4CF7D526198A268500F0272B /* JSMessageTextView.h */, - 4CF7D527198A268500F0272B /* JSMessageTextView.m */, - ); - path = ToRemove; - sourceTree = "<group>"; - }; - C493DEDE1962A50900B39106 /* VC */ = { - isa = PBXGroup; - children = ( - C485E8E319F78D380061DAFE /* Finder */, - 4C837F4A197F95FF00C3D758 /* ContactsViewController.h */, - 4C837F4B197F95FF00C3D758 /* ContactsViewController.m */, - 4CE95F2F19AAD0E8000CD0C6 /* ContactAvatarTools.h */, - 4CE95F3019AAD0E8000CD0C6 /* ContactAvatarTools.m */, - 4C837F41197F952800C3D758 /* ChattingEditModule.h */, - 4C837F42197F952800C3D758 /* ChattingEditModule.m */, - 4C837F31197F94F400C3D758 /* ContactsModule.h */, - 4C837F32197F94F400C3D758 /* ContactsModule.m */, - 4CB8F6D119A7171800C4C27D /* DDContactsCell.h */, - 4CB8F6D219A7171800C4C27D /* DDContactsCell.m */, - 4C7E4A65198B634F00B96751 /* ClearImageCell.h */, - 4C7E4A66198B634F00B96751 /* ClearImageCell.m */, - 4C837F35197F94F400C3D758 /* PublicProfileViewControll.h */, - 4C837F36197F94F400C3D758 /* PublicProfileViewControll.m */, - 4C837F37197F94F400C3D758 /* PublicProfileViewControll.xib */, - C493DEDF1962A50900B39106 /* Chatting */, - C493DF141962A50900B39106 /* AlbumDetailsBottomBar.h */, - C493DF151962A50900B39106 /* AlbumDetailsBottomBar.m */, - C493DF161962A50900B39106 /* ImagesPreviewViewController.h */, - C493DF171962A50900B39106 /* ImagesPreviewViewController.m */, - C493DF181962A50900B39106 /* LoginModule.h */, - C493DF191962A50900B39106 /* LoginModule.m */, - C4254B571962B29600B05CAF /* LoginViewController.h */, - C4254B581962B29600B05CAF /* LoginViewController.m */, - C4254B591962B29600B05CAF /* LoginViewController.xib */, - C493DF1D1962A50900B39106 /* Photo.h */, - C493DF1E1962A50900B39106 /* Photo.m */, - C493DF1F1962A50900B39106 /* PhotosCache.h */, - C493DF201962A50900B39106 /* PhotosCache.m */, - C493DF211962A50900B39106 /* ImageGridViewCell.h */, - C493DF221962A50900B39106 /* ImageGridViewCell.m */, - C493DF231962A50900B39106 /* RecentContacts */, - 4C39B8041974EF18001B4AEF /* MainViewControll.h */, - 4C39B8051974EF18001B4AEF /* MainViewControll.m */, - 4C39B8061974EF18001B4AEF /* MainViewControll.xib */, - 4C39B80C1974F388001B4AEF /* MyProfileViewControll.h */, - 4C39B80D1974F388001B4AEF /* MyProfileViewControll.m */, - 4C39B80E1974F388001B4AEF /* MyProfileViewControll.xib */, - 4CEFE74D19A31D0600156D26 /* SettingViewController.h */, - 4CEFE74E19A31D0600156D26 /* SettingViewController.m */, - 4CEFE74F19A31D0600156D26 /* SettingViewController.xib */, - 4C7E4A60198B5EC300B96751 /* ClearImageCacheViewController.h */, - 4C7E4A61198B5EC300B96751 /* ClearImageCacheViewController.m */, - 4C7E4A62198B5EC300B96751 /* ClearImageCacheViewController.xib */, - 4C5E374219D408CE00D1042B /* GroupAvatarImage.h */, - 4C5E374319D408CE00D1042B /* GroupAvatarImage.m */, - 4C92734619EB9C8200F6C370 /* NetwrokStatusNotifyUI.h */, - 4C92734719EB9C8200F6C370 /* NetwrokStatusNotifyUI.m */, - 4CB3D91E19F4FA7F00DC9B9D /* SearchContentViewController.h */, - 4CB3D91F19F4FA7F00DC9B9D /* SearchContentViewController.m */, - 4CB3D92019F4FA7F00DC9B9D /* SearchContentViewController.xib */, - ); - path = VC; - sourceTree = "<group>"; - }; - C493DEDF1962A50900B39106 /* Chatting */ = { - isa = PBXGroup; - children = ( - 4C837F3C197F951600C3D758 /* DDChattingEditViewController.h */, - 4C837F3D197F951600C3D758 /* DDChattingEditViewController.m */, - 4CB23CA819B457AD004FCF10 /* EditGroupViewController.h */, - 4CB23CA919B457AD004FCF10 /* EditGroupViewController.m */, - 4C98355219C06F6D00DE8874 /* EditContactsCell.h */, - 4C98355319C06F6D00DE8874 /* EditContactsCell.m */, - 4CB23CAA19B457AD004FCF10 /* EditGroupViewController.xib */, - 4CB23CAD19B4590D004FCF10 /* EditGroupViewCell.h */, - 4CB23CAE19B4590D004FCF10 /* EditGroupViewCell.m */, - 4CA50CC719A435E20032DE24 /* DDPersonEditCollectionCell.h */, - 4CA50CC819A435E20032DE24 /* DDPersonEditCollectionCell.m */, - 4CB6AA0B198F7F550075BDB4 /* ChatEditTableViewCell.h */, - 4CB6AA0C198F7F550075BDB4 /* ChatEditTableViewCell.m */, - 4C837F3E197F951600C3D758 /* DDChattingEditViewController.xib */, - C493DEE01962A50900B39106 /* Cells */, - C493DEF11962A50900B39106 /* ChatUtility */, - C493DF021962A50900B39106 /* AnalysisImage.h */, - C493DF031962A50900B39106 /* AnalysisImage.m */, - C493DF061962A50900B39106 /* ChattingMainViewController.h */, - C493DF071962A50900B39106 /* ChattingMainViewController.m */, - C493DF081962A50900B39106 /* ChattingMainViewController.xib */, - C493DF091962A50900B39106 /* ChattingModule.h */, - C493DF0A1962A50900B39106 /* ChattingModule.m */, - C493DF0B1962A50900B39106 /* CommodityCell.h */, - C493DF0C1962A50900B39106 /* CommodityCell.m */, - C493DF0D1962A50900B39106 /* CommodityCell.xib */, - C493DF0E1962A50900B39106 /* MenuImageView.h */, - C493DF0F1962A50900B39106 /* MenuImageView.m */, - C493DF101962A50900B39106 /* RecordingView.h */, - C493DF111962A50900B39106 /* RecordingView.m */, - C493DF121962A50900B39106 /* TouchDownGestureRecognizer.h */, - C493DF131962A50900B39106 /* TouchDownGestureRecognizer.m */, - ); - path = Chatting; - sourceTree = "<group>"; - }; - C493DEE01962A50900B39106 /* Cells */ = { - isa = PBXGroup; - children = ( - C493DEE11962A50900B39106 /* DDChatBaseCell.h */, - C493DEE21962A50900B39106 /* DDChatBaseCell.m */, - C493DEE31962A50900B39106 /* DDChatCellProtocol.h */, - C493DEE41962A50900B39106 /* DDChatImageCell.h */, - C493DEE51962A50900B39106 /* DDChatImageCell.m */, - C493DEE61962A50900B39106 /* DDChatImagePreviewViewController.h */, - C493DEE71962A50900B39106 /* DDChatImagePreviewViewController.m */, - C493DEE81962A50900B39106 /* DDChatTextCell.h */, - C493DEE91962A50900B39106 /* DDChatTextCell.m */, - C493DEEA1962A50900B39106 /* DDChatTextCell.xib */, - C493DEEB1962A50900B39106 /* DDChatVoiceCell.h */, - C493DEEC1962A50900B39106 /* DDChatVoiceCell.m */, - C493DEEF1962A50900B39106 /* DDPromptCell.h */, - C493DEF01962A50900B39106 /* DDPromptCell.m */, - ); - path = Cells; - sourceTree = "<group>"; - }; - C493DEF11962A50900B39106 /* ChatUtility */ = { - isa = PBXGroup; - children = ( - C493DEF21962A50900B39106 /* DDAlbumDetailsViewControll.h */, - C493DEF31962A50900B39106 /* DDAlbumDetailsViewControll.m */, - C493DEF41962A50900B39106 /* AlbumViewController.h */, - C493DEF51962A50900B39106 /* AlbumViewController.m */, - C493DEF61962A50900B39106 /* ChatUtilityItem.h */, - C493DEF71962A50900B39106 /* ChatUtilityItem.m */, - C493DEF81962A50900B39106 /* ChatUtilityViewController.h */, - C493DEF91962A50900B39106 /* ChatUtilityViewController.m */, - C493DEFA1962A50900B39106 /* EmojiFaceView.h */, - C493DEFB1962A50900B39106 /* EmojiFaceView.m */, - C493DEFC1962A50900B39106 /* EmotionsModule.h */, - C493DEFD1962A50900B39106 /* EmotionsModule.m */, - C493DEFE1962A50900B39106 /* EmotionsViewController.h */, - C493DEFF1962A50900B39106 /* EmotionsViewController.m */, - C493DF001962A50900B39106 /* UtililyItemCell.h */, - C493DF011962A50900B39106 /* UtililyItemCell.m */, - ); - path = ChatUtility; - sourceTree = "<group>"; - }; - C493DF231962A50900B39106 /* RecentContacts */ = { - isa = PBXGroup; - children = ( - C493DF241962A50900B39106 /* RecentUserCell.h */, - C493DF251962A50900B39106 /* RecentUserCell.m */, - C493DF261962A50900B39106 /* RecentUserCell.xib */, - C493DF271962A50900B39106 /* RecentUsersViewController.h */, - C493DF281962A50900B39106 /* RecentUsersViewController.m */, - C493DF291962A50900B39106 /* RecentUsersViewController.xib */, - C493DF2A1962A50900B39106 /* RecentUserVCModule.h */, - C493DF2B1962A50900B39106 /* RecentUserVCModule.m */, - ); - path = RecentContacts; - sourceTree = "<group>"; - }; - C493DF2C1962A50900B39106 /* Voice */ = { - isa = PBXGroup; - children = ( - C493DF2D1962A50900B39106 /* Code */, - C493DF9B1962A50900B39106 /* manager */, - C493DFB41962A50900B39106 /* SpeexAllHeaders.h */, - ); - path = Voice; - sourceTree = "<group>"; - }; - C493DF2D1962A50900B39106 /* Code */ = { - isa = PBXGroup; - children = ( - C493DF2E1962A50900B39106 /* Libs */, - ); - path = Code; - sourceTree = "<group>"; - }; - C493DF2E1962A50900B39106 /* Libs */ = { - isa = PBXGroup; - children = ( - C493DF2F1962A50900B39106 /* config.h */, - C493DF301962A50900B39106 /* libogg */, - C493DF361962A50900B39106 /* libspeex */, - ); - path = Libs; - sourceTree = "<group>"; - }; - C493DF301962A50900B39106 /* libogg */ = { - isa = PBXGroup; - children = ( - C493DF311962A50900B39106 /* bitwise.c */, - C493DF321962A50900B39106 /* framing.c */, - C493DF331962A50900B39106 /* ogg */, - ); - path = libogg; - sourceTree = "<group>"; - }; - C493DF331962A50900B39106 /* ogg */ = { - isa = PBXGroup; - children = ( - C493DF341962A50900B39106 /* ogg.h */, - C493DF351962A50900B39106 /* os_types.h */, - ); - path = ogg; - sourceTree = "<group>"; - }; - C493DF361962A50900B39106 /* libspeex */ = { - isa = PBXGroup; - children = ( - C493DF371962A50900B39106 /* _kiss_fft_guts.h */, - C493DF381962A50900B39106 /* arch.h */, - C493DF391962A50900B39106 /* bits.c */, - C493DF3A1962A50900B39106 /* buffer.c */, - C493DF3B1962A50900B39106 /* cb_search.c */, - C493DF3C1962A50900B39106 /* cb_search.h */, - C493DF3D1962A50900B39106 /* cb_search_arm4.h */, - C493DF3E1962A50900B39106 /* cb_search_bfin.h */, - C493DF3F1962A50900B39106 /* cb_search_sse.h */, - C493DF401962A50900B39106 /* exc_10_16_table.c */, - C493DF411962A50900B39106 /* exc_10_32_table.c */, - C493DF421962A50900B39106 /* exc_20_32_table.c */, - C493DF431962A50900B39106 /* exc_5_256_table.c */, - C493DF441962A50900B39106 /* exc_5_64_table.c */, - C493DF451962A50900B39106 /* exc_8_128_table.c */, - C493DF461962A50900B39106 /* fftwrap.c */, - C493DF471962A50900B39106 /* fftwrap.h */, - C493DF481962A50900B39106 /* filterbank.c */, - C493DF491962A50900B39106 /* filterbank.h */, - C493DF4A1962A50900B39106 /* filters.c */, - C493DF4B1962A50900B39106 /* filters.h */, - C493DF4C1962A50900B39106 /* filters_arm4.h */, - C493DF4D1962A50900B39106 /* filters_bfin.h */, - C493DF4E1962A50900B39106 /* filters_sse.h */, - C493DF4F1962A50900B39106 /* fixed_arm4.h */, - C493DF501962A50900B39106 /* fixed_arm5e.h */, - C493DF511962A50900B39106 /* fixed_bfin.h */, - C493DF521962A50900B39106 /* fixed_debug.h */, - C493DF531962A50900B39106 /* fixed_generic.h */, - C493DF541962A50900B39106 /* gain_table.c */, - C493DF551962A50900B39106 /* gain_table_lbr.c */, - C493DF561962A50900B39106 /* hexc_10_32_table.c */, - C493DF571962A50900B39106 /* hexc_table.c */, - C493DF581962A50900B39106 /* high_lsp_tables.c */, - C493DF591962A50900B39106 /* jitter.c */, - C493DF5A1962A50900B39106 /* kiss_fft.c */, - C493DF5B1962A50900B39106 /* kiss_fft.h */, - C493DF5C1962A50900B39106 /* kiss_fftr.c */, - C493DF5D1962A50900B39106 /* kiss_fftr.h */, - C493DF5E1962A50900B39106 /* lpc.c */, - C493DF5F1962A50900B39106 /* lpc.h */, - C493DF601962A50900B39106 /* lpc_bfin.h */, - C493DF611962A50900B39106 /* lsp.c */, - C493DF621962A50900B39106 /* lsp.h */, - C493DF631962A50900B39106 /* lsp_bfin.h */, - C493DF641962A50900B39106 /* lsp_tables_nb.c */, - C493DF651962A50900B39106 /* ltp.c */, - C493DF661962A50900B39106 /* ltp.h */, - C493DF671962A50900B39106 /* ltp_arm4.h */, - C493DF681962A50900B39106 /* ltp_bfin.h */, - C493DF691962A50900B39106 /* ltp_sse.h */, - C493DF6A1962A50900B39106 /* math_approx.h */, - C493DF6B1962A50900B39106 /* mdf.c */, - C493DF6C1962A50900B39106 /* misc_bfin.h */, - C493DF6D1962A50900B39106 /* modes.c */, - C493DF6E1962A50900B39106 /* modes.h */, - C493DF6F1962A50900B39106 /* modes_wb.c */, - C493DF701962A50900B39106 /* nb_celp.c */, - C493DF711962A50900B39106 /* nb_celp.h */, - C493DF721962A50900B39106 /* os_support.h */, - C493DF731962A50900B39106 /* preprocess.c */, - C493DF741962A50900B39106 /* pseudofloat.h */, - C493DF751962A50900B39106 /* quant_lsp.c */, - C493DF761962A50900B39106 /* quant_lsp.h */, - C493DF771962A50900B39106 /* quant_lsp_bfin.h */, - C493DF781962A50900B39106 /* resample.c */, - C493DF791962A50900B39106 /* resample_sse.h */, - C493DF7A1962A50900B39106 /* sb_celp.c */, - C493DF7B1962A50900B39106 /* sb_celp.h */, - C493DF7C1962A50900B39106 /* scal.c */, - C493DF7D1962A50900B39106 /* smallft.c */, - C493DF7E1962A50900B39106 /* smallft.h */, - C493DF7F1962A50900B39106 /* speex */, - C493DF8D1962A50900B39106 /* speex.c */, - C493DF8E1962A50900B39106 /* speex_callbacks.c */, - C493DF8F1962A50900B39106 /* speex_header.c */, - C493DF901962A50900B39106 /* stack_alloc.h */, - C493DF911962A50900B39106 /* stereo.c */, - C493DF921962A50900B39106 /* vbr.c */, - C493DF931962A50900B39106 /* vbr.h */, - C493DF941962A50900B39106 /* vorbis_psy.h */, - C493DF951962A50900B39106 /* vq.c */, - C493DF961962A50900B39106 /* vq.h */, - C493DF971962A50900B39106 /* vq_arm4.h */, - C493DF981962A50900B39106 /* vq_bfin.h */, - C493DF991962A50900B39106 /* vq_sse.h */, - C493DF9A1962A50900B39106 /* window.c */, - ); - path = libspeex; - sourceTree = "<group>"; - }; - C493DF7F1962A50900B39106 /* speex */ = { - isa = PBXGroup; - children = ( - C493DF801962A50900B39106 /* speex.h */, - C493DF811962A50900B39106 /* speex_bits.h */, - C493DF821962A50900B39106 /* speex_buffer.h */, - C493DF831962A50900B39106 /* speex_callbacks.h */, - C493DF841962A50900B39106 /* speex_config_types.h */, - C493DF851962A50900B39106 /* speex_config_types.h.in */, - C493DF861962A50900B39106 /* speex_echo.h */, - C493DF871962A50900B39106 /* speex_header.h */, - C493DF881962A50900B39106 /* speex_jitter.h */, - C493DF891962A50900B39106 /* speex_preprocess.h */, - C493DF8A1962A50900B39106 /* speex_resampler.h */, - C493DF8B1962A50900B39106 /* speex_stereo.h */, - C493DF8C1962A50900B39106 /* speex_types.h */, - ); - path = speex; - sourceTree = "<group>"; - }; - C493DF9B1962A50900B39106 /* manager */ = { - isa = PBXGroup; - children = ( - C493DF9C1962A50900B39106 /* AQRecorder.h */, - C493DF9D1962A50900B39106 /* AQRecorder.mm */, - C493DF9E1962A50900B39106 /* Codec */, - C493DFA21962A50900B39106 /* Decapsulator.h */, - C493DFA31962A50900B39106 /* Decapsulator.m */, - C493DFA41962A50900B39106 /* Encapsulator.h */, - C493DFA51962A50900B39106 /* Encapsulator.m */, - C493DFA61962A50900B39106 /* PlayerManager.h */, - C493DFA71962A50900B39106 /* PlayerManager.m */, - C493DFA81962A50900B39106 /* PublicUtility */, - C493DFB01962A50900B39106 /* RawAudioDataPlayer.h */, - C493DFB11962A50900B39106 /* RawAudioDataPlayer.m */, - C493DFB21962A50900B39106 /* RecorderManager.h */, - C493DFB31962A50900B39106 /* RecorderManager.mm */, - ); - path = manager; - sourceTree = "<group>"; - }; - C493DF9E1962A50900B39106 /* Codec */ = { - isa = PBXGroup; - children = ( - C493DF9F1962A50900B39106 /* SpeexAllHeaders.h */, - C493DFA01962A50900B39106 /* SpeexCodec.h */, - C493DFA11962A50900B39106 /* SpeexCodec.m */, - ); - path = Codec; - sourceTree = "<group>"; - }; - C493DFA81962A50900B39106 /* PublicUtility */ = { - isa = PBXGroup; - children = ( - C493DFA91962A50900B39106 /* CADebugMacros.cpp */, - C493DFAA1962A50900B39106 /* CADebugMacros.h */, - C493DFAB1962A50900B39106 /* CAMath.h */, - C493DFAC1962A50900B39106 /* CAStreamBasicDescription.cpp */, - C493DFAD1962A50900B39106 /* CAStreamBasicDescription.h */, - C493DFAE1962A50900B39106 /* CAXException.cpp */, - C493DFAF1962A50900B39106 /* CAXException.h */, - ); - path = PublicUtility; - sourceTree = "<group>"; - }; - C4EBA72B192F279100B72723 = { - isa = PBXGroup; - children = ( - 4CE2F7C519B0242000415778 /* resources */, - C493E0B31962A62100B39106 /* TeamTalk-Prefix.pch */, - C493E0AA1962A51900B39106 /* DDAppDelegate.h */, - C493E0AB1962A51900B39106 /* DDAppDelegate.m */, - 4CF7D50F198A11E700F0272B /* RuntimeStatus.h */, - 4CF7D510198A11E800F0272B /* RuntimeStatus.m */, - C493E0AF1962A54900B39106 /* TeamTalk-Info.plist */, - C493E0B11962A54F00B39106 /* main.m */, - C493DDCA1962A50900B39106 /* TeamTalk */, - C4EBA756192F279100B72723 /* IOSDuoduoTests */, - 4CB8F6BF19A6D97D00C4C27D /* IOSDuoduo Tests */, - C4EBA736192F279100B72723 /* Frameworks */, - 4C1367ED194AF9440094E87D /* New Group */, - 45A51128555C4595B33CE39C /* Pods.xcconfig */, - ); - sourceTree = "<group>"; - }; - C4EBA735192F279100B72723 /* Products */ = { - isa = PBXGroup; - children = ( - C4EBA734192F279100B72723 /* TeamTalk.app */, - C4EBA74F192F279100B72723 /* TeamTalkTests.xctest */, - ); - name = Products; - sourceTree = "<group>"; - }; - C4EBA736192F279100B72723 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4C88A0C419D50FFA0071DA9C /* libz.dylib */, - C46061D7194E9D9300FF3966 /* MobileCoreServices.framework */, - C46061D5194E9D8A00FF3966 /* SystemConfiguration.framework */, - C4AFD884193D7B580054ECFD /* AudioToolbox.framework */, - C4AFD882193D7B490054ECFD /* CoreAudio.framework */, - C4AFD7D5193D67350054ECFD /* AVFoundation.framework */, - C4EBA737192F279100B72723 /* Foundation.framework */, - C4EBA739192F279100B72723 /* CoreGraphics.framework */, - C4EBA73B192F279100B72723 /* UIKit.framework */, - C4EBA750192F279100B72723 /* XCTest.framework */, - 3EFE09922227481999813B37 /* libPods.a */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - C4EBA756192F279100B72723 /* IOSDuoduoTests */ = { - isa = PBXGroup; - children = ( - C4EBA75C192F279100B72723 /* IOSDuoduoTests.m */, - C4EBA757192F279100B72723 /* Supporting Files */, - ); - path = IOSDuoduoTests; - sourceTree = "<group>"; - }; - C4EBA757192F279100B72723 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C4EBA758192F279100B72723 /* TeamTalkTests-Info.plist */, - C4EBA759192F279100B72723 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C4EBA733192F279100B72723 /* TeamTalk */ = { - isa = PBXNativeTarget; - buildConfigurationList = C4EBA760192F279100B72723 /* Build configuration list for PBXNativeTarget "TeamTalk" */; - buildPhases = ( - C4EBA730192F279100B72723 /* Sources */, - C4EBA731192F279100B72723 /* Frameworks */, - C4EBA732192F279100B72723 /* Resources */, - 8EC339B25AFD447EA0F7C26C /* Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TeamTalk; - productName = IOSDuoduo; - productReference = C4EBA734192F279100B72723 /* TeamTalk.app */; - productType = "com.apple.product-type.application"; - }; - C4EBA74E192F279100B72723 /* TeamTalkTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = C4EBA763192F279100B72723 /* Build configuration list for PBXNativeTarget "TeamTalkTests" */; - buildPhases = ( - C4EBA74B192F279100B72723 /* Sources */, - C4EBA74C192F279100B72723 /* Frameworks */, - C4EBA74D192F279100B72723 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C4EBA755192F279100B72723 /* PBXTargetDependency */, - ); - name = TeamTalkTests; - productName = IOSDuoduoTests; - productReference = C4EBA74F192F279100B72723 /* TeamTalkTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C4EBA72C192F279100B72723 /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = ""; - LastUpgradeCheck = 0600; - ORGANIZATIONNAME = dujia; - TargetAttributes = { - C4EBA733192F279100B72723 = { - DevelopmentTeam = 6U33YVLGCF; - }; - C4EBA74E192F279100B72723 = { - TestTargetID = C4EBA733192F279100B72723; - }; - }; - }; - buildConfigurationList = C4EBA72F192F279100B72723 /* Build configuration list for PBXProject "TeamTalk" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C4EBA72B192F279100B72723; - productRefGroup = C4EBA735192F279100B72723 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - C4EBA733192F279100B72723 /* TeamTalk */, - C4EBA74E192F279100B72723 /* TeamTalkTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - C4EBA732192F279100B72723 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4C891F8D19B04C990006E3DF /* add.png in Resources */, - 4C891F8E19B04C9A0006E3DF /* add@2x.png in Resources */, - 4CA82ADA19D29FAD00F20D01 /* star@2x.png in Resources */, - 4C891F8F19B04C9A0006E3DF /* chat.png in Resources */, - 4C891F9019B04C9A0006E3DF /* chat@2x.png in Resources */, - 4C891F9119B04C9A0006E3DF /* contact_selected.png in Resources */, - 4C891F9219B04C9A0006E3DF /* contact_selected@2x.png in Resources */, - 4C891F9319B04C9A0006E3DF /* contact.png in Resources */, - 4C891F9419B04C9A0006E3DF /* contact@2x.png in Resources */, - 4C891F9519B04C9A0006E3DF /* conversation_selected.png in Resources */, - 4C891F9619B04C9A0006E3DF /* conversation_selected@2x.png in Resources */, - 4C891F9719B04C9A0006E3DF /* conversation.png in Resources */, - 4CA82AD919D29FAD00F20D01 /* star.png in Resources */, - 4C891F9819B04C9A0006E3DF /* conversation@2x.png in Resources */, - 4C891F9919B04C9A0006E3DF /* dd_album.png in Resources */, - 4C891F9A19B04C9A0006E3DF /* dd_album@2x.png in Resources */, - 4C891F9B19B04C9A0006E3DF /* dd_cancel_send_record.png in Resources */, - 4C891F9C19B04C9A0006E3DF /* dd_cancel_send_record@2x.png in Resources */, - 4C891F9D19B04C9A0006E3DF /* dd_emoji_delete.png in Resources */, - 4C891F9E19B04C9A0006E3DF /* dd_emoji_delete@2x.png in Resources */, - 4C891F9F19B04C9A0006E3DF /* dd_emotion.png in Resources */, - 4C891FA019B04C9A0006E3DF /* dd_emotion@2x.png in Resources */, - 4C21748F19C16B56006F4BFC /* edit.png in Resources */, - 4C891FA119B04C9A0006E3DF /* dd_has_unread_message.png in Resources */, - 4C891FA219B04C9A0006E3DF /* dd_has_unread_message@2x.png in Resources */, - 4C891FA319B04C9A0006E3DF /* dd_image_send.png in Resources */, - 4C891FA419B04C9A0006E3DF /* dd_image_send@2x.png in Resources */, - 4C891FA519B04C9A0006E3DF /* dd_input_normal.png in Resources */, - 4C891FA619B04C9A0006E3DF /* dd_input_normal@2x.png in Resources */, - 4C891FA719B04C9A0006E3DF /* dd_left_voice_one.png in Resources */, - 4C891FA819B04C9A0006E3DF /* dd_left_voice_one@2x.png in Resources */, - 4C891FA919B04C9A0006E3DF /* dd_left_voice_three.png in Resources */, - 4C891FAA19B04C9A0006E3DF /* dd_left_voice_three@2x.png in Resources */, - 4C891FAB19B04C9A0006E3DF /* dd_left_voice_two.png in Resources */, - 4C891FAC19B04C9A0006E3DF /* dd_left_voice_two@2x.png in Resources */, - 4C891FAD19B04C9A0006E3DF /* dd_photo_back.png in Resources */, - 4C891FAE19B04C9A0006E3DF /* dd_photo_back@2x.png in Resources */, - 4C891FAF19B04C9A0006E3DF /* dd_press_to_say_normal.png in Resources */, - 4C891FB019B04C9A0006E3DF /* dd_press_to_say_normal@2x.png in Resources */, - 4C891FB119B04C9A0006E3DF /* dd_preview_select.png in Resources */, - 4C891FB219B04C9A0006E3DF /* dd_preview_select@2x.png in Resources */, - 4C891FB319B04C9A0006E3DF /* dd_preview_unselected.png in Resources */, - 4C891FB419B04C9A0006E3DF /* dd_recent_contacts.png in Resources */, - 4C891FB519B04C9A0006E3DF /* dd_recent_contacts@2x.png in Resources */, - 4C891FB619B04C9A0006E3DF /* dd_record_normal.png in Resources */, - 4C891FB719B04C9A0006E3DF /* dd_record_normal@2x.png in Resources */, - 4C891FB819B04C9A0006E3DF /* dd_record_release_end.png in Resources */, - 4C891FB919B04C9A0006E3DF /* dd_record_release_end@2x.png in Resources */, - 4C891FBA19B04C9A0006E3DF /* dd_record_too_short.png in Resources */, - 4C891FBB19B04C9A0006E3DF /* dd_record_too_short@2x.png in Resources */, - 4C891FBC19B04C9A0006E3DF /* dd_recording.png in Resources */, - 4C891FBD19B04C9A0006E3DF /* dd_recording@2x.png in Resources */, - 4C891FBE19B04C9A0006E3DF /* dd_right_voice_one.png in Resources */, - 4C891FBF19B04C9A0006E3DF /* dd_right_voice_one@2x.png in Resources */, - 4C891FC019B04C9A0006E3DF /* dd_right_voice_three.png in Resources */, - 4C891FC119B04C9A0006E3DF /* dd_right_voice_three@2x.png in Resources */, - 4C891FC219B04C9A0006E3DF /* dd_right_voice_two.png in Resources */, - 4C891FC319B04C9A0006E3DF /* dd_right_voice_two@2x.png in Resources */, - 4C891FC419B04C9A0006E3DF /* dd_selected_photo.png in Resources */, - 4C98355C19C070BD00DE8874 /* unselected@2x.png in Resources */, - 4C891FC519B04C9A0006E3DF /* dd_selected_photo@2x.png in Resources */, - 4C891FC619B04C9A0006E3DF /* dd_send_failed.png in Resources */, - 4C891FC719B04C9A0006E3DF /* dd_send_failed@2x.png in Resources */, - 4C891FC819B04C9A0006E3DF /* dd_take-photo.png in Resources */, - 4C891FC919B04C9A0006E3DF /* dd_take-photo@2x.png in Resources */, - 4C891FCA19B04C9A0006E3DF /* dd_utility.png in Resources */, - 4C891FCB19B04C9A0006E3DF /* dd_utility@2x.png in Resources */, - 4C21749319C195CF006F4BFC /* x.png in Resources */, - 4C891FCC19B04C9A0006E3DF /* dd_volumn.png in Resources */, - 4CB23CAC19B457AD004FCF10 /* EditGroupViewController.xib in Resources */, - 4C62464219F10C980015440D /* loginlogo.png in Resources */, - 4C891FCD19B04C9A0006E3DF /* dd_volumn@2x.png in Resources */, - 4C891FCE19B04C9A0006E3DF /* delete.png in Resources */, - 4C891FCF19B04C9A0006E3DF /* delete@2x.png in Resources */, - 4C891FD019B04C9A0006E3DF /* email.png in Resources */, - 4C98355B19C070BD00DE8874 /* unselected.png in Resources */, - 4C600BAF1A090B22000252E9 /* group_default@2x.png in Resources */, - 4C891FD119B04C9A0006E3DF /* email@2x.png in Resources */, - 4C891FD219B04C9A0006E3DF /* jiantou.png in Resources */, - 4C891FD319B04C9A0006E3DF /* jiantou@2x.png in Resources */, - 4C891FD419B04C9A0006E3DF /* left.png in Resources */, - 4C891FD519B04C9A0006E3DF /* left@2x.png in Resources */, - 4C891FD619B04C9A0006E3DF /* loginlogo.jpg in Resources */, - 4C891FD719B04C9A0006E3DF /* msg.caf in Resources */, - 4C891FD819B04C9A0006E3DF /* myprofile_selected.png in Resources */, - 4C510AD21A09D928002ECBAB /* launchimage.png in Resources */, - 4C891FD919B04C9A0006E3DF /* myprofile_selected@2x.png in Resources */, - 4C891FDA19B04C9A0006E3DF /* myprofile.png in Resources */, - 4C891FDB19B04C9A0006E3DF /* myprofile@2x.png in Resources */, - 4C600BAE1A090B22000252E9 /* group_default.png in Resources */, - 4C891FDC19B04C9A0006E3DF /* password.png in Resources */, - 4C891FDD19B04C9A0006E3DF /* password@2x.png in Resources */, - 4C891FDE19B04C9A0006E3DF /* right.png in Resources */, - 4C891FDF19B04C9A0006E3DF /* right@2x.png in Resources */, - 4C891FE019B04C9A0006E3DF /* setting.png in Resources */, - 4C891FE119B04C9A0006E3DF /* setting@2x.png in Resources */, - 4C891FE219B04C9A0006E3DF /* tel.png in Resources */, - 4C891FE519B04C9A0006E3DF /* username.png in Resources */, - 4C98355819C070A200DE8874 /* select@2x.png in Resources */, - 4C891FE619B04C9A0006E3DF /* username@2x.png in Resources */, - C493E0981962A50A00B39106 /* speex_config_types.h.in in Resources */, - 4C98355719C070A200DE8874 /* select.png in Resources */, - 4C39B8101974F388001B4AEF /* MyProfileViewControll.xib in Resources */, - C493E0601962A50A00B39106 /* ChattingMainViewController.xib in Resources */, - C4254B5B1962B29600B05CAF /* LoginViewController.xib in Resources */, - 4C7E4A64198B5EC300B96751 /* ClearImageCacheViewController.xib in Resources */, - 4C39B7FE1974D6E4001B4AEF /* Images.xcassets in Resources */, - 4C39B8081974EF18001B4AEF /* MainViewControll.xib in Resources */, - 4C837F40197F951600C3D758 /* DDChattingEditViewController.xib in Resources */, - 4C837F3B197F94F400C3D758 /* PublicProfileViewControll.xib in Resources */, - C493E0631962A50A00B39106 /* CommodityCell.xib in Resources */, - 4CB3D92219F4FA7F00DC9B9D /* SearchContentViewController.xib in Resources */, - 4C21749419C195CF006F4BFC /* x@2x.png in Resources */, - C493E0721962A50A00B39106 /* RecentUsersViewController.xib in Resources */, - C493E0701962A50A00B39106 /* RecentUserCell.xib in Resources */, - 4CEFE75119A31D0600156D26 /* SettingViewController.xib in Resources */, - 4C21749019C16B56006F4BFC /* edit@2x.png in Resources */, - C493E0511962A50A00B39106 /* DDChatTextCell.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C4EBA74D192F279100B72723 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C4EBA75B192F279100B72723 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 8EC339B25AFD447EA0F7C26C /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C4EBA730192F279100B72723 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4CCE6BB61A11D6F700CD0A24 /* DDMsgServer.h in Sources */, - 4CD1566A1998A36300B11233 /* DDGroupInfoAPI.m in Sources */, - C493E0221962A50A00B39106 /* DDUnrequestSuperAPI.m in Sources */, - 4C837F49197F95A400C3D758 /* DDGroupEntity.m in Sources */, - C493E0781962A50A00B39106 /* cb_search.c in Sources */, - C493E08C1962A50A00B39106 /* lsp_tables_nb.c in Sources */, - C493E0381962A50A00B39106 /* AQGridViewUpdateInfo.m in Sources */, - C493DFB91962A50900B39106 /* NSIndexSet+AQIndexesOutsideSet.m in Sources */, - C493E0161962A50A00B39106 /* std.m in Sources */, - 4CB3D91D19F4B48200DC9B9D /* LogoutAPI.m in Sources */, - C493E02B1962A50A00B39106 /* DDSendMessageReadACKAPI.m in Sources */, - C493E0641962A50A00B39106 /* MenuImageView.m in Sources */, - 4C837F43197F952800C3D758 /* ChattingEditModule.m in Sources */, - C493DFC91962A50900B39106 /* MD5.m in Sources */, - C493E0A61962A50A00B39106 /* CAStreamBasicDescription.cpp in Sources */, - C493E09C1962A50A00B39106 /* stereo.c in Sources */, - C493E05C1962A50A00B39106 /* UtililyItemCell.m in Sources */, - C493E01C1962A50A00B39106 /* DDDataOutputStream.m in Sources */, - 4CB3D91A19F4A22800DC9B9D /* ShieldGroupMessageAPI.m in Sources */, - 4CD156691998A36300B11233 /* DDFixedGroupAPI.m in Sources */, - C493E05B1962A50A00B39106 /* EmotionsViewController.m in Sources */, - C493E07C1962A50A00B39106 /* exc_5_256_table.c in Sources */, - C493E07B1962A50A00B39106 /* exc_20_32_table.c in Sources */, - C493E0A41962A50A00B39106 /* PlayerManager.m in Sources */, - C493E0521962A50A00B39106 /* DDChatVoiceCell.m in Sources */, - C493E0231962A50A00B39106 /* NSStream+NSStreamAddition.m in Sources */, - C493E0861962A50A00B39106 /* high_lsp_tables.c in Sources */, - 4CE95F3119AAD0E8000CD0C6 /* ContactAvatarTools.m in Sources */, - C493E0571962A50A00B39106 /* ChatUtilityItem.m in Sources */, - C493DFBE1962A50900B39106 /* NSString+JSMessagesView.m in Sources */, - 4C98355419C06F6D00DE8874 /* EditContactsCell.m in Sources */, - C493DFD41962A50900B39106 /* DDTokenManager.m in Sources */, - C493E08F1962A50A00B39106 /* modes.c in Sources */, - C493E0771962A50A00B39106 /* buffer.c in Sources */, - C493DFC31962A50900B39106 /* UIImage+JSMessagesView.m in Sources */, - C493E05A1962A50A00B39106 /* EmotionsModule.m in Sources */, - C493E0671962A50A00B39106 /* AlbumDetailsBottomBar.m in Sources */, - C493E0A11962A50A00B39106 /* SpeexCodec.m in Sources */, - C493E0391962A50A00B39106 /* AQGridViewUpdateItem.m in Sources */, - 4C31EB5619CAB471004A3B2C /* GetGroupInfoAPi.m in Sources */, - C493E0211962A50A00B39106 /* DDTcpProtocolHeader.m in Sources */, - C493E0281962A50A00B39106 /* DDGetUnreadMessageUsersAPI.m in Sources */, - C493E0251962A50A00B39106 /* DDHeartbeatAPI.m in Sources */, - C493E0961962A50A00B39106 /* scal.c in Sources */, - C493E0741962A50A00B39106 /* bitwise.c in Sources */, - C493E0291962A50A00B39106 /* DDGetUserUnreadMessagesAPI.m in Sources */, - C493E0891962A50A00B39106 /* kiss_fftr.c in Sources */, - C493E07A1962A50A00B39106 /* exc_10_32_table.c in Sources */, - C493E01A1962A50A00B39106 /* DDAPISchedule.m in Sources */, - 4C837F38197F94F400C3D758 /* ContactsModule.m in Sources */, - C493E0791962A50A00B39106 /* exc_10_16_table.c in Sources */, - C493E0561962A50A00B39106 /* AlbumViewController.m in Sources */, - 4CB23CAF19B4590D004FCF10 /* EditGroupViewCell.m in Sources */, - C493E0311962A50A00B39106 /* ReceiveKickoffAPI.m in Sources */, - C493E0AC1962A51900B39106 /* DDAppDelegate.m in Sources */, - 4C39B80F1974F388001B4AEF /* MyProfileViewControll.m in Sources */, - C493E0551962A50A00B39106 /* DDAlbumDetailsViewControll.m in Sources */, - C493E0A01962A50A00B39106 /* AQRecorder.mm in Sources */, - 4CB8F6D319A7171800C4C27D /* DDContactsCell.m in Sources */, - C4254B5A1962B29600B05CAF /* LoginViewController.m in Sources */, - C493E08E1962A50A00B39106 /* mdf.c in Sources */, - C493DFD31962A50900B39106 /* DDTcpServer.m in Sources */, - 4CD1566C1998A36300B11233 /* DDGroupsUnreadMessageAPI.m in Sources */, - C493E03B1962A50A00B39106 /* MWGridCell.m in Sources */, - C493E0901962A50A00B39106 /* modes_wb.c in Sources */, - C493E04E1962A50A00B39106 /* DDChatImageCell.m in Sources */, - C493DFB71962A50900B39106 /* NSDictionary+JSON.m in Sources */, - C493DFBA1962A50900B39106 /* NSIndexSet+AQIsSetContiguous.m in Sources */, - C493E0261962A50A00B39106 /* DDLoginAPI.m in Sources */, - C493DFCA1962A50900B39106 /* DDDatabaseUtil.m in Sources */, - C493DFC51962A50900B39106 /* UIView+DDAddition.m in Sources */, - C493E0201962A50A00B39106 /* DDTcpClientManager.m in Sources */, - C493E0B21962A54F00B39106 /* main.m in Sources */, - C493E0181962A50A00B39106 /* DDSundriesCenter.m in Sources */, - C493E0271962A50A00B39106 /* DDMsgServerIPAPI.m in Sources */, - C493E0151962A50A00B39106 /* DDClientStateMaintenanceManager.m in Sources */, - C493E0411962A50A00B39106 /* MWZoomingScrollView.m in Sources */, - C493E07D1962A50A00B39106 /* exc_5_64_table.c in Sources */, - C493E0A81962A50A00B39106 /* RawAudioDataPlayer.m in Sources */, - C493DFC71962A50900B39106 /* DDSessionEntity.m in Sources */, - 4CB3D92119F4FA7F00DC9B9D /* SearchContentViewController.m in Sources */, - C493E03E1962A50A00B39106 /* MWPhotoBrowser.m in Sources */, - C493E0171962A50A00B39106 /* DDNotificationHelp.m in Sources */, - C493E0691962A50A00B39106 /* LoginModule.m in Sources */, - 4CA50CD019A47C690032DE24 /* DDSearch.m in Sources */, - C493E0991962A50A00B39106 /* speex.c in Sources */, - 4CD1566B1998A36300B11233 /* DDGroupMsgReadACKAPI.m in Sources */, - 4C510AD71A0A2DFC002ECBAB /* NSString+Additions.m in Sources */, - C493E0681962A50A00B39106 /* ImagesPreviewViewController.m in Sources */, - C493DFCC1962A50900B39106 /* DDAFClient.m in Sources */, - C493DFC41962A50900B39106 /* UIView+AnimationOptionsForCurve.m in Sources */, - C493E0931962A50A00B39106 /* quant_lsp.c in Sources */, - C493E0911962A50A00B39106 /* nb_celp.c in Sources */, - 4CD1566F1998A36300B11233 /* DDUnreadMessageGroupAPI.m in Sources */, - C493E02D1962A50A00B39106 /* DDSendVoiceMessageAPI.m in Sources */, - C493E0941962A50A00B39106 /* resample.c in Sources */, - C493DFC61962A50900B39106 /* DDMessageEntity.m in Sources */, - C493E08A1962A50A00B39106 /* lpc.c in Sources */, - C493E0341962A50A00B39106 /* AQGridViewAnimatorItem.m in Sources */, - C493E09E1962A50A00B39106 /* vq.c in Sources */, - C493DFC81962A50900B39106 /* DDUserEntity.m in Sources */, - C493E0831962A50A00B39106 /* gain_table_lbr.c in Sources */, - 4C837F46197F954500C3D758 /* DDCreateGroupAPI.m in Sources */, - C493DFD61962A50900B39106 /* DDMessageSendManager.m in Sources */, - C493E0661962A50A00B39106 /* TouchDownGestureRecognizer.m in Sources */, - C493E07F1962A50A00B39106 /* fftwrap.c in Sources */, - C493E0851962A50A00B39106 /* hexc_table.c in Sources */, - C493E0811962A50A00B39106 /* filters.c in Sources */, - C493E0921962A50A00B39106 /* preprocess.c in Sources */, - 4C837EE9197F949300C3D758 /* DDAllUserAPI.m in Sources */, - C493E05D1962A50A00B39106 /* AnalysisImage.m in Sources */, - C493DFBD1962A50900B39106 /* NSString+DDPath.m in Sources */, - C493E09B1962A50A00B39106 /* speex_header.c in Sources */, - 4C5CA06019C13341007CE792 /* DDDeleteMemberFromGroupAPI.m in Sources */, - C493DFD71962A50900B39106 /* DDUserModule.m in Sources */, - 4C3F74951999EAC100510159 /* DDRecentGroupAPI.m in Sources */, - C493E0611962A50A00B39106 /* ChattingModule.m in Sources */, - 4C21749719C197F3006F4BFC /* DDUserDetailInfoAPI.m in Sources */, - C493E08B1962A50A00B39106 /* lsp.c in Sources */, - C493E01B1962A50A00B39106 /* DDDataInputStream.m in Sources */, - 4C7E4A63198B5EC300B96751 /* ClearImageCacheViewController.m in Sources */, - C493E0751962A50A00B39106 /* framing.c in Sources */, - C493E0711962A50A00B39106 /* RecentUsersViewController.m in Sources */, - C493E0331962A50A00B39106 /* AQGridView.m in Sources */, - C493E02E1962A50A00B39106 /* DDAllotServiceAPI.m in Sources */, - 4CA50CC919A435E20032DE24 /* DDPersonEditCollectionCell.m in Sources */, - C493E0881962A50A00B39106 /* kiss_fft.c in Sources */, - 4CF7D530198A268500F0272B /* JSDismissiveTextView.m in Sources */, - C493E08D1962A50A00B39106 /* ltp.c in Sources */, - 4CF7D531198A268500F0272B /* JSMessageInputView.m in Sources */, - C493DFB61962A50900B39106 /* NSDate+DDAddition.m in Sources */, - 4C837F3F197F951600C3D758 /* DDChattingEditViewController.m in Sources */, - 4C7E4A67198B634F00B96751 /* ClearImageCell.m in Sources */, - 4C5E374419D408CE00D1042B /* GroupAvatarImage.m in Sources */, - C493E0801962A50A00B39106 /* filterbank.c in Sources */, - C493E0A91962A50A00B39106 /* RecorderManager.mm in Sources */, - 4C70BA47199B64710012DA5E /* DDReceiveFixedGroupMemberChanged.m in Sources */, - C493E0A71962A50A00B39106 /* CAXException.cpp in Sources */, - 4CB58EAC1991FF98006B24D3 /* DDepartment.m in Sources */, - C493E0401962A50A00B39106 /* MWTapDetectingView.m in Sources */, - C493E0361962A50A00B39106 /* AQGridViewController.m in Sources */, - C493E03A1962A50A00B39106 /* MWCaptionView.m in Sources */, - C493E0841962A50A00B39106 /* hexc_10_32_table.c in Sources */, - 4CF7D511198A11E800F0272B /* RuntimeStatus.m in Sources */, - C493E0971962A50A00B39106 /* smallft.c in Sources */, - C493E0A31962A50A00B39106 /* Encapsulator.m in Sources */, - 4CF7D532198A268500F0272B /* JSMessageTextView.m in Sources */, - C493DFC11962A50900B39106 /* UIColor+JSMessagesView.m in Sources */, - 4C5D70571990C1AE009AF959 /* DDDepartmentAPI.m in Sources */, - C493E0321962A50A00B39106 /* DDReceiveMessageAPI.m in Sources */, - 4CD1566D1998A36300B11233 /* DDReceiveGroupAddMemberAPI.m in Sources */, - C493E04D1962A50A00B39106 /* DDChatBaseCell.m in Sources */, - C493E0A51962A50A00B39106 /* CADebugMacros.cpp in Sources */, - C493E03F1962A50A00B39106 /* MWTapDetectingImageView.m in Sources */, - C493E0951962A50A00B39106 /* sb_celp.c in Sources */, - C493E02C1962A50A00B39106 /* DDSendPhotoMessageAPI.m in Sources */, - C493E0141962A50A00B39106 /* DDClientState.m in Sources */, - C493DFD21962A50900B39106 /* DDMsgServer.m in Sources */, - 4C39B8071974EF18001B4AEF /* MainViewControll.m in Sources */, - C493E0761962A50A00B39106 /* bits.c in Sources */, - C493E0301962A50A00B39106 /* RecentConactsAPI.m in Sources */, - C493E0651962A50A00B39106 /* RecordingView.m in Sources */, - C493E02A1962A50A00B39106 /* DDSendMessageAPI.m in Sources */, - 4CD156781998B70D00B11233 /* DDGroupModule.m in Sources */, - 4C837F3A197F94F400C3D758 /* PublicProfileViewControll.m in Sources */, - C493E0581962A50A00B39106 /* ChatUtilityViewController.m in Sources */, - C493E01E1962A50A00B39106 /* DDSendBuffer.m in Sources */, - 4C4657BD19EF5DC300334DD2 /* UnAckMessageManager.m in Sources */, - 4CB23CAB19B457AD004FCF10 /* EditGroupViewController.m in Sources */, - 4CA50CCD19A47B9A0032DE24 /* SpellLibrary.m in Sources */, - 4C92734819EB9C8200F6C370 /* NetwrokStatusNotifyUI.m in Sources */, - C493E0501962A50A00B39106 /* DDChatTextCell.m in Sources */, - C493DFCF1962A50900B39106 /* DDHttpServer.m in Sources */, - C493DFD11962A50900B39106 /* DDLoginServer.m in Sources */, - C493E09D1962A50A00B39106 /* vbr.c in Sources */, - C493E06F1962A50A00B39106 /* RecentUserCell.m in Sources */, - 4C837F4C197F95FF00C3D758 /* ContactsViewController.m in Sources */, - C493E03C1962A50A00B39106 /* MWGridViewController.m in Sources */, - C493E0821962A50A00B39106 /* gain_table.c in Sources */, - 4CD156681998A36300B11233 /* DDAddMemberToGroupAPI.m in Sources */, - C493DFC01962A50900B39106 /* UIColor+AQGridView.m in Sources */, - C493E0371962A50A00B39106 /* AQGridViewData.m in Sources */, - C493E09F1962A50A00B39106 /* window.c in Sources */, - C493E01F1962A50A00B39106 /* DDSuperAPI.m in Sources */, - C493E05F1962A50A00B39106 /* ChattingMainViewController.m in Sources */, - C493E03D1962A50A00B39106 /* MWPhoto.m in Sources */, - C493E02F1962A50A00B39106 /* DDGetUserInfoAPI.m in Sources */, - 4CD995F5199F420700025C9C /* DDBaseEntity.m in Sources */, - 4C1E441919961889005CB2DB /* DDReceiveMessageACKAPI.m in Sources */, - C493E06C1962A50A00B39106 /* Photo.m in Sources */, - C493E06D1962A50A00B39106 /* PhotosCache.m in Sources */, - C493E0191962A50A00B39106 /* DataOutputStream+Addition.m in Sources */, - C493E0731962A50A00B39106 /* RecentUserVCModule.m in Sources */, - C493E01D1962A50A00B39106 /* DDReachability.m in Sources */, - 4CEFE75019A31D0600156D26 /* SettingViewController.m in Sources */, - C493E0621962A50A00B39106 /* CommodityCell.m in Sources */, - 4CB6AA0D198F7F550075BDB4 /* ChatEditTableViewCell.m in Sources */, - C493DFB81962A50900B39106 /* NSDictionary+Safe.m in Sources */, - C493E0A21962A50A00B39106 /* Decapsulator.m in Sources */, - C493E0591962A50A00B39106 /* EmojiFaceView.m in Sources */, - C493E09A1962A50A00B39106 /* speex_callbacks.c in Sources */, - C493E07E1962A50A00B39106 /* exc_8_128_table.c in Sources */, - C493DFBF1962A50900B39106 /* UIButton+JSMessagesView.m in Sources */, - C493E0351962A50A00B39106 /* AQGridViewCell.m in Sources */, - C493E0871962A50A00B39106 /* jitter.c in Sources */, - C493E0541962A50A00B39106 /* DDPromptCell.m in Sources */, - C493DFD51962A50900B39106 /* DDMessageModule.m in Sources */, - C493E06E1962A50A00B39106 /* ImageGridViewCell.m in Sources */, - C493E04F1962A50A00B39106 /* DDChatImagePreviewViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C4EBA74B192F279100B72723 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C4EBA75D192F279100B72723 /* IOSDuoduoTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - C4EBA755192F279100B72723 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C4EBA733192F279100B72723 /* TeamTalk */; - targetProxy = C4EBA754192F279100B72723 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 4CB8F6C219A6D97D00C4C27D /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 4CB8F6C319A6D97D00C4C27D /* en */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; - C4EBA759192F279100B72723 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C4EBA75A192F279100B72723 /* en */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C4EBA75E192F279100B72723 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution: MOGU Oversea Limited"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: MOGU Oversea Limited"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE = "939e5079-ea15-4a45-a8a3-56fc6bba7cb4"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - C4EBA75F192F279100B72723 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution: MOGU Oversea Limited"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: MOGU Oversea Limited"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - PROVISIONING_PROFILE = "939e5079-ea15-4a45-a8a3-56fc6bba7cb4"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C4EBA761192F279100B72723 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 45A51128555C4595B33CE39C /* Pods.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "LaunchImage-2"; - CODE_SIGN_IDENTITY = "iPhone Distribution: MOGU Oversea Limited"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: MOGU Oversea Limited"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "IOSDuoduo/TeamTalk-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "COCOAPODS=1", - "DEBUG=1", - ); - INFOPLIST_FILE = "TeamTalk-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - PRODUCT_NAME = TeamTalk; - PROVISIONING_PROFILE = "a6258601-0cb4-4b2b-8394-fe7171ff0677"; - TARGETED_DEVICE_FAMILY = 1; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - C4EBA762192F279100B72723 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 45A51128555C4595B33CE39C /* Pods.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "LaunchImage-2"; - CODE_SIGN_IDENTITY = "iPhone Distribution: MOGU Oversea Limited"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: MOGU Oversea Limited"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "IOSDuoduo/TeamTalk-Prefix.pch"; - INFOPLIST_FILE = "TeamTalk-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - PRODUCT_NAME = TeamTalk; - PROVISIONING_PROFILE = "a6258601-0cb4-4b2b-8394-fe7171ff0677"; - TARGETED_DEVICE_FAMILY = 1; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - C4EBA764192F279100B72723 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TeamTalk.app/TeamTalk"; - CODE_SIGN_IDENTITY = "iPhone Developer: zhenjia zhang (E2QZ25Z4VF)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "IOSDuoduo/TeamTalk-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "IOSDuoduoTests/TeamTalkTests-Info.plist"; - PRODUCT_NAME = TeamTalkTests; - PROVISIONING_PROFILE = "942789d2-931c-4578-af08-eff374f3920f"; - TEST_HOST = "Build/Products/Debug-iphoneos/TeamTalk.app/TeamTalk"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - C4EBA765192F279100B72723 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/IOSDuoduo.app/IOSDuoduo"; - CODE_SIGN_IDENTITY = "iPhone Developer: zhenjia zhang (E2QZ25Z4VF)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "IOSDuoduo/TeamTalk-Prefix.pch"; - INFOPLIST_FILE = "IOSDuoduoTests/TeamTalkTests-Info.plist"; - PRODUCT_NAME = TeamTalkTests; - PROVISIONING_PROFILE = "942789d2-931c-4578-af08-eff374f3920f"; - TEST_HOST = "build/Products/Release-iphoneos/TeamTalk.app/TeamTalk"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C4EBA72F192F279100B72723 /* Build configuration list for PBXProject "TeamTalk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C4EBA75E192F279100B72723 /* Debug */, - C4EBA75F192F279100B72723 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C4EBA760192F279100B72723 /* Build configuration list for PBXNativeTarget "TeamTalk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C4EBA761192F279100B72723 /* Debug */, - C4EBA762192F279100B72723 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C4EBA763192F279100B72723 /* Build configuration list for PBXNativeTarget "TeamTalkTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C4EBA764192F279100B72723 /* Debug */, - C4EBA765192F279100B72723 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C4EBA72C192F279100B72723 /* Project object */; -} diff --git a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index fa0db0e..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:IOSDuoduo.xcodeproj"> - </FileRef> -</Workspace> diff --git a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/IOSDuoduo.xccheckout b/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/IOSDuoduo.xccheckout deleted file mode 100644 index cbf94fb..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/IOSDuoduo.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>8D9646DD-D2CD-407B-B98F-8616977516D0</string> - <key>IDESourceControlProjectName</key> - <string>IOSDuoduo</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>ssh://gitlab.mogujie.org/dongxie/ios-os-im.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>IOSDuoduo/IOSDuoduo.xcodeproj/project.xcworkspace</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>../../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>ssh://gitlab.mogujie.org/dongxie/ios-os-im.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>110</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>3EF53C7A-544D-4764-B270-E69415B922F8</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>3EF53C7A-544D-4764-B270-E69415B922F8</string> - <key>IDESourceControlWCCName</key> - <string>ios-os-im</string> - </dict> - </array> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/TeamTalk.xccheckout b/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/TeamTalk.xccheckout deleted file mode 100644 index 3370865..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcshareddata/TeamTalk.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>D21343C0-E675-4EE1-94E7-FC3C6F104689</string> - <key>IDESourceControlProjectName</key> - <string>TeamTalk</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</key> - <string>http://gitlab.mogujie.org/dongxie/teamtalk-ios.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>TeamTalk.xcodeproj</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</key> - <string>../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>http://gitlab.mogujie.org/dongxie/teamtalk-ios.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>111</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</string> - <key>IDESourceControlWCCName</key> - <string>teamtalk-ios</string> - </dict> - </array> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate b/TeamTalk/TeamTalk.xcodeproj/project.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index fb1fa5c9a7ae53e2c1186fd0dcf6a9ea1eff9566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10368 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 diff --git a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/TeamTalk.xcscheme b/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/TeamTalk.xcscheme deleted file mode 100644 index dbabc85..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/TeamTalk.xcscheme +++ /dev/null @@ -1,110 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0600" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "NO" - buildForArchiving = "NO" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA74E192F279100B72723" - BuildableName = "TeamTalkTests.xctest" - BlueprintName = "TeamTalkTests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA74E192F279100B72723" - BuildableName = "TeamTalkTests.xctest" - BlueprintName = "TeamTalkTests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </TestableReference> - </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist b/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 4f3e4bb..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Jerry.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>TeamTalk.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>0</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict> - <key>C4EBA733192F279100B72723</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>C4EBA74E192F279100B72723</key> - <dict> - <key>primary</key> - <true/> - </dict> - </dict> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduo.xcscheme b/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduo.xcscheme deleted file mode 100644 index 0f05a86..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduo.xcscheme +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "4CB8F6BA19A6D97D00C4C27D" - BuildableName = "IOSDuoduo Tests.xctest" - BlueprintName = "IOSDuoduo Tests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </TestableReference> - </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - <BuildableProductRunnable> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA733192F279100B72723" - BuildableName = "TeamTalk.app" - BlueprintName = "TeamTalk" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduoTests.xcscheme b/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduoTests.xcscheme deleted file mode 100644 index 9f373dd..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/IOSDuoduoTests.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0510" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA74E192F279100B72723" - BuildableName = "TeamTalkTests.xctest" - BlueprintName = "TeamTalkTests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <Testables> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA74E192F279100B72723" - BuildableName = "TeamTalkTests.xctest" - BlueprintName = "TeamTalkTests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </TestableReference> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "4CB8F6BA19A6D97D00C4C27D" - BuildableName = "IOSDuoduo Tests.xctest" - BlueprintName = "IOSDuoduo Tests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </TestableReference> - </Testables> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Debug" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - allowLocationSimulation = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "C4EBA74E192F279100B72723" - BuildableName = "TeamTalkTests.xctest" - BlueprintName = "TeamTalkTests" - ReferencedContainer = "container:TeamTalk.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - buildConfiguration = "Release" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist b/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 4be0b39..0000000 --- a/TeamTalk/TeamTalk.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>IOSDuoduo.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>9</integer> - </dict> - <key>IOSDuoduoTests.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>0</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict> - <key>4CB8F6BA19A6D97D00C4C27D</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>C4EBA733192F279100B72723</key> - <dict> - <key>primary</key> - <true/> - </dict> - <key>C4EBA74E192F279100B72723</key> - <dict> - <key>primary</key> - <true/> - </dict> - </dict> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcworkspace/contents.xcworkspacedata b/TeamTalk/TeamTalk.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6efd2ca..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "group:TeamTalk.xcodeproj"> - </FileRef> - <FileRef - location = "group:Pods/Pods.xcodeproj"> - </FileRef> -</Workspace> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcshareddata/IOSDuoduo.xccheckout b/TeamTalk/TeamTalk.xcworkspace/xcshareddata/IOSDuoduo.xccheckout deleted file mode 100644 index 84d3e2d..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcshareddata/IOSDuoduo.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>501691B6-E321-41E2-8696-A07C352F78D1</string> - <key>IDESourceControlProjectName</key> - <string>IOSDuoduo</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>ssh://gitlab.mogujie.org/dongxie/ios-os-im.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>IOSDuoduo/IOSDuoduo.xcworkspace</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>ssh://gitlab.mogujie.org/dongxie/ios-os-im.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>110</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>3EF53C7A-544D-4764-B270-E69415B922F8</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>3EF53C7A-544D-4764-B270-E69415B922F8</string> - <key>IDESourceControlWCCName</key> - <string>ios-os-im</string> - </dict> - </array> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcshareddata/TeamTalk.xccheckout b/TeamTalk/TeamTalk.xcworkspace/xcshareddata/TeamTalk.xccheckout deleted file mode 100644 index 1fb8a0c..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcshareddata/TeamTalk.xccheckout +++ /dev/null @@ -1,65 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>826EDA1C-4A1E-46A5-AD5B-A5BB48861DC5</string> - <key>IDESourceControlProjectName</key> - <string>TeamTalk</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>2BE1AA167DDE7FE99EAAA402E437446CCAA834E9</key> - <string>http://git.mogu.io/tt/ttiosclient.git</string> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>ssh://gitlab.mogujie.org/dongxie/ios-os-im.git</string> - <key>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</key> - <string>http://gitlab.mogujie.org/dongxie/teamtalk-ios.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>TeamTalk.xcworkspace</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>2BE1AA167DDE7FE99EAAA402E437446CCAA834E9</key> - <string>..</string> - <key>3EF53C7A-544D-4764-B270-E69415B922F8</key> - <string>../../ios-os-im</string> - <key>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</key> - <string>../../TeamTalk</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>http://git.mogu.io/tt/ttiosclient.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>111</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>2BE1AA167DDE7FE99EAAA402E437446CCAA834E9</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>2BE1AA167DDE7FE99EAAA402E437446CCAA834E9</string> - <key>IDESourceControlWCCName</key> - <string>gitlab</string> - </dict> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>3EF53C7A-544D-4764-B270-E69415B922F8</string> - <key>IDESourceControlWCCName</key> - <string>ios-os-im</string> - </dict> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>AF42C6DA9F3B77838B1BC908C0E388C0190EF50F</string> - <key>IDESourceControlWCCName</key> - <string>TeamTalk</string> - </dict> - </array> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/UserInterfaceState.xcuserstate b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 1cbb5b10ed583c40c44a5afcbd20967028b50b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109775 zcmdRX1$-38`}gk5p6;GoDAM2*h}=akDMc=K7f6XU7a`a+BnPC#8o>hXPTgIo<J759 zFLkE|)ZN_$DJ}1_v)RjCk}HL#{r%sTPvkQ5ooAlsna5^!c3w+EeOr5a`c8&r5Q7<x zQ8DVIFOt5TF=BC~wXMFnX~u}=dB;U++uN!~)U?(vtcQ=wN3=J$SQ+-T)tfEqXBiEn zWo(R{aWH92I^$+MOa_z5WHH%{m&svrnIoAAOc7JelrW{tF-#c~V#=8&rk&|vRxlz% zm{Xb4n6sF(ne&+om`j*TnJbtpnQNKrn03s0=6dD^<`(8w<__j==6>c8=27NJ<|XD; z=1t~3=0oOF=1b;V=11mNW)JfRi&>7<vPRaz4qykfL)c;LaP|mxESt(^vRQ04>t&B( z^H@JSl`Uk8*kZPvoxxVKwQL<5Vdt~;Y$Mykwy{gtrR+)UY3%9j+3Y#&1?+|F8g?za zj$O}gU^lXx*qhj!*}K_$*n8Rg*oW9h*~i$&*_YUt*;m-@><)G(`zre;`xg5i`wja8 z`y=~1yB}f1Av3ZdD{>+i8i<ZSDJT`?prg<f<U>WM7?q$9s=_1j5qK<4#c4PLXW|^3 ziznhqI1l^rR6GqA;v#$uF2j|$3eUo`@v*oDNAP@n9A1Q*aSLw89e5dDj!(cR;*;?y z_zZj|J{O;dFTxk&%ke6FHNFO~!E5nGyb0fgZ^pOb+wm5BH@+V~fFH(>;3x2t_*wiM zei6Tfci^4)4g4m47r%!;!XM+$@fY|T{4M?w|Ac?TyYTOLAIESkr{dI{p5r+aXXfmj zgB!pd#tq>P=Z145xG~%jTnd-UdAJPD%jIxKaT7Tom&fIEQ@QC}Ay>*B!&PvV+)Qp3 z7v_%T>bMA3&mG4#am`#C*Ul~FmT@b&6S$MOleyEmGq`iObGZw-i@3|U%ekw#tGU(O z8g2u(k-L$*iQCNG#@)qj;qK$^=eBYWbB}XRaL;hhaxZW%a@)Bb-0R#M+&kR6+=tvp z+-Kb9+}GSU+z;H3+^^hk++OZ?Zoi6AaVnKcr_!s8DwE2lva6C*15|@mLsVl`<5c5S zDXLUe8naF1R(VvDRFhRxR6bRas#sN`Dpeh$DpQ42<*H*<HL7{4T2-AYqMEN-plVaK zt2$JRRVS%VR-K}{Ky{(&BGtvJ>r|^%YgB7hx2iU)Zd2W^dPucZ^|0y@)i%`&suxu+ zsoqw-qk32Mp6V;r*Q#$+->UYg_NsnY?Ne*jI<;QSt6l0O^#Juq^(ggd^%!-gI!m3c z_Nx8rfI6toSC^?n>T-33x<)-uU8`<Zx2TU-x2jK2pQskqM18LMJoWkNYt+}O*Qz(F zH>s~z-=N;2zFU2d`f>FW>L=Atskf_lsCTMAP=BcYNd2+;d-V_MAJso;7!9l8G%Af+ zqtVzjc8x<bR5MI7T$83r*SIwv%_Pla%@mDKQ=}=@lxSvYW^3kX=4y`9EYdV+8a2x_ z%Qc;v6`C_NXKK#UoUOTBvr2P?=1R>*%_hzDnj17*G<R$6(cG(fLi42NDb3TG9h#k* zS2eF`KGJ-w`9$-n=10v>nx8elXpvT>Rckd`t=6t}Xq{S@cDQzgcBIy=^=LD+leJT{ zK5db<SX-hk)y~$=(azO|wT;>)ZL_vj+onBHD{6`MB<*?H^R*XfFVtS6y;ggjcD43q z?Je3{wfAcu&_1YrNc*hzIqmb>*R^kG-_*XP{Y?A0_6zMV+F!N5X?N+cj?<}hYMoVQ z)7f<n-B8^y-Edu+E?wu=P1H@&P1a4(73zv~#k!fgS-RP}Il6k?ak@piCAy`$Wx7*! zr|C}DouNBZcb4vK-8s5dx+`>7>aNn=pu1Uji|$t4X59n22XznWw(6eKJ+IrQdqel8 z?k(Nhy3ciA=)Tnbs{2j1OSfCk=~a5QUZc0^?RtlPsD7A!xPF8_UGLU=^po_H^;7hP z`XYU?ex`nwezty&zFvQvev!UGzf`|Wzg&Ns{&f8r`b+ee>Mzq@u3x8Luiv2GsJ}yh zr~WSe7X738$MlcuU(&y<e?`At|DOJR{RjFF_225h(|@o3LBCJ`hyG9fexBzA-oOvw z590^&gZN?mD1J1b%OA;4;E&=b@{{<<{1o2L=krtf>HIN#89#%s=4bM=_%MGgU&lA_ zE&TC(2fvs<i9eY?g+G-)jX#G!m%oU=lD~?-n!kp>mS4?Z&)>k`$lt_o=C|;7^Y`$N z@{jS4^H1<k@=x*4@o({O^Y8HQ^6&BQGu!zO_>YC1!t26Y!n?u;!pFjA!k5A~!uP^Y z!mq+^;dkLr18d+68iU?oFqjQCgVQj;FvxJYVVGg0VT@s%A=ThEWE#ANBMlP`Qw)AX zzM;TSXecq187d4j46_V#4K;>3!ve!`hDJk+q0O+^u*|T+aH8QP!>NWd3}+k8GhAr6 z#BjOcO2ajV)rNJ3jfNWxHybt^?l5dI+-rEiu+{LW;R(ajhUW|~7+yB)FuZ1X)9{Yr zeZxnFPYqufzBYVk_|fo-VV7aA;SVEY#74DIXB3Pkqt)mzCK(4BhZu(%M;J#N#~M?N z>BbCWwlUXulyR~#&logLGfp=a8;>!T8>@^njdP608f%U7jrGO`W3#c<*kN31>@=QW zB*s&WryI{Qo@>0oc(L&^;}yoMjn^618aEiPH{N8t)p)z{F5^AM`;8A7A2B{|e9HK& zahvfa<96e##y5;_8{ad2X#B+Zx$!IGx5gigKO28D?lJB&?l&Qm%A_^%CZow>vYT9{ z!%Txs$)@3^QKlnI<4tKMk15NPW13)^Wb&B;rm3c*O+}_sQ^-_lsy59wg-!EJ5z|7` zB2$y;cvHJ+iD|iMrAaiMY&y+!rs*8h`KF6Zmzq|Yt}<O~T4&m1+G4ufbdTv?(|xA< zO%IqJH9cl}+Vqm?Wz#FB?WP^3w@vSu-Zi~v`pERT=?l}Brk_o}n0__=X4+-iZQ5rR z%m%a3Y%-h87PHl2vREw+OOj=vWr$^{WrSt4WvnH|l5WYcWLt7AM_DFY@+?8iG|O~L zvE>*`xuwc7(=x|$tfkg6-%@XBurym*EghDnmQKqF7GgQYa=PU#%ej^dEEiiYvs_`h z+H##`t!0Ddddp3gTP?R+?y}rtx!>}T<q^x{mZvPwTDDnUvTV1!YI(!*w&gv`hn7z) zpIg4Nd~5l^^0VbP%O1-<%YG}es;pWoZ#7yiR=d?@J<K}Tnrt0z9c4YjI^LRQ^;om4 zIo1i*NmidVV4Z3`+FE2SwT7&f)@ti)YuGx^8nG_4F0wXRkGHm4mspouS6W5u$=1`X zXIjs(o^QR#dZ~4l^(yPN)-~4k)=kzMt+!Zjv)*aF+j^h%LF>cT$E;6UpRqn~ebM@g zb*J@p>s!`$tshuFwti;)()x|{d+SfuU#+{Xzgz#bu{O@8vFU9Fo7rZwIc)=MgKUS} zhS^5i#@NQ$Qf+Qqrp;?R(l*gH#pbu=+X`%jwh~*Jt-?0LHp@2GR%5HPEwCMDYqYi4 z+H8w$%WNxbC)!T3ooYM7cDC(2+l97EY?s@vv|VFcZChvCXuH97vu(5O4%-&ny|xEz zTWycpp0GV_d(QTP?Pc2z+iSKrZSUCLw|!*$)b@q#Yuk6WA8o(bcG>pY{;;!l&aSl^ z?Iyd~KFU7YKE{58eXM<)eY`!zo@!6Cr`z3jk3GYlX`f`DY@cHH*$eC;d%3;BUTLqg z&#+h9YwdORh<(1j#eTfK)!t@bX+Ob!qWxt1>GsR*tL#_Uue4ufzuLaqzRtehzQMlH zexv<1`(5@e_J{0S?GM`@u|H~m(Z1cj!~VMc4f{Lx59}Y>Kec~m|H}Tg{d@Zl_FwG3 z+V|M^I*bmJ!|bp)tPY#Q?r=Dq4wqw~Bg2vD$Z}*myp9}4uH#6@1jkX1iH=E*az}-u z(oyA@;iz`Zbj)(hcFb`^9L<hpj^&P%9A~g5$C-|E9Tz$-a$M}V+_B1Wh2t8>wT|l? z>m2JH*E?=-+~T<1akt}s$5zK<j%OUtI$m<T?0C!Zw&NYgyN(YXKRbSL{Ob74vCFaB zvB$C3@w-#!)H`{n(P?rzoP(W1og<w`I8&T%r^lJ?^g45#M>(fBea<3hv9rWk>O96d z$2r#-b{^}jaV~H!bT&FWoQs`HoF_U(Cvl$SJi~dW^IYe}&Q;FU&Na@p&KsRKId68} z;k?KBu=5e;GtOt7?>gUezVH0N`JwY8=f}=ZoS!;(Id?nvIQKe#ckXlk;r!FZx(2uo za}9J2at(G3aUJeTb`5n6a}9Tma*cDjU74;aE}tvU<#z>Kg{~r3sjJF0+g0a^xaPYS zxtd&Uu6EZl*GiY@I@xum>nzuKuJc_RTpL}RT-Up9aNX#-$#t{q7T2w=&8|CKTU__L z9&l}SJ?DDfwaxW{>qXa2*Q>6#UGKO)a((Rj()E?=YuAsiUz1cx>Lg8)Hc6MHPqHUD zlAKAdq=89;k_IOYNlH(0CwY=Gk}{LBlCqP$NfVR&Nr9xwq^hJDN!3X+lV&B&PMV*z zAgMX2C24WeilmiECnuemba~RMq$`rHOj@0^CTUaB^+~rT-H~)>(tSw}Cq13?OwzMS zuOw|x+L82j(mP4-CViUpS<>efBbquI8g?)`M$hn!z?c|oRdFbFQDj-$O!(fF&sC17 zZK!E$Tgw<2qliSjmN7FHkt3=N1dk4z?FE5gRdeg2ww9XONT9j4qcPId9yX82%E<To z@;!l+%#578l+1wJo08}8rKjZO=J_)N!K@sAM!qt%lNrXO-o&_=BxV3}7&DL=#0+MJ zFo!eA%urD!szr^c6?LLs<V8U=h(^(L6EmC{!Hi@^F{7C=%n{63W*jq~884beix?uR za-ymts`*597Ezr|R2LJr1OAB~AUCfyQnRR~xxT5r%~#uAzqqD7QWrKK7KqHR>1b#V z*44K+w}#r`)3*HP){3&iwy@b1h|KF)u%NzaK~;TIUGtK>$ikY%_06rbDL^DtyD-ui z0ciQxvW})eq^-Tasiqy$;;=cru%@lu-`v>J5P_jerEIya9e5;n%d2UN)X|Rh?aRs{ zEzPaKJd?slc|0Ita2$R4tu>92Q2p{ql*FX6NG)K><SV_qsQ0zB<bzz=3Yv=Qo9d%; z0fOUx_cu4SH8(_bicpSX0!->AW+F3*naoUKd`uqW7p<aAw2KbWDZ0d@O-zu<XQndK zm;&Z#X1X{)oF>i^7mDi$`h#GH#O~2EYMbjKsh}g%>)TV~$xAJ4UZ9W~HV=R{$8^-! zE-GwpUL-f{YJUKfQmHZ_cK~L`jaSgr9%-EqdYRWz-%uB6?Mc9lg1oSKR9u%HB!-$h zT5BVIm_yh+=C2z1+S(%R{+jlhhUNufvsZ3Pzh;!SHcN$(P)Ca--Ci_E3{u)Cysuzt zqy<sQR53G{YGx)gi<!;LVdgSn=2-DCaj<x}I8+=ijuc0WM~LIZ6fx~4W*$?^)G-le zKC^&X$ka2(F^iZ6(Jf|(nc`96L~)WhS)3yJ#5~b2dUi0)u;g2q<C#{bO<MHxKo4iZ z_tr=Q=<VW&$cTf)fnl>}Y06TG!W5X-k!fjxth~&ubZ>4-c5V(VZFev;#TRtL`u6AM zrTepUvNCdVw=;{GCCpN0*-Y7TG=Z|tkbjJ{RTPInE!Q&3nNIn~8O5OzS~!X&=|npG zkY2-QdII@be!n***YC|q$@B#CQ}Qx{87bb(?2PPOPmbT6ofV673dKq8g_E6|k(=#t z=cf4b{hpM}tV~ZzP8R&?c4wq#xC6l)cfc2mb0)<Z)(a<)mzV2yd%Y<c0gpQ+Gc(_v z;`8LXQ*r`<^mMm3JI9xq5sPyk#Tn5H$L-7Yr~9OdWaax)GIIlYDY+SW`6&Uv+v^YH z2J$m9(_?WirZ}T|;ec%o=H#a5rsRA5xha`BK6grPUPdqlY^^tt<;~5{@#e(htfDw$ zdf^1zK6ge2uqHjnodLoH%5rit^HQ?>*;$^TH!myb$&JOihT@Fvg_EA;&CmAcgQ&c| z{FKb>yzCU8J3luiBQG7e?928BGO}ZF)>54Dy>Ps~EO&-KBOO@m1F-Du+>|_Der8HW zFw5i5b?4`$=j6rWY@#@+y>J5Ao}fS9ot2W6nFI0)WPqshJUJ<zygY9(J&>2-3HW1i zZl*Zty>Rk!@&dW}dG3^Ke-_Bg;|Bc+W~ZkBnI2DGdLB#}<SzTw&CG2~>gv^^M_w0q zGIxc|w&GAxM|;h@hDe|uoKSO9P3y9C%$>{@rgL_2sQWVo;~wT-8AJKt0p=klbq({N zn6-x4DrQTjc0ef70A?mqr`XiO=3454+O|{w{uuMb8s>4)D^7S7mi|-B)66r>v&?f~ z0=6-yFfUfO*EfROs%dNqo6V7>Ej3Mb<*hYMZMCiSE$y@Fx*R*K-D>cGk)@?I?F+>t zMMf(oi=a|3Gp_*Xc4h~&Gi<gLhYFN7g^{KO?F#`i=CjJ0hK`7tHLJxgTk#t6I@q3Q zpS8>zOlRx|GUwi6-VU3c;3i`HhBC)>%sb4xOlQKs1Iq)I<vlqg<G#;)02a{K+FG-0 zE%QFpsqpwC=Hqy#f5v<s|G`(x*YO{G$9y0E!B5Q3@gMxg?27+jFY|l+2Y<4RB-;IA zU=7QP!M`C|Rt2JE)na~MqP>|l$Z|>-r$*((nwXttjR<R)>L_bv9Zc$4*2db!0&)6U z*2%iWBC#UQPq2gNVmLZ%u9{!p5CLb9R?!C0Oxn?r*4AZd3UAxe>YLkA+S^m=o7(E@ zB5CcBnnv)7i&Eg@wAM%)b*OD=9ndx0(g41BVKa5jElmqzRvtT)4pta82M&2KQ0CSt zo~5Z2S)S(zb`<cI9Vr&CVMmK4e}}i@B;Jk}OT`I0*)&)-&w!qfWZkTX&5*S%8nl$w zEQl0$G|r2(iXpK~JVq@4_gFRDci*m>cSnxD)eMUc+%22K=7!CKVq+*pAkihl9?4FS zmdIbW>U*ImdNPrnEb(uWSh<FsB3At!{skod1;rWh{3~FOW;1|IGsS9&P5mNd;K{xV zPJD6U1q!t#>@gCxrQ+;0Y?(MWUYo0^g3Sq=3lCYr%0acuCDkryn%|sCcgU2XXR>pd z)OGAEb~Zal42#E#HS5?gdn{Wc&J%0J1rp<ifUv@)g$1GVa4=9%UQ!kg1q*}z@`94$ z@bqAHUk!pYN_}7_l?KVZ5Go5o1$l+RGJugVsNrW9Fi)%&C&)h^$2P2C7m0P^eEIh# zwt2M}kyYq;wsmgQFHv*2jy+y7i1MG?*$(hcU2ZEBX<x^-vx{jI2fsiv(b<_kJ~@5m z_~cG+HvE+3cCTEiuwxm!Qeww)wv$~U){Be8#&zro?1`)>Hj8J8m&Z%yR4SR{!sfY$ zESZ9mP@to^uA@1v(w~+uIjq*o`p6PUaoSs(8yX-JSXw_X*4&&$$7~3j7xd4VayllB zR|8w3Y4Wd<x%5XG8hQ?XJ{=rV#c=-&4)TEXb3tD-md)Tr>=jJvM)qR%682K|GWK$I zmDnO4FSd$pV!PO}k-d_=ioF`F+$#1uak02mJP}rEhbYD^_o9eo=?dx~>#Uz&4}KtQ zKD;1r+Om1A^>v~4){fftj@C##2@s=5=~bjo?hD+RU%#NEwJT4aAmz!G@@6vRwNknS z?xGDQ;_GN{Zm3z-+|gdqvY@r5E&>@<V@o?UQfwT=9CGvnp%naaF*u%9$vWrxYnm3< zw8fJlYyS0;UAjSBB2JhYSX7i!k)Kl00x`eLpj+76C4Ie>-OS!5E)$oFo$J^;*gM&~ z#1-O7@dSwxu7bRhj`oK7re2e@7vuq5i{b}`xl8k#-qgILDW+dleO>!PWz_rG2jW5j zb}Rd^{K4=kEgvw_e^qsIokHpI1p6$Lx}JTKeTsdWeMThWN#e=kDeKwi*yq`8><i+l z;%VaP;+djn=FH~i#(Yr5=GIw$kXfX)RH}i%JY<oSH@6f<7DpPo#2Nr`j*#=Rf<Sq5 zlysS&rOj>iQq)>h(=vSW50o%wW@m~!J$HO^j(4TZ;MXJuzb>8u3=Xw7ruf@aIvOh# zy5DBsiJ$8G?59lX2C9<X3Q5&*1N#~KIaS85#Iwb7sVZJ5Mbl8UV!xFJ`A$4X8l=XX za(rD%b{1qxvJ`(}f9oa1UF>dlk9eMVzIcITb>xQo*gxW^K@4JhFutoPQXzd`3`aZ? zkO3LRi^Pk?OT^1WPYh!`nOWnLJ=vKuV~`DKMt1R1pm}-ujFg;3DUF%S6#OJKAfA*# z2x?<}GX@PuPy=IEq0!<h@k+{=Yr7bO#!7>X6R&_l>a&VcN?TL%7nLi6q@j$Sj6s<w z3uTK}iC2r)L>Yr}(UI}gOhl6sFeVR8?UOOnPysp`O&6~dSBq=JwS6!q-P6UG(kRUe zq2;I|e*76|E0em}96{A+CYpt2qd90U3Zr9D4Vs5)Q5}k)`Dg)Ji0aXCXc1~aji?DV zqZV{LYDI0R9d)3^XbD=1mZ9aS6Rkii(Fy28BqD-NLMNkB(5dJ&bUHc%or%suXQOk_ zx#&D}KDq#1h%Q1Gqf5}G=rVLUT7|AaSE8%X)#w^@ExHb^Mr+Vov<|ID8_-6y30;qF zKsTbB(9P%;bSv77ZbP@DJJ6lzF0=*RjqXABqWjSO=mGQ~dPrO^ZWON<ZxnA9ZxwG7 z?-1`2?-uVB?-w5ww~CL5kBLu+Pl?Zn&xzZ_7sZ#w?cz@HHSrDcE%6=kJ@EtaBk>dQ zGw}=YEAbogJMjncC-E2YH*vSPSKKH5Nmz!kh_D=C)r8d&R!>-gutvg~32P;+ov=>A zCK2{9!VV(r5W*%Cb{Jtt5Ox${#}IZbVaF3Tm9XiA^$<3bu-SyoA?%TaJ&LfC2s?$a zd4vrRHlMK52zxYP3kh3H*iyol5w@JLm4ux^*qMZ#P1w1FJ(jTZ2wO+k`Gj3a*y9M> zAW8FK^ay$sJ%%1fPoO8!Q|M{*40;wlhn`2<&<p5A^b&d*y@Ix*9cU+d6}^UDM{l4v z(Oc+k^bUF#y@%dMAD|D>N9bep3HlU$hCWAMpfAx^=xg*1`WAhMzDGZxAJI?fXY>pD z75#>Gq1|W?+KYZi`_LcgPqZI1n8gTV%wZK)V-40~9oAzW3)p~-*o4j4g00ww?bv~x z*oBku0DKr8hzH@pcnCfmC*z@b7#>d8Cc-WuY$st)ChXaSJ)f`_5%w~|UP;(%3A>iC z8wq<OVQ(eu9fZA`u=f%6A;LaN*e415EMd11_GQBEB<$;ieUGpo682NVenHr82>SzJ ze<SQ3!tNu8A&4VLLl94pi69$6E`kOUbT~o72^vk%ID*m$${;9*prZ(yOi&&{L4pbh zDk7+iph|*f5;T{f8iFDOEhMOcpk{*F2wFl=CqX9=L<l;Spfd<MhoJKbx`?1F3A&ab zDDZ9~=thEWCFpj7wh(k5K@Sr22tkh%^b|qQ67&K=uMo78pw|g{o1pgz`k0{42>Obk z?+E&dpx+4E6Bqd5F*FX^5H>gVPaNc5SVIG$v_L@lQF3<ijyV<FZ?qPQQz!|W`YrZU zBETMFHpY(Wp<~_<HqY*#Y4;iL#?8`8N4zO)uIq;pLmf?Zt@V*MIjR6&$A6F-H`k-+ z$hU;ei~3<?i0u`*Mt>-(sc-7R?6|4>C;^+p=9NleyRN<swznXfZCD014JaDaE(*_= zHdrP%)O0k}E(}RQXme9pWd20&{JPxqx>|3#H#2<{ZAo`xrq#49oS2!Jlbe&3o|BX1 zP0vWr@n&XZ#WYcRyS?+W>S{A$i@7+Tl5~6jNTUd{o`y(T5fBaKh&B*M*N^fa;-xX2 zj(lg>3=#YxR&?Srt%O-mrN3+VI9Zg^;kSg%E&uZHJraQUC0{|QxF>AhpiluDW)1aS zwbL|tC#R;RB~4n(5IF-+r9ip4CDNK!3Y#VKn_C;9=vBI~xhYZ-f-->oQB12)V0ui0 zwz@@Wp=GcI*qByWKd%)kziCv9mPnhZX%z+1Mj6#V>4UUs5y*F-$W~EM&<FyJCw(R* z{l2hyzC!vzSLEX4*S(q`OO<p-`hbp0)7H3^9HwJG5H`>1hp~f@M7Bc>G0?Tx<lp0! zwT=$>P}n@P9|i=|Q3Xoh!&1aeu%3?haM(PfAI6JLP}=Y9nqAylXriM%8aCJT!)P$O z(vEqc!;lM0aIw>j*Pu2!?Bikc35RA5v$HbY^E2G@dYMCaR!&A%jypRe!;_w!o$d8_ za@@V`VRn|+>y6|}DO<M>UP@_tGHhPbKdeZs)upYG#ZVTCWe=2w;^eZD67zIFt9h4A z?n@C)q60n~Hs7Mm{{N;qDwlSzDCeY#Rvgbxr&D<TKhWj41$z!1_Ju=r?K$(ZawGG+ z*}Zi+!{ha2dU7*!y<XVUO$QI(+qLJ+gUxSn`nhqcd?6+2rLcLSBFug=&{7;bwY9mU zrHAguG2}8j`YZplg%n53Rg{<={TEp)!M(4krePVJsgeC-+?cEBn6Li3k#*dN8|a9y z{{tP&NzaC(3BBxTG`vjDPS13Ez_9kEgIPK0S-BbU;pL5#q&NG=kAY|D8DYnJ>CJRB z*r@HN;(dYyD$d^AMaO(MY%b}CRR%#%NpYy$S6m)%)b68$yx(s{`fjh(rO16n$Xn^4 zAO5S}Cr*DKrvrW*HrMt8E4y-$0Gx`F!X60kq#vb|MiuS#4e@&O3?2B>{#mN!{!(9Q z0gNXnB-BvC2k|4mKu7#MY_9BwslvJd#p&Aa=^ZR@r(=B?HqYyyu}WGZP4dyS(y|^N zAZ}&6PRISae^z6ZtL3#V{)YNUQ+rWO6XYbV@qB%Uj`?lae3LTQ|78G^-wfpmy2I2* zQdJy+ohsO1ieKp;(g}PYHdiYX_y<l~Spxy8gng~?&**SJ{#Qv{oPK;w$No8NKDHmG zTHah1X>48`Njo~!72g&#wRF&OTRek*prig8Hs7a=dgvMws&DLojJvt@0Eu^ZyT8uA z4?$mkrPJ9JHedhGr}J+X5T-_&8zb$l%i@Kxmr}ncY`*dTHuaEi<khqmK-nao{{58x z-^1o7{yF{KO7hoLobGo2NSUTbmeHedCG+55z~Y{Eh~wzY{^%#e&|F^|ff5#+$bza< zTUrBrX^BLZrY)*(YYWex-=10<lY?_QI`;msxkKUVKd^yaj-xDcd<UE`lst1$+XC>H zQzPvXYDE(q$%iuma>Y{e)3G*+GfJcomi>>n1!BV@&L-1<{|g5mH*k_Xu<GBp&~d{K zmWS1Z&7ppfKLkf`WV61h%lpNRG)x{z_dl#aWz=PQ;!-AVv`iEqHcvj}={LegL|kCR zjh9gkVRPh=QM=2v<qP4UO|)>FR#XN5pa$LEoY&gC1Xfl2*lu}jQ`mfiGWMbS+<((a zMaxR@Mj%_J-|`=BRm7?31bKYhe^<$gvw>6O;T`{G@jGt7pgf?fe=>)zAXs)Gfq?YA zFI#Z5Jm`S`z!tc3dY4b?vY~d8o#RfAE#Yw`GEoEjhZB|54L8bpQ=0D>NKl(wr6-db z<J7HO9(3?Os3Xnuy3=d=s3XBsAld02sfwAIo&^tecyfA`<)ISluFII0>5gMWwM^6D zVe{?(7fi?j0(B^_w8Ck(NGlwMj5j57<#`PKpJ`cUcJBP#tod=wt(A!y-al2k=x&p= z()!qB;1<fmjqIP{qJ;rpLxVJ8uMn<L9&Yr1v&9`}$Xey0kLaIlzI&#n1=91I(q4PK zqg^78H||hZZe4b!w>C39JEPAEaBg~L7Hq6}J@7mj?637&xnRPwb3wmq;*@KJOjAnO zJWW}-vMD}@CpQ8Ch!+CzgwX<cG&X+9M21iMSAxYjVV)+B<o=H$sJOAumdDQc_fw+S zbco8SXX%o=K&B<@P?Zb}{6BLKS#?=Ck+`ic?oyd1Z`k~RqGX32VRk3j{ga3%K2-rV zg}jdT_U5Kul?Cofc}BVar24KrB9clUqHTdEfzzZf@SI+1%e<x1kFi<zb@GT4{?p@8 zae>ErnSzP^V=lYmKFIW?t;)Vaz8mE6CWp<%iq;&oX`;Dhk1BZFq;8c5@%{G)jpE3- zQzpazuWup6je4&<YA|fxq;UAq*X6&N`Bg>cNkWVd)*h0npV~ixN?&nN9J3yihb#E^ zjXZ=&z3X0av^*`-GX3A$po;Tu+vLHD{)3=6!9k#OFQhAxxVYsNnW&QfS+`xWo5b}V zbx3KK5UxDvszCPgwy()#91}LTDJ$rpZB%#NCM4Z0BJH8K*EB&z7IqEkR$BMRktXR6 zeQm9AZ_AW~!sdp4pyWUmq|#P;J4*b5{6Hq5qJPri#D#%4?fg_8wCYf`Q##sHJKtTK z-Yckv^E|oIk=^Wccz6j;?Rs-Oo?cP4bhaluJ5uM3)6TDCqN)#-D2Ubn?%BD%s}*qI zxGr~oe6`|xnW$M|^PGOr5GdUC{VZXeq54H0b58$6<uGQ#W5m5S*10|M*x~;lw|~ka z3t;QAH3(s#e8fC{rTr;St)~C7w%9eL!ZLjA|B-$A#1VQ-v=YZ4l~$fXBy2vWA9Ov` z0_PaJ4rIrVW01#L(Em|+ARt`_)!ZbV=JQL>CDXe=dTF`JDpOD&Hg8d88pD;g|2t>Y zm5Z$4Di7%ZeKURPI-Z*@c`l3k$3jI5GSbN+dfWg`biiZzaTN*`y}5$0jsGN*>-ON$ zC^G)AI;<}GG^y%v)d+YJQkAS4sv4$(C&HQu+d|mm3ER3}HBvQ-8LxsT>)Ht0PH!b! zEImw|1irQro&->yXD;u)i)BQQKULPZ)x*i#XnnJ+rfETB&NO)98LDpuZEdi{8a9vY z(Mh=)CcYP3n6P(T$0FA)Go(lNvvPA*YG-zOGCbpx-C3E+v-_$HRZha`<f@K@>A<6a zO9{J-PG>nh;3>g2K012hoKAN}PDTd6rRV0ZoZ0Elgk#{+9RUib@>J3@qbk2DpbDzs z3BnbGT}jvz2z%ms)ihNBKu;&ENLWIlPx_y7YS)dgUGmLd%Bc)@*2+rxwgY7*6{?xi zOe$4Xsu`+k!k$9dQwe(-VNYMLnx&czGl7R6&mioXbS7v0PiM04>OaS4Jv6fu4l9Gy zGcs1r==5e}#>!=(sxhI+n^es(8_?!+2zxG_&3RPhd-k_%{eJDN&WxNK5V$)%b7gfW ze1j*SyXCz^wIU&xR;o^r<$VERFI40$UForI+9NkSMEMREZADe*RMlAtq0UyF15oD? z7ViDKghE|PN!<77W7aWCt2;eFls6|A=AGdM7Gy_3FHyn02nkm1m8z=%^cuomPS{lx z^a@$kQ*J^d7Rq{&oi0r}7c@T89R*#dx;`Q34XPUf^k%|dMcAt;C_H=(livN|5^n1y zUCYu7gl1&}SGyT`hw7e$v%gn$A7DN}*y{+pnqsbzXMe|wXYapicBj{!36plaVYyd# z0vqC1<fE#m5)%8g>KOojj<D+pyPg7Xpul@RFF(<L>a0!=+<XR%&B_H_Pp+5V2BNHw zmsPJyxP7kl*Ho_q?wf?&MA+*o?hO=o*R8i5J@)aLolw&TA!Sm9N_WR8>ieos5|aC= z>N9|aM`v#$EN~bufV@TK?faKFcf0}QW=M((fRfD8y+C?5f4@_~wM_}g{YCXF;O-*q zX2RY^ac`H&EqnX?ogY$}d2+HrX7Du@^A9yjgsH}Ajv2336ZTHR-bFFDbg|&k<G(mw zR<2B0xj=ScOuP817Sxu6pjNdF2n7pz4`J`6pkP5kxpvJ;Vwc|}gQjOip$=0Yo`{#~ zWc5&>4}97Egayq4UOp)E^0{HxCV6Eja2X(XH>eX_0in=$ggR9M?aMBz)70qz3Xhd< zCG5i#^brcW?@BU3u+8es&GdqRJYLy#WCAlYa-zUF>WK*_K1n?pfPI90jIfVW;3wpX zKQQ&Yg1NK64|zb^Ic~4ylX7yw8f0cffv2hq69N~hivhTluul>8X$t&|47~aC`DtnZ z_GCyaz@06r6x@^-BYt(IdR9XA&Q{NnB?XJ?d5SAbYWMz8OMe^)D?nPYUT?Ro>eTfK z!H!ce0wNm;`vPHKq+l;mBKLY<;9nXf`Q$8#m+thOOzM*}Jh7%l-KJie5PF$<IY5J# zeuc2xDfA8sy?aN=S7Wx#?97s42Y8}On!ei|Yx>nEsZUP`dxrW<dHSys_O+Pl@A+wM zbJbllJ7MMko9&6p=mPa+a3_ZPLWr@3L6il0`34QMz$-zd)w)4_xq1~4dZil7D%h2` zDdszbeOL5UOGn`H;mR?%6^~b6r(UgIQw`T%w$XFIgncV)zNb^44FA<8Pn5nTkD<TO zAG^NDe^)+ffOf;iR1`!Hu1Mj#ueKIay5`np<;z+kM+}<~htVqa=!D7xsCP!@${v4h zgTK1FJFKK#kB~o*dxBy0q^En8j#7v833|9g1MUG+uT!sw`(wNBX`=I52On=>I^n8K z`Mk5_VRpXu^R`DoWpgFZ;`L@oi#IbjP8DucZ%!z)+tjzqGJBt}AH>LP_m?+acWx@R z2yR#hiXFID4fho$umfAw4}-8CCG1Cp{g^_1LbYn&UB~Ue_t#k<e#u{XK>oee>S^`1 zge1P8eo-dzGs1ozL*m|XH4AsQQWD{*nkb2{s^3Zo^|tyQAQA3k_>!<+QK+wF#lPaU z4eoCsl*$C5WM^f8)z6lw?KaS#sJ~2z`jz@?K>e1m@b5c{`aMP6^GgczlUgP)OA60C zS#fgtS-nS6|6jnY&VYau!p$FP#0lXh1f8dEQ14a$4#0n?|0L{Bg#DR9|3cVb`%r%k zmXzMY+GMRhIIUOoDS2$)Iu5ab6#Zu_s;aD+o;p50Zhc6tWNMW5@)|qfXxVN_Q4Tm- zpDW7i1y|U$6qOYvMW0u1Lq|@Z1s2#1HZvF0rMeS#*kPP#u%OXu42eXnF=|Y*4nn-J zJ5~oL%v!#792jG`%TzMP9#7O~YMh#Z5?)`il4g)*u#C5tu)oLP?V5dxxiL*vne?bm zYer~}NC-7nGmaUrNg?bXgat(bpT3`J->!M<JN?hh23MXb3D518=A1!)>7H|jh9-r5 z(wM7(q)-Ewj<5tF2^e7+_|<(^AHSQ@=*gr3k`#e;W9DgSHrQ9JpqZwTvq7XHNF6ip zee0_J{I+U#C)8)9U?C$X>LfI!8n`>C?_ge2si^`Is|nH)q@yJ2<@LPl!8=~q3~)3d z0v9RS9Pm7`L8m6HsY?hP(aZ;6xJ*SL$UuRO6nO8rGUxU)>D-~n3`;sk3PHN(-lS<u zh}o{`08F@)#Y~WeVp?TlpS}A1j;|<YR<^{?Oo<2Gm@73WCB!^ga|&RdMv$E#2gP(! z%su<twU_=Rg-8;XH^U=^2-H(~qZy6n9L<FiaG!#@NOLg&UrJCCK?5l8VH9}Zs#{;E zylqY=gmY5H;r4)GgJMGt96^I|6eFy;O0zm4&1*Dk0eU?_g9sW-p@+!49r-4jxNcS_ zoL2+jbhvkLMrW=RGIX=zMh*33eNudz20WSOPJ)sN8cJb@$rRuD>DuYv%!YVL$~oMg zbT{Y%INms&y-x%8Q6*r-!<t6`_%VV;5HykkkCK5mm0bGGtB{Dn!<qn`nJWd(pun-= zqUIUR3kezVqUI$4hTC<<5Of3u9!r6DZ@T~cIr%`bCsWGjb24b;3>*gw)6I+5HE{J> zf_3q(<~>0EfS~aNfn|WDn@W-Q?EPloGat!I*F*D=Y_JVk-74{!25!Pl0Q!yQTLAr@ zpmc)V6x2gO_okft{DQ|pZtzq!P@64<jj$yWC%9iVa69f_M0%Qinm+)1zZNb;$|NX@ z!e<lYmF_{K@tu~VQQh5#;@>I?`YdRM+LtvXi0WYb=#YatFtzD@xS-uTzj(;AK}xT| zVz}YxrpzWtTB6HFtJ4}2v0rP_nwjxhD?zyg9ZC5!L1sVu?8KMf1lN|H4zh$DF2IGH zCDznwleB{++`iV0c8K<H>Wa`rf+k70temv$Tjx7zxf|3wLsCK@I2sITM`_1NaD90V z?Rag93^#=!NZq1vkgaaI?tZFz8Qs~cHdC9MaK=Y!C&*BKf&wv6d-fgm(4}@6sypM; z=4q+l>8oC=ou&o9qn%DrK0#9{^QOs5ZAZcH=hwqh%Sz9H)s>T-B^k;ruO~J#&>o|$ zOh{yvb_O8B6<kLX1UWh^wL%$rW94O$b09Lv&d!m-8A#Sv!Z=`xB?s4C0n;9<oexVx zmJP&$5Cukyjt~x>zCpV{yAVb=PP>SpVuDKO7^MUqLx<V-^7cuO?3vw}m768uf*FPc zLS8V((*<+KAuO1tX6Y_a`R1JDx`=#tINY7oBgK)^7`Pk+OsOYFQF$fU>lqyO8LqkE zK6tm%Q;F9=f1#cgW9zi-+GPm^uw2^->{&@rh@f)HoC<kejJv1ivB#*Ecx5LgIV_Jm zS|ZS%tUV*48lR~>3sB*{v?_vTP}FLQy6d&tr=Pu9wxAj5QcRx_TOiY3q`h3i>~p29 z(p~|WR}nOepxG32jx58cgclcW0m}d{Kagq|l7o`oUl7ZIHQJ2{Y2Bo~US20*g5YAl zm?h_|*>Od$CAV37S3;;Q+Pi_odkLCHP%R~~j*|G>iSw7Ad?Hmd$?IoO>y-`fOo*j% ztM+jTxX%Ung!W09#`y#-h@o-M@1450tuvwA47l*h10{mcZqvS!5Nx}42T=JcLG=V3 zN2y#ysoed`(fYMJV3p;1Xvpi4lCF$QK<>tUTl+!6*?*}0NG7t8pr#licg-3w^Vm;& zG4f08cL|}s*Zu$`!u5D91i?ZCv(PH*Pi@`wE$33GT$n9HB2vW?JbYJ%t=+AKJ4_SU z)<3oTnejRZ$J+@4DFZ0%I?+mCTk(f-`OXan0Mcuz)as7L&^nDyNW@H?L1zR|h)I_c zw2Xqvdq2B(-?RF<r@<Q1YA}t)a^i}?I;V~%IDP55Zjeq+aL@{ZR>rV$-?~{(3co?H z0F@6&#Jt@!j?g8{adcyKkmEoJ6rD&A>?3t+c;`i9=VHoDcXwG$=h1nk>GnxjjxHCb zI|1$qCFo>2-BTzJ_dR-I!&y$yaHv#D23k%L;fA;v<<a?c`3d<rRX0th5u)+aV`$uc z#pXX>eHdyBl6!{Aj3Q}WiLN{$ScR?<sGLF2nFO6hsXSZO@a=oI{eA<~R3!%ml%}tw zF}~!W!2);bkZ!K7HX(AIE+Uh8E<v!h5@qFHyvKR*ky4Qkz`U8!8l|p5cYH#yR$ZG6 zb^$>b#(?el{e%^c+k3BS-E!TD0H*8It<bI1!OfHx6LbkdmlAZ@dYz~vFz1sAx}2a@ zbk49d^FQ2E-FNZ0v=`(Zp`3K7u10N?r<*h9>MoKv)2EtUth)pza~VNk?&*#Yl6Qpm zUHa<-tK5)3WxAoh3?>h%*I@ZGJ@7A9)2`O7{ma^rZk=vD46soL7kFMr5Zxd`YY18! z4VZPXUm{h6emR5yU<?!<Yue%M&rJ(TTBIAI+Y%Ip(z8IR!OZrE40`(hzgrlho8XCt z%8_h(zYQf<P!m?XAclw04p@WwyAwOWXj#%$=7C4+GlYWovSmkuFC~PMN?tFw-`sHD zoX!l$1!Qk1#kLvQ5PQZd+HJZm377ZXx_dy!;7(Xb);G`<xsh6-z2j}Se>OwfCy|0q zxamj=nlq(Ty?eh@_pt7XgiHNN-BYsNxSpUJV(iAg(|=ySZo_P#Ia^`~+|?DeX)oxu zCtPehbUT60*9f|aAi70}<SoK|Pfu1|ylXb3Ml?9~0H3O1yF4d0YSF!;`!FE`KGJ<G z)47=-d5=)ejrQ!H_}ep|&+N=i2dG?6w-ftH2QQB4+k5MN(ESKh{!Gvv1i}6wc<;Mp z@4e%KlU_H15%AJ`*TK_*m@;yJv)zfgZjbKIguwgt3^QJj2)dgf*dqksdu8C->&kOJ z2G5fP%!J|(1VcHwv2nFttEVN;zATvDsFzEg=zfCay+S1~to|tvb{sN2QpFR_T`D5d zJM{?*p87$0hzInC6Z8;4TPckXchNX2Fz+|&!QtIsQamJO6Wtqx`jPsvi6*Wer-ye1 zN@2mH1i>C*)R*m=<vMzUp=Z3N&(PCiXP>jp)k`N}0O|>Xo{WLoch&tzKfDCgTMEas zyCtpn>1im?R}QS7s_zN~o+jv-7_eQp-+c4P&9D;!0kpKw5Ka8`CHjQ1fWATxv49?8 zf#(RKyNYNVW!>)WmuoND4<0)Q#G6ZZexSMwOFbIw>gVbc1_JszJp=;!1q8iF&`VSz zFH_jP;|f1w>%rSe(#?^!LV(;@&_;c0q6MRG)3?iP+)mJrn3?Zku6imIp%Tf0BPCsd zioR1XCKN8wpCm)QN>J=>;x2gasc7mY+%xs(C4@R(e*sMOB7)u^=uJA+w`Ape;M0^h zE`^l`IjpqWq{<Z>3W`nW^sDsONVt6}&9(aL02jROI|RK;ao?l3`>y}_^uVCmU>+n} z3$8>`Y}j;&W8)_M%?W{T(ccQdw-E#-ybmexM>6mgrH#*j4>f(TjFNqXnm!a?X<gUT z&DFd04<tl>Q2&t3)lUfeG)6%Cw%+nn=@eN&-Pwr#3H`GPp`Oz}4@AQK;GYu&$1}j} zd?^#T^_JvW=SdsXUU^Rh&Jjpasy7{!9-N#a{2lr?5@Nrpe+#gItzQ%L4aNRe#=iQs zlW#o>3IrgpOnQ_A0x5|TQPhw0pG&BHuFEg<UjiyXLJ{)^iuxl(-L>M!xqo~O`}2}# z@Mh5sN>5zmum4dG@1RHkyGy?tVD}OPwjH+TfDy1mC#7XORn4;|$vn-?l5|Tl@KB5I z;sDR^szji?n%BsJ+C@<8j?=E&?_D<hBH(Ab6f?ki_b8f?w<Scg^A2V_?;;4Or29>1 zpG;!)d#`<D0jCI}fr`GAE=%cN)PnGXc{ok7h95%EpKJJJf|<Ch-uaRA6exlVX8PlT z5qkAw8$4qtUE~cHG%I`>!>7Y5O!*`DvHUoGJfFg+@@WLK1S5hm!5qOVg4G0THt}xW z!)NfBd={V0dkNMOtRq-YFi)^Ru#I55lvB9cy56xTJuMjX?weWiYt5uj;q;}sF4A68 z-ymHFC%<iIPFpQp#tT7lN(~%Ng$8o-6zR>ST_2em;O#K<HLa04A2gZ+7iqzrK#?W% z@APFSypL^I-Sy%oK0tql7sD3h75M#d_!ZvIS<=;|dtikT)A)k8_h|5ie6b{+B7zNT z_!5F)mkN#z$glm2)X~`m<o5>hA--xIU(Q$Xl?0mzHWO?i*m_KAWh#BM(u~wJxYKW5 zO)EWrz|ZFAz<WL6se!fpT;=6ZbLHt4!fd6fDMZ!q^Wuq$@C)HBbo_jN0l`j!lh*R} z{BZ;yMmTr8_B2!N!Eif8k#ZjTpr6PoZLVuelfJ|}ni=yfCf_cP0hdwy^B0804M7hH z^GkT?C?vm>U&b%zI|&|0@F0Q*6Fg)+zmh+JKam#+KAhlj1dk_Nx+EU?{j<ueVx=?V zaO+t&Yg60c*79~qWy0q1^w#qDru4Go=8m@Vn$`u8t{3L|LF+(a`)aNn8CH%YE3c7* z<|%!khvm=ci*~!78EKPARK$Hcf2O2zXAqpchChqoq0*cz@K(l<M7Q+lA6-7Os-MR; zujS9@FCcgrf%ig06p)Mg%NXlg{u2ID0x#RZBi8bl^Q#CRN$@Cm8}%GO>t2<x&fs?m zxTt19Q+<1f^b+5p-3*Hxx4YZ$DUm6R^dD7dW($AaTIs!<3I%KU^*t!qz;7h@2!h7~ z1*OBMtbBy_h8I31WQjb-o0%up@V5|n=fs4a{B8291^L_gJNP^KyQ*bF0~s{I=>&t- zN+ldTVc);{4!&mh_S?4{ft1PJ%RdM&2IBAI@8=&N*iEp9;EZ+rL;P0$VS+OW&LTKl z^i;}{t&~+MY#x?yrZHNRm>uQPGL(7pw8WEV2!^+mDl|RMLjt#v-^RbdzsSGDzs$cv za1Oz_1RqK81cHwuc;ZHW2fvdUDgDpCLGUDkC&TNI;D3UrNNN^KAl!)#SNFFsD~4A* z1nObY)GUL?&_Fe!FHlXUTAbX~5MFHo@4`wr!#IfHG0l{5=oN2qtp>-mieD=-A;YC- zL26py#o+OjEK3GMA6d{Wy=_Bg*N0uN?}Jxi@t?5Go6X<xpYosapYvbvU-Dn^U-RGa z-}2w_-}684Kk`5EKl8uvzw*EFyZGJw9)2(XJHL<rga4D?FE9ctAOQ=Upc2%AM$ig6 zK`-!vAQ%LrU=qxNMX(As!7exir{EHjgaN`~!a!k=FjyEO94;gaLxo|&aAAZnQWzzS z7RCri2xEnD!gwJ?NEOnAbiplngbX25$P%&zuaG0;3P%bPgrkIs!X#m`Fh%eQd4gXE z2tgrVm?}&Y3WTGD=|Z7UBoqrJLaA_!P$q<ga-l+~6sm+7LbWhcm?g{><_L3zuyCwU zBg_+Og*qW3%oi323x#^&IAM{{AT$b1LbK2!951vAZ9==yAuJY_2up=!!g8TgSRt$w zP7qEMM1cq=2`3Au2&W3C38xEZ2xkgs31<uE2<Hmt3FiwJ2p0+$2^R~O2$u?%36~42 zge!zAg{y?Cg=>Ush3kaX!Wv<%uufPnY!EgIn}q9y8-yE$n}nN%TZCJM&BATM?ZO?x zox)wh7U6E;9^qc$KH+}h0pUU6Az`cVu<(fRsPLHZxbTGVr0|sRwD64Ztni%hys%Ap zL3mMkNqAX!Mc7WTkKjCl{R9UH4icPC@Kl1Q5nMp<(F9K?xR7A*>BR(tPcJ3-7=p_P zhE-5ba0S8O!K(<KL2xy}GYOtW@N9zT5ImRQFu}(XTto0Yf@=w`BRE3ve1gFhFC@60 zU~t5X2yP&_kzg=N%>=g)d_2Le1h)~~PH+doiwRyr@KS=85xkt>PJ&kuyprG(2tJWu zaA<_!lL$VU;8O@bmEh9|KAm9j2xk%u9^q_)&ms6+g3lxPe1gIFUr6vp1Yb<>B?N=T zzl`9^30_6;6$D>N@Kpp~P4G1YUrX?H1g|D|4Z&*(UPthHf;SKhc6k%Q*AsjL!8a0o z6TvqV3>NoRf;SU<8^N~|d<VgI5_}iITL`|J;Cl$Zm*D#dzMtR+2!4>@hX~$EFqpqb z2!52{#|VC$;3o)vlHjKZewyHC2!58}=LmkD;B5rIK=6wMzeMoM1iwP?c7k^hyp!Np z34V>>*9m@u;5P|=i{Q5jeuv<934V{@_X+-h;13D@h~SS2{)FI93I2@W&k6p5;4caO zir}va{)XUh3I2}Y?+N~a;2#P8iQu0J{)OOQ3I2`XT?FqYcn`sQ3I3hneFXnO@Sg<l zCmcgKmT-u0m~b57RD@F#PD3~?;dF%46OJdGKsW>8jD#~0&P+H9;jDzS5zbCH2jQHA za}h3ya03VjQQ1Jk4I<oN!VMwZ;e<;j+)%;|BiwMpjUe1e!i^%_Xu^#l+!2HuOSo}_ zgIFeoaH-NON9ks>02w-*xjmfqwL;an9Ug##w??+DSm6u6D^cM^r@q24ygenPw1y-c zT045RF7r=|wt;iL(8krX4ZxI@l$0w-aBLM?4e!;eqO`Q6tUMTiH?#W6^GnK#qPQQ? z9s_&!sPq*U1j4>p3LrlQ>;bIoMxrio#fngMQ7jFR{Px|hB=6|hc3;zWBm2Oc<|~s( zh4;Od6qSa;fr2t+esG=?u!nT@=_<yrSdmvzP#6eT`pOF6g7fIq;Jg4d9@w+-RKGu5 z87z}tIIF-ynhGt)^lTXj=2c7$7Zghj^U*ih%0DUH;PfMOOY7M!Sd<qG1Yibm<$8Ir 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 diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/WorkspaceSettings.xcsettings b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/WorkspaceSettings.xcsettings deleted file mode 100644 index 659c876..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key> - <true/> - <key>SnapshotAutomaticallyBeforeSignificantChanges</key> - <true/> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index fe56d21..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Jerry.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Bucket - type = "0" - version = "2.0"> - <Breakpoints> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - scope = "0" - stopOnStyle = "0"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.SymbolicBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "" - moduleName = ""> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/ThridFramework/MW/MWPhotoBrowser.m" - timestampString = "435736616.20259" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "335" - endingLineNumber = "335" - landmarkName = "-presentingViewControllerPrefersStatusBarHidden" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "435813154.364832" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "389" - endingLineNumber = "389" - landmarkName = "-deleteMesagesForSession:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "435825824.766434" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "459" - endingLineNumber = "459" - landmarkName = "-alertView:clickedButtonAtIndex:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "435826413.805586" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "457" - endingLineNumber = "457" - landmarkName = "-alertView:clickedButtonAtIndex:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[EditGroupViewController alertView:clickedButtonAtIndex:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Jerry/Documents/ios-tt-inside/teamtalk-ios/IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "435997532.936619" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "457" - endingLineNumber = "457" - offsetFromSymbolStart = "1080"> - </Location> - <Location - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__58-[EditGroupViewController alertView:clickedButtonAtIndex:]_block_invoke411" - moduleName = "TeamTalk" - urlString = "file:///Users/Jerry/Documents/ios-tt-inside/teamtalk-ios/IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "435997532.936939" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "457" - endingLineNumber = "457" - offsetFromSymbolStart = "92"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - </Breakpoints> -</Bucket> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index b061ea07f2bb5559b1b2558a6fac224e92b99e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696693 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%0A(Ji7Ph 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 diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/WorkspaceSettings.xcsettings b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/WorkspaceSettings.xcsettings deleted file mode 100644 index 659c876..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key> - <true/> - <key>SnapshotAutomaticallyBeforeSignificantChanges</key> - <true/> -</dict> -</plist> diff --git a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index a706bf7..0000000 --- a/TeamTalk/TeamTalk.xcworkspace/xcuserdata/Michael.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,1597 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Bucket - type = "0" - version = "2.0"> - <Breakpoints> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Login/DDMsgServerIPAPI.m" - timestampString = "437888583.230845" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "109" - endingLineNumber = "109"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m" - timestampString = "437894079.140231" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "149" - endingLineNumber = "149"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDDepartmentAPI.m" - timestampString = "429087500.343021" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "76" - endingLineNumber = "76" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436102748.214153" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "566" - endingLineNumber = "566" - landmarkName = "-insertDepartments:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436102748.214153" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "690" - endingLineNumber = "690" - landmarkName = "-getUserFromID:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageReadACKAPI.m" - timestampString = "429264685.602237" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "91" - endingLineNumber = "91" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - scope = "0" - stopOnStyle = "0"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Entity/SessionEntity.m" - timestampString = "430296927.321059" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "41" - endingLineNumber = "41" - landmarkName = "-name" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Entity/SessionEntity.m" - timestampString = "430296950.627227" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "34" - endingLineNumber = "34" - landmarkName = "-name" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "437450075.368062" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "563" - endingLineNumber = "563" - landmarkName = "-tableView:cellForRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/AnalysisImage.m" - timestampString = "435210980.275367" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "23" - endingLineNumber = "23" - landmarkName = "+analysisImage:Block:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsModule.m" - timestampString = "437388240.721146" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "65" - endingLineNumber = "65" - landmarkName = "-sortByContactFirstLetter" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436087440.191142" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "204" - endingLineNumber = "204" - landmarkName = "-userFromResult:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m" - timestampString = "437561767.857813" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "111" - endingLineNumber = "111" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436898084.192692" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "457" - endingLineNumber = "457" - landmarkName = "-alertView:clickedButtonAtIndex:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDAddMemberToGroupAPI.m" - timestampString = "432202621.617196" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "91" - endingLineNumber = "91" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m" - timestampString = "437967686.913199" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "275" - endingLineNumber = "275" - landmarkName = "@implementation RecentUsersViewController" - landmarkType = "3"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "437450075.368062" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "592" - endingLineNumber = "592" - landmarkName = "-tableView:cellForRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436898084.192692" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "127" - endingLineNumber = "127" - landmarkName = "-searchBarShouldBeginEditing:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDDeleteMemberFromGroupAPI.m" - timestampString = "437561767.857813" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "115" - endingLineNumber = "115" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/GroupAvatarImage.m" - timestampString = "436332827.477803" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "33" - endingLineNumber = "33" - landmarkName = "-getGroupImage:Block:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "RuntimeStatus.m" - timestampString = "436881403.679834" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "72" - endingLineNumber = "72" - landmarkName = "-removeFromFixedTop:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "437450075.368062" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "206" - endingLineNumber = "206" - landmarkName = "-sendMessage:messageEntity:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/AnalysisImage.m" - timestampString = "435210980.275367" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "20" - endingLineNumber = "20" - landmarkName = "+analysisImage:Block:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/Cells/DDChatImageCell.m" - timestampString = "435923326.573356" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "198" - endingLineNumber = "198" - landmarkName = "-sendImageAgain:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Messages/DDMessageSendManager.m" - timestampString = "436107335.774235" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "92" - endingLineNumber = "92" - landmarkName = "-sendMessage:isGroup:forSessionID:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "46" - endingLineNumber = "46" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "133" - endingLineNumber = "133" - landmarkName = "-refreshAllContacts" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m" - timestampString = "436075243.745914" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "67" - endingLineNumber = "67" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "105" - endingLineNumber = "105" - landmarkName = "-viewWillAppear:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436102748.214153" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "621" - endingLineNumber = "621" - landmarkName = "-insertAllUser:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "437450075.368062" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "972" - endingLineNumber = "972" - landmarkName = "-observeValueForKeyPath:ofObject:change:context:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[ChattingMainViewController observeValueForKeyPath:ofObject:change:context:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/%E9%AB%98%E5%B1%82%E7%88%BD%E4%B8%80%E6%8A%8A%E7%89%88/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "435661958.418818" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "991" - endingLineNumber = "991" - offsetFromSymbolStart = "1076"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__77-[ChattingMainViewController observeValueForKeyPath:ofObject:change:context:]_block_invoke674" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/%E9%AB%98%E5%B1%82%E7%88%BD%E4%B8%80%E6%8A%8A%E7%89%88/TeamTalk/IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "435661958.419002" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "991" - endingLineNumber = "991" - offsetFromSymbolStart = "18"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "262" - endingLineNumber = "262" - landmarkName = "-tableView:cellForRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Entity/DDMessageEntity.m" - timestampString = "436958709.350687" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "109" - endingLineNumber = "109" - landmarkName = "-isGroupMessage" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Entity/DDMessageEntity.m" - timestampString = "437553728.895433" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "207" - endingLineNumber = "207" - landmarkName = "+makeMessageFromStream:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "437450075.368062" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "797" - endingLineNumber = "797" - landmarkName = "-p_imageCell_tableView:cellForRowAtIndexPath:message:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436102748.214153" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "622" - endingLineNumber = "622" - landmarkName = "-insertAllUser:completion:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__43-[DDDatabaseUtil insertAllUser:completion:]_block_invoke" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "435811934.920795" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "586" - endingLineNumber = "586" - offsetFromSymbolStart = "161"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__43-[DDDatabaseUtil insertAllUser:completion:]_block_invoke_2" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "435811934.920963" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "586" - endingLineNumber = "586" - offsetFromSymbolStart = "79"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436894473.611652" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "60" - endingLineNumber = "60" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChattingMainViewController.m" - timestampString = "435995156.362222" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "166" - endingLineNumber = "166" - landmarkName = "-sendImageMessage:Image:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/SendPushTokenAPI.m" - timestampString = "435827549.967253" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "83" - endingLineNumber = "83" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChatUtility/ChatUtilityViewController.m" - timestampString = "435835690.388957" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "141" - endingLineNumber = "141" - landmarkName = "-imagePickerController:didFinishPickingMediaWithInfo:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m" - timestampString = "435914528.08764" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "80" - endingLineNumber = "80" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDGetUserUnreadMessagesAPI.m" - timestampString = "437987146.169532" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "141" - endingLineNumber = "141" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/ChatUtility/DDAlbumDetailsViewControll.m" - timestampString = "435999131.436656" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "98" - endingLineNumber = "98" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m" - timestampString = "437973987.858736" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "54" - endingLineNumber = "54" - landmarkName = "-uploadImage:success:failure:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__53-[DDSendPhotoMessageAPI uploadImage:success:failure:]_block_invoke" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m" - timestampString = "435999376.396247" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - offsetFromSymbolStart = "229"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__Block_byref_object_copy_" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m" - timestampString = "435999376.396418" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - offsetFromSymbolStart = "19"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__Block_byref_object_dispose_" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendPhotoMessageAPI.m" - timestampString = "435999376.396537" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - offsetFromSymbolStart = "17"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ImagesPreviewViewController.m" - timestampString = "437974733.691472" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "201" - endingLineNumber = "201" - landmarkName = "-sendPhotos:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUsersViewController.m" - timestampString = "437967686.913199" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "334" - endingLineNumber = "334" - landmarkName = "-n_receiveLoginFailureNotification:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Messages/DDMessageSendManager.m" - timestampString = "436107205.371952" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "93" - endingLineNumber = "93" - landmarkName = "-sendMessage:isGroup:forSessionID:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DDGroupModule.m" - timestampString = "436871016.118082" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "34" - endingLineNumber = "34" - landmarkName = "-init" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/SearchContentViewController.m" - timestampString = "436851668.248256" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "42" - endingLineNumber = "42" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "394" - endingLineNumber = "394" - landmarkName = "-tableView:didSelectRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Users/DDUserModule.m" - timestampString = "436333082.345521" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "67" - endingLineNumber = "67" - landmarkName = "-addMaintanceUser:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/PublicProfileViewControll.m" - timestampString = "436776070.64773" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "46" - endingLineNumber = "46" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436957209.835908" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "250" - endingLineNumber = "250" - landmarkName = "-setShowGroup:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[RecentUserCell setShowGroup:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436801276.117069" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "249" - endingLineNumber = "249" - offsetFromSymbolStart = "6125"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__31-[RecentUserCell setShowGroup:]_block_invoke155" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436801276.117306" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "249" - endingLineNumber = "249" - offsetFromSymbolStart = "76"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436957209.835908" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "192" - endingLineNumber = "192" - landmarkName = "-setShowGroup:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[RecentUserCell setShowGroup:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436801489.449731" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "192" - endingLineNumber = "192" - offsetFromSymbolStart = "1679"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__31-[RecentUserCell setShowGroup:]_block_invoke_2" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436801489.449946" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "192" - endingLineNumber = "192" - offsetFromSymbolStart = "94"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUserCell.m" - timestampString = "436957209.835908" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "211" - endingLineNumber = "211" - landmarkName = "-setShowGroup:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDDataInputStream.m" - timestampString = "436868740.481533" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "95" - endingLineNumber = "95" - landmarkName = "-readUTF" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDFixedGroupAPI.m" - timestampString = "436868921.545492" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "73" - endingLineNumber = "73" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436894473.611652" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "59" - endingLineNumber = "59" - landmarkName = "-viewDidLoad" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/DDChattingEditViewController.m" - timestampString = "436893241.433016" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "148" - endingLineNumber = "148" - landmarkName = "-refreshUsers:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DDGroupModule.m" - timestampString = "436871016.118082" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "91" - endingLineNumber = "91" - landmarkName = "-getGroupByGId:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/ContactsViewController.m" - timestampString = "437468553.645169" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "295" - endingLineNumber = "295" - landmarkName = "-tableView:cellForRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/DDContactsCell.m" - timestampString = "436883507.103705" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - landmarkName = "-setCellContent:Name:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[DDContactsCell setCellContent:Name:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/DDContactsCell.m" - timestampString = "436883525.822274" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - offsetFromSymbolStart = "86"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__38-[DDContactsCell setCellContent:Name:]_block_invoke" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/VC/DDContactsCell.m" - timestampString = "436883525.822512" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" - offsetFromSymbolStart = "84"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/DDChattingEditViewController.m" - timestampString = "436891181.06953" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "105" - endingLineNumber = "105" - landmarkName = "-viewWillAppear:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Messages/DDMessageSendManager.m" - timestampString = "436887945.526941" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "105" - endingLineNumber = "105" - landmarkName = "-sendMessage:isGroup:forSessionID:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436888467.832163" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "410" - endingLineNumber = "410" - landmarkName = "-updateMessageForMessage:completion:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436898084.192692" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "299" - endingLineNumber = "299" - landmarkName = "-tableView:cellForRowAtIndexPath:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/Chatting/EditGroupViewController.m" - timestampString = "436895950.221536" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "120" - endingLineNumber = "120" - landmarkName = "-searchDisplayController:shouldReloadTableForSearchString:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Messages/DDMessageModule.m" - timestampString = "437379102.620507" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "449" - endingLineNumber = "449" - landmarkName = "-setApplicationUnreadMsgCount" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m" - timestampString = "436959924.662118" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "210" - endingLineNumber = "210" - landmarkName = "-n_receiveUnreadMessageUpdateNotification:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Messages/DDMessageModule.m" - timestampString = "437379102.620507" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "449" - endingLineNumber = "449" - landmarkName = "-setApplicationUnreadMsgCount" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "436958888.695979" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "72" - endingLineNumber = "72" - landmarkName = "-openCurrentUserDB" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Login/DDLoginAPI.m" - timestampString = "437379548.640561" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "74" - endingLineNumber = "74" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/Login/DDMsgServer.m" - timestampString = "437626434.256115" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "90" - endingLineNumber = "90" - landmarkName = "-checkUserID:Pwd:token:success:failure:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "437381858.462516" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "703" - endingLineNumber = "703" - landmarkName = "-loadGroupsCompletion:" - landmarkType = "5"> - <Locations> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "-[DDDatabaseUtil loadGroupsCompletion:]" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "437382026.551567" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "703" - endingLineNumber = "703" - offsetFromSymbolStart = "79"> - </Location> - <Location - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - symbolName = "__39-[DDDatabaseUtil loadGroupsCompletion:]_block_invoke" - moduleName = "TeamTalk" - urlString = "file:///Users/Michael/teamtalk-ios/IOSDuoduo/Module/DataBase/DDDatabaseUtil.m" - timestampString = "437382026.551885" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "703" - endingLineNumber = "703" - offsetFromSymbolStart = "64"> - </Location> - </Locations> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m" - timestampString = "437622591.396416" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "149" - endingLineNumber = "149" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m" - timestampString = "437466225.809856" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "95" - endingLineNumber = "95" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendMessageAPI.m" - timestampString = "437466225.809856" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "93" - endingLineNumber = "93" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDTcpClientManager.m" - timestampString = "437539439.579903" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "137" - endingLineNumber = "137" - landmarkName = "-stream:handleEvent:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDTcpClientManager.m" - timestampString = "437540795.151078" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "177" - endingLineNumber = "177" - landmarkName = "-p_handleEventHasSpaceAvailableStream:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDTcpClientManager.m" - timestampString = "437540823.768175" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "95" - endingLineNumber = "95" - landmarkName = "-writeToSocket:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m" - timestampString = "437553349.456047" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "104" - endingLineNumber = "104" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Msg/DDSendVoiceMessageAPI.m" - timestampString = "437553404.538266" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "114" - endingLineNumber = "114" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/VC/RecentContacts/RecentUserVCModule.m" - timestampString = "437554355.235284" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "261" - endingLineNumber = "261" - landmarkName = "-n_receiveMessageNotification:" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/RequestAPI/Users/GetGroupInfoAPi.m" - timestampString = "437557094.979482" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "99" - endingLineNumber = "99" - landmarkName = "-packageRequestObject" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "IOSDuoduo/TCPAPI/DDGroupsUnreadMessageAPI.m" - timestampString = "437622140.652818" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "77" - endingLineNumber = "77" - landmarkName = "-analysisReturnData" - landmarkType = "5"> - </BreakpointContent> - </BreakpointProxy> - </Breakpoints> -</Bucket> diff --git a/TeamTalk/edit.png b/TeamTalk/edit.png deleted file mode 100644 index 95c1c65346a5e6ab8ca64c5f5ff86a545f57309a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 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 AyZ`_I diff --git a/TeamTalk/edit@2x.png b/TeamTalk/edit@2x.png deleted file mode 100644 index 95c1c65346a5e6ab8ca64c5f5ff86a545f57309a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 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 AyZ`_I diff --git a/TeamTalk/en.lproj/InfoPlist.strings b/TeamTalk/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/TeamTalk/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/TeamTalk/group_default.png b/TeamTalk/group_default.png deleted file mode 100644 index 1315d0aa3a117255ae2c57453986968a8752a2f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4312 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 diff --git a/TeamTalk/group_default@2x.png b/TeamTalk/group_default@2x.png deleted file mode 100644 index 1315d0aa3a117255ae2c57453986968a8752a2f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4312 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 diff --git a/TeamTalk/launchimage.png b/TeamTalk/launchimage.png deleted file mode 100644 index e75e0243b5a80f50f941d75413d3b488e3c81b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092383 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%0DgZHDPbr;--BfB!Oddx#Ec!Glo-9u#kC>ShPDzca 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%0A>-&3iK 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%0AcD^V^M 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 diff --git a/TeamTalk/loginlogo.png b/TeamTalk/loginlogo.png deleted file mode 100644 index 852f1d5db21e36a4b11273616b839121f8792418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20838 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 diff --git a/TeamTalk/main.m b/TeamTalk/main.m deleted file mode 100644 index 268781a..0000000 --- a/TeamTalk/main.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// main.m -// IOSDuoduo -// -// Created by 独嘉 on 14-5-23. -// Copyright (c) 2014年 dujia. All rights reserved. -// -//jide viewed - -#import <UIKit/UIKit.h> - -#import "DDAppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([DDAppDelegate class])); - } -} diff --git a/TeamTalk/npm-debug.log b/TeamTalk/npm-debug.log deleted file mode 100644 index dadb017..0000000 --- a/TeamTalk/npm-debug.log +++ /dev/null @@ -1,283 +0,0 @@ -0 info it worked if it ends with ok -1 verbose cli [ 'node', '/usr/local/bin/npm', 'install', '-g', 'coffee-script' ] -2 info using npm@1.4.14 -3 info using node@v0.10.29 -4 verbose cache add [ 'coffee-script', null ] -5 verbose cache add name=undefined spec="coffee-script" args=["coffee-script",null] -6 verbose parsed url { protocol: null, -6 verbose parsed url slashes: null, -6 verbose parsed url auth: null, -6 verbose parsed url host: null, -6 verbose parsed url port: null, -6 verbose parsed url hostname: null, -6 verbose parsed url hash: null, -6 verbose parsed url search: null, -6 verbose parsed url query: null, -6 verbose parsed url pathname: 'coffee-script', -6 verbose parsed url path: 'coffee-script', -6 verbose parsed url href: 'coffee-script' } -7 silly lockFile ab358269-coffee-script coffee-script -8 verbose lock coffee-script /Users/Michael/.npm/ab358269-coffee-script.lock -9 silly lockFile ab358269-coffee-script coffee-script -10 silly lockFile ab358269-coffee-script coffee-script -11 verbose addNamed [ 'coffee-script', '' ] -12 verbose addNamed [ null, '*' ] -13 silly lockFile 53951495-coffee-script coffee-script@ -14 verbose lock coffee-script@ /Users/Michael/.npm/53951495-coffee-script.lock -15 silly addNameRange { name: 'coffee-script', range: '*', hasData: false } -16 verbose url raw coffee-script -17 verbose url resolving [ 'https://registry.npmjs.org/', './coffee-script' ] -18 verbose url resolved https://registry.npmjs.org/coffee-script -19 info trying registry request attempt 1 at 18:49:01 -20 http GET https://registry.npmjs.org/coffee-script -21 http 200 https://registry.npmjs.org/coffee-script -22 silly registry.get cb [ 200, -22 silly registry.get { date: 'Fri, 04 Jul 2014 10:49:08 GMT', -22 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R14B04)', -22 silly registry.get etag: '"CC0ZEST7BYCNQFQH6QSFE1H1R"', -22 silly registry.get 'content-type': 'application/json', -22 silly registry.get 'cache-control': 'max-age=30', -22 silly registry.get 'content-length': '30863', -22 silly registry.get 'accept-ranges': 'bytes', -22 silly registry.get via: '1.1 varnish', -22 silly registry.get age: '1094', -22 silly registry.get 'x-served-by': 'cache-sjc3132-SJC', -22 silly registry.get 'x-cache': 'HIT', -22 silly registry.get 'x-cache-hits': '1', -22 silly registry.get 'x-timer': 'S1404470948.134660,VS0,VE0', -22 silly registry.get vary: 'Accept', -22 silly registry.get 'keep-alive': 'timeout=10, max=50', -22 silly registry.get connection: 'Keep-Alive' } ] -23 silly addNameRange number 2 { name: 'coffee-script', range: '*', hasData: true } -24 silly addNameRange versions [ 'coffee-script', -24 silly addNameRange [ '0.7.0', -24 silly addNameRange '0.7.1', -24 silly addNameRange '0.7.2', -24 silly addNameRange '0.9.0', -24 silly addNameRange '0.9.1', -24 silly addNameRange '0.9.2', -24 silly addNameRange '0.9.3', -24 silly addNameRange '0.9.4', -24 silly addNameRange '0.9.5', -24 silly addNameRange '0.9.6', -24 silly addNameRange '1.0.0', -24 silly addNameRange '1.0.1', -24 silly addNameRange '1.1.0', -24 silly addNameRange '1.1.1', -24 silly addNameRange '1.1.2', -24 silly addNameRange '1.1.3', -24 silly addNameRange '1.2.0', -24 silly addNameRange '1.3.0', -24 silly addNameRange '1.3.1', -24 silly addNameRange '1.3.2', -24 silly addNameRange '1.3.3', -24 silly addNameRange '1.4.0', -24 silly addNameRange '1.5.0', -24 silly addNameRange '1.6.0', -24 silly addNameRange '1.6.1', -24 silly addNameRange '1.6.2', -24 silly addNameRange '1.6.3', -24 silly addNameRange '1.7.0', -24 silly addNameRange '1.7.1' ] ] -25 verbose addNamed [ 'coffee-script', '1.7.1' ] -26 verbose addNamed [ '1.7.1', '1.7.1' ] -27 silly lockFile 66cb63a1-coffee-script-1-7-1 coffee-script@1.7.1 -28 verbose lock coffee-script@1.7.1 /Users/Michael/.npm/66cb63a1-coffee-script-1-7-1.lock -29 silly lockFile 81f11821-e-script-coffee-script-1-7-1-tgz https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -30 verbose lock https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz /Users/Michael/.npm/81f11821-e-script-coffee-script-1-7-1-tgz.lock -31 verbose addRemoteTarball [ 'https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz', -31 verbose addRemoteTarball '62996a861780c75e6d5069d13822723b73404bfc' ] -32 info retry fetch attempt 1 at 18:49:08 -33 verbose fetch to= /var/folders/h5/s9yx_ztn0mj7yjtxl8g53g9w0000gn/T/npm-11593-41G3n-g1/registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -34 http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -35 http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -36 silly lockFile 81f11821-e-script-coffee-script-1-7-1-tgz https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -37 silly lockFile 81f11821-e-script-coffee-script-1-7-1-tgz https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz -38 silly lockFile 66cb63a1-coffee-script-1-7-1 coffee-script@1.7.1 -39 silly lockFile 66cb63a1-coffee-script-1-7-1 coffee-script@1.7.1 -40 silly lockFile 53951495-coffee-script coffee-script@ -41 silly lockFile 53951495-coffee-script coffee-script@ -42 silly resolved [ { name: 'coffee-script', -42 silly resolved description: 'Unfancy JavaScript', -42 silly resolved keywords: [ 'javascript', 'language', 'coffeescript', 'compiler' ], -42 silly resolved author: { name: 'Jeremy Ashkenas' }, -42 silly resolved version: '1.7.1', -42 silly resolved license: 'MIT', -42 silly resolved engines: { node: '>=0.8.0' }, -42 silly resolved directories: { lib: './lib/coffee-script' }, -42 silly resolved main: './lib/coffee-script/coffee-script', -42 silly resolved bin: { coffee: './bin/coffee', cake: './bin/cake' }, -42 silly resolved scripts: { test: 'node ./bin/cake test' }, -42 silly resolved homepage: 'http://coffeescript.org/', -42 silly resolved bugs: { url: 'https://github.com/jashkenas/coffee-script/issues' }, -42 silly resolved repository: -42 silly resolved { type: 'git', -42 silly resolved url: 'git://github.com/jashkenas/coffee-script.git' }, -42 silly resolved devDependencies: -42 silly resolved { 'uglify-js': '~2.2', -42 silly resolved jison: '>=0.2.0', -42 silly resolved 'highlight.js': '~8.0.0', -42 silly resolved underscore: '~1.5.2' }, -42 silly resolved dependencies: { mkdirp: '~0.3.5' }, -42 silly resolved _id: 'coffee-script@1.7.1', -42 silly resolved dist: -42 silly resolved { shasum: '62996a861780c75e6d5069d13822723b73404bfc', -42 silly resolved tarball: 'http://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz' }, -42 silly resolved _from: 'coffee-script@', -42 silly resolved _npmVersion: '1.3.24', -42 silly resolved _npmUser: { name: 'michaelficarra', email: 'npm@michael.ficarra.me' }, -42 silly resolved maintainers: [ [Object] ], -42 silly resolved _shasum: '62996a861780c75e6d5069d13822723b73404bfc', -42 silly resolved _resolved: 'https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz' } ] -43 info install coffee-script@1.7.1 into /usr/local/lib -44 info installOne coffee-script@1.7.1 -45 info /usr/local/lib/node_modules/coffee-script unbuild -46 verbose tar unpack /Users/Michael/.npm/coffee-script/1.7.1/package.tgz -47 silly lockFile 865d9b08-l-lib-node-modules-coffee-script tar:///usr/local/lib/node_modules/coffee-script -48 verbose lock tar:///usr/local/lib/node_modules/coffee-script /Users/Michael/.npm/865d9b08-l-lib-node-modules-coffee-script.lock -49 silly lockFile 295f4ffb--coffee-script-1-7-1-package-tgz tar:///Users/Michael/.npm/coffee-script/1.7.1/package.tgz -50 verbose lock tar:///Users/Michael/.npm/coffee-script/1.7.1/package.tgz /Users/Michael/.npm/295f4ffb--coffee-script-1-7-1-package-tgz.lock -51 silly gunzTarPerm modes [ '755', '644' ] -52 silly gunzTarPerm extractEntry package.json -53 silly gunzTarPerm extractEntry .npmignore -54 silly gunzTarPerm extractEntry README -55 silly gunzTarPerm extractEntry LICENSE -56 silly gunzTarPerm extractEntry register.js -57 silly gunzTarPerm extractEntry CNAME -58 silly gunzTarPerm extractEntry CONTRIBUTING.md -59 silly gunzTarPerm extractEntry bin/cake -60 silly gunzTarPerm extractEntry bin/coffee -61 silly gunzTarPerm extractEntry lib/coffee-script/browser.js -62 silly gunzTarPerm extractEntry lib/coffee-script/grammar.js -63 silly gunzTarPerm extractEntry lib/coffee-script/helpers.js -64 silly gunzTarPerm extractEntry lib/coffee-script/index.js -65 silly gunzTarPerm extractEntry lib/coffee-script/lexer.js -66 silly gunzTarPerm extractEntry lib/coffee-script/command.js -67 silly gunzTarPerm extractEntry lib/coffee-script/optparse.js -68 silly gunzTarPerm extractEntry lib/coffee-script/parser.js -69 silly gunzTarPerm extractEntry lib/coffee-script/register.js -70 silly gunzTarPerm extractEntry lib/coffee-script/repl.js -71 silly gunzTarPerm extractEntry lib/coffee-script/rewriter.js -72 silly gunzTarPerm extractEntry lib/coffee-script/coffee-script.js -73 silly gunzTarPerm extractEntry lib/coffee-script/scope.js -74 silly gunzTarPerm extractEntry lib/coffee-script/cake.js -75 silly gunzTarPerm extractEntry lib/coffee-script/sourcemap.js -76 silly gunzTarPerm extractEntry lib/coffee-script/nodes.js -77 silly lockFile 865d9b08-l-lib-node-modules-coffee-script tar:///usr/local/lib/node_modules/coffee-script -78 silly lockFile 865d9b08-l-lib-node-modules-coffee-script tar:///usr/local/lib/node_modules/coffee-script -79 silly lockFile 295f4ffb--coffee-script-1-7-1-package-tgz tar:///Users/Michael/.npm/coffee-script/1.7.1/package.tgz -80 silly lockFile 295f4ffb--coffee-script-1-7-1-package-tgz tar:///Users/Michael/.npm/coffee-script/1.7.1/package.tgz -81 info preinstall coffee-script@1.7.1 -82 verbose readDependencies using package.json deps -83 verbose readDependencies using package.json deps -84 verbose cache add [ 'mkdirp@~0.3.5', null ] -85 verbose cache add name=undefined spec="mkdirp@~0.3.5" args=["mkdirp@~0.3.5",null] -86 verbose parsed url { protocol: null, -86 verbose parsed url slashes: null, -86 verbose parsed url auth: null, -86 verbose parsed url host: null, -86 verbose parsed url port: null, -86 verbose parsed url hostname: null, -86 verbose parsed url hash: null, -86 verbose parsed url search: null, -86 verbose parsed url query: null, -86 verbose parsed url pathname: 'mkdirp@~0.3.5', -86 verbose parsed url path: 'mkdirp@~0.3.5', -86 verbose parsed url href: 'mkdirp@~0.3.5' } -87 verbose cache add name="mkdirp" spec="~0.3.5" args=["mkdirp","~0.3.5"] -88 verbose parsed url { protocol: null, -88 verbose parsed url slashes: null, -88 verbose parsed url auth: null, -88 verbose parsed url host: null, -88 verbose parsed url port: null, -88 verbose parsed url hostname: null, -88 verbose parsed url hash: null, -88 verbose parsed url search: null, -88 verbose parsed url query: null, -88 verbose parsed url pathname: '~0.3.5', -88 verbose parsed url path: '~0.3.5', -88 verbose parsed url href: '~0.3.5' } -89 verbose addNamed [ 'mkdirp', '~0.3.5' ] -90 verbose addNamed [ null, '>=0.3.5-0 <0.4.0-0' ] -91 silly lockFile c3f0fe9b-mkdirp-0-3-5 mkdirp@~0.3.5 -92 verbose lock mkdirp@~0.3.5 /Users/Michael/.npm/c3f0fe9b-mkdirp-0-3-5.lock -93 silly addNameRange { name: 'mkdirp', range: '>=0.3.5-0 <0.4.0-0', hasData: false } -94 verbose url raw mkdirp -95 verbose url resolving [ 'https://registry.npmjs.org/', './mkdirp' ] -96 verbose url resolved https://registry.npmjs.org/mkdirp -97 info trying registry request attempt 1 at 18:49:10 -98 verbose etag "ACARTNYE6GYDMXJ48O2B4DNXR" -99 http GET https://registry.npmjs.org/mkdirp -100 http 200 https://registry.npmjs.org/mkdirp -101 silly registry.get cb [ 200, -101 silly registry.get { date: 'Fri, 04 Jul 2014 10:49:11 GMT', -101 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', -101 silly registry.get etag: '"6XW69NVJIFVOZ6TDZNH0IRNN9"', -101 silly registry.get 'content-type': 'application/json', -101 silly registry.get 'cache-control': 'max-age=30', -101 silly registry.get 'content-length': '21402', -101 silly registry.get 'accept-ranges': 'bytes', -101 silly registry.get via: '1.1 varnish', -101 silly registry.get age: '1394', -101 silly registry.get 'x-served-by': 'cache-sjc3135-SJC', -101 silly registry.get 'x-cache': 'HIT', -101 silly registry.get 'x-cache-hits': '2', -101 silly registry.get 'x-timer': 'S1404470951.527148,VS0,VE0', -101 silly registry.get vary: 'Accept', -101 silly registry.get 'keep-alive': 'timeout=10, max=50', -101 silly registry.get connection: 'Keep-Alive' } ] -102 silly addNameRange number 2 { name: 'mkdirp', range: '>=0.3.5-0 <0.4.0-0', hasData: true } -103 silly addNameRange versions [ 'mkdirp', -103 silly addNameRange [ '0.0.1', -103 silly addNameRange '0.0.2', -103 silly addNameRange '0.0.3', -103 silly addNameRange '0.0.4', -103 silly addNameRange '0.0.5', -103 silly addNameRange '0.0.6', -103 silly addNameRange '0.0.7', -103 silly addNameRange '0.1.0', -103 silly addNameRange '0.2.0', -103 silly addNameRange '0.2.1', -103 silly addNameRange '0.2.2', -103 silly addNameRange '0.3.0', -103 silly addNameRange '0.3.1', -103 silly addNameRange '0.3.2', -103 silly addNameRange '0.3.3', -103 silly addNameRange '0.3.4', -103 silly addNameRange '0.3.5', -103 silly addNameRange '0.4.0', -103 silly addNameRange '0.4.1', -103 silly addNameRange '0.4.2', -103 silly addNameRange '0.5.0' ] ] -104 verbose addNamed [ 'mkdirp', '0.3.5' ] -105 verbose addNamed [ '0.3.5', '0.3.5' ] -106 silly lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5 -107 verbose lock mkdirp@0.3.5 /Users/Michael/.npm/67d2df2a-mkdirp-0-3-5.lock -108 silly lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5 -109 silly lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5 -110 silly lockFile c3f0fe9b-mkdirp-0-3-5 mkdirp@~0.3.5 -111 silly lockFile c3f0fe9b-mkdirp-0-3-5 mkdirp@~0.3.5 -112 verbose about to build /usr/local/lib/node_modules/coffee-script -113 info /usr/local/lib/node_modules/coffee-script unbuild -114 info preuninstall coffee-script@1.7.1 -115 info uninstall coffee-script@1.7.1 -116 verbose true,/usr/local/lib/node_modules,/usr/local/lib/node_modules unbuild coffee-script@1.7.1 -117 verbose /usr/local/bin,[object Object] binRoot -118 info postuninstall coffee-script@1.7.1 -119 error Error: EACCES, open '/Users/Michael/.npm/mkdirp/0.3.5/package/package.json' -119 error { [Error: EACCES, open '/Users/Michael/.npm/mkdirp/0.3.5/package/package.json'] -119 error errno: 3, -119 error code: 'EACCES', -119 error path: '/Users/Michael/.npm/mkdirp/0.3.5/package/package.json', -119 error parent: 'coffee-script' } -120 error Please try running this command again as root/Administrator. -121 error System Darwin 13.3.0 -122 error command "node" "/usr/local/bin/npm" "install" "-g" "coffee-script" -123 error cwd /Users/Michael/Work/ios-os-im/IOSDuoduo -124 error node -v v0.10.29 -125 error npm -v 1.4.14 -126 error path /Users/Michael/.npm/mkdirp/0.3.5/package/package.json -127 error code EACCES -128 error errno 3 -129 error stack Error: EACCES, open '/Users/Michael/.npm/mkdirp/0.3.5/package/package.json' -130 verbose exit [ 3, true ] diff --git a/TeamTalk/resources/add.png b/TeamTalk/resources/add.png deleted file mode 100644 index a8b66ba55f6a527ea064bf6ecf385aa47a3409ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4623 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 diff --git a/TeamTalk/resources/add@2x.png b/TeamTalk/resources/add@2x.png deleted file mode 100644 index a8b66ba55f6a527ea064bf6ecf385aa47a3409ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4623 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 diff --git a/TeamTalk/resources/chat.png b/TeamTalk/resources/chat.png deleted file mode 100644 index c6696f692781f67de5a8819ab11bd0bce39442ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4049 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 F{0}a@C{q9c diff --git a/TeamTalk/resources/chat@2x.png b/TeamTalk/resources/chat@2x.png deleted file mode 100644 index c6696f692781f67de5a8819ab11bd0bce39442ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4049 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 F{0}a@C{q9c diff --git a/TeamTalk/resources/contact.png b/TeamTalk/resources/contact.png deleted file mode 100644 index fcb6ab6921b8373799b52038a6bf7a804c4afab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2670 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 O19axNv#&ZF`tH95)MgI= diff --git a/TeamTalk/resources/contact@2x.png b/TeamTalk/resources/contact@2x.png deleted file mode 100644 index fcb6ab6921b8373799b52038a6bf7a804c4afab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2670 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 O19axNv#&ZF`tH95)MgI= diff --git a/TeamTalk/resources/contact_selected.png b/TeamTalk/resources/contact_selected.png deleted file mode 100644 index e86e8ced1342f9ff0511888de8a4824672991473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2407 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 Gw*LTS2J!U( diff --git a/TeamTalk/resources/contact_selected@2x.png b/TeamTalk/resources/contact_selected@2x.png deleted file mode 100644 index e86e8ced1342f9ff0511888de8a4824672991473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2407 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 Gw*LTS2J!U( diff --git a/TeamTalk/resources/conversation.png b/TeamTalk/resources/conversation.png deleted file mode 100644 index f8d8b2d61841a5ed99b640fe7f97f94d11fc7323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2315 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 R)xT`NC*dqM^9((4%b#A2%?tnl diff --git a/TeamTalk/resources/conversation@2x.png b/TeamTalk/resources/conversation@2x.png deleted file mode 100644 index f8d8b2d61841a5ed99b640fe7f97f94d11fc7323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2315 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 R)xT`NC*dqM^9((4%b#A2%?tnl diff --git a/TeamTalk/resources/conversation_selected.png b/TeamTalk/resources/conversation_selected.png deleted file mode 100644 index 60a305973a954b87cafbcf9d5a38c74f0afff62d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2079 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 diff --git a/TeamTalk/resources/conversation_selected@2x.png b/TeamTalk/resources/conversation_selected@2x.png deleted file mode 100644 index 60a305973a954b87cafbcf9d5a38c74f0afff62d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2079 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 diff --git a/TeamTalk/resources/dd_album.png b/TeamTalk/resources/dd_album.png deleted file mode 100644 index 4823046c17d7fd4d67179afb5a4d83a057bdee2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2000 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 O9m`?yn3jZ`&;J0<GCDE< diff --git a/TeamTalk/resources/dd_album@2x.png b/TeamTalk/resources/dd_album@2x.png deleted file mode 100644 index 042f7d0e45fc0a3838f415f5c9bc05867db08474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2257 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 diff --git a/TeamTalk/resources/dd_cancel_send_record.png b/TeamTalk/resources/dd_cancel_send_record.png deleted file mode 100644 index f7ea9f644e1375bd5598c1736216a2e4df0bff76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1564 zcmeAS@N?(olHy`uVBq!ia0vp^x<G8r!3HGXPi2+?Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@QuLn2Bde0{8v^K<nQL2C3WatnaE85nHrD+&^mvr|hH zl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZB<rk7%m7Q#vqGWHUU{hfQG$1#% zBvGLvHz%*ys=`(YY_1iM4HDK@QUEI{$+lI3I4Z(7K*2e`C{@8!&saCvz|c^^%uLVF z#MI2pP)EVYz|ctF0Eo<V4Na^}&8&>f6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}<f6=ilFa-(1(1n}N%^HE zwn{*kLcEY$05>+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%ayD>svoNx7b~SM|HZ*iKb~11>c5$(^Fg15} zG&D6ahv{|6PcF?(%`1WFO+n~&!KoLN7;+1MHoK%2WtOF;xE1B+Du6w0m5JLejyTPO z>P^Az7AKr~^?{Dj2SqJXRKtXT=?BDwCtM&0p7c}mfa$#mn6Rfdb}=(BF!g!5IEGZ* zdNb?1cc`Pt@%Pp1|1h#X;tvoHYU^NaQgfXpy;*?kQ19%2%;A@oO}nJzw8VAxJu88Y z^SMp0w9bf-cKoI2=-H$o(Ih!7abetk^?Zf?@@Hq~nitPMX!+shoXYZNk1dSfe>!)h z=Kgmbcg+lT-v>MvoTm;1Zs5IkKxhVg{y~cfPE#h&=to=<4EBEuHnPrZe7!6A=7e0f z<b88zuuYHgzW?#=5oYmAtO-}jrHvP;-2GwL+*`r3hpAU_-c3%kL?#)|k9U}MaD?%z z`7ViXe#SFj@t}AD+nJ`+58NURryiv2WUy-X3^<w|z+X3eo}6cI{p;F*wKwA}U-0?~ zgxZ+LUe1-Ys^dQ=`EH`s2Q}yav1*sNyZDwnENp%Jd1X?M=>&1NUu}yvS5C<P=$#d1 z80IhW(sJ2k`v+586BkMRNjMh0==>2=KklmfjD%ai4v3$AuXq1|?y|L9TV8p@r+u2e z;C`_%|H1HOYn|PH=}eYqy)Wx|dHQkTWorZ7ceS1LugXjAIvM`jW4hr_|GuR=|9O`# z`79!REOib0X%*8?rAx|1^&Rz++a;^b=eaH~Jbvk846n@Fc;!n<y4cbG>09b&EZr$D z6|P+1z2v0&iYLE0WWsG?&OKp2$adMS+&Zu7_tmh=H_|>CY8hW%Ix&ge*mdbc{zx1D z%|5DcKWqNv)M^ZEC>P7;&uJ?2e!BDWgU5~gR+>~iig(=4(bF(ZCw=<0pQicyJMy); z4qi>j=lvgRrde(gmu7gld%?9L#gN~VP9-xZM#W7H<XC;`%*hGn30;eX&V@+tU#@5) zrlb9SgNN{T(L>IGr`vYEzc|;;Vy1TD<==AU#hN~EI1LzzCmWt!)pBDhsJ!-c^>bP0 Hl+XkK1W81d diff --git a/TeamTalk/resources/dd_cancel_send_record@2x.png b/TeamTalk/resources/dd_cancel_send_record@2x.png deleted file mode 100644 index bc8dcbd6090fece2fad55ae2a684fc2709da2553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2309 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 diff --git a/TeamTalk/resources/dd_emoji_delete.png b/TeamTalk/resources/dd_emoji_delete.png deleted file mode 100644 index e970785f66c4040f746cc88e518abfaec3c66bbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}v!3HFkAH8}DNJ*BsMwA5Sr<If^7Ns&crsOB3 zDtP85rl$s_CZ<#to=ml2U|?3s42dX-@b$4u&d=3L1gX)h$SnZsW?-<fuP8`N&Q2{+ zNJ>r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT6<RZ(him0w75Rd%vvijuvZf=z`L(16_3 zl0=1y+?>2(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE<O<mczWLNOpCza+mnBfmhwIoM1=!#6QGGY=%7 z3D)83Yvq|&T#}fVoa*Ufs{}MdFEca6%F)=!#M08u)y>Go$k5Q$*wND1z|qyn&DqVs z(cH+;1g6&|Ke;qFHLnDwHwB^B4X0jEV#qB3+U$~Alv$RV;#QQOs{r=2RVHq?IO8-A zsy79<TU>DJ)dxC89~8AnQ4JFUrXLU!o^XL2c+yYJ1E%*PV8Xt>MQlC;1JfZ-7srr_ zTWdnSv!en9<i1Mvs;t!DxOt@Y=99*oY1h}>3i49)<$bZgK(^qbp4YCo_8csxnG2V` z-NdciG&{$oMwcn_#UU1MUX_a(dC#S7ine@bQ<Ri=XHk5vruf;?#Q_=<L@j0bcJ1AJ z_vw50>8GC_e&0SJbJiiB_dM1IX3w78a{RGnOmy_(n>Qn?cwUw54$+%#FB#U5bEkCo z-S&$aQ=UD0_F`j3T3VY$cI;uM54_Twq@|^qD$2{#Umkc_@=8<s^TJD(mGe%s)}FUy z{4uLHp25Q2KA&@i^<~B>a#q$40vTQ<tiN7;vf=)OORcS}Qao%-t7Np?j#$h;oA&a_ z6PLQz>l@#_c#*-fj(y3#bBYg)r`4}pzkc%l_si?{+m{tgYL8s__it^MiPVb81}QIq zQvXjMiqQP@^UviNJ@Xwqb{II$DWBZDW4fh=WpzP8f|?NL=Brtp&TV`x#=m6G%{h5+ z#?hpY>zf__uUWV5SM$LIT3<rup17;K-qOxatxRRt*|WY~N0S~g?<;XqlbGYR^pff& z>lrc+G9~yNqNAfr%F5JuBw1$PwOy&neS4}`>V>@RseQ{>pC5HRn>P8|w{IEg>FyFn zB^z!sdKpW#eVpC;d}~zix%20r9;!W%b;94@UvsM0#Z#xajy^6-JaOS*+INPpL06uO z*T;vf4t>-n#duqnHNa}_G7lA}lPN)N+&q%IeAJY`UOS$d)3~D5US@81%?E2GJ{G1M z`=?F6AaZA|2v=*0ezJ?hg!SvzseCwk)OBX*U%px0<?ojU=PUW0<nODH)_+%G_2g@n zZg9`(hXoNq90INrCN2eniz*Sz%8QO}T)dt~#<`cV=f%|z+RyAJ@E!G5cwO}(;qupA zvbu>8Z^PLBosm|LTYvrX>C>m5eEyl@ZQH`oVf3NdrtkN^Ba$z4yXAiznw&YkP4?jZ g5ByL5+B32-Omb|yc=#fFJ*bTLboFyt=akR{0JC#-YXATM diff --git a/TeamTalk/resources/dd_emoji_delete@2x.png b/TeamTalk/resources/dd_emoji_delete@2x.png deleted file mode 100644 index a84979ecad9a423074f3670e385ffb0f2e085521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 zcmaJ?X;2eq7>?A+p`jvP;m~D4EsePr2qX}kKnSD|<Ol_ivE*1t2+4+IAqiHof}(-~ zMMp6OQ4xqVGEM=ph-eu_JVB@&o-H1LR;oe^UhM_}`=fMccfap@=Xsv@+}WKG;lX$t z2OAs?hv$WGqOg^TJ#JRBuy=Q&do#8W(4aUp8c9I4LN$zIOArwZ@D##CI0_a@^eL^d z9}f44n@kXg#__|LVnjg}nlWUZLWQw$IKNdol~62)Q9uMI%9Jc{sG$i2WD*t_>&2(? zRe`Wn7Lu-pqtn9$;&i!~ApuwU1AaOtCZK>(A)r$vD>Y0V3mn&FVtcch0s`X@RL%lF z1Qo}R00I#;40w?}NMb6D2GHqbnx_|?PFo2;R2oE~VmF;c^JIF_nUFUyae<gOwIqQV z#o<o)!cHtuilQneg`(AJ$yyIGqE4jH7z~D41A<5xf~3(aQK62c)VNM6aA1vCEmNT~ zL<yJ`g(4&sWr0|vA5u`Lreu|xi85gYqv(Vx3XM!Pr!)!V^Zy^JP)wmUXcYW0-v1QV z2=pqL5(R6JRJ9muT!O3Fm5LdthJ`4i79dFSWECT%2#RQ=hzbadrURezg<_e~Y;YfE z@cB%hQiBSWVwlHaftUtaCX+DP9*`%4!DVwH4n(5`d9WECRCW-=4dhbU-Vn`mlFLEF zsR~$$PI4t5xdGF1&BLHjVV*g#T9yV&xN1ZJj3>>MO&^QTw0aX<$@H->rsYzwU?}F+ z{;SoKCTxDp+o{3D4pXBKE3tW3V}rfsr?Ji0_Y%nCum!r_J4M%4JFpjDw5&O2Ey_JW ze|dPlkLN&B+k^9=>ym0mW>t2T9DI*&tQ|PEVk{!CU)zCflzTpUe7>ADH|(vO$#Nt< zX>Lf_t1#`Q`WZ9RN*nxI?Y9^8IBz~P^!)nOgEt2}+e@oD^D3(&3_ITs=e%|q>Dz!` zaXS3nuHJy*s!*FsQ!Me}g9iYCKyX=J$kXo4&dzo#Y%SHDTF~a$NtrQ#G6`-1^8QrI z-mb2eoJEGl6I;Qu8&6!h1*dtJ7ICw(9Qbz)oi{F^zle_~?e4F4xVZ!J#*JO=&wq04 zIcczBi__x8Ky!2R_Ruaa$aD#~ocpk~)w;-FaCLNa#4pV}+b-QZKPSjox+To$>VCy2 z*!4qobz$7fi@57g^Zfe_*AjS8QF8j3wWaoh=sr_>d!*>co)DuzgfkcnUT==zH?=Kl znQ1Y@-L6;wP-<q+Q#ag|BqWquIOerf{e0XdCAX!oeGb!DM$8;eZ;a}QQP?f)a*n^? z$t9$MZhK_#N;@<x*A4J>@k#~@;v=&nxz4@i6%}i~HbLzp{hz(o6Y|$a9gR^SNa5I+ zKFzx>?!9T$N8&cG{jK4v*jS?7$g7Oe3@ZTlTfshS<5_OT%Z$3>E|_(wqy*Bu7=o^o zw%!Y@dp0!W(H$<A%X5yAL0RqEBC{I_cbGWhY@1W4{o=d&7d!GpV&m{c;*mCA+l?w! zTfrq!?zU~)Jo4*TpG%4(GzEW8#r;`lb^Aof@eVI1Tl@W2Vr0RDR0v!rw;A0~<VWo; zE-tPMhUVMEH1-{}RXC-kq(nwbs`!JeYV6bW`ms5Z#$c;npX9?40Fg)}<=yu1^<8K3 z4}Irc`1TwB`<ccAca{4s2LF1~dhgy6>sgt2R)e#xrNQL9bZMc{=q{prpE{I%a`bBD zh9-Gu^~r++LqmyOd)jO2>Tb0??hb}4e#P^}vzsE(z7o4(-nS&tlZ{&KDLI?*tiC{K z&@X$jrsw{qP+<=wmP#w1f|qN{&MlnVv!2{lTk4dyK5IejlJuKce;>Jb49c6Ax$HLK zZk;ZX>O<dsYDn+AU-@_c{6D-$HVs-XcO5$GeYDA94sOTqvmTd!c?WO)$?$^0IVS?* GxBdedR<V}= diff --git a/TeamTalk/resources/dd_emotion.png b/TeamTalk/resources/dd_emotion.png deleted file mode 100644 index 4386ca24ff3b00e0fea6c4d116d7f999413007fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2049 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 NWe&@qSw)XZ`Y)9jV734N diff --git a/TeamTalk/resources/dd_emotion@2x.png b/TeamTalk/resources/dd_emotion@2x.png deleted file mode 100644 index 8a4ab5c5dedb209e521da4e412e2a0ccb5239252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2886 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 bZ3UPPyZUU&UacpKf3^gC5bms3)DQmw9n{*N diff --git a/TeamTalk/resources/dd_has_unread_message.png b/TeamTalk/resources/dd_has_unread_message.png deleted file mode 100644 index 4a4e1e0885c11630529af1e568de53bfa6d8f0d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmeAS@N?(olHy`uVBq!ia0vp^(m*WE!3HFMiJ9mDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{<S3ODsN@GWpo&B*kqDoPEm@(W3>%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC<bKYm*f{`<QFJ72b(Eq_$DT2=79t> z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WnK`;xnmAjUyBWE-85+78J6akWIJz3SIlCD+ znj0CK!1TK0Czs}?=9R$orXciM;M5CB47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Q=H~O z^`_u<iy2P6`as9%gQ6BGs$oLF^aEnT6E2VgPx`5O!1P`OOxO&cw#zawFy8TWaSW-r zwPsqZHcOzy@&1LbIXeqlKM8qV+VoaWQ&ZFY$<uRtRqPtQRX;Jt+$?&kT%oDC^bN1# z9S-rhZ7wHo-7K40`DeayvteRd`T5}eZ*M-gEdFPm{xAI;my!^dB%Ab-*PLEU<0h<+ zHoY0HX_9~EZctTP*Ozx3FKuIuo=bfX>Eivgq{_l!{Zl(Hv+Kc|R{A}Q+04Qo+WGc# z?1_`gvP;^T)K2U?W-GV2^UvatluM1@7dr<AgzB~=)|5{u?yZ)%yv~V--`Tij+02*r z4_(i&|5@;+zb;DTw;wmNqvOXN2Cnw$*8_Hox5_#yc6s;xuVP!9z?aipJ%Qo;0~wct zJCgrQF!4B%CZI4s@x^HcXTOPD8@%p4;_11yE_TAT`SV)79u_*+8?CwJ#g;nd9gE&1 zpENtpaYM;==7fU0YjrtU`xdjGvQ3lKezN_?#-jNrrJl;`=KY>%|H{MH<?fLi%bA^g zzwFFa&AX-{wE9=NeqHBMk<O1clI9y{C~Zvs@JwwR_d3yzwLA8^`Y!+S{N<4u(-)uk zm#XBx&^zFz>zTZ(vt_2`370gf=eG+6>PD3Pxh4GC^>=j2llfAMHs<($QF>t-u|Zp( zp)Yh}^33JpTN=4eXO=%;c++@1XZl0u21bU}6Av|qZ)E%nD*ZfN{an^LB{Ts5;copg diff --git a/TeamTalk/resources/dd_has_unread_message@2x.png b/TeamTalk/resources/dd_has_unread_message@2x.png deleted file mode 100644 index 9ea81b9b124a1f527f8224bd580103ccd2982674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1880 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 diff --git a/TeamTalk/resources/dd_image_send.png b/TeamTalk/resources/dd_image_send.png deleted file mode 100644 index 3558bca9c272dce9ffb8ab7e47b8a7170428e8a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmaJ=TWHik6b)LdR2M|4S|1prV1;g8?WWzht7bP@yJ~9PF1i(=rpdGoHJO-9-Lxu* z{SY7E^G8J}{ZmoVDhP@%s#NiT6+uM=@y8EQ5J6EtoV4BQM{7tjGnaeLJ@+yD>+4pB zO6Haj1QANt${D<_#UC}L82@KqTjJxT3@JI(09#OAa{(b4uo;kPOKSxgpc$RpAA%S` zOk84Sb10{-6Lo0OTHr(bmV?m*5nJgyn%)i&*$i4uJ5GJMahoDdBTj9KsI2NFL7Q3I z<${K;x~$&Su15`O<q9(9i<rOyNF#k~o9&5yoEqX4@jfs!6glLA+T+x)sGM3)CZP++ z2wfT0S&kzGf##|rg1}XfJj?M6i(etkRf!Qn<g3Y%hr-cZqeaZfsgYRt6sOt{azuv7 z=ks*Fl7?<8!$qUffP?45*dy$9+DP-mwzs&zAOlZ#O$V9KCId#T8FrvJg_RDcU^%0- zwl`8HTrkGh9EPLWAf<w%s{Y^AvPQi<lmUPBj!EogI~~AefCoEV9XGCJaS+N8lP=H@ zbh8j{D^#(*4I=2ZL5EB>2xPgc>82eRmJK0PRZQC+(rg{1<v4{oXwx*rL?l@q73As^ zpO83Csg$CXtfcU%WQvuld9JE}m7(5Y0UH&t#$RmBxY%GAEC)xHfotvnM#_a2Ih3?$ zj-f?P@DiI)q!iC8V`~}48slpb#?``LF-*|fe_CBI;rR)+ql1eNqoWUOJnt?Z?1q}- z>+q$xm6oNf|K`)F%c1U7)071$R8pILe4=y^>^XF2&L^U8L-$8#*SDgk?aIBK$Kal& zzdp>&zu5GB`q6jiN^6?0bWL7fe7<;L)7c9Tdd`*7Ti#AxzA<(^*IhpAW<S@z_xOZK z%g)@N{}a4F@c7Zo#(^~h6+L}ljaf6M{HV|eJ|7|5lN08}PTud>$NgU4IPXes!9WE) zc>C&!-h-DGom5(%H@*!qb-y2O?!Bv&fhWFmxu4rra`^SrR}1@g7tJA_t(NH1n|phL O`<+(m<co=|d;b8yBy3m! diff --git a/TeamTalk/resources/dd_image_send@2x.png b/TeamTalk/resources/dd_image_send@2x.png deleted file mode 100644 index 5f751dae282723d716d036326a5575093aeaeb0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7968 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 Q>z}oPj0(6+$~5S|024&wfB*mh diff --git a/TeamTalk/resources/dd_input_normal.png b/TeamTalk/resources/dd_input_normal.png deleted file mode 100644 index a2b0bea631dbc711e9bf3d9f48eda74b4f0ec1d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2060 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 diff --git a/TeamTalk/resources/dd_input_normal@2x.png b/TeamTalk/resources/dd_input_normal@2x.png deleted file mode 100644 index c98f8b3c07586d5b06be5e290324d1d4379372cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2687 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 diff --git a/TeamTalk/resources/dd_left_voice_one.png b/TeamTalk/resources/dd_left_voice_one.png deleted file mode 100644 index 181a701ff398ceacd92b0064f008e87c0adeca4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 997 zcmaJ=PiWIn7>}+LnRHY1u#LeUnTUeT-!`>zaqE)S70ei2aXp$QZ)@C=7n4_;?I3Pm zoFI4-9D;cBAi~ZH15r>sdr>?%Jm^V0co2v4rE5D6*6_mn-pBX*ec$)K-&>!VzL4l0 z>ZK?uQJm6BWIs&)qle;=_36?FvJK*V1<#^++%SAd<t$W%py(J2umlZj`RW@uMo~Q{ z>~aNH^oz2I9L9)Zn9%VEnxe+WL(ec5AqG{rV7m(a?b#L$Y)hf%(mJPmDy-R4D?XfE znJ$|vi)PlM$IpYYP$mQp#0ChRB{z^mg>Lf7#E#r74Voc%QK9#Ws^~L7MLq;+MogL< z&jU$f_*7bw_%lG@c!A}}l9GH%PD`?o0j-ZF*?enWE@_2UE^<=n8pfW?vW-TAX^0H+ z7g#=<%|;x8kR%bwVA;h+m~?~DHiHHO)3-frBNs%BMiteuLX%4OT5!A$tsAtiiCh>P z8Xn6tT+~uKP}lz->NuU~0GHr?z5gT*%F7;POE5rn-z0;ZAB|FZvg$(vBfpH$Qu`KX zY6zpChCHCoO5l`kn6?`^PB#&{E*ISZ8?Fh9nnDu}#<ndvl@Zmm0;lHFQi135VlE?y zg{+!ZCv#$^keAw64ViTZy10$C_OV)5Y$OK9Bbhbm+t;8~@R0+WP0M!oT5?_aT3D-l zEt6fbEGdSKM*G*O+b*J?$m|H096Hj6F44PBguU_V$`SG?=89Ub9KNsa?Cy^DY~EO3 zjd8b*zdf*-;%^VGKH5AswH4ovf#2%u&*vtF6EDBV?!-5q?2H_|ck{*YNc{eT*t^Ev rf&T09?Vl6R*9Q9getkJPM8yWEzQ^L%hw+a;qK8+^Pis#nFR%Rp%}Y7% diff --git a/TeamTalk/resources/dd_left_voice_one@2x.png b/TeamTalk/resources/dd_left_voice_one@2x.png deleted file mode 100644 index 58265e7bc081d061753fb9ee7876d109bc4bf9e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmaJ=O-$2Z7;c<FC0RlO__M^M6b@k6`m=S=W|P4RGNgoTi!OMOuKn05^vCwY6)vE7 zfP*2%crbV)Q8dxSvnGJyfC--13B73IO(QoC67lQUh6k`|`+eV=_j%su{rMJ#hpu>Q zeYF^dc@zCY60K*^N1U!f{~I^kX3=s1_GVzp7=s1L0$8_VWC5Pgq#Q^BNtwF+0Yos& z)1sy`Fe47~vY`be*C*g;CPHIaq{}fSc^p7I3v#L+C4RnLC2&=V64zOg63sZstNqg! zNKFr=<>_&mQ;4q1c*Nlmfd-(2JKBV9^G=i~@$zWznn?mLxxn!#aUd!q4&!md0yrB8 z`elly@o+dmhuCnKZpRslW=IOXVLu(>*)Y#^;N^!v(JW<*PYQkISm+cb@(`LlNfru) zKp_|~tQ<*m9OrT{j30UU?I|5fj$gN%D+~g#WlJ@oYUsGjC}oXF7$uO>gA_EgN~_!D zGNFQzj%1Q_fO1o+IEv!`T{W%hZNnru)O#ecot`oQnFO{mY00Q@W6f?TlaE_Kf`*kg zjEPDWhw}zB?7U&(@l+UZ6(w2KT|-+5A&PuLx1prVAR$Bv#1T+cg=d3QsE6X{c%0#A zx;NO(vNXr`aGi`m3tR_N!3u^vsR12Uu*xBpITq^<gJz=00<hFOK<Tp#4KF3lt4C-F z_J%t8I@sg+%2?%iE!44ENF;`ITl-I|D<(8Q?zTF(=ujPfprd)W&|vS@=O3X<v6K+H z)6PzIZ-2kb<Hzbf57t)JmunV%gZJ0lV_SpT95?HD>&WGoU)Fl^+cPIuPBjh`*YNiZ z^Q&?1pA#GJiq!drhUa&kOGVG;*!TFy%})z0&-%o<nWhCgwLO|^dGotC(6|%ZJL8+` zn$0{NdHCzx{A%pS6KsQg@hw|-&GYqfY%B2!Zgq}aUGzn6?XIi~*evG3MjD$gZniG% PxtBN5J0!gB8NK%x;2c<V diff --git a/TeamTalk/resources/dd_left_voice_three.png b/TeamTalk/resources/dd_left_voice_three.png deleted file mode 100644 index 8871fe53f187be3e522a39c2055b63f9b061da6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1159 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bI!3JVI47&}aBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFso#SM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr<N!r zrKV@**($x?y<bToGsRXZ+|<{=x4=0yBh#a*C^fjsFC@7tJJ~Wt$=*)EroswnKyGSD zqC!P(PF}H9g{>0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?x<p{1oI$P6PRU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcp<j{ZfssLG?;(^reBd*pl_&W0P+${p|3A~rMbCq)x{-2sR;LCHMlsWvLIDI zD784hv?v)EacRmRs|u`~i&7Iy@{2<9^K)RK7?6=)l3$#WU!dR|Y^I>$o0y!L2NKW( z>+top^2{qPNz6-5^>ndS0-B+hnVDi`Vs7kgVPs(8YHH?YXy|I}Xl`WeX6bC|?Br-{ z?&fL+)9aF-T$-DjR|3<Ug3xP;Q!gkn<Q4#Jc1bPDEK5ysE6UGR0DIah6SrH;aGD3z zn}XXd<~a5010ACeidv+oh6w@F4~Pj*xIhj(>8Iua(|ZvxVGF;mF9&9dpPnv`Ar-fh ze*FJ$&n$L^<A|xl9>K^tjO|Hk3U)u`nbHJ<cn<w>_#?9FAZx6lw17U#qf(EgX#q$1 zFNhX1e@tJI!ZGQG<BA!=yRQBU=oI%z`WLWqr@}csg?ardl`LABJWshDe{P>CAt52h zP{<^(+SuWMm_{zs())}b*%iVVHP<zA-Ew$&K48{tM#g(h91|W1tvJA`v6g4)d?igW zmdOs=Lzq7LsF?3>*%iojO1$OMd&PDZZj&y@1nEgT_(O6SHzjTS&!Nz)vQJv;S>L>h zNsShKo@W?VeNbJv<sfsBddNn8#iO?ua7{mSBtoKqIpE13wnq{(7#tcH8EiQpIo*<o Q%LEk-p00i_>zopr0IF+xp8x;= diff --git a/TeamTalk/resources/dd_left_voice_three@2x.png b/TeamTalk/resources/dd_left_voice_three@2x.png deleted file mode 100644 index b414e2d48bcf8810d751cfae858fe637d78db9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1496 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3K!3HFw<24(Alw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24<Dakcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTc<hj*9RNP;kyKN>wn`GuBNuFf>#!Gt)CP zF*P$Y)KM@pFf`IP03tJ8LlY}gGb<x=1t?Gg+E$d3W)<Y(2DJ;wvsKC{DJihh*Do(G z*DE*H%P&gTH?*|01esxEqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTP ztrF0s5HI8wz>Uo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_ z2c;J0mlh=hBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)d=ry1^FRWc zU>&}`R-SpqC5d^-sh%#jN<cI8GBZ=GOpOgpoD3{2ot=#=4Gmq59ZgLQElr&)EsR_Y zT`bLwV0vBhlS^|`^GaZPQxJL`aq0ynhTH<6%`T}$nPsUdZbkXI3SduLW#V>=IZpGS zdQ)(_#R8{ZeV}9XK~ako)i5Do`T;TF2^YwLC;iksV0teCChV`ACcz90OkSQYjv*Dd z)=cx(SQ{vEeEa)~XQfNlxp)YLPZwgA)abuCQzKPjSy!jgLJ?)<W^2O)olg=857HVA z?sXLr=G1&LHC*Kr$Nc~2{%tw8>3iY3k86Kjz4tr%_5SPk*5<$0&ABb6IDzw-W8X=2 zk&8AP^7r4C^C)+|!Ss6De%)pbb0a;L=RP$DcoRKYE0hkcU+}BGRrhd(_30{h7dGuX z9Mc>YB_68x*<&j4P;9G9=41t*$H6Rd9Um4>E?r<%n{v}cy2gD*{M~R#^9>E!6PA3` zPOLLN_~xSk_bbC6YX#*abqmk67d*JgvZS$Es3c*<B)@45=Y^bHnmG-4Y!2P;J0S6L zd9%^So6jQl$DA|sO?!1M<#F=OlFXV#2aP|@oYuTFW#@K<d90N)KXfF{-`;tC*_|%Y z3+tx|aM$ESUVqS&+kVc^<9GW~sm&<{;ld^Uw>a4zN?-bBb;v*E!eY)YmABE&8+>mi z_7#Xq-brONRA~Kjp6AfVlHW@T7&C&I`xDw&r!aMYG3Pl{@`+pWgVVI{(sMR7L|yy8 zTCkVFa>@R;Q@r#fSPj>-2pwS6T$~-cdC!%uNY8Jr^=A}Z_Nq<ho8a@y`GMo(@Wa2l z8~GM^mHj=DY;yX+ZjV1t<Y%M^{arfEckT5Dv(Nt#W0IXM`HHVN=jw*-lN{CVe7Rbw z(|<;{KqP^C)6KHjrW*--ze2W#T>h>(E%$r*eNiXfnYRpWC7ng5ZvQ;@ozUODf@!-J zt?1qP@rYFVqS?FHeKiineLb}0>id6}*M8p^Ao(xw`mAfueH$1V8X3|j><$)Q1S)Gi MUHx3vIVCg!06%Fp;Q#;t diff --git a/TeamTalk/resources/dd_left_voice_two.png b/TeamTalk/resources/dd_left_voice_two.png deleted file mode 100644 index 3ef674ba72ea91b7880573cd41420d985d2f5f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1082 zcmaJ=PiWIn7!U4`n=(*vQ-|U+Q*dK#ns&|B*lcu7>k4L+u4uuFY4W;;EqPh;X0zd; zQ^8KJB3=YV=0QZ%i-@8VhB6O=BI@SJ9VU30f)`~tU$%96u!a}j_ddSg@B4l4``%=- z|474@<}DOOH6;4P6xp|ue|uf6YkfNQk!-thEQ1G74i{t#QV|tpAxP-*AWT779UGa2 zVT!6cprtc7BOT=xq<dvI#_Q-NK~q$?$1!DP2x5?hgPI}GOOKw?KvM<!cu?|5W)$YN zzHti<jQ6LN@gXIo(mmZE?C^v@hgb%VK5W>$Bhah7Jh5FjLxa^2JS5O-qB2qvM3DtS z&>Qe5K9&U>=Vd#B9LKf;zmN4ZKC(Cu+rbAp-rot<KbmB-)Eu7@<LkM|Nucu>n>@o5 z3I%T=;6>IT!-hg3m&5P(kO+@GW?<Rz7<NmUL4>wqX(rZ?0bE8oi$<|P6Qye<=;j8k zVXt2kxiH3&O@{UQ+>*+HlJx&jUEhedaSHy?`%hv!J!V2C1#L8HDWq|^7B`j2M=dC0 zWTg=rF5hA@k1(?H$OO>=4jhtXMKfGS>ncK$_=I6&*-&6Y6llWX)ijll#-hC)@h&zN z<YFuv3q(5ofp{nyjP^zXo$(k~#)?Q8)uDmQSoIIqUlHpLgKm<{BDAzqP>owi2dhQ% zT171+Yeg+<ShcbiUqviK#4v7a|7vyFMdrsfHwKp+Hbx&BWZo?@*xOsVALLQoPKc4T zGoM{vS?Q^|SDc)vF5bydrGq1_InjQ;2`ttwByZn}T)2LvzJ!*~7wZm;bj5exJ=gZ6 zex~`uj-~2_gMDW<UvIWvH=YeUn@cw)GF4yh3(5ICC-UDTb4|&ghc7KYyV+I$vb$z# z>e}~~;R`)g-%f)kwT%~xZ_a<M*<1HMB0Q)qJ^Wg8b=S6)iMDssO|RPfE<fJ1kOseM jW;#og#{3ljm;%$(+x;)*W<QVZb6;~J)-T@aJ$dFgORQs; diff --git a/TeamTalk/resources/dd_left_voice_two@2x.png b/TeamTalk/resources/dd_left_voice_two@2x.png deleted file mode 100644 index 36440660d0be6d6dd5809c8182ef4c24d3417611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1263 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3K!3HFw<24(Alw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24<Dakcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTc<hj*9RNP;kyKN>wn`GuBNuFf>#!Gt)CP zF*P$Y)KM@pFf`IP03tJ8LlY}gGb<x=1t?Gg+E$d3W)<Y(2DJ;wvsKC{DJihh*Do(G z*DE*H%P&gTH?*|01esxEqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTP ztrF0s5HI8wz>Uo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_ z2c;J0mlh=hBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)d=ry1^FRWc zU>&}`R-SpqC5d^-sh%#jN<cI8GBZ=GOpOgpoD3{Yot=#=4Gmq59ZgLQElr&)EsR_Y zT`bLwV0vBhlS^|`^GaZPQxJO1aOwpmhTH<6%`T}$nPsUdZbkXI3SduLW#V>=F;4TK zdQ)(_#RR8beV}9XK~ako)i5Do`T;TF2^YwLC;iksV0teCChXlyuX!^tFeZAsIEGZ* zO8WEvzdf@qgD`XNffWZ;B+s~THzzm#kP!GhImbw2=feY$4u9U;v*a)&x!GhH8t8FW zD*XE?FS;c7aDqUeoAD1@0q!6mGp;GEf_Wv|W(GrJG1f~Ce`HTSIPP%9rRU&+kb{gz zvKuNS1&kLTeH*M0*Lq|+W0H4L@KH4t@vF%j@3QM!WOeXz1*^QTV@!%Oab?P2(^ogs z@MHcMvVwg_;|=z+!SW41M577>=6)_y>Rg!^_+7U1tb5nN{S%JN*tjCuIjLUpXhOQm z#@`uP7L5@yo&UQcnzuIYU^w-k^T_QBS7s~{4ZGf9`a^%xcQuBO-X^Av8GjBhnUa^~ zut%uF^5P_3d4c_oURm-DGn%DRU8SR><~j8`o#5=KSCr(^aud}sjSzp8n{vUe_frI4 z$9o0Is=gZ=RMj*bT%Y+W)OmRc957IBRGX$Ez|HWnH0X8Ev5VVouQ({dpm2cU>Z}cE TmuoL1f{GwdS3j3^P6<r_5lgDC diff --git a/TeamTalk/resources/dd_photo_back.png b/TeamTalk/resources/dd_photo_back.png deleted file mode 100644 index 7e66ba70c32a6c63da430b125073aa3acdf5f96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492 zcmeAS@N?(olHy`uVBq!ia0vp^f<P?5!3HEh7*2@?Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@QuLn2Bde0{8v^K<nQL2C3WatnaE85nHrD+&^mvr|hH zl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZB<rk7%m7Q#vqGWHUU{hfQG$1#% zBvGLvHz%*ys=`(YY_1iM4HDK@QUEI{$+lI3I4Z(7K*2e`C{@8!&saCvz|c^^%uLVF z#MI2pP)EVYz|ctF0Eo<V4Na^}&8&>f6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}<f6=ilFa-(1(1n}N%^HE zwn{*kLcEY$05>+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GITYwbaZiZa&<H?H8gZJwlH)ta&vJpcXe|# zH8*!Of$4S0PcF?(%`1WFO+n~&#;F&S7;+1MHoK%2WtOF;xE1B+Du6w0m5IeI&Tf{@ z1}3H!K=X{Ty9J^*1-Dxqak@nx=oo!a)FMSSObD2MKumbT1#;j?KQ#}S-iv?<`@ka3 zC<X>5H%}MGkcwMLcXS>eXyB2UIa8u;?{AhxrZ-zyd+KcJ_x^srUVgoV<P6Dw#($C% zo<2-W5Ee@K@%^)UfT3~(Kld)i`}6lPX$EbMxV$^yfWzSrPx}_%y)S3GKIz$`gal#1 zgdd+@Y9Ic(Et2Pd-QTo?q;zLfmYf5duk+~G+&N`-dzr4d(REX%&eLvHR!Y$&YD@bb z{ysgOM~2C%z))-kqrC%LL9y1YxAV3Nr7;NnVR~dF@c8ROW1j2L=|(npx6W=159(}u z_`kkIF@bsB{=|ewDbu&#H7uSwp>>{N2;YlLw(Hl~{p9!A7IGfG%)7f$@zeB1e=o@u z|K+_bHvOsiIIXd>H}qQC?=MpiU1L)V_^7|0e_q-CySrc9n0&UnVOG6i0au5yL2-e> zpWmO^O_drNPaisQN+)%1>M5^4YvJMv59Xi0e=mOBoAo=bN<aB7nC)vhQ$-@evO@A- z?SIZ=Cw?`~_<Dc-{&I==`PO^<4qa9gQ2YG+^>_aD-{$Q&cj~n6xkHDKe)%uI>heW~ z%k9PH-wgi!?-y}OVG4Njg{jcc=fV5!^6_!+?CRn!M09rsyUpq4FurEcAj5Rz@_*-p z@6X5E%kgWTiaxjIK*7#BrNigV-zR1jB&D2t^WWovOHSoaodu?|kGz#wXXeA4*4pnP z$#kfABCpl-i&0w}92*k(n5_?Uv5B^+XO}0Nwg`IfILH2oMdG>F*CkKZm(M@*`|nF* z=G`j<n&ZL+nRo9nSj8vf7t``&!RCUG`|Bm^>VG+1uznHuo8?Gm3zL|_0fv9tD}=au R?i>M?v!1SgF6*2UngFv$HdO!s diff --git a/TeamTalk/resources/dd_photo_back@2x.png b/TeamTalk/resources/dd_photo_back@2x.png deleted file mode 100644 index a4b160b0b4b704bef2a00b318e56adcf286130ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1709 zcmaJ?Yfuwc6kZeFAsD1usZf^12Rh`j2?4T7NlbW_U>br&u$^p@4FpU!B&!J&3lhK- zJ75_c9oi|85k-p@t;H9kptVywRjHOoePPpw=*S=<YDXm9AYgx#?(FWp_uTLM&bjBD zo&7|Xkxch{%MSnmdTNS9PL2@yfIeR2+fsMv5;+7DiP=OZt|cs}2?InLT!n$DdNdD{ zW2mOM=n}RD0H{lKifkfVnvSS(JqvYXSXRA}WCOsO1gjBM7h(jc!t!*6cxdFzISABg z;-UBXQjXLp#`1M3B_=GhBtxMtDO3wIP{KRl8Y@By=rIBXt@=#{Gh&U0rgRZ<?l!X_ za0)^c#zU`y%9hGNF>b;@K8wdxb6^;ZiDALf{FoRx3gmKNE}KK%F-$lb;m07{SaAA+ zNN*;M7LiMmrhSpCcqpGBj0l@;u~=9Z9t$_+v0;Hg;MU-BnIwW~E;bOTm1!_X%qU1O zv)ZIH5<1)fx)o6szL|)J$VguuL2sOuHJGQ<L?(=FMU8Bj#c>~L1}K&OKUA-uMVkpZ z_B!7G6gDf0jTl>wneojgHCZ@qgxi%75t}fSz)cDq-!zj&Sw2qS=6u`;iZf%tNGYn; z8Qg}IQw*sTNi~=W)S$*vCGilc!P4n8h&V|g=8&0A6mfVkoXCrVCEO&5BsMWg#E*>? zMbB_0xO%f5GY~Ue&1-J#oLqM^=#8Xj31-r5!8A!GTn|ni8qv)iOZ1$2(_GEmvGC{Q zvdLiB?$Z9N)H5csf85jA#w8cCt&bVVem9Ygtu*W{A-|WfREbDoy`j1l^;?$^VtA^= z;9nGHzp&KHUdELHrC*NZDWUi3;uyK};Q0)m=<jNO1rW8gbs<$n8?Vu9z4(VCUCYY& ztcg9iQP6a~kM>4_C}r%X`pri_@)iX19YgKc+N81awE15tHCmM|b;3IOl(X~Lg#*QP zs84rm_;QIvSliQ@#s`q*kY5AAu5i}As&!+FR<1ZCp$`N)hGbW2T0M}8P+od4{yR~* zFXHFXTJ}*tTgcw^^^ODeL0MJ3f&Tu3<tNMK$#-di_J|rMku|0+cocVjiG7{i36ur| zQUsJC;Dg@tCkv7mX*bqBqB^M!2(Vl1v27q{Swc?o;kdJ2Lp~W%C1<Hc0Ar-3n%XXq z0Cs)DHxb8w*%4H*c*BNvfzzAeO&K*52!Pw+VDi8!tWsCdu%drnXm?fOFdGb@Aj%a~ zI`Bhysbi-so!-~emUi)h-Q}8e6>}{5XT7HnI%Iy$^|xK+&*_XNYKuVjl&?tlz1DN+ zG9ai}@_EGDtO3CEonVzWCFuAKj@KA#*Ry+*FUMb8FGFl)Wv-W#lM~}rnMZdW6tXzZ zgwoSb%7E^xmawbaLe4*T4W7H&rE1)c-UT9q+IjOri)vA2H=JE@sj}nv5dC9Yj*svQ z;K=H3->Pk*`Kuypmi13;?c7v2*mCWTx~Jq%LF-GQ9x(g(EEa}Fe9ELH<QzLSVk&kO z<rhBmY!iuT+d0CUO&>WHhIKsNcQ0*xsjRg;<jI0lRf&3XhqfoaM-`Uqd($`S))mL< zYPmN`O6?JbUZ}eaKg;|2erF$NI6AuVLsg-zKJzCP6%0E=9ZmM%&4Z6c?yqjp^<m{} zuTXLup#$3Q`xPE7p6fzt(X2EY)BD>8dj+-5{m_wCkyoFvGt^!TH{TyQ*JN4FKJ3Xo zQ>0tZw6`>hg<W2D3jik#Puv?jQ7BAXg6G<H?<fdB%eORlh+lN3bU${{J1Q9Op0GWP zt_TPa<qi+_M8$b@R5F%(2*cMx9iGk|!U>u^mU1*QSgTaZo2&N&U>9KHsM>n(+{kkO OKvEMkBuCaNEB*o7FL&ht diff --git a/TeamTalk/resources/dd_press_to_say_normal.png b/TeamTalk/resources/dd_press_to_say_normal.png deleted file mode 100644 index d410f460398f7d5c5b26976d16222cb445a97ffc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3434 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 diff --git a/TeamTalk/resources/dd_press_to_say_normal@2x.png b/TeamTalk/resources/dd_press_to_say_normal@2x.png deleted file mode 100644 index 52b8d03a839dd3b8174dcde2ad2864cbc4074831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3749 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 XH;#2rvfY(;ejG{WwuHNQpZI?P(D7j% diff --git a/TeamTalk/resources/dd_preview_select.png b/TeamTalk/resources/dd_preview_select.png deleted file mode 100644 index f63c1ab7079a2dafade4fb3d3f42aa6ef98934d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1590 zcmaJ?eM}Q)7(duxP{yJZGx77hI%G!LUQ1hAD6G&H!L=)GqxgYvZIAY1@2*_0P#7vJ z4hMb&REQ*t5r^|DHRxQ~G=ze|k1)kA!ln`3km(o%9d_|!lU-5R{?J|S?tR}U&+qsA zo{!|M(P^`yS#wwb07PdmSL&HHHuyz^Gyfem^P`z1j#lN-2C|4QMJN<dSV$8JX5)wz z)uV`|toS0D3IJ~{#*BG%p5|kjnZ&tB(1+{B9Sj-(Qq$cI#JmBeK@)1l2st!%rUL>o ziyT@d((pBoOw@)gFQ-sLxz=bd-(Z$np!75_)h%NPaFj+sH*P1KGPfL><dre|pqU4O zlP>fIIrLIgo<;{|k`xMxxWYs;ABI7(m<uO~#A0|EDB!~a9-n!|iExrkB$f#z;Hw8> zqEVJ2nO>=W6^l8^AsbCQWISGJX(_i<$R#N&50*-$K@Nc+k?}}$mJu}KP9&V1DF!9# zG*g&^#z+DTG9o6@Mav;Z>B|&w$22YBd{ri<U_3YC;K5veFr_I+jpqMdaeUg_N$b&n z^}d$aX)JS~JU!|pU6h$=ToET2$|1|7P=qEaBT3q)s;IM(H0iXF4lvUo1`{-h86$#* z4<`{CjVzmR(g<Njvz2m);oxGJMJ5#_ixfh>TBQ_7U|1zghJ{L%5|&7n3YAom!Jon^ zNwW(_33>`^na0BWH)4asfIFDTN|eG%P>Y%(ad0we8TJ}28ERMs3sgxApZN7!USch8 z)WTQ2Q45a|!wa_dKdqiJG4m7LP7f|~m>zwUVCJ1-279QwDGLBX4`(YCM)%D<4J&L0 zMQruN#rC$qjy~J=LKg?(vIrK$-NW**;;Wa%c5_Wpjp0z*{%uQ7=bniCrE6HNsOT%< zaAPD;MB-u4!#aKKoVZ5h6XWFz2b;ccTNEh~E%@U;TzXkzy(|?X-B+YHTFou(Eh~5R z#?4(4y?a;7r-b&0u-S|A<MGa}Kbvl3&PiDK*r=&ZVZR8g65g*F9Au4fT!RzdTaUcJ z0!a0{njh{c-|_d`6ZPzluUh=6I!>TJdVGf67qPFYGKQ$SwrR$dXg{BfY|J5%U2SQz zz3KTt?@+TkRHvO+ch=dvKBQa9Yh1=UMx8N5St?A|2Cg2RC9WLL`SD)Tld*K2Ijecz z0B36;stv1;D}1VNl7-kmLu=}O#%`;7;##ZIE4}#1MWIX6#tnBrUu~0*J{-9fvN!(m zxCCjhi1J+>yVuZm_#|en-S245A3n8ebaZRrFHxQ_;H(PYcZuykaDV>8k(=*nXU16x zfBE={dGYHumNd-0h#dvS5&erB<s6;oOlODHpCv40Rh4*qs&m(DKYpxrU?Wx7a3puA zSl@@*;jJ?_1KPEQ6pyaAcK3PYpn89x+wUVnKe0BSkGXs2T*5O~W%scjF?Z*H;aN-_ z()(L%?n+<PoD@_42hXGI8upX^+y{pS1sT5<jE1wt3BFY0(S)IG_`}YMJzI(&?aVLs ztRCz5DBY!6x%X-Nw}oBR$}I;@TtB!zwq74rCVK~+(6(N>#9w%5<U#~DrR(;C3x(}p z=$5E*&O&-sy;M-J-T&RDg0C}tx%l4J-5$~A#%>>bmX0bKXb^<i>~;7zm63Nkhi}EN z3Gv>E8G3(3U}M69EnoJqUF%w#hu7w~nv(B6NIv2{SMX6S-H$hPguV;>bn5xc=IedI Pn*qpHX_dz_3O)Y-iicf| diff --git a/TeamTalk/resources/dd_preview_select@2x.png b/TeamTalk/resources/dd_preview_select@2x.png deleted file mode 100644 index 23397d7ab73e147dceff6057708065f4eb044bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2039 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 GCi8cnYD@G0 diff --git a/TeamTalk/resources/dd_preview_unselected.png b/TeamTalk/resources/dd_preview_unselected.png deleted file mode 100644 index e6abfeb25a4e64f9209a928cc681149842184605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1805 zcmaJ?X;2eq7!F6!0>OiVx30m8in&QhVgiOFNUFh*pur1RHwy$vHYN)MR1Rr%6g#5R zDi!R23e+l>jEVvSUU&d%(F!O=K#7&Ap&n2TN;ej?KT3CY_xrwg-sgFr_t@E;vXEs2 z=jqNk9F8Cf7Rj;I!}g4K!rsTG6z#{BX{b0HRUpx5GN^}f0u{0m1|%9V2A0F1DrM6( zn1{nT%u|Pjqv6sOTnN#SL7NZRsL^3)9F7-Y)PYbui~<|s7`2v9wA9oS0kw)xR5GPh zsZI#Ts)JMYup%`i3`&iMI4WX*Kfp6`F#-*Yf`CzzpfzxfeBwu5F1ELsDMa9-3mVTS z{v#?}Dg%Uw9tN0X1_`3lXaI{vrui~iEZSm#PNmT)RP1JvXuez~i%a(dMlK>2O|OdP z%0)pVv9J@L7>lAhE`^euoJ>w;kP&?hg~s7<Y#ekt3G*NsQnV;&Bxwy^qYNV00O{2_ zRE=l>8zZ<8NksWXOzA%<Xmp=wwT6*0VFjZYK^=ugrrJ^(b(Bi~-&Lde<ZVFZ@MpdM zNo)v9(ZLisY(NtA5Z1V8FIy-bSEz?U6w!wvNWy3pWw8i~7-A6}AXKn`1yT@FYi)*w z9}!Y1SE4nbpcaB9B0dr0Agk3XE{D!$3K%p$v54+Rqlp=88bc%&(fl|fftVu*q>f@m z2$ZOSwdg2T^%=_^6Kfj=jSh<}g7xYoSQVs4G{DECx$3dCFvsK@!K%jA!Wt7x!NgE( zt^HT4M@`uL*tVYr7dw0!eOQalyB-_tz{8O!_PwM_M1nBmy^TY|!vPMz*<F=+0)z`E zf_sK)YhABNBwFj>^E~U*+a)o>AKqIh*hki<y|+H=sPb~RT742qOJT5YO%8QeA$8&` z5BNjR<!r_9q^|Bm_s=BH;p<he&R8C<B<>uJJQcSpFZbsK?!j{y%^+0>7L=5Dk1Gb> zo`g3HBqjC9Cr{R;L};~6cn-&upP!#GZqO3xbZqnM{%$oS6w-3fM+tu{n0{`_5{6(` z1TQ_U>1LZUPj;)a>Lh)|PwYz9qvNKE+Io)`o$Usl?I(d?5OD1PCDMfd`sKDuQ-8hS zJk4uIy2@D12)3N^Q6^PT8A8|ICyyYb)!f3&`KBr>YqCR_yUXlmSEfv%P_#a1X?b_O zx9Ps%UDK}Ytqt4fH#Tn5tgT6Ut_rW72o=<ombUJ(JVY{Ihy4D$<=tQ17jG-eBR1I0 zNbPUP!~<W%ySRLndmy)>dcVgaH~TU&`CWbb`&7r)!J&?-EIpmh%br5cC-h_ywqiw9 z$cA)PRgBoU*zxT4d)LpqE@Mq~x*!y4GM)~Qu4c?=D@Rr<6%OMzEmtUbowsZas84)l zPRhAdSChQb;j-yV^OG7c?}VvWTW$<EULST;`&Xn7>o<jl235mz=Qiqug5A)vJz9Io zi8ZI<+!h~VF?}7qybJG|&9dCiV#18*%8H7D@Hj+MO7MIA=*pge%(A*m_}BhEvhL#V zW^4uzuFE?}?C5A;s%AUQKb`cZkF1Jp*r$|$g)W`9uI!mT3*TDrp;EEIr-nDbtU5&% z-pKc_o7os~8dZCwrtK)&u2vNLHW2WhZeqZVS{s;CR}=MNi1&Dlf6TzM#V7FN?{u}5 zM?S<avf^1`%602p^ZAjr)#sZof4k44hRfB59O9)EmK^tS&&#ALJ$s*6vzpt_r5FNu zd1Y%W4^NuMPJhuEwB_v~e74UI9v<S1we@y?PMAd^fz^ffLqo2EmIn?~;v2$m2>o_X z$_9agk|SONJsnj(z}6zM_<X-T-i&wP^FJh8OdISMveEu7`{f41wDn}OlV|2x4hLLX zG)K^vx%d0*(3cloSIgx+c+bZEc2iBv&2uJ`X<n2>rA444%Fu`xG|1e1chF*buzk_n zRr2*Sx9<zhS)LX>uiW!-Z%Suv;vWs^on77)cPuO>ZST^XtvEX;-0_P>UYp(iRND_q MA`TIi1x9WA8-=OQ!vFvP diff --git a/TeamTalk/resources/dd_recent_contacts.png b/TeamTalk/resources/dd_recent_contacts.png deleted file mode 100644 index 6c1141a366d23394ec7d70c76d96dec2c218a8c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmaJ>+iTNM91hfN;x;KxCz}(G*_;Y%(zI)4!n(CKopvsBbQOmvnkHv!*m7BNX0w5A zRTM=8{{#ged>W`A;$1A_4Hch65pN(WI1zmqIG87MojzDYl5@_F@B4n&<akf_mdYiy zO9+CfOl%dBc&);ZcX26x|Hunzywsq0AL=#wQC6}b5mk&d1PM(VfJrDRqr>-MD?xY~ z)Knkp6T5iX&?w2pP>yC|HbJzuJEkNLLIl!qK-I(K*Q+;4pekW<XGrvmW(;Q3tz#DK z9qUfXV}mlMknL@t)#0&#29X3DZAiCyCrr-i@_6r>X%fsq&|sMS9aNv#17d~+L5K?a zWIw|ImZg~H5X&-6AmC>Lv>)HBk7?#ZEFWkA^B0M|SxP^j6guX8;ZvB*AY}41oy}&c zY>+an0h-}B&eaG6d>G-gM|C7QKHaV_C<xG&E!9M-p#xV@N*g06OyWp?r=Xb&vbsHA zCR{MukxZJQ{BBAGpeX(ys%Z;o8zteNc>gJEr$$XkC!uYOSTb&0f4%F<<YN|;kYS|^ zW2jKYo{WJEJ7bt2*2{toq9m)jYuGr)5Jf(r+ep%7m=MAw)}T~X;ki&K7>#jkT!=*( zCLY|x1ckW3v~WT+&P6x-3tYjFM>MFT0$2INZ7Irihe0#3X8~I3eyDU<h6d)6=GEe{ zG#AyI=PJcx2^HniI2hV(?O&}fnDG3#+l9f!hlSCHI-Yk64|aOP?X&o!_>d5yDd$Cc zW_GsSQ+>KJFGYq*^1C9B%Jbv7=^F2vvUk@b*Xm*`@A(^=i2V22s<KI97+g5098OJ4 zPmMo|uD>FImDgvsx1AH%p-<xva*g$;dWh0j2TC8@-rWe^K8~z@vnbGYwDV{pSMjrB z-JKguv}$eWR!K)@>E-f#=knU>l5Mrr^2QVIKXTwm*WoGR{Nj5RjST~B<ekBnx#xAq zUf&8_Y4vW8U;IKg*UO&voU_VXc4o!0il(O%I}hFc>;rA(zI0^rQdxQrs3zX+jm#`M k_JsH*frBTfx+Vw@ac+nA=@!q!hwgtM5$_fzH}5<23wKs>4gdfE diff --git a/TeamTalk/resources/dd_recent_contacts@2x.png b/TeamTalk/resources/dd_recent_contacts@2x.png deleted file mode 100644 index 272d5edd0f091fc8e67bca0635aa25cbef4c1487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>O!3HGjQn)q)DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{<S3ODsN@GWpo&B*kqDoPEm@(W3>%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC<bKYm*f{`<QFJ72b(Eq_$DT2=79t> z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WS(=&}J33n$xw<$z8XCG9TNoO<xVjjcTe>*9 zS~@xz!1TK0Czs}?=9R$orXchh<J1dE47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!1DxhT z^`_u<iy=<E`as9%gQ6BGs$oLF^aEnT6E2VgPx`5O!1P`OOxS%_menvYFy8TWaSW-r zb!LXYMsuRf@%!b`j~iCHMowH|`6fyHj;L$z;z>I!3qP&jp*6?Na#!I)9d&U<K`+hK zvO1?3H*QO8IsQHT{Nn9f&+h)X@BHVr{%`MA-LL(%_x!x?-)Enbxa`#-U(#fDfl11d zbp?y&1h(r6OnwLS>T~T>(k4k6@UDx<>}-$>$bR<w3`b}q>x8ub!n@8XefZ<LhW*G) z)19mfla7`c@b8<kb>VA$#&$`=Nm0q)(wHskg}IF_BXw2G4m?Q<*zuyR_RQ(;QtQ?9 zIrq8Wv*yV^=Q(XrNOAxCu1beF@9%AL_V29<+&DogNb36w@ub*UQ7^@k9FHD}YMtS4 zXgELOPyT_m6C{L1y|uzNwg_}<s)-3FE$`}_%ehhZ=#gzlAC-TW+v~@;lKp~$);GQ| zk(FT*d!%-E7Zq^MQt`SN%iSQJTt1P}`GNDKE9w$znpOoVwG|x4R6Bbc_uhYYic^|R z@Uer@)VB{#CD$hgPkphix2e>4@(%esHv?8O3m903v+2qdxGqXixvn$Q`wXkv!Qw`4 zwF5>sSWYUX1|@KRNju;FbAjnK_O!~)9>@K+9Q-KxfNf5*@`m%bmAxciFuYwbv#P}I ygvHPE|0d3tW<CDrkB?!uzy8O3jnkiX4>0tFy7&rBFPQ`?{XAX$T-G@yGywo;67tCa diff --git a/TeamTalk/resources/dd_record_normal.png b/TeamTalk/resources/dd_record_normal.png deleted file mode 100644 index 29b4295be029b25d0b001337b7d83c035301ff71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2020 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 diff --git a/TeamTalk/resources/dd_record_normal@2x.png b/TeamTalk/resources/dd_record_normal@2x.png deleted file mode 100644 index 27d77c1972e4ae9325a87dd3d3830c360b377007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3058 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 DAhtf~ diff --git a/TeamTalk/resources/dd_record_release_end.png b/TeamTalk/resources/dd_record_release_end.png deleted file mode 100644 index d8de29ca41b5b678926b8189ed8295445120868a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3514 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 R*}MBUMX<87tT6YA|2Jg97Wx1H diff --git a/TeamTalk/resources/dd_record_release_end@2x.png b/TeamTalk/resources/dd_record_release_end@2x.png deleted file mode 100644 index b078b90dc7863373ce9553c596f6323e4b814d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 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 diff --git a/TeamTalk/resources/dd_record_too_short.png b/TeamTalk/resources/dd_record_too_short.png deleted file mode 100644 index 4c5b1872ab177925df9cee6bfe673612005c374c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmeAS@N?(olHy`uVBq!ia0vp^Vn7_s!3HE}D}H|hq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$<Q4#RGcefLR}>^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYex<p&aMi^nL8%D$Vl}upq_QAY zKPa_0zqBYB7;$OJAgc<joQqNuOY)0C^7C_Gp%{>nUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMj<z{ARW@%{X<Z9w-Y-s3e>}23%?BZf+VQTK| zXlQC;4%6$BpIn-onpXnTn}X2mj8iWtG2|8iZFWg5$}CGwaVyHtRRDY1DigO`EOD9# z)tiFbEsi+#>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkyfBx1x`Mfho_^#WAGf z)|(r)-pqy)>>s{qiG&C^x`>x<a1NEJVOGBzv!#1QNBn{O1@{m5UpUIYVDe;zT^;ON zN@X8XFWwRljLvXm4HR7cu~K2`<1<euc`Nbp{;}RNUEclOP8Hu70z#iM&Q7R2A(0|* z$!ov9V~~LKCces)Z*DUts-9r}m|t<$=yXB-MW&6NHJdZz)$Xu(PJW>4+Z(^Z_sZ<I zZQ`B#+QKw=<O3_(T%%a6q{2LRv&vtVx|lWdoWdNAm-&-9zDqXz7RWPZ*sdsJ%HS@j z#+H!O%Cl7}ruk;Ukp^kUA14|9v=kg;sOc>@$1umyBA?;htR~}SZA$G0VxLwD)~>(z zQTA^C%dG7aj1I+rS+{lStj|-gS)RLT-&i^==A6i%Y>j;;3(jBNdAw*^2iuRfNA?A- zmzjMwhY84Tony$F9$63<zVhY1<VU6=79Zrf3QoT6E1agSVYj2}`o2eAjQgJCM)Vwf z`JYYL{)bIMs>q$g8HU$Z&t~}0TJ4zj*36&jfab*9Hybs7I0zk0FH&Kee_`Xaowu7f zdc3bJW7(rxe8WVc@PnYRWlm9AG{fBwug*8`R#-3dh4qpk%P}6uAf7KWMu%QYKbs?B zb(>{Lv)zsA6MgqrHfqHDJ{{fs-#A9Sz?XT6yil>uj`RuQ|31C?8)fDcrr>%^J9f!_ z(^Ka}E%=|XrkU?aix4^X^Q&)?-LdT5t`9CVEWfk7?!%Nrf>nnycb?AmTX-m~vh>bs zhVLI9RI%=u$G&<_^pwgE`<V8eum1dqD^&3N>c=SzCYqm`9x(0JZhUvi?$Gb9P{tC| v7yFV#HZe%Hmss`jeN)Ju;Jm)?J`)ea2iXsS50?hs0hPy|u6{1-oD!M<OTj#} diff --git a/TeamTalk/resources/dd_record_too_short@2x.png b/TeamTalk/resources/dd_record_too_short@2x.png deleted file mode 100644 index c656c71c87f77b1eae9cb73858088fb901598269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2295 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 diff --git a/TeamTalk/resources/dd_recording.png b/TeamTalk/resources/dd_recording.png deleted file mode 100644 index 650e8e0e4e7f407cb88e754bca64a178982a24fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2132 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 diff --git a/TeamTalk/resources/dd_recording@2x.png b/TeamTalk/resources/dd_recording@2x.png deleted file mode 100644 index fd046ac1254665f8e908ecabcf0221b5a7e073b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 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 diff --git a/TeamTalk/resources/dd_right_voice_one.png b/TeamTalk/resources/dd_right_voice_one.png deleted file mode 100644 index 9c018a3c759cab53e413ef1234b52e8407feaa22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmaJ=J#5oJ6t>g~K~YLUm4FWD<bXt_#6L;n5UVCiY=>IHp-Q8Y1qsK#Hdbn%v9H9* zM3~wxNUSUfCKe>b2og&cB)TF5EQpDTfu#ddIj3>TK(NlbcTey8-h21H+g+{RNX#tE zP!yHWR+JjqPm}-b$rF+FZT$<`E@HKT*U$#;7(S#*7HUGEImRZeLBs0adk>c>YU;9G zZ{UW0Q#6so7*PxpIvzn&)N(QO46_X}Xu?g~mFS;u-qFCeB>Hwv=X6hoEqkTs!?j+u zZuZ({!J>=T!Ez`P0taFPgwB>5h@nIec|~GJZk7ha5ZspNqoNx6Dv*&6L5|6$O^)Y* zATaz=P7wGM$Z&jy<;W7!{F0ax#7rKHKAL3ntqrlJR7SbTNupaAdm_trIvu8yWstwg z@`XYn;>cvuBqAMjU2KGDH%P_|3Jgr&_OOjy5HT7}w2dX2RC?5c<Be(EV02C7!r0L8 zSf1gcmf}EN|9`0CjH3fwgU9v$lQ^h%J;>HzfVO>;3~nPCrSe4ChXzJ|9igrG7FSyc zqo9R6Ag>AFs&1IJ8#xw-2wfL7H^7E#LQRoq!ok?KCCaK?UaI63H7BS%uVzd6Otw;x zb8@+q%~w<*#wy6%cA$%6taXf4Ct@QpI3CHYK;OO(t%{EvFl<`1C)ZM*$Tz}TlWUPD zVp&oQ8;$m_QO7Q#pU4~wmmJ2@hc3~(PlWwq@yRdpC~j#=sUCiA{ysb`PQ7}t+n?rE z=3md%xc0}?+?B-OLrPirbZYQya4mUh=Xw8NmfySc6tn!^neq>-`StC&o&Ekn_Ph7U deLO!keSy->&n7y_eex73N>i)K%ktfae*iE!Ho*V@ diff --git a/TeamTalk/resources/dd_right_voice_one@2x.png b/TeamTalk/resources/dd_right_voice_one@2x.png deleted file mode 100644 index 164b7d88b22dbeeab28f1c646c3c38efcd395798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmaJ=PfXKL7%!m2AS5INB1Ga#F;SGR>&7})sW8?JrWEH`!lDN4+Q(L)e`p_Wa8gK& zBpN+<LNCONc<^9mA~6I^@Sq7NJ?X(1FT@!2qVa&>D=_fjY}&r}zI?ym_xt|5=~!=9 zRYgMuK@e5ZZXu4>I{cCQ%JKigrRJ-6sYl@?>N5sWR<a-wRE!h^QB6w2IFyv}(O0mI zAj%G_i6lyjJ)CT4F3It6<untc38Jk%XG-!gL?8vzs?L+&o-dL>Rd}-BC%Q#51T$*) zga!L1dK2=*upCgx_EVrO$6*2uA_?TQ5#8o;Jh{os;k{#~NwDdHhIw*JR8owAkYPdK zb9pJ*%`kvvT}-QwWtkS>aWfv;jbD~xS~(xfdHi7eA#pTI8RX(ZWIGl<@ni-elcVWu zHtWiIU51sWnLr@maCkfv_Mq%>9Z5M#x0?zK0<>jIHIZuQz+se9#u(yBtaK{{&D^2Y z?d>w*g3&q2q#2jnNvYr{ivM@jv>k67#o?~re-hh?aTC&UXd7dej2k!D<b*Q0kOd`V zSP8=zDO53*F_2+r3=@R<Sa4L7WL0+z&6@~O<f6KbBwdD4fhRGCOH~!l8;L~xe!md* z`MeAh_6GePZzK@%g*t;?e<aKnu!13vX;4Q6tg?#@7sWcmpqV(b04?<jR3et4fz6~j zwYZkfqI}y}rMQ+*Q7nzc&`xXrYIVVc=f~OZ3@$$Gj6T%yyjys%Kev{a;7c(V6@rP} zyVTmoMtd1W)Rf&?didf&`R#@tdMdp#^RjZe1+Yy|Usv3j?HH=Bwu#Xb`)eC7mMu%M zpT{0OJFt3w0Q@+3WB%H&Bh~NY$8RpoUY}gLo6qOpy!9j-rx&JX<|gZ>f8U!a|In2> zd5)SdX*yfl&F@LEV7+v?E-}iup9~OlbFr^!uzqIce*fOniydEx{A&5948;$9cf{0` a5T%twkfG{o*A9Jju5vWoD?IMJJoyKnC|f%K diff --git a/TeamTalk/resources/dd_right_voice_three.png b/TeamTalk/resources/dd_right_voice_three.png deleted file mode 100644 index beba2ec98bc03d2a95197507859909bd2994f9a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bI!3JVI47&}aBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFso#SM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr<N!r zrKV@**($x?y<bToGsRXZ+|<{=x4=0yBh#a*C^fjsFC@7tJJ~Wt$=*)EroswnKyGSD zqC!P(PF}H9g{>0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?x<p{1oI$P6PRU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcp<j{ZfssLG?;(^reBd*pl_&W0P+${p|3A~rMbCq)x{-2sR;LCHMlsWvLIDI zD784hv?v)EacRmRs|u`~i&7Iy@{2<9^K)RK7?6=)l3$#WU!dR|Y^I>$o0y!L2NKW( z>+top^2{qPNz6-5^>ndS0-B+hnVDkc?CR`f;%08?YHH?cXy|I}Xl`WeX6bC|?Br-{ z?&fL+)9aF-T$-DjR|3<Ug3#-TQ!gkn<Q4#Jc1bPDEK5ysE6UGR0DIah6N_71oE?o_ zon6g<=DA>Z3q)@UZns$Abc;UFG5VmWMT%;e5HS6KnDB%P<iL}DY927X7XcG?uNQkF z0|TR+r;B4q#jTo4_8v}wBF8^IpC6U8QlZ_Usp(kTEv}XmrXD4p9S#LKnQJu{ZCv_v zqM)FNiA$rPsa+@2^0u_;IT~F&F`M7F-fuqaZ2jS3`Hp$Zzu(P1^S$=`6;r7juGhOm z?tBT=@jml9@ZkrcQyGfw_y4!`PjTIHHU1Gxb6JI;BumAWDn{)S$p`q>uexu(zhXg* zgL;gQ(rUYab4tDJHra0_9>1Ht{6nvPt-<m=fqu!dXFssopA`!_CBIoT{Px2S8zl2I z)u;NO@-@G6q@!}dIvvgUf*0GQ%=OLI*BsV8wxN|p>qhb6=Tf%}qE~8^8)Wsr<9omB znWXG>?Q12~@)uw0X|Fd}@-L*mIj>|#o3YP>L$8B9FHbKy_Wf_$e-;S_1y57qIES=8 PQ2F8M>gTe~DWM4f%Tu7o diff --git a/TeamTalk/resources/dd_right_voice_three@2x.png b/TeamTalk/resources/dd_right_voice_three@2x.png deleted file mode 100644 index 077ba2fb95f0f7352b99c96d7189e53b9c5e013c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1592 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3K!3HFw<24(Alw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24<Dakcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTc<hj*9RNP;kyKN>wn`GuBNuFf>#!Gt)CP zF*P$Y)KM@pFf`IP03tJ8LlY}gGb<x=1t?Gg+E$d3W)<Y(2DJ;wvsKC{DJihh*Do(G z*DE*H%P&gTH?*|01esxEqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTP ztrF0s5HI8wz>Uo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_ z2c;J0mlh=hBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)d=ry1^FRWc zU>&}`R-SpqC5d^-sh%#jN<cI8GBZ=GT$~+^U7cMGTusef3=Lh49nFo5-7K9=ot+$w z&D~thV0vBhlS^|`^GaZPQxJL$aq0ynhTH<6%`T}$nPsUdZbkXI3SduLW#V*;iz`m^ zpn6kqy2Zr}r(S)aWAs5$ixkx`Az=CeG2sap$bl#Q)I4B%F9Ig)uQJmPF)%Q#@^o<w zskpUfnzzT)K!M}-@>A2q1U(WmT@qA+W}nKK7<Rq)#^D7H1{YrGb#X27SQ@Gu6>?({ z`*)`ci(-~+)7;?7*>&}hN7lu|t*HsDOP@8*)A;B9?0~`9pS#Lre-xgdV|@R=b@@5V z;(b#hbi^uhL_3<LF1+XNa$B5Mze>GMvVz0QQ9VNT%mtl?KOe}QNVn(T(&D3(`0#YX z+z;%IqBDHlDy%Iu{@5q*SIqR$dd3uWQsiPdzg5}>v$O+>8-jlLJ1qWqMoDfppRk|! z=C$H~r<_0R7WeZ09Tw?>Y!i6bwVvI<^rY*b^@G-}xd-(=PC8a$Gf!Tv#^GzcQIdG` z=T+;)*q7W_-@}k2Tx)VU-R+H`Sb5p(k9u*O&m)!{?3#T0gSy4q<_XhGCcKlovF4b( z<e{TAXP%yB-=a}B%R&2=<dS`EJ^mG9YeRmXbvq-u;riYgX)y|HzklRsX@}HJpQW3- zJNV5%rsp0O?ni3AtvOnB@gLK^l^=^H9DS>OL-X#+tflU@hqzsTw;SsH|H}OO%x|q5 zI|`$gE?s%ZRM+Ow%*X}*_HACO5Zt?8`0ZN12)ikd1?!f6`%-0kkFBowH;dTj2~Aa3 zZOxAhybJl4SNi_qqWIMEo^86E`^5}ZqEa}@S4;_&&dh$$9NZ+ncVTPADkh}|J6|oH zTfi-oSkJj4+0Z=u*8krr`)>U_VtM=J$<MA6-8W6nTUg_oAz>p{JNt@Z`M0>K!Ctpx zbwUCoZ1*kv)nBDnB=&{l|LRkJ;}3ngYoPKg`^sPS)2XWAX19E!C*0;wJaqqO^`V<K z=Ura~2|cv3n{Yzc_mF(+e&#pdZQP^31TVU7pZn%<)*q_~=|Al+m98x6vZy_Nmt8yU z@!|<~G51#KpXc7JXmhCji0JaXy2wk17|-wM=`K66!|-2bFcS|$cI#xrbR`udP+9Kj L>gTe~DWM4f;+<(a diff --git a/TeamTalk/resources/dd_right_voice_two.png b/TeamTalk/resources/dd_right_voice_two.png deleted file mode 100644 index 0afce40906161965c04b68b007fc6d65c84bdda0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmaJ=O-vI(6kY-Wq7pHv0gO5<#NbbNyWMu1u9Q-Ci&R`}+D3>mk?rmP8`vLq2U|D+ z5>q^SQaOkx4n`B=!2>aJkQk#T%0;7I)RQOmBq1a?3luz9H?x^HFYo)_d-J}TNpzp9 z+Ec%WAc(4Xr<lb1Ui=@ZEO)Ihmp<XG4#j#=%Irs3*@i?^H8T*zb$I|Lp{$OLyo4<T zQQD-Xdr_}+fmckOlHC|8r&}0J5G|3MB`ZS^feakbj4=6Q@fis;HB9ydB(G!%a8T<U zw_$3$JFSclDIt}Nw1So#j|p^$WRTN`4TsN#$xU7!+pe1?!Da{=3X@w!^-2jKm^K6f ziuEX7h5;N$G5!F@F=v3!%lK$7UYv*V^8t?c1;O@5;%v6s&nLx>?Oga2CI=C+c$&^; zvs9L)OnZQ4LZOh$;q!TLgvS{(keu@vPGf;VgpOis7Sc=uxQuef97SOgSGv`LZtc(- z&h|Co3!`(gMKhGwZK)6_N&gSk^_^%3CE;$p|0H(OV-}>7&@o4C1rM&j(M@IXf(>P4 z+G*1qF5F^b&_t#)Xj(u>aiCd}70qxRCpQt2#K#Q>$%X>sVwl7nl%}b?C`8$q5c9_Z zoX9XSHX8J?9U&ngv`5)sM~o|AMN=8op@9lmbr%~bigm@HTR5`_ZS5LVJ8V-2n@#gt z@mhRE`L?lY@mkoTSQ-~YyQBSU)CCvTk8AD-7aw+{4-Kq$8w)!zoeJVd@i;C<)47kC z^^J{4>B7X!WZBZx>pOv=!@i!{e5CXjedPp8E({3F5o+1Hf0`Hp)fFYo>4xCN$rY|` z{m_Hi`%AU?<;m6N>Z{W?-&AC@;S;lM-ybF}AI;ZHthRE?pA%~}w^D6$hiAXeCob2W zzc;b6{Ndp78!PV;Yp48`k-pUWzWkHYh1%-(1jAO(myDc!G}m=~<;~mM&+8EQS(g7c mxA43E*i(PkXw%8^N-y!MqT%kxr5B6tqmIYA#YgRZQ-1&!CSk7t diff --git a/TeamTalk/resources/dd_right_voice_two@2x.png b/TeamTalk/resources/dd_right_voice_two@2x.png deleted file mode 100644 index 0ce2010c68b5059b64704499764cbf91ab70675b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3K!3HFw<24(Alw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24<Dakcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTc<hj*9RNP;kyKN>wn`GuBNuFf>#!Gt)CP zF*P$Y)KM@pFf`IP03tJ8LlY}gGb<x=1t?Gg+E$d3W)<Y(2DJ;wvsKC{DJihh*Do(G z*DE*H%P&gTH?*|01esxEqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTP ztrF0s5HI8wz>Uo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_ z2c;J0mlh=hBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)d=ry1^FRWc zU>&}`R-SpqC5d^-sh%#jN<cI8GBZ=GT$~+^U7cN=T}{ng3=Lh49nFo5-7K9=ot+$w z&D~thV0vBhlS^|`^GaZPQxJMxaOwpmhTH<6%`T}$nPsUdZbkXI3SduLWnyuQv74Kl zxjE2QQ&VH?Zh`1c!QvK(UJC=9di8;h(Fa8>QdGl)fawRsgeP1e2cGm(^ML8S2$-<{ z9-1S}z`!`&)5S5Q;#Sh1|Nrfobs2=2dk?HQI7QMX`<jm0Drp{*De@k&%$GK%Nb+1c z(dF7B=%LGyRICuk@g)7>rSl$MR%}vJ_?Dz8aQ<aV+PY=Smi82&o)7_#yR1o$Di0+V zEcDjoeQaamJpGZ;l#J$uD-~EhU$6^IPYyiJb3|v!jvGuJsS|#zZdg~_m8UTwitR{t zV-BB~5^tHy<MqcDEo19AoFFFrIw{xWpP<S0PfRO=G`_0~m<wlb&=LA=Y9L{^;AAzk zq4^YBR*m{u5zRj*+_=B-#A@Y@<r9P|<0ss>@u*d@^Y3ht=6L0estt*!I@RjsJKwr= z9lU<w(mu^uf66kxu{A0!IC|@dR1HV3e8(9^w`<%ArlP0*@*Jt}H2t9<Q19~SI8*G= z_GQbsrqngwV9dD48^pCx(?LtxbA@b%gQzLjFS#WJER8}7QvF1vc}ngwD_reXVOhm- zjgj~IQn#yDSdKiO_#^+qp?Q0xSfs9TUD)(UTjT7a=|#X`GK~@TsAZ7)HAkydF7&qO ng;_IG4p`i}wPfc(21YgpnUsznlg{j{0~K7Ju6{1-oD!M<DoMrP diff --git a/TeamTalk/resources/dd_selected_photo.png b/TeamTalk/resources/dd_selected_photo.png deleted file mode 100644 index 2cda24a9348a2145aa661d5cebd34595b7af0750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1590 zcmaJ?drT8|96#7#P{yJZGx2#|9Wo<*($*FVt9>ZAcBO3;A4re(XfO8e%JmARLuJL` zKs10tBw36&oUhcNb7j*I9tPAf#TQ}Ih;GPq41x~3_}FAu1l%8Em%ID@e&2jQpYQ9F z{K|FO)zOT33;+P4)7L2V^coxdBEsqap7Mp!^b$v@vM2+QM-{>(0>~{yE&`@wuoclG zu%#&fGLixSZ!JZQSyYzhW2u?I*l^H??ZzB58URw#+z!~h6`{af#ERlFX!Lw51fmuh zv|gy;Y8(p0hOY6Dh{2;Znmt?15(|`;3Z}TFGy#TCFzCkYxKrwuK@+@EdLJ}%AaKHk z+A4!yCzYkqfeL~|Kp|U@Xy)>Gph(2#B?(0$-U^V<<?%UO`V}SelB7bBlrIJ+ABc`d zTJofNrFt?JeUd>oigHLfoWjCFcA<bxkX8;)B9R0+`20lLBhgueQ?NS`ce17!l!((z zq7Dira4^US=MpYT2GN<mE&+2))8fv_Hqi~^xM2r}$L0o0nsU@={@)eDroEk%9(j}R ze-b;5MGl0cN1TL<G}D92V+BJwqzV#&DS|W-gng=uIvYU|P8;C>6$TNQpn=UO9yEM7 zfzW8A>9~`EaWj&xltDBH8$~Trg<7KECJFf}Iak2rsRS!|O1@gD6sy#7p;#<Wn!+jx zvkOCTY6@$4gB8q(4T=GC(2<o0i54IhHA!ILMA1@o=3KZl@=anbGv~sa5zC>I;RHwf zuTf8#X#E7Y)54_>)6z$9TJIz+?8=(1!vGL^EL|x#x^M5VU28MQW6Q=bw=@U#^x7&- zE*8XQ;0%bppW$W1m#v8HWamcJg+r-_b}v7dc{=i!jv=+YxVM1CjuAr<iN`=M<J^rd zQMu4B!aR!y>c4MZ5-Aog`r{$5@T%B)RU&{puSsq-nHyUg*VXjI&0iM1ucq-+T>C@V z+@;y^SbN8x^|uuB5*9x-YATYMufj?N56cGz7{e^rz_{<u6Cbb$QvI&xhC4ia{(gJB zn%VkQV_S-j73hl|n`QS$9IP*i!Aoy!pLH#|jY~w<We{*pbLw1QS~k!#*q{#8X%|#o zaQ18o>6CElRxnPI=X0Yh#kn{7ub-GBDjCc8@j=qF(KMZTb;E*w)~-NQGg=*IdakdR zhS)zt%By}x@2b1wn#$5jeAt;Kq03Xp4EI0ZV3UnJ9=;QDApYr?7;Y(!@?Rf)P}_X$ z3~H@7<Y>qqI=g;kWLMxXVU{4^EDb++h1qua;ljtmx8Kvwj<e!zp0U#l;x}(AsGWZq zJpqit`d7C+ES>j!d#kl=wZOzEE%0@hWp1oIb+V~{8)>RNo;jGW??vpqU9)!p+D(RJ zudb(J-$nR{`cR;=&5wtEVr{q>bN^mf!V6bP=gDpndvCwtMNAdk^IL4@I)CZB<lMdw zUPjq9%x8U>kB$!TSN)nZ63!GQ_*0B05(al;kK2p)@63O)H#^_EVYKz5G?!}Kf#)sX znmWpqI}e|}d1Om$wLYv!`VKO#ZMt%WyZGqvr3iL%$K6MlOf6sNmZ>r>KzdcRgr8H{ z_TBcJuUGjqu>(!}yuuxIoqpyV9hui(%MY{JtFUiMBJZ^i-HG2A;=30!`2O0!wuD7H zzwBnZHa9g4ZOU-fue|?g<#AtE&PNqgA6DBM`Y!O(*_X2$ZuSOm1|VIfRi0X9^8N$j Crd{~} diff --git a/TeamTalk/resources/dd_selected_photo@2x.png b/TeamTalk/resources/dd_selected_photo@2x.png deleted file mode 100644 index 9dbf7d58983f2b53cd0e95bc0bdc1548d55af97d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2009 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 diff --git a/TeamTalk/resources/dd_send_failed.png b/TeamTalk/resources/dd_send_failed.png deleted file mode 100644 index 759ab78920398da4b48f189dd46fbdeb820eb2b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1557 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc zN<f!FypUS}H#V;r8ce_d)2~P@&^OdG0C@?f(AO8g(%f9Q>f(~1RD^r68eAMwS&*t9 zlv<o$T9gcoxHM&uRRvbgMX8A;`9&f5`8lvq49LhY$uG{xFHmp}HdD~>O-#<r0|{t? zb@=*PdFB<DB<3Zjdb-#u0nO0M%uKOzH8OQ`G;worbu=(CG;}q#Fmy3;b8#_ub#pW| zH+M9F>2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6qsIL(9V zO~LIJXPkQVfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;u%GF&STQg#wR^fahE&{| z66T#P94PYdUCOMG)xO;tlk|k;JAyWJ1^kv@5^`i)SG~jZC>GZO@xtZS;!Z2qw@PcS zbKMnCzD-X=TKt+yuiB9%{U(aW*Wdf89r1gfwv63whIR3|pU>u9-<$OKjKQuGg-J~o z?sHW5cD(mKBK}DE<E$U6iWN*)G#}X+b{2e^w8LAc+Fru$)a4`3V=cmqW=5#2V-vii z^sHm=jlFLa(_-cKu>`x^x_%`fOUP(;>)gn;n0R(2LD|4tU$^SAw|CBo`hELC<x;NV z8YVZb)@PqBZ|szDu{q~|={|#m(x+v=A8ov6x%KmE1N|Q5X>~8wC@(+1$gGz0#x15K z!~2gE<pjmA-kY4KndQ1}?Li6Iw=Ov;EJ_m_)?D8`Q**wja>!PRKMUO!Zw@>EZ{f#N zOOzzILyRR)e!73I@6^+<iZ7jcr)MZxh%HfFWO(D|RKA0!{1*f@8k|+QytwN@!UMh; z9-)hJH~!S|Y)EKwc3UCV_3c31+3klOg<RD?aVu?xz|F1){s|pbize*n-q3wi%<&m} zOMPY4(iI&0S~&%8WL&#l>G5vK&zH<c9wbOKz3)m;4Cq}b(5Yzh?(V^7A2?4qF-mZ_ zZdl;vdMW=*-g}d4HEWNhS)UIqWI6lO++pjfJ1)%}L92L--Ys1C{uwXd_S)YUe?Q68 zR{zL&CI5cOiCrC^W@d(8ES*}oR%`MatrJ!M&uRK+X9_Obzd!q{fcYNvSym=-Kc-KV z5}ji$_SV8Nb>)>=OQtPVo{{z2$maOH9y9ifaqS+{x&&%#|G2+xOaJ#jFn_VF!a9Mi zb5*tluWQ;_P`0J`#!9_C&wjnAQnOcX+xqa+^ze0Ob8bYp-rxFk%JW;BM4sLH<ln%^ Y;G2B5E_i?Z6Hr0z>FVdQ&MBb@0MQOwfdBvi diff --git a/TeamTalk/resources/dd_send_failed@2x.png b/TeamTalk/resources/dd_send_failed@2x.png deleted file mode 100644 index 9ff8770b33925e9d37884106e3ad90d74b926463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1891 zcmaJ?dsI_(9N#7?LZIPz2uHkJ76(-Jf(<qS85@%YLzqkEQG&~M#};gN++Em46o%#l zgdjzX6fsaInki@}A|6TP08?RdAW0>kVKeXnrj&K3V*L@_bMO8Ae&6%?e7?_n?)Id_ zRW456P6PtMMHDBH;49t!IL^V}DWoS`@nsPfE5p_xO3VPEFoCB)GGIWYfihtU3@J=G z-EahfFpHv=$}pKYfh$KeRLG8@8Z|ncO&~<9H0mIE7K{NIaHd)t368b2gMeBQ38t{b zbg_;PtJHD%D7+>=Q7X^Rl5-T`$|xYh$i)RTFa`leO}19gHAaHZb-DQ7Zl;02a|o6d z3BCwQCQbtQ2nqu%YDlo0&R_s+HkA>|VzU{`0VbWnq|x!49n1*jve;Z^81V7}ac`(X z$(0C%FMZ*sNKl1gIxdZ7Fc_$Y5GsOZ(ij{L$F9L-2IGiey-ABf#$c`9e_BBR>*c6g zhp7=QU{{1PkX$Sh#3Ox?f=2gBR;zzmCcI!YBc!7-sC0Wu(?GHK|DhVqE3_Vy!2iVi zpTc^nNe9y;upY@p<#^+i{&rV7E+2&<3_+y`l099;Bo%@odKIDr_-oiepcs;?wRS_$ zbB0*V6>0Stq?N-WK_rN4P}OP$H<rl~@<N52SRS3pV8n)mGXzYbKoAxy<gvoSc%jo= z0V2=Uz*=mYtN4e@n~`fD28|B)EPzpU9;^_ehz59`G*>-yEMYV1z2qupjwO6XE)5Tc zW^e7kT0L#T=f}Q%HMscU)#$@oeBM!fu-%S(knrziKqTNvjh8P~566>p$Y(G7mftOY zue-m#s$-zIhbh{=%{Jfcd-vdS^VV~5C(Km|JvLG+MTVK;PF(V}6+NO#M52ICDywQY zh(|McM~{@WSUJBU8Ol$u<mH{W-Rju-bJ*AI*Pfgo%X{CmR|-YZhurENf`n^<-ij_u z%>BnfH+>$wKDw&L|DGkKZua`u9A%qrt0n=TK-#|cs&Z}pBDEj@d?P&wB?YZ1fa)fF znoBpteE;Z=iw!pl7nbj|0O;O66LSShUbFzFpw2oV)dEx8&oxPt=Tx39j_+{2`9`BJ znE7kDrzNqD<m&gh0^9aYvgVZ2k~3~eWj_hB7eqGAThcS(G*otpZ<Do-2T_R2Dh>q} znm(^qxwXx9kM2w<>Gm(Ji0Zq(^1G+bW`Qijd3g8dCq~|0HnczYNzE=L{lPt1?I+>u z6DV8S+cZ{X-0@CjR<gkJV~3_n_mR<pcS5H`l+`sSD_OeYqoWkxsL%4QK0dPi;h3pf zQdzjLC)yQdt<5UqPqq429o;tT%$;`9n-%0Qf7|T^>=MO|EcJ{1{g~SV<jWL~=#q+} zaB_53dA8e$;2m9Y<CQ)0@15QrdVgP&*MsKG4&<CdZ?!@&)oSfdl^%HO7_{z(DU)=n zRlldj9N|{pnKmmib<AbYCI>~Mv)6z&<|;JlZJ`j=HnB?DGEYRT-c5{eDw-GIQrMq# zi&Z!OE78W1)Q!Cp7m}8i%5AI_y{WrO910k99^df!JZr+_PKN?|Y{zh0tvbL5B>t(q zX*2a7Nc2gYtNL-{TekM`!RTu~d)~e1L=Tyz|7f^lMR>Z9ape?PXG-6@!nb&1-|cZ` z^TPJxPSvgg-<@|pXvqnzUDsUeN3<S0sa@+qNoyremL*=>*}p^B#$Gx*srG8ex)@2W z%TRGK(Ux~DWYlIlZ}ZuFp&@m<b4G7bSN73Cvo-5sb7Kv;t*D)FIg@jiJ%5DW@aE&T z+dW@<kPnAH`*y?P{!TY|poX~GGm&AnwjFLcRPDe1!M);!FVuT0`VP4+R@I*!GV^(v ze&?3t@M^usyF4vX4HI5yO+nCvA*!6v$gT&sI7l7$15%=55PB9ku<#ZwEuetdO0sDE zTFTRsbv0Xhubi3dm_qo`zt5Bp{t{8zd@5~XyznotyVZNR>?@nh*IhZGF`KOx;my>* zl^2`L27k{kdc6ETx$XuwFyj63GUYmhg;DiEukWIauMVbOCpnHa&i(K^%xG9urorZx zCJbs+$x`rg@IFe<phn`pSkk6_`1Uc<Fo#Wk=13>-r=A9lJc^39|Mo<&iGt%X=|z77 D0AcO; diff --git a/TeamTalk/resources/dd_take-photo.png b/TeamTalk/resources/dd_take-photo.png deleted file mode 100644 index e819e8c56f66958217db3da95bfa5a460d21a3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2079 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 diff --git a/TeamTalk/resources/dd_take-photo@2x.png b/TeamTalk/resources/dd_take-photo@2x.png deleted file mode 100644 index d4280eebae967813ac7fd46fb755f4a30c0a4d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2683 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 diff --git a/TeamTalk/resources/dd_utility.png b/TeamTalk/resources/dd_utility.png deleted file mode 100644 index 80991a90db0192fce3b41cb26e245cd6c1ba8c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1826 zcmaJ?X;2eq7!D$!LaKs;1uU%L6hrO=5<ty`gb=`hG#moSW|08N#$<sIwN>H;DpnCj zJBlDwWhkIy)FL7xf>O1DLK$!bkFg?$7IAbC)NT;4KT3CY_xrwg-sgFr_t@Foh_JQT z1&#|a7z|br%oC&QGSf595`Am1eTUJ-0pUxKNH`hEl4>9fTMo-0K%kUvgv5|kp1r9R z3cz5@-4sz0L?Q}hfv}PwHTe*9N;QhcU;<X_)KV}FLI4@GQK1UNy{>D(0Sb8_?t8k3 zBvNys6h*LJ14Zh?qCkBb$duz&uL1&eER;YAAyPo6Ojl`Hx<K3{FALq9%tRb8>4KyM z;=YKIh#~+ktbqVJf$9U2$Yg-QAdqQv27`<TC?qn4NJ4Lh51GcIGguT~VCur5(KPa8 zmY5eb6$?ED;!+Sq%_0)Bva$$SR06EoNF+0vOcMu%;)8nlXtPy_ROh48x=u6jAT6j- zs1XIM0!)lj8JvLx;!veuQc$XAXjR&&GNA<{>ZEESnLsk7H0>x7{lBYHIpeKG#L!p0 z|4FQk%2q=}F{FhvG$7izWLHxtHH)i(qzJ5ug5mV(Dn_Kh2&_$k)c`k=0eFd|ph9Ib zte8ZIL@a?yi%3-<B;W<&P!57ZA!l)d$b2$|$LI4X3^JKd^&?Yxd>+}C$z$`GYz}D} z%Y(rTC8R>8vGT9jpjok|VNj~k$UI1+$b{rU8dwQTCe2dJu7x`*-xO9pyB1XYEO`)7 zF+@{q|JCYg6FNVp?abh!hndlbROq~G(80E<yIqWaFNXy@c9gEiSR@R$TesvUe46Sr zOfxoHSlGs{!Oo8mxw+v(L(6Sla&yeGTB?K}=d=(@gqK?AH9HR_E#I`g!f|dXKR4oG zlFk8d+!WjMvT4*M?g3+Ks6Zcm_igXz*S*?%LMoly=pDm4p6u!A*(I*%SZ`<~mDue# ze=IsJ`jhaN>+@rJ^O|KRjIqNUF1INz|C#rIBE*dDxPMMw$bIvKMb6!^vB#>E$~&nS zC<R^=_UXt!TXW}*y9$Q-`}YjL8an&2zWzcvezkAjQ{gu1(a;Pa2`O`qDN6KPmVf(2 zU0sY;ON|7rtgME{TP&?D4SREdfO4ntyi$ub*G{(gV`Bp{DjE{|x;vZ0z||8!yvtUs z2;1$9#y>w6QH}8sbiIs%<C~gJ?`k}|)Uhqc!)U!N#y7L=Zo<Oa_&c(5QCK(D)@FL! zHhWs>af9Zwg>CN9?Tzf}_VjAKp=NL}U9UOhUeKC1SYjbcF^nt>mJ1HO@@M%U&#c=} zcw6n?Q<myO^AC2iIqUbkd&}s=gWleRPMF8MiF9{FfPv*$OUbga_aVZx%BG%<8v{_A zr8z#|`&O`%dqzFhM)v557eb_Uj$|^;4U(nI`h-3y$uX^G-+OLHd)=8{b4y7;=M`$R z8Ri_k<U`bvLd=SbO-<ZmMOD?ml0>;O5!^iV&04l#t~vf{ysTz?OK4t@Fv#`lI?l>8 ziu*ek7Z>UP-s0NOWm@>t2D{uHM_xNmIDhA~a?triSLL-=_kR|v_`~>jHZ1FNoGk&) z3vZlk&jj23qxCKmR_lISU$xk<c;%jec<fFN-2xk*-y^9qK6m=|#s|*bIRE{B#lWa& z>aC`%&2@E+WsY#nUbd+YmvIFJt)BC8^bW>GjJ3hajz6*<SoF6FhAVB?6fb`(yo+ys zS3oO8OB3QHdt7?OajbtNJ@!tr=tA+H@}S~E?*(J_^LKY!9q{D#l+~8z-F}W8>k6;c zr1cI*hb6ZD)V4Luvyx`Z0k<1V1U+#~SUuJn^6U}5cJS0@6(OJ9Z`@Viw&$QdZFECT zz3-}o_=}8+vhW9IUhL!HhAl%>?Q*fj2R``p%^S*Sb(N2}xYy%SLyezDk;4v`hv^qr zL5oh=gE+qduQ`BkDo|0#*8SKg>?_W_U~?S``nWu`m;iNjz5L^##5H02)t&Pn-^>4? h(pQe9mVHVzv&0;DGMsK@Hj;1pYYF&aylPHT&OdS;#t8rb diff --git a/TeamTalk/resources/dd_utility@2x.png b/TeamTalk/resources/dd_utility@2x.png deleted file mode 100644 index d2f6923c42ed6e3f0d2db71170dd2d637a9487fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2421 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 diff --git a/TeamTalk/resources/dd_volumn.png b/TeamTalk/resources/dd_volumn.png deleted file mode 100644 index 67cbef99f65ef787e0e5dddb51f0e17c4e35ef80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1257 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lo!3HENmaZrTQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@QuLn2Bde0{8v^K<nQL2C3WatnaE85nHrD+&^mvr|hH zl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZB<rk7%m7Q#vqGWHUU{hfQG$1#% zBvGLvHz%*ys=`(YY_1iM4HDK@QUEI{$+lI3I4Z(7K*2e`C{@8!&saCvz|c^^%uLVF z#MI2pP)EVYz|ctF0Eo<V4Na^}&8&>f6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}<f6=ilFa-(1(1n}N%^HE zwn{*kLcEY$05>+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GIq3dHE=UGb2V`_F*I~Fb~11>c5$(^Fg15} zG&D6ahv{|6PcF?(%`1WFO+n~2$Eg>T7;+1MHoK%2WtOF;xE1B+Du6w0m5JLeK$qZh z3q)@UZnv1?)T<A4j6Nu8k)j$V1WZ35COqK+Iq;;Png>kpMZko8C`~(%fq^mF)5S5Q z;#Sh1|NrfoO&Pfbf-fJL>*Mf<Ta-8E=#Tlk>daUwD-8vT0}gKBcc_^<@z%scM;uZa zK7FcFc(&+*Oq#+u)<=)8^oWQm?Bo9QDO^jUj4ee%hiB)?ga?*S47RkkF{(aL>pAGr zy(h<gA$NU4lK9QmDOMjP1frGIbG(u(jjQ|~E(_y1e5gQPpm<W|jdBIMejNi7uJ)xV z)7lp-xyF3N{lZ?K&iT0wKQwktKe;y8q4gkVPT~pYWsTn(e&}yA;9*Y+Gve9P;X6UC zwV6xu<a2p}`v;#Mx*yQ&sk_j(Q1#9Jlpk*__RTru*VgF%q4lAukhe^Lz}#c1mOxA7 zgbqy<ypqEF$k`(FkGd>NV-u&i+SY;!-XqnVt%{nhhl3UVd1&x_Zk*BU!F*nbCnZXR zkLkh<Wwp+|?P5F?u|KArn8S1`FwNml`vmURjxT3xo!TbO3jQX%m_y+J155NOt*h$Y QjG)5D)78&qol`;+04yb~S^xk5 diff --git a/TeamTalk/resources/dd_volumn@2x.png b/TeamTalk/resources/dd_volumn@2x.png deleted file mode 100644 index 2b9d18dd3e8df0166ed898ca4032544804d362cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1285 zcmeAS@N?(olHy`uVBq!ia0vp^8bBPz!3HGvUb}J!NJ*BsMwA5Sr<If^7Ns&crsOB3 zDtP85rl$s_CZ<#to=ml2U|?3s42dX-@b$4u&d=3L1gX)h$SnZsW?-<fuP8`N&Q2{+ zNJ>r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT6<RZ(him0w75Rd%vvijuvZf=z`L(16_3 zl0=1y+?>2(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE<O<mczWLNOpCza+mnBfmhwIoM1=!#6QGGY=%7 z3D)83Yvq|&T#}fVoa*Ufs{}MdFEca6%GlA;)xgc%$koKv#L&>y*vY`j*u}-t!qnW^ z(a_Yy9H!SLKe;qFHLnDwHwB^B7^hxPV#qB3+U$~Alv$RV;#QQOs{r=2RVHq?7~nJy zsy79<TMTjP)dxC89~8AnQ4JFUrXLU!o^XL2c+yYJ1E%*PV8Yg$<<rT)z*z3-;uunK z>&;AGFJ?!9R^gL&N=i>ec6uI|Tw!ruA(Zc6XqY0mxE_n5LW{y9i<NCB)sCdp?Y7^_ z6(^Bqbolt|b&nkRxmPo8e&@Tnn{m6zp9hTX7gW#rPG81*^`L8mvi`<*`Z605PyS01 zkz&1b@`d5!hX3pv7&0Bp170?KdM%@}bmrEVyY6&*u*>s5%xLhM-(2)&SvxCx$pK?i zE3;~)>$_i``r=z^@SC%bN#l#{isf?4__$pq1+Im#Phb9kqrqu@b5tr{RYZXUJ4;*Z zW@f9c&8M{rG#Oj>v41_!u*}2w;U8t0OHV@BH?JyK$*}d@d|Mrh1<YX#J(Xt+)^bY} z2V9rBpgGNAHMh8Qz)Rmt90t$i_89IBl#MZM?B-nI8~<g)g9bhh4({!_49PsNI$uuR zb>w{RgCqv7y`FL}8g6}Kt~EP(&BUxWP<GDt*3TftGYoX@T$G)%&hE<b1^+bIzo=h5 txP0A%UrZrY;@q+VZy$KCJeQ?@fMKcMb(P8PT5CZClc%en%Q~loCIAb1zL@|3 diff --git a/TeamTalk/resources/delete.png b/TeamTalk/resources/delete.png deleted file mode 100644 index f72b5ea58dee2d4ea0064b473170c4a9c6804ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4559 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 diff --git a/TeamTalk/resources/delete@2x.png b/TeamTalk/resources/delete@2x.png deleted file mode 100644 index f72b5ea58dee2d4ea0064b473170c4a9c6804ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4559 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 diff --git a/TeamTalk/resources/email.png b/TeamTalk/resources/email.png deleted file mode 100644 index 7cea1126b4ad7f47cf7138643510f57bb007ec19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3665 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 a`T`b$M3T>RAhp+j^6*%D%pEJ=g#Q2!oM`0$ diff --git a/TeamTalk/resources/email@2x.png b/TeamTalk/resources/email@2x.png deleted file mode 100644 index 7cea1126b4ad7f47cf7138643510f57bb007ec19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3665 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 a`T`b$M3T>RAhp+j^6*%D%pEJ=g#Q2!oM`0$ diff --git a/TeamTalk/resources/jiantou.png b/TeamTalk/resources/jiantou.png deleted file mode 100644 index 9ea839250ea0349a9b28cba3b2d959a9fee7504b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmaJ=TWHfz7>>@(*`X*Z=$=A0!J<u?Y|YlNI=ZBDRWoW=u^^~fa<+yoIWal2=|u1j z%D{O+MZAFuDk4-75pQ@y6mN(Z&`ogoFhumh2N6*`nd|hy8j_p~-}n9h`Ty^1PqZ$a z?5p$<1Ti_@A|>%y>3!v8_<wrQlE-+Mjbdrk20Ktzu>ld)U^^h=hSCX=K+$q*?t=z` zD53OJ8l~kWf(i{<@i4S&SeQ)^4UMj)s9gY&?VwXPBh=?BHz-oqBGmGb9F#2)Wb~F^ z8?^PdrqtdpHLOvM3&;jnzybz93h5f%rX#o!YD8DSb8nlW$PozYicr6kO3MjSgf<{U zbWK1FvMkB-G+P_ud3HX@1zC;>;+GGwwL*v&xH@w5p>Q-?>kyJs^Jpx*iclGZEP-LN z*({x{p`qQ$u;Fmn)8M!OMg*Lki4-?rI#mS)2{@{)TS$i{=_xAhum?pboayf)7}l7q z>5P^M7mRTgi(%=YcccPPmj4emj4`x>lHgCi{}gsoISVjJ;J_YR#f|Hz@<LgHXafa7 zI|X5Pp^AwNM9|4Vixk^<a_(~7)L_=}kKkolh?@>lOclhX2!$1BUDt$qk(XliO%hiZ z3bAagHq6&GM{C4jRIHDRT#Z!VN>J@FfQbrR?GHCrl<Qf+uyAAv*!o(aHQUf2M~*D$ z#dB#YsyE8jisvF0<uW)K#%t_fjV^3q_juDW+v3HT@qvlmZev^LFAdDVS7IP8MN{tU zt1t4tTfrHnPv5_LKeTgrZ`4|bp09c#fBbN)Uv9i}vg`Z!NvZg=6JOtLtuUtd&dntT zdk*{ZFV7t9zI^b_sRy&v>!17=viGi8PkvVVz|@Hk*DLeOjIx&UzPrcjzRt`|QP|<z zgU-?2=?{H(@&nJex7VJhw=KPSWJ6?XpYO(iGI7H39bdKt&m4Mof0qASW>V(nHT%`B zi~H6My-j4eWJ$EeKcQ+)fB6ts(yu;Zj{Mwsf?QKw8n`?!UR^r)qhf`>I@|n+*t{!$ gy5d07wEZhLj3cVfE*^Fru*bXm@mQ;Lu4(nAU$$p{EdT%j diff --git a/TeamTalk/resources/jiantou@2x.png b/TeamTalk/resources/jiantou@2x.png deleted file mode 100644 index 9ea839250ea0349a9b28cba3b2d959a9fee7504b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmaJ=TWHfz7>>@(*`X*Z=$=A0!J<u?Y|YlNI=ZBDRWoW=u^^~fa<+yoIWal2=|u1j z%D{O+MZAFuDk4-75pQ@y6mN(Z&`ogoFhumh2N6*`nd|hy8j_p~-}n9h`Ty^1PqZ$a z?5p$<1Ti_@A|>%y>3!v8_<wrQlE-+Mjbdrk20Ktzu>ld)U^^h=hSCX=K+$q*?t=z` zD53OJ8l~kWf(i{<@i4S&SeQ)^4UMj)s9gY&?VwXPBh=?BHz-oqBGmGb9F#2)Wb~F^ z8?^PdrqtdpHLOvM3&;jnzybz93h5f%rX#o!YD8DSb8nlW$PozYicr6kO3MjSgf<{U zbWK1FvMkB-G+P_ud3HX@1zC;>;+GGwwL*v&xH@w5p>Q-?>kyJs^Jpx*iclGZEP-LN z*({x{p`qQ$u;Fmn)8M!OMg*Lki4-?rI#mS)2{@{)TS$i{=_xAhum?pboayf)7}l7q z>5P^M7mRTgi(%=YcccPPmj4emj4`x>lHgCi{}gsoISVjJ;J_YR#f|Hz@<LgHXafa7 zI|X5Pp^AwNM9|4Vixk^<a_(~7)L_=}kKkolh?@>lOclhX2!$1BUDt$qk(XliO%hiZ z3bAagHq6&GM{C4jRIHDRT#Z!VN>J@FfQbrR?GHCrl<Qf+uyAAv*!o(aHQUf2M~*D$ z#dB#YsyE8jisvF0<uW)K#%t_fjV^3q_juDW+v3HT@qvlmZev^LFAdDVS7IP8MN{tU zt1t4tTfrHnPv5_LKeTgrZ`4|bp09c#fBbN)Uv9i}vg`Z!NvZg=6JOtLtuUtd&dntT zdk*{ZFV7t9zI^b_sRy&v>!17=viGi8PkvVVz|@Hk*DLeOjIx&UzPrcjzRt`|QP|<z zgU-?2=?{H(@&nJex7VJhw=KPSWJ6?XpYO(iGI7H39bdKt&m4Mof0qASW>V(nHT%`B zi~H6My-j4eWJ$EeKcQ+)fB6ts(yu;Zj{Mwsf?QKw8n`?!UR^r)qhf`>I@|n+*t{!$ gy5d07wEZhLj3cVfE*^Fru*bXm@mQ;Lu4(nAU$$p{EdT%j diff --git a/TeamTalk/resources/left.png b/TeamTalk/resources/left.png deleted file mode 100644 index 3cc73ab23a9f86098f3ada7a05e3796fdcd9ff92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3HE<Pl*KsDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_)*%u1Od5hW46K32*3xq68pHF_1f1wh?E1MMpc5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw z%*;?n!N|bSNZ$a6%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm z+*mKaC|%#s($W%ShLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smX zK$k+ikXryZHm?{OOuzusuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y) zTAW{6lnjixG-Z%g1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s>P;d@5Q_u*{%uC5HFV+OB z_w}{%%quQQ%u7!7bg@+enxL1NnPO#PX5?sUWMN`tZeng|=xX9*;cVh;XlQO>=4xr_ zXle%2>yn>bnwy$e0@Is<&})iQFDNPG765H_NiE7OOHFYr%Fk5*d)X=zw_A*Gng`XJ zg4->|IQ8lS9itD5Sfq%C2?0|NhzU=&Kn^_Nr{)1udl4{MU%6SelYxP;&C|s(q~g|_ zJBIqqi89AOK9`!@At7;tm3v~x6%9j)mUD4T%FW>yX7ohxvT-XeTV}1@Z1R!GWM^ww zN9X;e=T)b<ed4K@_y7C+n&rz**8YlFU+!BSIq$h%g4)%6QGtiw)%&}fUY%EUhUq}? ztFYc3JDx>`YBTz;aqlRtoBdi*`;XAUygT`E&S4f|Ifl-n={XF{Y&;SM2?rV&ng1z& z*rEDi*RIVBav|=of_jhg$^Cfvv9fekT2MWIdRF+|B`t5a9}<3b<m<kPKL0dgKeI1W z*?9lp(Z-h%u`4c4v2Q;e`^#r-q}9iWZDq@@ZehFkMO{4YKz^2Y?ut81JLYJcE|;3N zZrZ#nt8N9#hw1U#Uu}#E;h(my{r%M@t1tRZo%#&-u5Q~ecTTtA^v<x&(+(WnvbIqc z>@v6$aWnqg?GWB*{^FRb;s2_Af<@W0GOzz;4(~CSkK&4aIBnIc;;X$3x4zzv$|-*B b-N49@%VNWtxGa4=sFd<_^>bP0l+XkKS{TS# diff --git a/TeamTalk/resources/left@2x.png b/TeamTalk/resources/left@2x.png deleted file mode 100644 index 3cc73ab23a9f86098f3ada7a05e3796fdcd9ff92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3HE<Pl*KsDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_)*%u1Od5hW46K32*3xq68pHF_1f1wh?E1MMpc5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw z%*;?n!N|bSNZ$a6%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm z+*mKaC|%#s($W%ShLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smX zK$k+ikXryZHm?{OOuzusuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y) zTAW{6lnjixG-Z%g1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s>P;d@5Q_u*{%uC5HFV+OB z_w}{%%quQQ%u7!7bg@+enxL1NnPO#PX5?sUWMN`tZeng|=xX9*;cVh;XlQO>=4xr_ zXle%2>yn>bnwy$e0@Is<&})iQFDNPG765H_NiE7OOHFYr%Fk5*d)X=zw_A*Gng`XJ zg4->|IQ8lS9itD5Sfq%C2?0|NhzU=&Kn^_Nr{)1udl4{MU%6SelYxP;&C|s(q~g|_ zJBIqqi89AOK9`!@At7;tm3v~x6%9j)mUD4T%FW>yX7ohxvT-XeTV}1@Z1R!GWM^ww zN9X;e=T)b<ed4K@_y7C+n&rz**8YlFU+!BSIq$h%g4)%6QGtiw)%&}fUY%EUhUq}? ztFYc3JDx>`YBTz;aqlRtoBdi*`;XAUygT`E&S4f|Ifl-n={XF{Y&;SM2?rV&ng1z& z*rEDi*RIVBav|=of_jhg$^Cfvv9fekT2MWIdRF+|B`t5a9}<3b<m<kPKL0dgKeI1W z*?9lp(Z-h%u`4c4v2Q;e`^#r-q}9iWZDq@@ZehFkMO{4YKz^2Y?ut81JLYJcE|;3N zZrZ#nt8N9#hw1U#Uu}#E;h(my{r%M@t1tRZo%#&-u5Q~ecTTtA^v<x&(+(WnvbIqc z>@v6$aWnqg?GWB*{^FRb;s2_Af<@W0GOzz;4(~CSkK&4aIBnIc;;X$3x4zzv$|-*B b-N49@%VNWtxGa4=sFd<_^>bP0l+XkKS{TS# diff --git a/TeamTalk/resources/loginlogo.jpg b/TeamTalk/resources/loginlogo.jpg deleted file mode 100644 index 513f1827e99ce1323f8e9d12af68135d61393f60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19676 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 X#F0Q#dkPpd|6kVpui0VK#^ApJ5G&)W diff --git a/TeamTalk/resources/msg.caf b/TeamTalk/resources/msg.caf deleted file mode 100644 index b1749ce4529dcbbf35b039d2af9336a2b446397b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43416 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 H1cLtq6(*sl diff --git a/TeamTalk/resources/myprofile.png b/TeamTalk/resources/myprofile.png deleted file mode 100644 index 5a0c9acc0d58cadd0401dc5d240e776fe74ae803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1947 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 CrUGRE diff --git a/TeamTalk/resources/myprofile@2x.png b/TeamTalk/resources/myprofile@2x.png deleted file mode 100644 index 5a0c9acc0d58cadd0401dc5d240e776fe74ae803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1947 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 CrUGRE diff --git a/TeamTalk/resources/myprofile_selected.png b/TeamTalk/resources/myprofile_selected.png deleted file mode 100644 index 27a185b052d5fc702d48471e45820636db5a8e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1617 zcmbVMdr;GM91n<(RhS~a@R=2zpnauDLlddeHYoM1VC|K9MbFX($e>9{gDrUH6epY< zV|ZHTbT{$9IbWRHWLHqZCyvciHg{7PJBu)ekAdR2IZ<4S!1jmdAIl}b=lApZzOyTN z&B`#rECB!jVY)=Zz|XP#hfEm9kCLQ{Zhng763pB>CY^IzSrSm&nKTmAIjk9^fwbE5 za+=6E02q@_8O@wozZ$nO4v94&Bk?$#JQ@JvmV2C5TNcTIX=DaPtAxF08iXKaR|!)T zdYRs-B{QkSe3o37zs6|G&$3~5;qql*oCoI#93*E2J&tVJg?m)OAzqwc2acsea7cv9 zQVCxfW!5KyT81S-g#;GcWDo?Rs02b3C<=){xeSs^W&DeZAp}>TxI7jdeuTU>)}D?V zh!w-S_?=3a$#G6xDs{Wv5;rVi*bFIzVOW4eE*J9>Vpkr`Sv_Lf6*a;@kS-fbIXQ}< z!2qK*jmhOyLf+C>E;yWe{U|Z*8V(d6GO5SvltL1j)ZqyDH6-og4CKFNyjI#}%yW`b z1L<ONSsR~^^r#UqAG<dz3JCJn;7KgSC&ijgFt%I=Npm_vCFE};cFK-xV2u_=WSCM0 z$r2C<QWFZb21XRI5CUrvNIt^xIxGfjVhL1(LKuQVPy&JxL;{8qN)#hj#3HeySRL)+ zth9|B(M$1qhp~z`VsR}?S~-R_GEDYJ1te!O9OKGloS=3c3Pz_;w4HIgVgl)T<t;(7 z)MnDYf@K`wP<(OfHTroMF+?dt5#EA;-%16nR>Mk}7SqUNFboTavG)HHGbwM3G*BG> zDVC8Vz5)Zw(bDHPqs>Foe8;eSYpAm<l>iXDT}P;mp4Nx0`b6W}spB6ly}K8yG5k=L z=A0f*BO7Wbgu6A-)|$zwiQ=lA_Zp`ku6|y?EtIs?Ht!Fa(Sa7AZy6-U5J>n4)_pf= zYSZKQ_boA0B=s(JD^t48ADkHVSKrp&C-noNmpgKD*Doo%c-Xnfi`MTc{Cvt$&8pqO zoyP{B%<BvLM3eSy(WU#%ha!~cdnzO21vgsAaa72oJ?1&dLCCp8_`@w1dQOL{fNxe^ z=|4pEVb^8@7NQ;4Qj)%xIxsJ2=Cti&MA|zbEpIO`o3L%5-i=@VEd7JEzeUxEJ{DY> zSyS9_*<UR7_vkK==JPwN{HVx}R{2e0zv-~wB=VaKN60Bo>qMVLcks|Alx^+b{e6i= z+c)?!{Oj_n`L%bZm$sGfz1eqsY}<?&-@dV_s|9qy1LVh=lUJv1|AlxKnS=Z+jZq$R zm-wP@#i#nP&Pg{nu%=n1<z4SaHvV1m+*?@rEZQErL|JFLyX>Q_#>I3{UT@{gQ}eV7 zO7GXUpSk_jDpA+sCSPu6jk;lTb;bexr}t7_trs_&FZ>btXN!C645WKck3jN5-XREk z*5)m({PMjr$&UJ8>!c5^cbT=dJDL}r$oD>tdw8V0e|DoqmGUB^LsD0mRy;AQIif1D z<!J9LoPGYqslqX$2>sl?(3rJNC-dx+BZHkqVdH;tAW6H&T^X2ry=v=}vWoaYS!2*N z_03&zr@55=fk9>A*%0<|o3f(&owmZW@pA9O)`af)VfeN<WyJW~3a{C8Jei($u5%gS zd~o9T)B`(Y$JkEqE$!LWwH9)tFS{sb{YKxMqMVkEzS(bgRBvf7;K!%?Ep?`q!J)vl XZI>EuEI7F^@RQditRbp3n+pB`t*&A+ diff --git a/TeamTalk/resources/myprofile_selected@2x.png b/TeamTalk/resources/myprofile_selected@2x.png deleted file mode 100644 index 27a185b052d5fc702d48471e45820636db5a8e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1617 zcmbVMdr;GM91n<(RhS~a@R=2zpnauDLlddeHYoM1VC|K9MbFX($e>9{gDrUH6epY< zV|ZHTbT{$9IbWRHWLHqZCyvciHg{7PJBu)ekAdR2IZ<4S!1jmdAIl}b=lApZzOyTN z&B`#rECB!jVY)=Zz|XP#hfEm9kCLQ{Zhng763pB>CY^IzSrSm&nKTmAIjk9^fwbE5 za+=6E02q@_8O@wozZ$nO4v94&Bk?$#JQ@JvmV2C5TNcTIX=DaPtAxF08iXKaR|!)T zdYRs-B{QkSe3o37zs6|G&$3~5;qql*oCoI#93*E2J&tVJg?m)OAzqwc2acsea7cv9 zQVCxfW!5KyT81S-g#;GcWDo?Rs02b3C<=){xeSs^W&DeZAp}>TxI7jdeuTU>)}D?V zh!w-S_?=3a$#G6xDs{Wv5;rVi*bFIzVOW4eE*J9>Vpkr`Sv_Lf6*a;@kS-fbIXQ}< z!2qK*jmhOyLf+C>E;yWe{U|Z*8V(d6GO5SvltL1j)ZqyDH6-og4CKFNyjI#}%yW`b z1L<ONSsR~^^r#UqAG<dz3JCJn;7KgSC&ijgFt%I=Npm_vCFE};cFK-xV2u_=WSCM0 z$r2C<QWFZb21XRI5CUrvNIt^xIxGfjVhL1(LKuQVPy&JxL;{8qN)#hj#3HeySRL)+ zth9|B(M$1qhp~z`VsR}?S~-R_GEDYJ1te!O9OKGloS=3c3Pz_;w4HIgVgl)T<t;(7 z)MnDYf@K`wP<(OfHTroMF+?dt5#EA;-%16nR>Mk}7SqUNFboTavG)HHGbwM3G*BG> zDVC8Vz5)Zw(bDHPqs>Foe8;eSYpAm<l>iXDT}P;mp4Nx0`b6W}spB6ly}K8yG5k=L z=A0f*BO7Wbgu6A-)|$zwiQ=lA_Zp`ku6|y?EtIs?Ht!Fa(Sa7AZy6-U5J>n4)_pf= zYSZKQ_boA0B=s(JD^t48ADkHVSKrp&C-noNmpgKD*Doo%c-Xnfi`MTc{Cvt$&8pqO zoyP{B%<BvLM3eSy(WU#%ha!~cdnzO21vgsAaa72oJ?1&dLCCp8_`@w1dQOL{fNxe^ z=|4pEVb^8@7NQ;4Qj)%xIxsJ2=Cti&MA|zbEpIO`o3L%5-i=@VEd7JEzeUxEJ{DY> zSyS9_*<UR7_vkK==JPwN{HVx}R{2e0zv-~wB=VaKN60Bo>qMVLcks|Alx^+b{e6i= z+c)?!{Oj_n`L%bZm$sGfz1eqsY}<?&-@dV_s|9qy1LVh=lUJv1|AlxKnS=Z+jZq$R zm-wP@#i#nP&Pg{nu%=n1<z4SaHvV1m+*?@rEZQErL|JFLyX>Q_#>I3{UT@{gQ}eV7 zO7GXUpSk_jDpA+sCSPu6jk;lTb;bexr}t7_trs_&FZ>btXN!C645WKck3jN5-XREk z*5)m({PMjr$&UJ8>!c5^cbT=dJDL}r$oD>tdw8V0e|DoqmGUB^LsD0mRy;AQIif1D z<!J9LoPGYqslqX$2>sl?(3rJNC-dx+BZHkqVdH;tAW6H&T^X2ry=v=}vWoaYS!2*N z_03&zr@55=fk9>A*%0<|o3f(&owmZW@pA9O)`af)VfeN<WyJW~3a{C8Jei($u5%gS zd~o9T)B`(Y$JkEqE$!LWwH9)tFS{sb{YKxMqMVkEzS(bgRBvf7;K!%?Ep?`q!J)vl XZI>EuEI7F^@RQditRbp3n+pB`t*&A+ diff --git a/TeamTalk/resources/password.png b/TeamTalk/resources/password.png deleted file mode 100644 index 06e097e0025aa6f21f8b82c3c0d794058b1762f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1809 zcmbVNX;2eq7>*!^9HW3T5E)ojK|x8fxiFE#TtLJChQm~9H6#nfkZjy+NT80WXn{H~ zj0fn5Q?ZDsK#7*35!(Vff+&vQfeeZlf*eAbwjhXh17iEb@ke)d_dE7^p7;3PcQ!93 zD%{bIXh$Fr9EA~lF+Q%qA0Jz5{N11&4Z#O@Od!Exkz`CSMPUL*jwHc=P$f-)#jsSK zv7-eJA`mQ-6>$<wBHF-~Au5v8j3F6R8k|ia1ce$jQkfFQfFw9Yp$-N|uKWf93VATN zi6NqhG(0#}5s`_)v6)eEvP`9nB?m)8fFJ`K7f`{N6fmgL)LOP77@W~%<8$*i83bk^ zm@*igbxI<N0eA=s0}K)^Kt_QefXO65bOw_Ntp=zRh)Sm5H!}dDvl&b_H4ylCfw(nP zp3D~W!#>)=SHWN^hH2PjvR<zz>1iYcO(8=p7R#(br3T=L0BwdElNtil+GTSJd{`?( z6&g%|r~$L0GzrmR!65GGYzQiiNc2fqt^JrNJY{5qR6~YH6tYTXj%x<3#l-NxZhRK4 zjmyx$WHGEobf^qJkK|=@WIT6YHe?3k-ms%l1%4>fG(IBJsbDoG<OhTJ7m{2dXLD&> z9*s_6t)V~^0Ud%kd<KV0qcZ{_I*mt%sB;>h<#K3YESi7=tzqyWNI>UMXgnT`CZIF< zEIx-yo8t=AT1={z!E<&MX1lXo))%>K9tuk_1dT(Gw7Ck1NkuS3n~G=vUMv$>xk;gx zBYLf$`FLid<-@2V9hQfohzgj=FI({$`y8{sG!{?5f&ypa#-k1sK!FqrSHNY^nczpR z{Qu;Pj5|X%7sr2!Wo`?vK=brd>Enw}%>%3PjzRI(Sh>Ia65eqfA)gax=(=@O7!kkG zZTJ1vk*#581(tU!nIV2eSEnjsZUTpvf55r5usQ$0g}knx^IVs>Cdi5Tg?B0{Qah9` zd@IxXmeQKIOy9pJcfH+zWBAv;tK%o8`hUN1wdC7389i$|vf4!Xe9-TMa{c&Z(#ple ziU{isIl3CV<Oa71%c@aNPi_F++G0=EX21K&R!1PvYW+4Z2hWq|yfn_$U?*`JxSjJv z;z)kF+Y%Bkd**O&G)FsqIMGsH+uL2fBqsl<N9fD4_Et*J9(Ho%ICxYgCfT<&%+KkC z!IC9T{l=g~3xV&7Ynhiup4NJ*9%nne|E4M>v^bW+KKHfF%j2n+z5V-^Ga9A+!*|w= zITxQi-EAvTa@AlZCi%s_k@;4XeyDX{w_!`#i82p~+}*SNgcTFkikjh@ojPy5Rnghb z<)rqiNY%}P$UvZY;KI;O!#+uI!NU>>ENZS*)?*#^KOQ!`zLKZDT>v$^h`d~m96x_R zQN9pu;F}l=)h(4{oXSL3U39>iD>=K2zFsd$>#_$&_aB|#=f8k#a;V=sXnj4T2?fIw zO_9c98<T2@Cs!<8to$wje6@YksieC2$|(Q4M&qNxPMgl$&csbqtjB~W_pIm@TvZq9 zV|}fy_0>FMV0C&Udtw#CH)Kzh=^?p&SXY$o_2CpJbh3MtxL#^}#~Db|=q9-v9vGE1 z1kWb5zry=N;hP4kNABa@)ZEld2M3Wy7r$CaFX&ygsMPML&BATuBaA~^Z%r?78(3E< zPMkRY*F0Uu+B&c%CUN!F>t)wBw}duM?{IUC4@w(<QFbQA<HfN$9>ZeZmO8m}clL?g z+Cy7UB|WI#S$>9;75&b3alhNK((wA>T;0K}!&9i6Jobj9Cp27gZ9A6mUTo|r8gDe& zMrQV%FG)Xr?WRH#e%;g(TK<FGP{NqwuB>L^#oYKN=8{$U-bK&<;E$Z`_5XAC*n)I# z*97C3+o}wE%r}x0Ju>Jt<sQC4><*hec3DK$C+a@*=)0cT==&{}t`do!*ENM)_P<)3 ztAW}S13o)N<t3Q1^a=8P>>Jk5>z)*!s$Tkp>voT!8t)31(;+@BuYV#~5_+FGb-XR? Rj57bEgn}r3HFw+Ie*p3$yYv76 diff --git a/TeamTalk/resources/password@2x.png b/TeamTalk/resources/password@2x.png deleted file mode 100644 index 06e097e0025aa6f21f8b82c3c0d794058b1762f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1809 zcmbVNX;2eq7>*!^9HW3T5E)ojK|x8fxiFE#TtLJChQm~9H6#nfkZjy+NT80WXn{H~ zj0fn5Q?ZDsK#7*35!(Vff+&vQfeeZlf*eAbwjhXh17iEb@ke)d_dE7^p7;3PcQ!93 zD%{bIXh$Fr9EA~lF+Q%qA0Jz5{N11&4Z#O@Od!Exkz`CSMPUL*jwHc=P$f-)#jsSK zv7-eJA`mQ-6>$<wBHF-~Au5v8j3F6R8k|ia1ce$jQkfFQfFw9Yp$-N|uKWf93VATN zi6NqhG(0#}5s`_)v6)eEvP`9nB?m)8fFJ`K7f`{N6fmgL)LOP77@W~%<8$*i83bk^ zm@*igbxI<N0eA=s0}K)^Kt_QefXO65bOw_Ntp=zRh)Sm5H!}dDvl&b_H4ylCfw(nP zp3D~W!#>)=SHWN^hH2PjvR<zz>1iYcO(8=p7R#(br3T=L0BwdElNtil+GTSJd{`?( z6&g%|r~$L0GzrmR!65GGYzQiiNc2fqt^JrNJY{5qR6~YH6tYTXj%x<3#l-NxZhRK4 zjmyx$WHGEobf^qJkK|=@WIT6YHe?3k-ms%l1%4>fG(IBJsbDoG<OhTJ7m{2dXLD&> z9*s_6t)V~^0Ud%kd<KV0qcZ{_I*mt%sB;>h<#K3YESi7=tzqyWNI>UMXgnT`CZIF< zEIx-yo8t=AT1={z!E<&MX1lXo))%>K9tuk_1dT(Gw7Ck1NkuS3n~G=vUMv$>xk;gx zBYLf$`FLid<-@2V9hQfohzgj=FI({$`y8{sG!{?5f&ypa#-k1sK!FqrSHNY^nczpR z{Qu;Pj5|X%7sr2!Wo`?vK=brd>Enw}%>%3PjzRI(Sh>Ia65eqfA)gax=(=@O7!kkG zZTJ1vk*#581(tU!nIV2eSEnjsZUTpvf55r5usQ$0g}knx^IVs>Cdi5Tg?B0{Qah9` zd@IxXmeQKIOy9pJcfH+zWBAv;tK%o8`hUN1wdC7389i$|vf4!Xe9-TMa{c&Z(#ple ziU{isIl3CV<Oa71%c@aNPi_F++G0=EX21K&R!1PvYW+4Z2hWq|yfn_$U?*`JxSjJv z;z)kF+Y%Bkd**O&G)FsqIMGsH+uL2fBqsl<N9fD4_Et*J9(Ho%ICxYgCfT<&%+KkC z!IC9T{l=g~3xV&7Ynhiup4NJ*9%nne|E4M>v^bW+KKHfF%j2n+z5V-^Ga9A+!*|w= zITxQi-EAvTa@AlZCi%s_k@;4XeyDX{w_!`#i82p~+}*SNgcTFkikjh@ojPy5Rnghb z<)rqiNY%}P$UvZY;KI;O!#+uI!NU>>ENZS*)?*#^KOQ!`zLKZDT>v$^h`d~m96x_R zQN9pu;F}l=)h(4{oXSL3U39>iD>=K2zFsd$>#_$&_aB|#=f8k#a;V=sXnj4T2?fIw zO_9c98<T2@Cs!<8to$wje6@YksieC2$|(Q4M&qNxPMgl$&csbqtjB~W_pIm@TvZq9 zV|}fy_0>FMV0C&Udtw#CH)Kzh=^?p&SXY$o_2CpJbh3MtxL#^}#~Db|=q9-v9vGE1 z1kWb5zry=N;hP4kNABa@)ZEld2M3Wy7r$CaFX&ygsMPML&BATuBaA~^Z%r?78(3E< zPMkRY*F0Uu+B&c%CUN!F>t)wBw}duM?{IUC4@w(<QFbQA<HfN$9>ZeZmO8m}clL?g z+Cy7UB|WI#S$>9;75&b3alhNK((wA>T;0K}!&9i6Jobj9Cp27gZ9A6mUTo|r8gDe& zMrQV%FG)Xr?WRH#e%;g(TK<FGP{NqwuB>L^#oYKN=8{$U-bK&<;E$Z`_5XAC*n)I# z*97C3+o}wE%r}x0Ju>Jt<sQC4><*hec3DK$C+a@*=)0cT==&{}t`do!*ENM)_P<)3 ztAW}S13o)N<t3Q1^a=8P>>Jk5>z)*!s$Tkp>voT!8t)31(;+@BuYV#~5_+FGb-XR? Rj57bEgn}r3HFw+Ie*p3$yYv76 diff --git a/TeamTalk/resources/right.png b/TeamTalk/resources/right.png deleted file mode 100644 index 2c565bd8d7e41795723f6d8147050f89ded9f388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1501 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3HE<Pl*KsDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_)*%u1Od5hW46K32*3xq68pHF_1f1wh?E1MMpc5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw z%*;?n!N|bSNZ$a6%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm z+*mKaC|%#s($W%ShLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smX zK$k+ikXryZHm?{OOuzusuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y) zTAW{6lnjixG-Z%g1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s>P;d@5Q_u*{%uC5HFV+OB z_w}{%%quQQ%u7!7bg@+enxL1NnPTN;Y;5l8=;CT*ZenU^=xSnN;^b^;>1t$QX5#2< zVqyu?>yn>bnwy$e0@Is<(Cda%FDNPG765H_NiE7OOHFYr%Fk5*d)X=zw_BWXng`XJ zg4-=FIQ8lS9itD5Sfq%C2?0|NhzU=&Kn^_Nr{)1udl4{MGxw}|$-uxA=;`7ZQgQ3e zor7M|juPx2@{=a{&XQ<m*JSBm%CFFLp}GBt`HH<JB1<l;R(E`9J7u5KRJku|-#AU) zx_(%6p?PVm+~bv7GP-io%&q>OKQ>K9<Zj%VbN|@e-fX|w`1j-6bLaRDYu$XqaZ34$ z`3l}ET|IR_dw+43UNy;%e`FHEV1Mj=<EO6Blg~D~_u5^Tm{_Oa_B*{}9z$)-^<|P* z!dlK&o;=`|d8qPHP2oM^j(f*4XLaf&&%UW5Hd|$4RZM}Z;mo~ux98omn%TkZ7pgcT zp@~xsMzqI?x-JW14r>lS!o0`O*4Mr5t&77(8_k<{%r3lMk^24p!;NcJIC-kP-|JGs z@+C*hN_VP$*C)9foF{7+Tn{jQ_x;k&Ju8A#+r9U;uHgN$<#)g8)Q!S5Cn^%<E~YOK z|NmEYw(R0lq2=;>#A^)~ioI-qFQ}V7S3dIwAMaI`f0I~#C1$xrZF6>Bxty(s=k|Qt z?+3rhy_?Ie_ng<|{GEO6&2mP!f48m;Ulw_L<L)~wv%MWI8n^#aUL<~?>`pCTd*h7H zc^q%F79BIVwv$Kt?d>&nho2QY@ZXj7{{MD{(_g-eXM7{fjd}t_jDCM!mHeyV_QOtg z_rq=zEfe-HPi8uxS1<6h@cLoPPIrTYEW$p-5%-yQRByeeIrFGQ?yRkwEgr=Fj-Bl? z?V#44vO7Hc&2HKEN~x<}{$|6Tt+Tr$?2*aVY~B4`v8z}7ot9D0c>6J@!vF8jm;U20 ZVDPrvJl8Ux<u|Cn^>p=fS?83{1ORCSG#dZ_ diff --git a/TeamTalk/resources/right@2x.png b/TeamTalk/resources/right@2x.png deleted file mode 100644 index 2c565bd8d7e41795723f6d8147050f89ded9f388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1501 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3HE<Pl*KsDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_)*%u1Od5hW46K32*3xq68pHF_1f1wh?E1MMpc5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw z%*;?n!N|bSNZ$a6%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm z+*mKaC|%#s($W%ShLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smX zK$k+ikXryZHm?{OOuzusuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y) zTAW{6lnjixG-Z%g1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s>P;d@5Q_u*{%uC5HFV+OB z_w}{%%quQQ%u7!7bg@+enxL1NnPTN;Y;5l8=;CT*ZenU^=xSnN;^b^;>1t$QX5#2< zVqyu?>yn>bnwy$e0@Is<(Cda%FDNPG765H_NiE7OOHFYr%Fk5*d)X=zw_BWXng`XJ zg4-=FIQ8lS9itD5Sfq%C2?0|NhzU=&Kn^_Nr{)1udl4{MGxw}|$-uxA=;`7ZQgQ3e zor7M|juPx2@{=a{&XQ<m*JSBm%CFFLp}GBt`HH<JB1<l;R(E`9J7u5KRJku|-#AU) zx_(%6p?PVm+~bv7GP-io%&q>OKQ>K9<Zj%VbN|@e-fX|w`1j-6bLaRDYu$XqaZ34$ z`3l}ET|IR_dw+43UNy;%e`FHEV1Mj=<EO6Blg~D~_u5^Tm{_Oa_B*{}9z$)-^<|P* z!dlK&o;=`|d8qPHP2oM^j(f*4XLaf&&%UW5Hd|$4RZM}Z;mo~ux98omn%TkZ7pgcT zp@~xsMzqI?x-JW14r>lS!o0`O*4Mr5t&77(8_k<{%r3lMk^24p!;NcJIC-kP-|JGs z@+C*hN_VP$*C)9foF{7+Tn{jQ_x;k&Ju8A#+r9U;uHgN$<#)g8)Q!S5Cn^%<E~YOK z|NmEYw(R0lq2=;>#A^)~ioI-qFQ}V7S3dIwAMaI`f0I~#C1$xrZF6>Bxty(s=k|Qt z?+3rhy_?Ie_ng<|{GEO6&2mP!f48m;Ulw_L<L)~wv%MWI8n^#aUL<~?>`pCTd*h7H zc^q%F79BIVwv$Kt?d>&nho2QY@ZXj7{{MD{(_g-eXM7{fjd}t_jDCM!mHeyV_QOtg z_rq=zEfe-HPi8uxS1<6h@cLoPPIrTYEW$p-5%-yQRByeeIrFGQ?yRkwEgr=Fj-Bl? z?V#44vO7Hc&2HKEN~x<}{$|6Tt+Tr$?2*aVY~B4`v8z}7ot9D0c>6J@!vF8jm;U20 ZVDPrvJl8Ux<u|Cn^>p=fS?83{1ORCSG#dZ_ diff --git a/TeamTalk/resources/setting.png b/TeamTalk/resources/setting.png deleted file mode 100644 index f4bce5e725bf6245c03fd226778e971dba99829f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2452 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 EKl%*}aR2}S diff --git a/TeamTalk/resources/setting@2x.png b/TeamTalk/resources/setting@2x.png deleted file mode 100644 index f4bce5e725bf6245c03fd226778e971dba99829f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2452 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 EKl%*}aR2}S diff --git a/TeamTalk/resources/tel.png b/TeamTalk/resources/tel.png deleted file mode 100644 index 87c7519dd7043acc3d7b194e0ee27128163f2d90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4183 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 diff --git a/TeamTalk/resources/tel@2x.png b/TeamTalk/resources/tel@2x.png deleted file mode 100644 index 87c7519dd7043acc3d7b194e0ee27128163f2d90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4183 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 diff --git a/TeamTalk/resources/username.png b/TeamTalk/resources/username.png deleted file mode 100644 index 0b5b94513ddb421cec5ffdca202b9bcd929bcec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmeAS@N?(olHy`uVBq!ia0vp^>Oic^!3H8Nih_ZZWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2c=CsU^h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QD<g9SC{P00R+N%v73AUuwF}6zRmvzSDX`MlFE20G zD>v55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIV&!D)<ZNtW zU}<4sXy9sMXz1u->gZ%_Vrp(^V(e^UXaq9@t6oQAH%ntzGeZkgXG23*6GsDMXJ=z$ zR}(WAOBY8YW0+pgyyB9?yyR4vy_q0;A$m>m>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK z0tM$_GX;(C%)FHR@?uR;^gw*;l3J8mmYU*Ll%J~r4qvNGEcQEs+-q#<>}qLf4)!<D z*KV$c<^~2%u1=;VW=c@KDddEiKF~4xpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o;}T zc9;NjoUW&fV@SoVGc#j5dIBYmpFh(VyLP>*rbxD+a{SCmQ@A%y+$8>P$+kN?1iWr9 z;}E|Vt~g!kPM1sGogW@uQwkO3m6O7!-TgFiLw4D$%D?kxK3`kDygcpv@z3ijUtOP> zd%yqwobP*{+nk>{<9X#NwM#EcgwFCAaG!Z-#%9;_{ekcfhPalw^Sze3?QuU8w1)Yt z-vyyh?==%F>+_hOAMl+0TZL!ovV}W&%rfU);_+)JT_F2q<{kY!1-IkxOa-{zv|q54 zPCTJ_t%)yHzWP8_q2-q-<yngpdYWUJ)*Hs{dLG5pd`ER!1M8)t?uuCjyu0FqqV!(= z@c6r;+bM5l!1;@&(>zc6h80~@(Y>y&aa~{cy0*r3ZQbvT6--HT@!lct7$rm|oNlVV zRFtp1)UIt}qRZ2w2eTUPh#IJ9wI7*q>{RH7vyN}9Pgh>Db#I#TP_BH!;+D<otEPAs zF8X<@Xie;v$d0Lw?=LRC$y+Bm2k7KYl0wUXDosRX3@lpv_GZsMbc1E@PJh$BYR<eJ zPr}t$`|AJrpG{qH`zddKbVuMBW^Plz#aU|)TJ1N|U8T5lMt0-238lfUPijqC=P<=9 zYp+t=+SGb$=OKOZ(}mITYCHJXJoB6r*K<9|)pW^<Ik(x&8eWPT^)fAgP#HJx6zg?^ zExv{A;a$J4^@|2wv1UIgW{}xpqVdCGv(2>CS7q!E_!jW=f1kTeX32|ad8TOXH?1$8 z<alj<w&2b?D+`{JjjM_TlxKe4v)ypk#|dR?6lQQveau*Ya*35tpLv2ci#-42$1fj- zort!$^-(gX?ZM_pDm)uEX6(*#=t*L;I8<$XbbHpiO}DRgX+`}Nzc^j{%7hq2jp?N) z{1$QCU-?7v@&7>OkJr~<@aW5GHa1l$pEfsSj`nK3b8<!h1G}z0z5L{m-(j`Hs2$-= ze-lJ!Jebh^bn3llUj(j8_=jX(|0{Up)75L&EYv%tLo-)TeYQW%K(L3och8FJ*<Qac z-1<2?waUV|k}t1We}Yzo`s@kI<n5m|-(0ojxS8mgkfnQfv&~~-`}vHSai;y9vd=<S z*U!#5CQ}zzB$Y7n@1Bsir`dv3^;LR}y6TyD7@VJej;`Vhum)8~p00i_>zopr0I?Oe A=Kufz diff --git a/TeamTalk/resources/username@2x.png b/TeamTalk/resources/username@2x.png deleted file mode 100644 index 0b5b94513ddb421cec5ffdca202b9bcd929bcec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmeAS@N?(olHy`uVBq!ia0vp^>Oic^!3H8Nih_ZZWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2c=CsU^h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QD<g9SC{P00R+N%v73AUuwF}6zRmvzSDX`MlFE20G zD>v55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIV&!D)<ZNtW zU}<4sXy9sMXz1u->gZ%_Vrp(^V(e^UXaq9@t6oQAH%ntzGeZkgXG23*6GsDMXJ=z$ zR}(WAOBY8YW0+pgyyB9?yyR4vy_q0;A$m>m>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK z0tM$_GX;(C%)FHR@?uR;^gw*;l3J8mmYU*Ll%J~r4qvNGEcQEs+-q#<>}qLf4)!<D z*KV$c<^~2%u1=;VW=c@KDddEiKF~4xpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o;}T zc9;NjoUW&fV@SoVGc#j5dIBYmpFh(VyLP>*rbxD+a{SCmQ@A%y+$8>P$+kN?1iWr9 z;}E|Vt~g!kPM1sGogW@uQwkO3m6O7!-TgFiLw4D$%D?kxK3`kDygcpv@z3ijUtOP> zd%yqwobP*{+nk>{<9X#NwM#EcgwFCAaG!Z-#%9;_{ekcfhPalw^Sze3?QuU8w1)Yt z-vyyh?==%F>+_hOAMl+0TZL!ovV}W&%rfU);_+)JT_F2q<{kY!1-IkxOa-{zv|q54 zPCTJ_t%)yHzWP8_q2-q-<yngpdYWUJ)*Hs{dLG5pd`ER!1M8)t?uuCjyu0FqqV!(= z@c6r;+bM5l!1;@&(>zc6h80~@(Y>y&aa~{cy0*r3ZQbvT6--HT@!lct7$rm|oNlVV zRFtp1)UIt}qRZ2w2eTUPh#IJ9wI7*q>{RH7vyN}9Pgh>Db#I#TP_BH!;+D<otEPAs zF8X<@Xie;v$d0Lw?=LRC$y+Bm2k7KYl0wUXDosRX3@lpv_GZsMbc1E@PJh$BYR<eJ zPr}t$`|AJrpG{qH`zddKbVuMBW^Plz#aU|)TJ1N|U8T5lMt0-238lfUPijqC=P<=9 zYp+t=+SGb$=OKOZ(}mITYCHJXJoB6r*K<9|)pW^<Ik(x&8eWPT^)fAgP#HJx6zg?^ zExv{A;a$J4^@|2wv1UIgW{}xpqVdCGv(2>CS7q!E_!jW=f1kTeX32|ad8TOXH?1$8 z<alj<w&2b?D+`{JjjM_TlxKe4v)ypk#|dR?6lQQveau*Ya*35tpLv2ci#-42$1fj- zort!$^-(gX?ZM_pDm)uEX6(*#=t*L;I8<$XbbHpiO}DRgX+`}Nzc^j{%7hq2jp?N) z{1$QCU-?7v@&7>OkJr~<@aW5GHa1l$pEfsSj`nK3b8<!h1G}z0z5L{m-(j`Hs2$-= ze-lJ!Jebh^bn3llUj(j8_=jX(|0{Up)75L&EYv%tLo-)TeYQW%K(L3och8FJ*<Qac z-1<2?waUV|k}t1We}Yzo`s@kI<n5m|-(0ojxS8mgkfnQfv&~~-`}vHSai;y9vd=<S z*U!#5CQ}zzB$Y7n@1Bsir`dv3^;LR}y6TyD7@VJej;`Vhum)8~p00i_>zopr0I?Oe A=Kufz diff --git a/TeamTalk/select.png b/TeamTalk/select.png deleted file mode 100644 index 42931c2605b716c46c97df49b7cd1947e3c27929..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1625 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW|hp4h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v&`mZlGgL4$(K9qL zur#sMQ7|$vG|)FR(l;>IH8ij?HMcS_RDc2{plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OML?)eIp}XpbFjM%Dj@q3f;V7Wta&rsl~}fnFS@8`FRQ;6BCp2 zOG|8(fG&l2A-4c-Y+f-mn1BJMUy)d#Z>VPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP; zAXPsowK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*As%NO+o0y!L z2ND76@b$Iw%quQQ%u7!7bg@+enxU7OnPO$=?BZ-_X>4h1;Ob~-=xX9<;pFOSVQy+^ zY~pO-=41%d>yn>bnwy$e0@Is<(Cdg(FDNnO765H_NiE7OOHFYr%Fk5*d)g`!i(5?H z3{0JkEkWj)Vs{HfZwhX=Sm1PvKF~4xpr}QPYM2l({eYP8gbU=rlYVL*FufN66L#MY zEq?|ErqiA-jv*DduFUlJ2niH9_P#nlXj0_OV^^m<aB30kTH&k6!Kt`qLZ&?5)nfs` zwDCJ3B}TO6cT?onOa}p$z(op*Q5;R$=3Gt+eSF{MT7Ca0b#MOfe|LVz$=96WxmSMv zy!H2amhWv&XZ;t_ERmhpB!57-fOXv==0D%{_OQzzvVWjkA#CR@b-|0{4@Vv2d7}~; z!8htZbnjf`t>LdbtUaqW<LLB<u~)fsjutNdz+R#59C5Jt?T0&yBN_b<$3K{LVY$@t z8GhV*80y>FTkCj>*R(D<;Jbs>`p_JizMDPVKL4LCI^o~#sGZCH=H{{!@xJ?QbJ<gv zmopsbi~sh5Jx|gqp^z_0n`6hZ{V}eW*O)J@Y7F<8yl1zqM%c0SD|t$9dd<7FAWLdn z-R38Cd4KkBNXMlf>x+3<HE+ZAww#9%6Q^HI{pfu4T4B>FZQ&bV4|{+7b9?8DSk2H% z^PF|*-F&aF-77nGb-G@}_FbEOWw!Ms{FkwtmFlDZ=C^h8qexZZh)WV{Kb)v%@|IG3 zuqo)7Ta$W&Orq!0Nm_4Se`Ngr`Oo#wHVJp<KfACy!0W}78%sG<a+a1J64IV1)7rbh zL1Y4xyJL2ns;uCLx+@x@8O$4&{1qxso43NrJK}xz|7zb2OKiI~t+le^iZa&8oW1Rc z+nl)R_rDpic=t$eTYg>jl0$Zz=$Q(&{pY{#m@E7Kn?h#W)Smw)%=>5Wd)-ld<H5;) z)w|j>)=AZwFO+v}s$0ugI^*ni{f|O+x&m)Bjakit_#P}TS;ob1J9%2OLBdZ_9Z`mg zoB7>rrTW(&T$M=-Z+_JNwLNocyyQJO+rFJ5Vf^i#VZRJ(k{G_VB(HT9{h*ckRPW9; zj@!>9CT50y)fAe0#q!6#AHP><Y3F{NQ~dX)g6;+pTmNc~^94rl)f(P>+G=cbJ#S9; z+9~~cr|($KdStcaQE>kW_w8SHom@T3;zd3q8w2-w1wG$A;ohLa-qY33Wt~$(69D?C Baf$!{ diff --git a/TeamTalk/select@2x.png b/TeamTalk/select@2x.png deleted file mode 100644 index 42931c2605b716c46c97df49b7cd1947e3c27929..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1625 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW|hp4h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v&`mZlGgL4$(K9qL zur#sMQ7|$vG|)FR(l;>IH8ij?HMcS_RDc2{plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OML?)eIp}XpbFjM%Dj@q3f;V7Wta&rsl~}fnFS@8`FRQ;6BCp2 zOG|8(fG&l2A-4c-Y+f-mn1BJMUy)d#Z>VPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP; zAXPsowK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*As%NO+o0y!L z2ND76@b$Iw%quQQ%u7!7bg@+enxU7OnPO$=?BZ-_X>4h1;Ob~-=xX9<;pFOSVQy+^ zY~pO-=41%d>yn>bnwy$e0@Is<(Cdg(FDNnO765H_NiE7OOHFYr%Fk5*d)g`!i(5?H z3{0JkEkWj)Vs{HfZwhX=Sm1PvKF~4xpr}QPYM2l({eYP8gbU=rlYVL*FufN66L#MY zEq?|ErqiA-jv*DduFUlJ2niH9_P#nlXj0_OV^^m<aB30kTH&k6!Kt`qLZ&?5)nfs` zwDCJ3B}TO6cT?onOa}p$z(op*Q5;R$=3Gt+eSF{MT7Ca0b#MOfe|LVz$=96WxmSMv zy!H2amhWv&XZ;t_ERmhpB!57-fOXv==0D%{_OQzzvVWjkA#CR@b-|0{4@Vv2d7}~; z!8htZbnjf`t>LdbtUaqW<LLB<u~)fsjutNdz+R#59C5Jt?T0&yBN_b<$3K{LVY$@t z8GhV*80y>FTkCj>*R(D<;Jbs>`p_JizMDPVKL4LCI^o~#sGZCH=H{{!@xJ?QbJ<gv zmopsbi~sh5Jx|gqp^z_0n`6hZ{V}eW*O)J@Y7F<8yl1zqM%c0SD|t$9dd<7FAWLdn z-R38Cd4KkBNXMlf>x+3<HE+ZAww#9%6Q^HI{pfu4T4B>FZQ&bV4|{+7b9?8DSk2H% z^PF|*-F&aF-77nGb-G@}_FbEOWw!Ms{FkwtmFlDZ=C^h8qexZZh)WV{Kb)v%@|IG3 zuqo)7Ta$W&Orq!0Nm_4Se`Ngr`Oo#wHVJp<KfACy!0W}78%sG<a+a1J64IV1)7rbh zL1Y4xyJL2ns;uCLx+@x@8O$4&{1qxso43NrJK}xz|7zb2OKiI~t+le^iZa&8oW1Rc z+nl)R_rDpic=t$eTYg>jl0$Zz=$Q(&{pY{#m@E7Kn?h#W)Smw)%=>5Wd)-ld<H5;) z)w|j>)=AZwFO+v}s$0ugI^*ni{f|O+x&m)Bjakit_#P}TS;ob1J9%2OLBdZ_9Z`mg zoB7>rrTW(&T$M=-Z+_JNwLNocyyQJO+rFJ5Vf^i#VZRJ(k{G_VB(HT9{h*ckRPW9; zj@!>9CT50y)fAe0#q!6#AHP><Y3F{NQ~dX)g6;+pTmNc~^94rl)f(P>+G=cbJ#S9; z+9~~cr|($KdStcaQE>kW_w8SHom@T3;zd3q8w2-w1wG$A;ohLa-qY33Wt~$(69D?C Baf$!{ diff --git a/TeamTalk/star.png b/TeamTalk/star.png deleted file mode 100644 index a50591bdb0161f6e2a5881ed95cb8c190e6a3fd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2096 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 aVu(P(#X;^NWu}StAMVEXU|n$vI`}&f$#lN} diff --git a/TeamTalk/star@2x.png b/TeamTalk/star@2x.png deleted file mode 100644 index a50591bdb0161f6e2a5881ed95cb8c190e6a3fd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2096 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 aVu(P(#X;^NWu}StAMVEXU|n$vI`}&f$#lN} diff --git a/TeamTalk/unselected.png b/TeamTalk/unselected.png deleted file mode 100644 index 4cca2af5bfb6fdde113ac73ea02a6b259656b99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 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 QZ~GHQi(-T|{N((<0T-$F&j0`b diff --git a/TeamTalk/unselected@2x.png b/TeamTalk/unselected@2x.png deleted file mode 100644 index 4cca2af5bfb6fdde113ac73ea02a6b259656b99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 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 QZ~GHQi(-T|{N((<0T-$F&j0`b diff --git a/TeamTalk/x.png b/TeamTalk/x.png deleted file mode 100644 index a6f8667b850878f1dc3b04dfd0194de06ae395c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1595 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFT1|$ph9<=}|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W~g9hqGxDg zU}<8hqhMrUXrOOsq;FuZYiM9)YHnp<r~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0<RzFwUtj!6b93RUi%Wu15$?rmaB)aw zL8^XGYH@yPQ8F;%(v(3~6<9eJr6!i-7lq{K=fFZSAS1sdzc?emK*2fKRL@YsH!(Rg z4<rKC;p=PVnO9trn3tUD>0+w{G(#^lGsVi(&A`;z*wVt-z}3{y(AC7z!pYUu!rau- z*u>eu&B+j^*Cju>G&eP`1g19yq1O_pUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1> zG!Lpb1-Dzwaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zmY<j^&%nU6*3-o? zq~g|_TL-&^0%h0>&MGxqmPl&sauwKe+{shlOUO&9;zP=_*btjizK_>DUC-atVv*a^ zDe#YTle%l0X26+m3Q~(EbHBZ1qY-gtT5Rq6@6|`&b00EjXRoU`Kl8r$TCwh@y{(_z z*9kHn6yQNY0UT`!K=e;{Mu=AFeS@CslTWIM^0mKDsGXQ&R(;`Z+2WZ#&lvl^u9;>l zy(ew+Pa6Rao7C&~&$=wW_`TQdv4oK7{PXsH%P%{Y?Tyjnbq&0?==}_*g#||(ZhX}> z-Wv5*^vOBP{zFC*JjZOVZJjB9-j4gluDpy{-z+6~>~?+BUKsFV!S&a*ufG50_L%ap z;K$L|U+ZR^f4=;MfsWcCCaHAkuG??zWP07ygWgE+$XwKjNnB8%5U}HL$FW8yK_+D` zb|F^@o_v`Mk%b0(3Jd~T4!`McZe?QHtj(v!C2=OSa6_O&qF%Q$GuQN&RnuLRChnf< zrFyLG+~?q(#~<%hXXcVRV>ah%R%z1q+xe#&nChnJS%qCcd!p&k(*B$3U#tFR@4jny zYtQ`CPwkQxEqFKMzWtVs5pQljtDS%TyTGFJ6NS<~zciNX?>~DvrCD$H5-YFUawq+k ze~z`0vp=%NGqC)O>w8TJ-vuHD(<>_{v$FF%)5_ms^q}Fun@_X)dzEF<=HFx&cGuwP zZxrBmm*6?CDaq{4(bMsYL8{%l=Y$=rP`fsd%So2j!@SEvv}`@qCM&24v+#*av`z9* ziF5d-S%3ItiIvoEb~dY?(@%HB>P?T2I_ogq=XOCzsO{>o)w@J4f34bUcR1@_#Lc72 zKD{jY)$99gZJ77-je671U4Q?5HD9~4u2}c29JAkzp?aEKNzpoD%P$@H)4y>4W+Bv6 kBEZuMN+m2$moqRktZwR7^zL>$2P)1zUHx3vIVCg!00c@<J^%m! diff --git a/TeamTalk/x@2x.png b/TeamTalk/x@2x.png deleted file mode 100644 index a6f8667b850878f1dc3b04dfd0194de06ae395c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1595 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFT1|$ph9<=}|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W~g9hqGxDg zU}<8hqhMrUXrOOsq;FuZYiM9)YHnp<r~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0<RzFwUtj!6b93RUi%Wu15$?rmaB)aw zL8^XGYH@yPQ8F;%(v(3~6<9eJr6!i-7lq{K=fFZSAS1sdzc?emK*2fKRL@YsH!(Rg z4<rKC;p=PVnO9trn3tUD>0+w{G(#^lGsVi(&A`;z*wVt-z}3{y(AC7z!pYUu!rau- z*u>eu&B+j^*Cju>G&eP`1g19yq1O_pUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1> zG!Lpb1-Dzwaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zmY<j^&%nU6*3-o? zq~g|_TL-&^0%h0>&MGxqmPl&sauwKe+{shlOUO&9;zP=_*btjizK_>DUC-atVv*a^ zDe#YTle%l0X26+m3Q~(EbHBZ1qY-gtT5Rq6@6|`&b00EjXRoU`Kl8r$TCwh@y{(_z z*9kHn6yQNY0UT`!K=e;{Mu=AFeS@CslTWIM^0mKDsGXQ&R(;`Z+2WZ#&lvl^u9;>l zy(ew+Pa6Rao7C&~&$=wW_`TQdv4oK7{PXsH%P%{Y?Tyjnbq&0?==}_*g#||(ZhX}> z-Wv5*^vOBP{zFC*JjZOVZJjB9-j4gluDpy{-z+6~>~?+BUKsFV!S&a*ufG50_L%ap z;K$L|U+ZR^f4=;MfsWcCCaHAkuG??zWP07ygWgE+$XwKjNnB8%5U}HL$FW8yK_+D` zb|F^@o_v`Mk%b0(3Jd~T4!`McZe?QHtj(v!C2=OSa6_O&qF%Q$GuQN&RnuLRChnf< zrFyLG+~?q(#~<%hXXcVRV>ah%R%z1q+xe#&nChnJS%qCcd!p&k(*B$3U#tFR@4jny zYtQ`CPwkQxEqFKMzWtVs5pQljtDS%TyTGFJ6NS<~zciNX?>~DvrCD$H5-YFUawq+k ze~z`0vp=%NGqC)O>w8TJ-vuHD(<>_{v$FF%)5_ms^q}Fun@_X)dzEF<=HFx&cGuwP zZxrBmm*6?CDaq{4(bMsYL8{%l=Y$=rP`fsd%So2j!@SEvv}`@qCM&24v+#*av`z9* ziF5d-S%3ItiIvoEb~dY?(@%HB>P?T2I_ogq=XOCzsO{>o)w@J4f34bUcR1@_#Lc72 zKD{jY)$99gZJ77-je671U4Q?5HD9~4u2}c29JAkzp?aEKNzpoD%P$@H)4y>4W+Bv6 kBEZuMN+m2$moqRktZwR7^zL>$2P)1zUHx3vIVCg!00c@<J^%m! From e8b62410d6980f31b320bed2bbd81c21c5ad6b0b Mon Sep 17 00:00:00 2001 From: bluefoxah <bluefoxah@gmail.com> Date: Mon, 30 Mar 2015 09:13:43 +0800 Subject: [PATCH 2/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index deb1a7b..a52dc5c 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ 为便于管理及后续整体开源的计划,将原有github地址: https://github.com/mogutt 变更为: - https://moguttgithub.com/mogujie/TeamTalk + https://github.com/mogujie/TeamTalk