+ FRAMEWORK_SEARCH_PATHS = (
|
|
1890
|
+ "$(inherited)",
|
|
1891
|
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
1892
|
+ );
|
1915
|
1893
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
1916
|
1894
|
INFOPLIST_FILE = PaiaiUIKit/Info.plist;
|
1917
|
1895
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
|
|
@@ -1952,7 +1930,12 @@
|
1952
|
1930
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
1953
|
1931
|
DYLIB_CURRENT_VERSION = 1;
|
1954
|
1932
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
|
1933
|
+ FRAMEWORK_SEARCH_PATHS = (
|
|
1934
|
+ "$(inherited)",
|
|
1935
|
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
1936
|
+ );
|
1955
|
1937
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
1938
|
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
1956
|
1939
|
INFOPLIST_FILE = PaiaiUIKit/Info.plist;
|
1957
|
1940
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
1958
|
1941
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
|
@@ -1967,6 +1950,7 @@
|
1967
|
1950
|
SKIP_INSTALL = YES;
|
1968
|
1951
|
SWIFT_VERSION = 5.0;
|
1969
|
1952
|
TARGETED_DEVICE_FAMILY = 1;
|
|
1953
|
+ VALID_ARCHS = "arm64 arm64e armv7s";
|
1970
|
1954
|
VERSIONING_SYSTEM = "apple-generic";
|
1971
|
1955
|
VERSION_INFO_PREFIX = "";
|
1972
|
1956
|
};
|
|
|
@@ -1994,12 +1978,14 @@
|
1994
|
1978
|
FRAMEWORK_SEARCH_PATHS = (
|
1995
|
1979
|
"$(inherited)",
|
1996
|
1980
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
1981
|
+ "$(PROJECT_DIR)",
|
1997
|
1982
|
);
|
1998
|
1983
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
1999
|
1984
|
HEADER_SEARCH_PATHS = "";
|
2000
|
1985
|
INFOPLIST_FILE = PaiaiDataKit/Info.plist;
|
2001
|
1986
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
2002
|
1987
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
1988
|
+ LD_GENERATE_MAP_FILE = YES;
|
2003
|
1989
|
LD_RUNPATH_SEARCH_PATHS = (
|
2004
|
1990
|
"$(inherited)",
|
2005
|
1991
|
"@executable_path/Frameworks",
|
|
|
@@ -2047,12 +2033,15 @@
|
2047
|
2033
|
FRAMEWORK_SEARCH_PATHS = (
|
2048
|
2034
|
"$(inherited)",
|
2049
|
2035
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
2036
|
+ "$(PROJECT_DIR)",
|
2050
|
2037
|
);
|
2051
|
2038
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
2039
|
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
2052
|
2040
|
HEADER_SEARCH_PATHS = "";
|
2053
|
2041
|
INFOPLIST_FILE = PaiaiDataKit/Info.plist;
|
2054
|
2042
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
2055
|
2043
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
2044
|
+ LD_GENERATE_MAP_FILE = YES;
|
2056
|
2045
|
LD_RUNPATH_SEARCH_PATHS = (
|
2057
|
2046
|
"$(inherited)",
|
2058
|
2047
|
"@executable_path/Frameworks",
|
|
|
@@ -2069,6 +2058,7 @@
|
2069
|
2058
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
2070
|
2059
|
SWIFT_VERSION = 5.0;
|
2071
|
2060
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
2061
|
+ VALID_ARCHS = "arm64 arm64e armv7s";
|
2072
|
2062
|
VERSIONING_SYSTEM = "apple-generic";
|
2073
|
2063
|
VERSION_INFO_PREFIX = "";
|
2074
|
2064
|
};
|
|
|
@@ -2094,6 +2084,7 @@
|
2094
|
2084
|
FRAMEWORK_SEARCH_PATHS = (
|
2095
|
2085
|
"$(inherited)",
|
2096
|
2086
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
2087
|
+ "$(PROJECT_DIR)",
|
2097
|
2088
|
);
|
2098
|
2089
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
2099
|
2090
|
INFOPLIST_FILE = Paiai_iOS/Info.plist;
|
|
|
@@ -2112,6 +2103,7 @@
|
2112
|
2103
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
2113
|
2104
|
SWIFT_VERSION = 5.0;
|
2114
|
2105
|
TARGETED_DEVICE_FAMILY = 1;
|
|
2106
|
+ VALID_ARCHS = "arm64 arm64e armv7s";
|
2115
|
2107
|
VERSIONING_SYSTEM = "apple-generic";
|
2116
|
2108
|
VERSION_INFO_PREFIX = "";
|
2117
|
2109
|
};
|
|
|
@@ -2138,8 +2130,10 @@
|
2138
|
2130
|
FRAMEWORK_SEARCH_PATHS = (
|
2139
|
2131
|
"$(inherited)",
|
2140
|
2132
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
2133
|
+ "$(PROJECT_DIR)",
|
2141
|
2134
|
);
|
2142
|
2135
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
2136
|
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
2143
|
2137
|
INFOPLIST_FILE = Paiai_iOS/Info.plist;
|
2144
|
2138
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
2145
|
2139
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
|
@@ -2154,6 +2148,7 @@
|
2154
|
2148
|
SKIP_INSTALL = YES;
|
2155
|
2149
|
SWIFT_VERSION = 5.0;
|
2156
|
2150
|
TARGETED_DEVICE_FAMILY = 1;
|
|
2151
|
+ VALID_ARCHS = "arm64 arm64e armv7s";
|
2157
|
2152
|
VERSIONING_SYSTEM = "apple-generic";
|
2158
|
2153
|
VERSION_INFO_PREFIX = "";
|
2159
|
2154
|
};
|
|
|
@@ -2209,6 +2204,7 @@
|
2209
|
2204
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
2210
|
2205
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
2211
|
2206
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
2207
|
+ LD_GENERATE_MAP_FILE = YES;
|
2212
|
2208
|
MTL_ENABLE_DEBUG_INFO = YES;
|
2213
|
2209
|
ONLY_ACTIVE_ARCH = YES;
|
2214
|
2210
|
OTHER_LDFLAGS = (
|
|
|
@@ -2264,6 +2260,7 @@
|
2264
|
2260
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
2265
|
2261
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
2266
|
2262
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
2263
|
+ LD_GENERATE_MAP_FILE = YES;
|
2267
|
2264
|
MTL_ENABLE_DEBUG_INFO = NO;
|
2268
|
2265
|
OTHER_LDFLAGS = (
|
2269
|
2266
|
"-Objc",
|
|
|
@@ -2284,17 +2281,17 @@
|
2284
|
2281
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
2285
|
2282
|
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
|
2286
|
2283
|
CLANG_ENABLE_MODULES = NO;
|
2287
|
|
- CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
|
2288
|
2284
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
2289
|
2285
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
2290
|
2286
|
CODE_SIGN_STYLE = Automatic;
|
2291
|
2287
|
DEFINES_MODULE = YES;
|
2292
|
|
- DEVELOPMENT_TEAM = RSJ4N8U2LM;
|
|
2288
|
+ DEVELOPMENT_TEAM = Q38447SL4M;
|
2293
|
2289
|
ENABLE_BITCODE = NO;
|
2294
|
2290
|
FRAMEWORK_SEARCH_PATHS = (
|
2295
|
2291
|
"$(inherited)",
|
2296
|
2292
|
"$(PROJECT_DIR)/Paiai",
|
2297
|
2293
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
2294
|
+ "$(PROJECT_DIR)",
|
2298
|
2295
|
);
|
2299
|
2296
|
GCC_PREFIX_HEADER = "";
|
2300
|
2297
|
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
|
|
|
@@ -2305,6 +2302,7 @@
|
2305
|
2302
|
);
|
2306
|
2303
|
INFOPLIST_FILE = PaiAi/Info.plist;
|
2307
|
2304
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
2305
|
+ LD_GENERATE_MAP_FILE = YES;
|
2308
|
2306
|
LD_RUNPATH_SEARCH_PATHS = (
|
2309
|
2307
|
"$(inherited)",
|
2310
|
2308
|
"@executable_path/Frameworks",
|
|
|
@@ -2315,6 +2313,7 @@
|
2315
|
2313
|
);
|
2316
|
2314
|
MACH_O_TYPE = mh_execute;
|
2317
|
2315
|
ONLY_ACTIVE_ARCH = YES;
|
|
2316
|
+ OTHER_CODE_SIGN_FLAGS = "--deep";
|
2318
|
2317
|
OTHER_LDFLAGS = "-all_load";
|
2319
|
2318
|
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
2320
|
2319
|
PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
|
|
|
@@ -2335,18 +2334,19 @@
|
2335
|
2334
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
2336
|
2335
|
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
|
2337
|
2336
|
CLANG_ENABLE_MODULES = NO;
|
2338
|
|
- CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
|
2339
|
2337
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
2340
|
2338
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
2341
|
2339
|
CODE_SIGN_STYLE = Automatic;
|
2342
|
2340
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
2343
|
2341
|
DEFINES_MODULE = YES;
|
2344
|
|
- DEVELOPMENT_TEAM = RSJ4N8U2LM;
|
|
2342
|
+ DEVELOPMENT_TEAM = Q38447SL4M;
|
2345
|
2343
|
FRAMEWORK_SEARCH_PATHS = (
|
2346
|
2344
|
"$(inherited)",
|
2347
|
2345
|
"$(PROJECT_DIR)/Paiai",
|
2348
|
2346
|
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
2347
|
+ "$(PROJECT_DIR)",
|
2349
|
2348
|
);
|
|
2349
|
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
2350
|
2350
|
GCC_PREFIX_HEADER = "";
|
2351
|
2351
|
HEADER_SEARCH_PATHS = (
|
2352
|
2352
|
"$(PROJECT_DIR)/Paiai/wxSDK/WXApi.h",
|
|
|
@@ -2355,6 +2355,7 @@
|
2355
|
2355
|
);
|
2356
|
2356
|
INFOPLIST_FILE = PaiAi/Info.plist;
|
2357
|
2357
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
|
2358
|
+ LD_GENERATE_MAP_FILE = YES;
|
2358
|
2359
|
LD_RUNPATH_SEARCH_PATHS = (
|
2359
|
2360
|
"$(inherited)",
|
2360
|
2361
|
"@executable_path/Frameworks",
|
|
|
@@ -2365,6 +2366,7 @@
|
2365
|
2366
|
);
|
2366
|
2367
|
MACH_O_TYPE = mh_execute;
|
2367
|
2368
|
ONLY_ACTIVE_ARCH = YES;
|
|
2369
|
+ OTHER_CODE_SIGN_FLAGS = "--deep";
|
2368
|
2370
|
OTHER_LDFLAGS = "-all_load";
|
2369
|
2371
|
OTHER_SWIFT_FLAGS = "";
|
2370
|
2372
|
PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
|
|
|
@@ -2374,6 +2376,7 @@
|
2374
|
2376
|
SWIFT_OBJC_BRIDGING_HEADER = "Swift-bridge.h";
|
2375
|
2377
|
SWIFT_VERSION = 5.0;
|
2376
|
2378
|
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/**";
|
|
2379
|
+ VALID_ARCHS = "arm64 arm64e armv7s";
|
2377
|
2380
|
};
|
2378
|
2381
|
name = Release;
|
2379
|
2382
|
};
|
|
|
@@ -2,16 +2,4 @@
|
2
|
2
|
<Bucket
|
3
|
3
|
type = "1"
|
4
|
4
|
version = "2.0">
|
5
|
|
- <Breakpoints>
|
6
|
|
- <BreakpointProxy
|
7
|
|
- BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
8
|
|
- <BreakpointContent
|
9
|
|
- shouldBeEnabled = "Yes"
|
10
|
|
- ignoreCount = "0"
|
11
|
|
- continueAfterRunningActions = "No"
|
12
|
|
- scope = "0"
|
13
|
|
- stopOnStyle = "0">
|
14
|
|
- </BreakpointContent>
|
15
|
|
- </BreakpointProxy>
|
16
|
|
- </Breakpoints>
|
17
|
5
|
</Bucket>
|
|
|
@@ -104,10 +104,10 @@
|
104
|
104
|
</BuildableProductRunnable>
|
105
|
105
|
</ProfileAction>
|
106
|
106
|
<AnalyzeAction
|
107
|
|
- buildConfiguration = "Debug">
|
|
107
|
+ buildConfiguration = "Release">
|
108
|
108
|
</AnalyzeAction>
|
109
|
109
|
<ArchiveAction
|
110
|
|
- buildConfiguration = "Debug"
|
|
110
|
+ buildConfiguration = "Release"
|
111
|
111
|
revealArchiveInOrganizer = "YES">
|
112
|
112
|
</ArchiveAction>
|
113
|
113
|
</Scheme>
|
|
|
@@ -62,7 +62,7 @@
|
62
|
62
|
</dict>
|
63
|
63
|
</array>
|
64
|
64
|
<key>CFBundleVersion</key>
|
65
|
|
- <string>1</string>
|
|
65
|
+ <string>3</string>
|
66
|
66
|
<key>LSApplicationCategoryType</key>
|
67
|
67
|
<string></string>
|
68
|
68
|
<key>LSApplicationQueriesSchemes</key>
|
|
|
@@ -1,10 +0,0 @@
|
1
|
|
-<?xml version="1.0" encoding="UTF-8"?>
|
2
|
|
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
|
-<plist version="1.0">
|
4
|
|
-<dict>
|
5
|
|
- <key>keychain-access-groups</key>
|
6
|
|
- <array>
|
7
|
|
- <string>$(AppIdentifierPrefix)com.Paiai.Paiai</string>
|
8
|
|
- </array>
|
9
|
|
-</dict>
|
10
|
|
-</plist>
|
|
|
@@ -31,10 +31,7 @@ class NetworkApi {
|
31
|
31
|
return
|
32
|
32
|
}
|
33
|
33
|
|
34
|
|
- if err.isSessionDeinitializedError
|
35
|
|
- || err.isSessionInvalidatedError
|
36
|
|
- || err.isInvalidURLError
|
37
|
|
- || err.isRequestAdaptationError {
|
|
34
|
+ if err.isInvalidURLError {
|
38
|
35
|
Toast.show(message: "客户端网络请求出错")
|
39
|
36
|
} else if err.isParameterEncoderError || err.isParameterEncodingError {
|
40
|
37
|
Toast.show(message: "客户端参数编码出错")
|
|
|
@@ -46,9 +43,11 @@ class NetworkApi {
|
46
|
43
|
Toast.show(message: "服务器返回数据出错")
|
47
|
44
|
} else if err.isServerTrustEvaluationError {
|
48
|
45
|
Toast.show(message: "服务器验证错误")
|
49
|
|
- } else if err.isRequestRetryError {
|
50
|
|
- Toast.show(message: "客户端重试出错")
|
51
|
|
- } else if err.isExplicitlyCancelledError {
|
|
46
|
+ }
|
|
47
|
+// else if err.isRequestRetryError {
|
|
48
|
+// Toast.show(message: "客户端重试出错")
|
|
49
|
+// }
|
|
50
|
+ else if err.isExplicitlyCancelledError {
|
52
|
51
|
return
|
53
|
52
|
} else {
|
54
|
53
|
Toast.show(message: "网络出现未知错误")
|
|
|
@@ -60,8 +60,8 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
|
60
|
60
|
}
|
61
|
61
|
switch errcode {
|
62
|
62
|
case 0:
|
63
|
|
- observer(.success(["appid": WXAppid, "secret": WXSecret,
|
64
|
|
- "code": code, "grant_type": "authorization_code"]))
|
|
63
|
+ return observer(.success(["appid": WXAppid, "secret": WXSecret,
|
|
64
|
+ "code": code, "grant_type": "authorization_code"]))
|
65
|
65
|
case -4:
|
66
|
66
|
Toast.show(message: "您拒绝授权,登录失败")
|
67
|
67
|
case -2:
|
|
|
@@ -89,12 +89,18 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
|
89
|
89
|
|
90
|
90
|
return NetworkApi.share.get(resource: resource)
|
91
|
91
|
}
|
|
92
|
+
|
|
93
|
+ fileprivate func pareseWXUserInfo(json: JSON) -> [String: Any]? {
|
|
94
|
+ var data = json
|
|
95
|
+ data.removeValue(forKey: "privilege")
|
|
96
|
+ return data
|
|
97
|
+ }
|
92
|
98
|
|
93
|
99
|
fileprivate func getWXUserInfo(param: [String: String]) -> Single<[String: Any]> {
|
94
|
100
|
let resource = ContentResource<[String: Any]>(host: "https://api.weixin.qq.com",
|
95
|
101
|
path: .wxUserInfo,
|
96
|
102
|
parameter: param,
|
97
|
|
- parseJSON: { $0 })
|
|
103
|
+ parseJSON: pareseWXUserInfo)
|
98
|
104
|
return NetworkApi.share.get(resource: resource)
|
99
|
105
|
}
|
100
|
106
|
|
|
|
@@ -18,3 +18,4 @@ FOUNDATION_EXPORT const unsigned char PaiaiDataKitVersionString[];
|
18
|
18
|
|
19
|
19
|
//微信SDK头文件
|
20
|
20
|
#import "WXApi.h"
|
|
21
|
+#import "WechatAuthSDK.h"
|
|
|
@@ -27,41 +27,65 @@ public final class PhotoDetailItemViewModel {
|
27
|
27
|
|
28
|
28
|
self.item.subscribe(onNext: {[unowned self] (photoItem) in
|
29
|
29
|
self.repository = PhotoDetailRepository(photoId: photoItem.photo_id, groupId: photoItem.group_id)
|
30
|
|
- self.loadCommentItems().concat(self.loadThumbupUserItems()).subscribe(onCompleted: {
|
31
|
|
- var val = self.item.value
|
32
|
|
- val.comment_num = self.commentItems.value.count
|
33
|
|
- val.thumbup_num = self.thumbupItems.value.count
|
34
|
|
- self.item.accept(val)
|
35
|
|
-
|
36
|
|
- let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
|
37
|
|
- NotificationCenter.default.post(name: .PhotoItemsChanged,
|
38
|
|
- object: nil,
|
39
|
|
- userInfo: userInfo)
|
40
|
|
- }).disposed(by: self.disposeBag)
|
|
30
|
+ self.loadThumbupAndComment()
|
|
31
|
+// Observable.zip(self.loadCommentItems(), self.loadThumbupUserItems()).subscribe(onNext: { _ in
|
|
32
|
+// <#code#>
|
|
33
|
+// }, onError: <#T##((Error) -> Void)?##((Error) -> Void)?##(Error) -> Void#>, onCompleted: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>, onDisposed: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)
|
|
34
|
+// .subscribe(onCompleted: {
|
|
35
|
+//
|
|
36
|
+// var val = self.item.value
|
|
37
|
+// val.comment_num = self.commentItems.value.count
|
|
38
|
+// val.thumbup_num = self.thumbupItems.value.count
|
|
39
|
+// self.item.accept(val)
|
|
40
|
+//
|
|
41
|
+// let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
|
|
42
|
+// NotificationCenter.default.post(name: .PhotoItemsChanged,
|
|
43
|
+// object: nil,
|
|
44
|
+// userInfo: userInfo)
|
|
45
|
+// }).disposed(by: self.disposeBag)
|
41
|
46
|
}).disposed(by: disposeBag)
|
42
|
47
|
}
|
43
|
|
-
|
44
|
|
- private func loadThumbupUserItems() -> Completable {
|
45
|
|
- return repository.loadThumbups().do(onSuccess: { (items) in
|
46
|
|
- self.thumbupItems.accept(items)
|
47
|
|
- }).asCompletable()
|
|
48
|
+
|
|
49
|
+ private func loadThumbupAndComment() {
|
|
50
|
+ print(#function)
|
|
51
|
+ Single.zip(repository.loadComments(), repository.loadThumbups()).subscribe(onSuccess: {[unowned self] (commentItems, thumbupItems) in
|
|
52
|
+ self.commentItems.accept(commentItems)
|
|
53
|
+ self.thumbupItems.accept(thumbupItems)
|
|
54
|
+ self.update()
|
|
55
|
+ }).disposed(by: disposeBag)
|
|
56
|
+ }
|
|
57
|
+
|
|
58
|
+ private func loadThumbupUserItems() -> Single<[PhotoThumbupUserItem]> {
|
|
59
|
+ return repository.loadThumbups()
|
48
|
60
|
}
|
49
|
61
|
|
50
|
|
- private func loadCommentItems() -> Completable {
|
51
|
|
- return repository.loadComments().do(onSuccess: { (items) in
|
52
|
|
- self.commentItems.accept(items)
|
53
|
|
- }).asCompletable()
|
|
62
|
+ private func loadCommentItems() -> Single<[PhotoCommentItem]> {
|
|
63
|
+ return repository.loadComments()
|
|
64
|
+ }
|
|
65
|
+
|
|
66
|
+ private func update() {
|
|
67
|
+ var val = self.item.value
|
|
68
|
+ val.comment_num = self.commentItems.value.count
|
|
69
|
+ val.thumbup_num = self.thumbupItems.value.count
|
|
70
|
+ let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
|
|
71
|
+ NotificationCenter.default.post(name: .PhotoItemsChanged,
|
|
72
|
+ object: nil,
|
|
73
|
+ userInfo: userInfo)
|
54
|
74
|
}
|
55
|
75
|
|
56
|
76
|
public func submitThumbup() {
|
57
|
77
|
repository.submitThumbup().subscribe(onSuccess: { items in
|
58
|
78
|
self.thumbupItems.accept(items)
|
|
79
|
+ self.update()
|
59
|
80
|
}).disposed(by: disposeBag)
|
60
|
81
|
}
|
61
|
82
|
|
62
|
83
|
public func submitComment(text: String) {
|
63
|
84
|
repository.submitComment(text: text).subscribe(onSuccess: { (items) in
|
64
|
85
|
self.commentItems.accept(items)
|
|
86
|
+ self.update()
|
65
|
87
|
}).disposed(by: disposeBag)
|
66
|
88
|
}
|
|
89
|
+
|
|
90
|
+
|
67
|
91
|
}
|
|
|
@@ -127,6 +127,7 @@ public final class PhotoDetailViewModel {
|
127
|
127
|
}
|
128
|
128
|
|
129
|
129
|
public func willShow(index: Int) {
|
|
130
|
+ print(index)
|
130
|
131
|
currIndex = index
|
131
|
132
|
_hasGetPrice.accept(false)
|
132
|
133
|
itemViewModel.item.accept(_items.value[index])
|
|
|
@@ -125,7 +125,7 @@ public final class WaterfallFlowLayout: UICollectionViewLayout {
|
125
|
125
|
}
|
126
|
126
|
|
127
|
127
|
/// called at collectionView reload
|
128
|
|
- func setNeedsLayout() {
|
|
128
|
+ public func setNeedsLayout() {
|
129
|
129
|
isNeedLayout = true
|
130
|
130
|
}
|
131
|
131
|
}
|
|
|
@@ -31,6 +31,10 @@ final class HomeViewController: UIViewController {
|
31
|
31
|
override func viewDidAppear(_ animated: Bool) {
|
32
|
32
|
super.viewDidAppear(animated)
|
33
|
33
|
}
|
|
34
|
+
|
|
35
|
+ override func viewDidDisappear(_ animated: Bool) {
|
|
36
|
+ super.viewDidDisappear(animated)
|
|
37
|
+ }
|
34
|
38
|
|
35
|
39
|
func initalize() {
|
36
|
40
|
collectionView.register(UINib(nibName: "PhotoCell",
|
|
|
@@ -95,7 +99,8 @@ fileprivate extension HomeViewController {
|
95
|
99
|
|
96
|
100
|
func bindViewModelToRefreshing() {
|
97
|
101
|
viewModel.isLoading
|
98
|
|
- .subscribe(onNext: {[unowned self] flag in
|
|
102
|
+ .asDriver(onErrorJustReturn: true)
|
|
103
|
+ .drive(onNext: {[unowned self] flag in
|
99
|
104
|
if flag {
|
100
|
105
|
self.collectionView.endRefreshing(at: .top)
|
101
|
106
|
} else {
|