VLCPlexConnectServerViewController.m 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /*****************************************************************************
  2. * VLCPlexConnectServerViewController.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. *
  7. * Authors: Felix Paul Kühne <fkuehne # videolan.org>
  8. * Pierre SAGASPE <pierre.sagaspe # me.com>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCPlexConnectServerViewController.h"
  13. #import "VLCLocalPlexFolderListViewController.h"
  14. #import "UIBarButtonItem+Theme.h"
  15. #define kPlexMediaServerPortDefault @"32400"
  16. @interface VLCPlexConnectServerViewController () <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>
  17. {
  18. NSMutableArray *_bookmarkServer;
  19. NSMutableArray *_bookmarkPort;
  20. }
  21. @end
  22. @implementation VLCPlexConnectServerViewController
  23. + (void)initialize
  24. {
  25. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  26. NSDictionary *loginDefaults = @{kVLCPLEXServer : @[], kVLCPLEXPort : @[]};
  27. [defaults registerDefaults:loginDefaults];
  28. }
  29. - (void)viewDidLoad
  30. {
  31. [super viewDidLoad];
  32. self.title = @"Plex Media Server";
  33. [self.connectButton setTitle:NSLocalizedString(@"BUTTON_CONNECT", nil) forState:UIControlStateNormal];
  34. self.serverAddressHelpLabel.text = NSLocalizedString(@"ENTER_SERVER_ADDRESS_HELP", nil);
  35. self.serverAddressLabel.text = NSLocalizedString(@"SERVER", nil);
  36. self.portLabel.text = NSLocalizedString(@"SERVER_PORT", nil);
  37. self.bookmarkLabel.text = NSLocalizedString(@"BOOKMARK", nil);
  38. self.serverAddressField.delegate = self;
  39. self.serverAddressField.returnKeyType = UIReturnKeyNext;
  40. self.serverAddressField.clearButtonMode = UITextFieldViewModeWhileEditing;
  41. self.serverAddressField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
  42. self.portField.delegate = self;
  43. self.portField.returnKeyType = UIReturnKeyDone;
  44. self.portField.clearButtonMode = UITextFieldViewModeWhileEditing;
  45. self.portField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
  46. self.serverPlexBookmark.backgroundColor = [UIColor VLCDarkBackgroundColor];
  47. if (SYSTEM_RUNS_IOS7_OR_LATER) {
  48. UIColor *color = [UIColor VLCLightTextColor];
  49. self.serverAddressField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"192.168.0.0" attributes:@{NSForegroundColorAttributeName: color}];
  50. self.portField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:kPlexMediaServerPortDefault attributes:@{NSForegroundColorAttributeName: color}];
  51. self.edgesForExtendedLayout = UIRectEdgeNone;
  52. }
  53. }
  54. - (void)viewWillAppear:(BOOL)animated
  55. {
  56. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  57. _bookmarkServer = [NSMutableArray arrayWithArray:[defaults objectForKey:kVLCPLEXServer]];
  58. _bookmarkPort = [NSMutableArray arrayWithArray:[defaults objectForKey:kVLCPLEXPort]];
  59. [super viewWillAppear:animated];
  60. if ([defaults stringForKey:kVLCLastPLEXServer])
  61. self.serverAddressField.text = [defaults stringForKey:kVLCLastPLEXServer];
  62. if ([defaults stringForKey:kVLCLastPLEXPort])
  63. self.portField.text = [defaults stringForKey:kVLCLastPLEXPort];
  64. if (self.portField.text.length < 1)
  65. self.portField.text = kPlexMediaServerPortDefault;
  66. }
  67. - (void)viewWillDisappear:(BOOL)animated
  68. {
  69. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  70. [defaults setObject:self.serverAddressField.text forKey:kVLCLastPLEXServer];
  71. [defaults setObject:self.portField.text forKey:kVLCLastPLEXPort];
  72. [super viewWillDisappear:animated];
  73. }
  74. #pragma mark - IBAction
  75. - (IBAction)connectToServer:(id)sender
  76. {
  77. NSString *server = [NSString stringWithFormat:@"%@", self.serverAddressField.text];
  78. NSString *port = [NSString stringWithFormat:@":%@", self.portField.text];
  79. if (![port isEqualToString:@":"] && ![server isEqualToString:@""]) {
  80. VLCLocalPlexFolderListViewController *targetViewController = [[VLCLocalPlexFolderListViewController alloc] initWithPlexServer:server serverAddress:server portNumber:port atPath:@""];
  81. [[self navigationController] pushViewController:targetViewController animated:YES];
  82. } else {
  83. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:NSLocalizedString(@"INVALID_IP_PORT", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"BUTTON_OK", nil) otherButtonTitles:nil];
  84. [alert show];
  85. }
  86. }
  87. - (IBAction)savePlexServer:(id)sender
  88. {
  89. if (![self.serverAddressField.text isEqualToString:@""] && ![self.portField.text isEqualToString:@""]) {
  90. [_bookmarkServer addObject:self.serverAddressField.text];
  91. [_bookmarkPort addObject:self.portField.text];
  92. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  93. [defaults setObject:[NSArray arrayWithArray:_bookmarkServer] forKey:kVLCPLEXServer];
  94. [defaults setObject:[NSArray arrayWithArray:_bookmarkPort] forKey:kVLCPLEXPort];
  95. [defaults synchronize];
  96. [self.serverPlexBookmark reloadData];
  97. } else {
  98. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:NSLocalizedString(@"INVALID_IP_PORT", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"BUTTON_OK", nil) otherButtonTitles:nil];
  99. [alert show];
  100. }
  101. }
  102. #pragma mark - text view delegate
  103. - (BOOL)textFieldShouldReturn:(UITextField *)textField
  104. {
  105. if ([self.serverAddressField isFirstResponder]) {
  106. [self.serverAddressField resignFirstResponder];
  107. [self.portField becomeFirstResponder];
  108. } else if ([self.portField isFirstResponder]) {
  109. [self.portField resignFirstResponder];
  110. }
  111. return NO;
  112. }
  113. #pragma mark - table view data source
  114. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  115. {
  116. return 1;
  117. }
  118. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  119. {
  120. return _bookmarkServer.count;
  121. }
  122. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  123. {
  124. static NSString *CellIdentifier = @"PLEXbookmarkCell";
  125. UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  126. if (cell == nil) {
  127. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
  128. cell.textLabel.textColor = [UIColor whiteColor];
  129. cell.detailTextLabel.textColor = [UIColor VLCLightTextColor];
  130. }
  131. NSInteger row = indexPath.row;
  132. cell.textLabel.text = _bookmarkServer[row];
  133. cell.detailTextLabel.text = _bookmarkPort[row];
  134. return cell;
  135. }
  136. #pragma mark - table view delegate
  137. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  138. {
  139. cell.backgroundColor = (indexPath.row % 2 == 0)? [UIColor blackColor]: [UIColor VLCDarkBackgroundColor];
  140. }
  141. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
  142. {
  143. return YES;
  144. }
  145. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  146. {
  147. if (editingStyle == UITableViewCellEditingStyleDelete) {
  148. [_bookmarkServer removeObjectAtIndex:indexPath.row];
  149. [_bookmarkPort removeObjectAtIndex:indexPath.row];
  150. [tableView reloadData];
  151. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  152. [defaults setObject:[NSArray arrayWithArray:_bookmarkServer] forKey:kVLCPLEXServer];
  153. [defaults setObject:[NSArray arrayWithArray:_bookmarkPort] forKey:kVLCPLEXPort];
  154. [defaults synchronize];
  155. }
  156. }
  157. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  158. {
  159. [self.serverAddressField setText:_bookmarkServer[indexPath.row]];
  160. [self.portField setText:_bookmarkPort[indexPath.row]];
  161. [self.serverPlexBookmark deselectRowAtIndexPath:indexPath animated:NO];
  162. }
  163. @end