- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- (void)initPlayerViewController
{
BOOL isSuccess = NO;
do {
NSString *linkString = nil;
unsigned long long objectID = [_videoID intValue];
int index = GetElementIndex(objectID, _WidevineTestStubs, WIDEVINE_TEST_COUNT);
if (index >= 0) {
//linkString = GetLink(_WidevineTestServers[index], _WidevineTestFiles[index]);
linkString = _WidevineTestLinks[index];
}
else {
linkString = GetString([_videoLink objectForKey:@"src"]);
}
if(linkString == nil)
goto _end;
self.linkType = GetLinkType(linkString);
switch (_linkType) {
case LINK_TYPE_HLS:
break;
case LINK_TYPE_WV_ADAPTIVE:
case LINK_TYPE_WV_MULTI:
linkString = WidevinePlay(linkString);
if ([linkString length] <= 0) {
goto _end;
}
break;
default:
goto _end;
}
NSURL *link = [NSURL URLWithString:linkString];
if(link == nil)
break;
self.playerViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:link] autorelease];
_playerViewController.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
_playerViewController.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
NSInteger startPosition = GetInteger([_videoLink objectForKey:@"play_start_time"]);
if(startPosition > 0) {
_playerViewController.moviePlayer.initialPlaybackTime = (NSTimeInterval)startPosition;
}
[self addControlsView];
NSArray *audioTracks = [_videoLink objectForKey:@"audio_list"];
if ([audioTracks count] < 2) {
UIButton *audioButton = (UIButton *)[_controlsView viewWithTag:TAG_BUTTON_CHANGE_AUDIO];
audioButton.enabled = FALSE;
}
isSuccess = YES;
} while(0);
_end:
if(isSuccess) {
[_delegate onPlayerCreated:self];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
else {
[_delegate onLinkError:self];
}
}
Тут есть все, и do while(0), и проваливающиеся case'ы, и TRUE/FALSE, и глобальные inline методы, и даже goto.
tirinox 13.06.2013 12:46 # 0
ArtFeel 13.06.2013 13:04 # 0
bormand 13.06.2013 14:41 # +1
Xtasy 13.06.2013 14:50 # +1
bormand 13.06.2013 15:02 # +1
bormand 13.06.2013 14:43 # +1
> проваливающиеся case'ы
Строки 23-24? Так, извините, не паскаль. По-другому одно действие на 2 значения в свиче и не навесить.
tirinox 13.06.2013 14:45 # −1
bormand 13.06.2013 14:47 # +1
bormand 13.06.2013 14:45 # +1
Потому что внутри свич ;) А из него бряк уже не сработает.
DBdev 13.06.2013 17:14 # +1
Ну тогда надо бряк-бряк.
А если серьезно - то рефакторинг онли.
bormand 13.06.2013 19:01 # +2
Ну да, в жабе вот сделали бряк на метку. Такой вот узаконенный goto в один конец. Как раз для таких случаев. А называется бряком чтобы готофобы и готохейтеры не возмущались и не сцали его юзать.
> А если серьезно - то рефакторинг онли.
+100500. Безусловно, этому коду рефакторинг не помешает.
anonimb84a2f6fd141 13.06.2013 20:23 # 0
bormand 13.06.2013 20:51 # 0
anonimb84a2f6fd141 13.06.2013 23:22 # +1
Таки суть. Метки в яве могут использоваться только для выхода из вложенных циклов. Концепцию вложенных блоков они не нарушают. А вот нахуя их вернули в сисярпе - хз.
bormand 14.06.2013 06:34 # 0
А ну да, обычное goto может еще на середину блока прыгать, ок.