OSDN Git Service

0999aa213db1a92114f3a0156c405b76a70a60fd
[tombo/Tombo.git] / iOS / Tombo / Tombo / DetailViewController.m
1 #import "DetailViewController.h"
2 #import "EditViewController.h"
3 #import "MasterViewController.h"
4 #import "PasswordManager.h"
5 #import "Storage.h"
6
7 @interface DetailViewController ()
8
9 @end
10
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;
18
19 #pragma mark - framework
20 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
21 {
22     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
23     if (self) {
24         // Custom initialization
25     }
26     return self;
27 }
28
29 - (void)viewDidLoad
30 {
31     [super viewDidLoad];
32     
33     [self.navigationController setToolbarHidden:NO];
34     NSString *btnTitle;
35     if (self.item != nil) {
36         if (self.item.isCrypt) {
37             btnTitle = @"Decrypt";
38         } else {
39             btnTitle = @"Encrypt";
40         }
41         UIBarButtonItem *cryptBtn = [[UIBarButtonItem alloc] initWithTitle:btnTitle
42                                                                      style:UIBarButtonItemStyleBordered
43                                                                     target:self
44                                                                     action:@selector(crypt:)];
45         [self setToolbarItems:[NSArray arrayWithObjects:cryptBtn, nil] animated:YES];
46     }
47     
48     [self loadNote];
49 }
50
51 - (void)viewDidUnload
52 {
53     [self setText:nil];
54     [self setText:nil];
55     [super viewDidUnload];
56     // Release any retained subviews of the main view.
57 }
58
59 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
60 {
61         return YES;
62 }
63
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;
68         
69         edit.detailItem = self.item;
70         edit.delegate = self.master;
71     }
72 }
73
74 #pragma mark - Logic
75
76 - (void)crypt:(id)sender {
77     if (self.item.isCrypt) {
78         // Decrypting
79         /*
80         void (^callback)(NSString *) = ^(NSString *password) {
81             FileItem *newItem = [self.storage decrypt:password item:self.item];
82             if (newItem) {
83                 [self.delegate detailViewFileItemChanged:self.item to:newItem];
84                 self.item = newItem;
85             }
86         };
87         // Callback request to passwordManager.
88         [self.passwordManager requestPassword:callback];
89          */
90         if ([self.passwordManager preparePassword]) {
91             FileItem *newItem = [self.storage decrypt:self.passwordManager.password item:self.item];
92             if (newItem) {
93                 [self.delegate detailViewFileItemChanged:self.item to:newItem];
94                 self.item = newItem;
95             } else {
96                 UIAlertView *decFail = [[UIAlertView alloc]initWithTitle:@"Info" message:@"Decrypt failed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
97                 [decFail show];
98             }
99         }
100     } else {
101         // Encrypting
102         if ([self.passwordManager preparePasswordConfirm]) {
103             FileItem *newItem = [self.storage encrypt:self.passwordManager.password item:self.item];
104             if (newItem) {
105                 [self.delegate detailViewFileItemChanged:self.item to:newItem];
106                 self.item = newItem;
107             }
108         }
109     }
110 }
111
112 - (void)loadNote {
113     if (!self.item) return;
114     
115     if (self.item.isCrypt) {
116         NSString *note = [Storage loadCryptFile:self.item.path password:self.passwordManager.password];
117         if (note) {
118             self.text.text = note;
119         }
120     } else {
121         NSString *note = [Storage load:self.item.path];
122         if (note) {
123             self.text.text = note;
124         } else {
125             self.text.text = @"";
126         }
127     }
128 }
129
130 - (void)setItem:(FileItem *)item {
131     _item = item;
132     if (item.isNewItem) {
133         self.text.text = @"";
134     } else {
135         // On iPhone and call by segue, self.text is nil because view is not loaded yet.
136         if (self.text) {
137             [self loadNote];
138         }
139     }
140 }
141 @end