@@ -129,11 +129,18 @@ + (void)handleNotificationInfo:(NSDictionary *)userInfo applicationState:(UIAppl
129129 [[UnReadManager shareManager ] updateUnRead ];
130130 }
131131}
132+
132133+ (UIViewController *)analyseVCFromLinkStr : (NSString *)linkStr {
133134 return [self analyseVCFromLinkStr: linkStr justForRefreshData: NO isNewVC: nil ];
134135}
136+
137+
138+ // 解析linkStr,返回对应的VC。
139+ // 如果justForRefreshData的值为YES,且当前最顶部显示的VC就是解析结果,那么就只是更新数据,并设置isNewVC的值为NO
140+ // 如果isNewVC参数的值nil,则会强制修改justForRefreshData的值为NO。
135141+ (UIViewController *)analyseVCFromLinkStr : (NSString *)linkStr justForRefreshData : (BOOL )justForRefreshData isNewVC : (BOOL *)isNewVC {
136142 NSLog (@" \n analyseVCFromLinkStr : %@ " , linkStr);
143+
137144 if (!linkStr || linkStr.length <= 0 ) {
138145 return nil ;
139146 }else if (![linkStr hasPrefix: @" /" ] && ![linkStr hasPrefix: kNetPath_Code_Base ]){
@@ -142,10 +149,13 @@ + (UIViewController *)analyseVCFromLinkStr:(NSString *)linkStr justForRefreshDat
142149
143150 UIViewController *analyseVC = nil ;
144151 UIViewController *tempVC = nil ;
152+ if (!isNewVC) {
153+ justForRefreshData = NO ;
154+ }
145155 if (justForRefreshData) {
156+ *isNewVC = YES ;
146157 tempVC = [BaseViewController presentingVC ];
147158 }
148-
149159
150160 NSString *userRegexStr = @" /u/([^/]+)$" ;
151161 NSString *userTweetRegexStr = @" /u/([^/]+)/bubble$" ;
@@ -172,12 +182,29 @@ + (UIViewController *)analyseVCFromLinkStr:(NSString *)linkStr justForRefreshDat
172182 // 冒泡
173183 NSString *user_global_key = matchedCaptures[1 ];
174184 NSString *pp_id = matchedCaptures[2 ];
185+ if ([tempVC isKindOfClass: [TweetDetailViewController class ]]) {
186+ TweetDetailViewController *vc = (TweetDetailViewController *)tempVC;
187+ if ([vc.curTweet.pp_id isEqualToString: pp_id]
188+ && [vc.curTweet.user_global_key isEqualToString: user_global_key]) {
189+ [vc refreshTweet ];
190+ *isNewVC = NO ;
191+ return vc;
192+ }
193+ }
175194 TweetDetailViewController *vc = [[TweetDetailViewController alloc ] init ];
176195 vc.curTweet = [Tweet tweetWithGlobalKey: user_global_key andPPID: pp_id];
177196 analyseVC = vc;
178197 }else if ((matchedCaptures = [linkStr captureComponentsMatchedByRegex: topicRegexStr]).count > 0 ){
179198 // 讨论
180199 NSString *topic_id = matchedCaptures[3 ];
200+ if ([tempVC isKindOfClass: [TopicDetailViewController class ]]) {
201+ TopicDetailViewController *vc = (TopicDetailViewController *)tempVC;
202+ if ([vc.curTopic.id .stringValue isEqualToString: topic_id]) {
203+ [vc refreshTopic ];
204+ *isNewVC = NO ;
205+ return vc;
206+ }
207+ }
181208 TopicDetailViewController *vc = [[TopicDetailViewController alloc ] init ];
182209 vc.curTopic = [ProjectTopic topicWithId: [NSNumber numberWithInteger: topic_id.integerValue]];
183210 analyseVC = vc;
@@ -186,7 +213,16 @@ + (UIViewController *)analyseVCFromLinkStr:(NSString *)linkStr justForRefreshDat
186213 NSString *user_global_key = matchedCaptures[1 ];
187214 NSString *project_name = matchedCaptures[2 ];
188215 NSString *taskId = matchedCaptures[3 ];
189-
216+ NSString *backend_project_path = [NSString stringWithFormat: @" /user/%@ /project/%@ " , user_global_key, project_name];
217+ if ([tempVC isKindOfClass: [EditTaskViewController class ]]) {
218+ EditTaskViewController *vc = (EditTaskViewController *)tempVC;
219+ if ([vc.myTask.backend_project_path isEqualToString: backend_project_path]
220+ && [vc.myTask.id .stringValue isEqualToString: taskId]) {
221+ [vc queryToRefreshTaskDetail ];
222+ *isNewVC = NO ;
223+ return vc;
224+ }
225+ }
190226 EditTaskViewController *vc = [[EditTaskViewController alloc ] init ];
191227 vc.myTask = [Task taskWithBackend_project_path: [NSString stringWithFormat: @" /user/%@ /project/%@ " , user_global_key, project_name] andId: taskId];
192228 @weakify (vc);
@@ -208,11 +244,11 @@ + (UIViewController *)analyseVCFromLinkStr:(NSString *)linkStr justForRefreshDat
208244 }else if ((matchedCaptures = [linkStr captureComponentsMatchedByRegex: conversionRegexStr]).count > 0 ) {
209245 // 私信
210246 NSString *user_global_key = matchedCaptures[1 ];
211-
212247 if ([tempVC isKindOfClass: [ConversationViewController class ]]) {
213248 ConversationViewController *vc = (ConversationViewController *)tempVC;
214249 if ([vc.myPriMsgs.curFriend.global_key isEqualToString: user_global_key]) {
215250 [vc refreshLoadMore: NO ];
251+ *isNewVC = NO ;
216252 return vc;
217253 }
218254 }
@@ -226,10 +262,12 @@ + (void)presentLinkStr:(NSString *)linkStr{
226262 if (!linkStr || linkStr.length == 0 ) {
227263 return ;
228264 }
229- BOOL *isNewVC;
230- UIViewController *vc = [self analyseVCFromLinkStr: linkStr justForRefreshData: YES isNewVC: isNewVC];
231- if (vc && *isNewVC) {
232- [self presentVC: vc];
265+ BOOL isNewVC = YES ;
266+ UIViewController *vc = [self analyseVCFromLinkStr: linkStr justForRefreshData: YES isNewVC: &isNewVC];
267+ if (vc) {
268+ if (isNewVC) {
269+ [self presentVC: vc];
270+ }
233271 }else {
234272 // 网页
235273 WebViewController *webVc = [WebViewController webVCWithUrlStr: linkStr];
0 commit comments