1 #import "DetailViewController.h"
2 #import "EditViewController.h"
3 #import "MasterViewController.h"
4 #import "PasswordManager.h"
7 @interface DetailViewController ()
11 @implementation DetailViewController
12 @synthesize text = _text;
13 @synthesize item = _item;
14 @synthesize master = _master;
15 @synthesize storage = _storage;
16 @synthesize passwordManager = _passwordManager;
17 @synthesize delegate = _delegate;
19 #pragma mark - framework
20 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
22 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
24 // Custom initialization
33 [self.navigationController setToolbarHidden:NO];
35 if (self.item != nil) {
36 if (self.item.isCrypt) {
37 btnTitle = @"Decrypt";
39 btnTitle = @"Encrypt";
41 UIBarButtonItem *cryptBtn = [[UIBarButtonItem alloc] initWithTitle:btnTitle
42 style:UIBarButtonItemStyleBordered
44 action:@selector(crypt:)];
45 [self setToolbarItems:[NSArray arrayWithObjects:cryptBtn, nil] animated:YES];
55 [super viewDidUnload];
56 // Release any retained subviews of the main view.
59 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
64 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
65 if ([[segue identifier] isEqualToString:@"editNote"]) {
66 EditViewController *edit = (EditViewController*)[[[segue destinationViewController] viewControllers] objectAtIndex:0];
67 self.item.body = self.text.text;
69 edit.detailItem = self.item;
70 edit.delegate = self.master;
76 - (void)crypt:(id)sender {
77 if (self.item.isCrypt) {
80 void (^callback)(NSString *) = ^(NSString *password) {
81 FileItem *newItem = [self.storage decrypt:password item:self.item];
83 [self.delegate detailViewFileItemChanged:self.item to:newItem];
87 // Callback request to passwordManager.
88 [self.passwordManager requestPassword:callback];
90 if ([self.passwordManager preparePassword]) {
91 FileItem *newItem = [self.storage decrypt:self.passwordManager.password item:self.item];
93 [self.delegate detailViewFileItemChanged:self.item to:newItem];
96 UIAlertView *decFail = [[UIAlertView alloc]initWithTitle:@"Info" message:@"Decrypt failed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
102 if ([self.passwordManager preparePasswordConfirm]) {
103 FileItem *newItem = [self.storage encrypt:self.passwordManager.password item:self.item];
105 [self.delegate detailViewFileItemChanged:self.item to:newItem];
113 if (!self.item) return;
115 if (self.item.isCrypt) {
116 NSString *note = [Storage loadCryptFile:self.item.path password:self.passwordManager.password];
118 self.text.text = note;
121 NSString *note = [Storage load:self.item.path];
123 self.text.text = note;
125 self.text.text = @"";
130 - (void)setItem:(FileItem *)item {
132 if (item.isNewItem) {
133 self.text.text = @"";
135 // On iPhone and call by segue, self.text is nil because view is not loaded yet.