252 lines
11 KiB
Objective-C
252 lines
11 KiB
Objective-C
//
|
|
// SegnalazioniViewController.m
|
|
// Earthquake Network
|
|
//
|
|
// Refactored by Andrea Busi on 04/10/2020
|
|
// Copyright © 2020 Earthquake Network. All rights reserved.
|
|
//
|
|
|
|
#import "SegnalazioniViewController.h"
|
|
#import "ServerRequest.h"
|
|
#import "EQNManager.h"
|
|
#import "EQNUser.h"
|
|
#import "EQNGeneratoreURLServer.h"
|
|
#import "EQNUtility.h"
|
|
@import SafariServices;
|
|
|
|
@interface SegnalazioniViewController () <UITableViewDelegate, UITableViewDataSource>
|
|
@property (weak, nonatomic) IBOutlet UITableView *tableView;
|
|
@property (nonatomic, strong) NSUserDefaults *userDefoult;
|
|
@end
|
|
|
|
@implementation SegnalazioniViewController
|
|
|
|
static NSString * const SegueIdentifierMap = @"ShowMap";
|
|
|
|
#pragma mark - View Lifecycle
|
|
|
|
- (void)viewDidLoad
|
|
{
|
|
[super viewDidLoad];
|
|
|
|
self.userDefoult = [NSUserDefaults standardUserDefaults];
|
|
|
|
[self setupUI];
|
|
[self refreshUI];
|
|
}
|
|
|
|
#pragma mark - Private
|
|
|
|
- (void)setupUI
|
|
{
|
|
self.title = NSLocalizedString(@"tab_manual", nil);
|
|
self.tableView.estimatedRowHeight = 500.0;
|
|
self.tableView.rowHeight = UITableViewAutomaticDimension;
|
|
}
|
|
|
|
- (void)refreshUI
|
|
{
|
|
[super refreshUI];
|
|
|
|
if ([self.userDefoult objectForKey:DATA_MESSAGE_EQN]){
|
|
NSDate *dateMessage = [self.userDefoult objectForKey:DATA_MESSAGE_EQN];
|
|
if ([EQNUtility getDifferenceMinute:dateMessage] >= EQNSendReportDelayBetweenComments){
|
|
[self.userDefoult removeObjectForKey:DATA_MESSAGE_EQN];
|
|
[self.userDefoult removeObjectForKey:CODE_MESSAGE_EQN];
|
|
}
|
|
}
|
|
|
|
[self.tableView reloadData];
|
|
}
|
|
|
|
- (void)sincronizzazione
|
|
{
|
|
[self.tableView reloadData];
|
|
[[EQNManager defaultManager] sincronizza];
|
|
}
|
|
|
|
#pragma mark - Table view data source & delegate
|
|
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
switch (indexPath.row) {
|
|
case 0: return 150;
|
|
default: return UITableViewAutomaticDimension;
|
|
}
|
|
}
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
if (indexPath.row == 0) {
|
|
EQNReteSmartphone *reteSmartPhone = [EQNManager defaultManager].rete_smartphone;
|
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Last24HCell" forIndexPath:indexPath];
|
|
|
|
UILabel *verdeLabel = (UILabel *)[cell viewWithTag:1];
|
|
verdeLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.g_man];
|
|
|
|
UILabel *giallaLabel = (UILabel *)[cell viewWithTag:2];
|
|
giallaLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.y_man];
|
|
|
|
UILabel *rossaLabel = (UILabel *)[cell viewWithTag:3];
|
|
rossaLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.r_man];
|
|
return cell;
|
|
}
|
|
|
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ReportEarthquakeCell" forIndexPath:indexPath];
|
|
|
|
UILabel *verdeLabel = (UILabel *)[cell viewWithTag:2];
|
|
verdeLabel.layer.borderColor = [UIColor darkGrayColor].CGColor;
|
|
verdeLabel.layer.borderWidth = AppTheme.shared.borderWidth;
|
|
verdeLabel.layer.cornerRadius = AppTheme.shared.borderCornerRadius;
|
|
verdeLabel.clipsToBounds = YES;
|
|
|
|
UILabel *giallaLabel = (UILabel *)[cell viewWithTag:3];
|
|
giallaLabel.layer.borderColor = [UIColor darkGrayColor].CGColor;
|
|
giallaLabel.layer.borderWidth = AppTheme.shared.borderWidth;
|
|
giallaLabel.layer.cornerRadius = AppTheme.shared.borderCornerRadius;
|
|
giallaLabel.clipsToBounds = YES;
|
|
|
|
UILabel *rossaLabel = (UILabel *)[cell viewWithTag:4];
|
|
rossaLabel.layer.borderColor = [UIColor darkGrayColor].CGColor;
|
|
rossaLabel.layer.borderWidth = AppTheme.shared.borderWidth;
|
|
rossaLabel.layer.cornerRadius = AppTheme.shared.borderCornerRadius;
|
|
rossaLabel.clipsToBounds = YES;
|
|
|
|
return cell;
|
|
}
|
|
|
|
#pragma mark - Actions
|
|
|
|
- (IBAction)openMapTapped:(id)sender
|
|
{
|
|
[self performSegueWithIdentifier:SegueIdentifierMap sender:nil];
|
|
}
|
|
|
|
- (IBAction)openTwitterTapped:(id)sender
|
|
{
|
|
NSURL *twitterUrl = [NSURL URLWithString:EQNTwitterProfileUrl];
|
|
SFSafariViewController *controller = [[SFSafariViewController alloc] initWithURL:twitterUrl];
|
|
[self presentViewController:controller animated:YES completion:nil];
|
|
}
|
|
|
|
- (IBAction)refreshDataTapped:(id)sender
|
|
{
|
|
[[EQNManager defaultManager] sincronizza];
|
|
}
|
|
|
|
- (IBAction)sendReportTapped:(UIButton *)sender
|
|
{
|
|
// check to avoid multiple consecutive reports
|
|
if ([self.userDefoult objectForKey:CODE_MESSAGE_EQN]) {
|
|
NSDate *dateMessage = [self.userDefoult objectForKey:DATA_MESSAGE_EQN];
|
|
if ([EQNUtility getDifferenceMinute:dateMessage] <= EQNSendReportDelayBetweenMessages){
|
|
NSString *message = NSLocalizedString(@"Il messaggio è già stato in viato, al momento non è possibile inviare una nuova segnalazione", @"");
|
|
[self showErrorAlertWithMessage:message];
|
|
[self performSelectorOnMainThread:@selector(sincronizzazione) withObject:nil waitUntilDone:YES];
|
|
return;
|
|
}
|
|
}
|
|
|
|
// ask for user confirmation
|
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Attenzione", @"") message:NSLocalizedString(@"manual_sure", nil) preferredStyle:UIAlertControllerStyleAlert];
|
|
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"manual_yes", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
|
[self executeSendReportWithMagnitude:sender.tag];
|
|
}]];
|
|
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Annulla", nil) style:UIAlertActionStyleCancel handler:nil]];
|
|
[self presentViewController:alert animated:YES completion:nil];
|
|
}
|
|
|
|
- (void)executeSendReportWithMagnitude:(NSInteger)magnitude
|
|
{
|
|
CLGeocoder *geocoder = [CLGeocoder new];
|
|
[geocoder reverseGeocodeLocation:[EQNUser defaultUser].lastPosition completionHandler:^(NSArray *placemarks, NSError *error) {
|
|
if (error) {
|
|
NSString *message = NSLocalizedString(@"La tua posizione geografica è sconosciuta e non è possibile segnalare il sisma", @"");
|
|
[self showErrorAlertWithMessage:message];
|
|
return;
|
|
}
|
|
|
|
// Check if any placemarks were found
|
|
if (placemarks && placemarks.count > 0) {
|
|
CLPlacemark *placemark = placemarks[0];
|
|
NSString *address = [NSString stringWithFormat:@"%@-%@", placemark.locality, placemark.country];
|
|
|
|
NSURL *url = [EQNGeneratoreURLServer urlInvioMessagioTerremoto:magnitude withAdress:address];
|
|
|
|
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataSegnalazioneTerremoto success:^(id result) {
|
|
|
|
[self.userDefoult setObject:result forKey:CODE_MESSAGE_EQN];
|
|
[self.userDefoult setObject:[NSDate date] forKey:DATA_MESSAGE_EQN];
|
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Segnalazione", @"")
|
|
message:NSLocalizedString(@"La tua segnalazione è stata inviata correttamente", @"")
|
|
preferredStyle:UIAlertControllerStyleAlert];
|
|
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
|
[self sendComment];
|
|
}]];
|
|
[self presentViewController:alert animated:YES completion:nil];
|
|
});
|
|
} failure:^(NSError * error) {
|
|
[self showErrorAlertWithMessage:error.localizedDescription];
|
|
}];
|
|
}
|
|
}];
|
|
}
|
|
|
|
- (void)sendComment
|
|
{
|
|
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Messaggio" , @"")
|
|
message:NSLocalizedString(@"manual_sendmessage", @"")
|
|
preferredStyle:UIAlertControllerStyleAlert];
|
|
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
|
|
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
|
|
}];
|
|
|
|
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK" ,@"") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
|
UITextField * messaggio = alertController.textFields.firstObject;
|
|
|
|
NSURL *url = [EQNGeneratoreURLServer urlInvioCommentoTerremoto:messaggio.text codeMessage:[self.userDefoult objectForKey:CODE_MESSAGE_EQN]];
|
|
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataCommentoTerremoto success:^(id result) {
|
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Messaggio" , @"")
|
|
message:NSLocalizedString(@"manual_message_received", @"")
|
|
preferredStyle:UIAlertControllerStyleAlert];
|
|
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleCancel handler:nil]];
|
|
[self presentViewController:alert animated:YES completion:nil];
|
|
});
|
|
|
|
} failure:^(NSError * error) {
|
|
[self showErrorAlertWithMessage:error.localizedDescription];
|
|
}];
|
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
[self refreshUI];
|
|
});
|
|
}]];
|
|
|
|
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Annulla", @"") style:UIAlertActionStyleCancel handler:nil]];
|
|
[self presentViewController:alertController animated:YES completion:nil];
|
|
}
|
|
|
|
#pragma mark - Private
|
|
|
|
- (void)showErrorAlertWithMessage:(NSString *)errorMessage
|
|
{
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Attenzione", @"")
|
|
message:errorMessage
|
|
preferredStyle:UIAlertControllerStyleAlert];
|
|
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleCancel handler:nil]];
|
|
[self presentViewController:alert animated:YES completion:nil];
|
|
});
|
|
}
|
|
|
|
@end
|