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];
34 if (self.item != nil) {
41 - (void)setupToolbar {
43 if (self.item.isCrypt) {
44 btnTitle = @"Decrypt";
46 btnTitle = @"Encrypt";
48 UIBarButtonItem *cryptBtn = [[UIBarButtonItem alloc] initWithTitle:btnTitle
49 style:UIBarButtonItemStyleBordered
51 action:@selector(crypt:)];
52 UIBarButtonItem *moveBtn = [[UIBarButtonItem alloc] initWithTitle:@"Move"
53 style:UIBarButtonItemStyleBordered
55 action:@selector(move:)];
56 [self setToolbarItems:[NSArray arrayWithObjects:cryptBtn, moveBtn, nil] animated:NO];
64 [super viewDidUnload];
65 // Release any retained subviews of the main view.
68 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
73 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
74 if ([[segue identifier] isEqualToString:@"editNote"]) {
75 EditViewController *edit = (EditViewController*)[[[segue destinationViewController] viewControllers] objectAtIndex:0];
76 self.item.body = self.text.text;
78 edit.detailItem = self.item;
79 edit.delegate = self.master;
80 } else if ([[segue identifier] isEqualToString:@"moveNote"]) {
81 MoveViewController *move = (MoveViewController*)[[[segue destinationViewController] viewControllers] objectAtIndex:0];
83 move.folders = [self.storage listFolders];
89 - (void)crypt:(id)sender {
90 if (self.item.isCrypt) {
93 void (^callback)(NSString *) = ^(NSString *password) {
94 FileItem *newItem = [self.storage decrypt:password item:self.item];
96 [self.delegate detailViewFileItemChanged:self.item to:newItem];
100 // Callback request to passwordManager.
101 [self.passwordManager requestPassword:callback];
103 if ([self.passwordManager preparePassword]) {
104 FileItem *newItem = [self.storage decrypt:self.passwordManager.password item:self.item];
106 [self.delegate detailViewFileItemChanged:self.item to:newItem];
109 UIAlertView *decFail = [[UIAlertView alloc]initWithTitle:@"Info" message:@"Decrypt failed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
115 if ([self.passwordManager preparePasswordConfirm]) {
116 FileItem *newItem = [self.storage encrypt:self.passwordManager.password item:self.item];
118 [self.delegate detailViewFileItemChanged:self.item to:newItem];
125 - (void)move:(id)sender {
126 [self performSegueWithIdentifier:@"moveNote" sender:self];
130 if (!self.item) return;
132 if (self.item.isCrypt) {
133 NSString *note = [Storage loadCryptFile:self.item.path password:self.passwordManager.password];
135 self.text.text = note;
138 NSString *note = [Storage load:self.item.path];
140 self.text.text = note;
142 self.text.text = @"";
147 - (void)setItem:(FileItem *)item {
149 if (item.isNewItem) {
150 self.text.text = @"";
152 // On iPhone and call by segue, self.text is nil because view is not loaded yet.
160 #pragma mark - MoveViewControllerDelegate
162 - (void)moveViewControllerCancel:(MoveViewController *)view {
163 [self dismissModalViewControllerAnimated:YES];
166 - (void)moveViewControllerSelect:(MoveViewController *)view path:(NSString *)path {
167 NSString *toPath = [self.storage moveFrom:self.item toPath:path];
168 [self.delegate detailViewFileItemRemoved:self.item];
169 self.item.path = toPath;
170 [self dismissModalViewControllerAnimated:YES];