diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings new file mode 100644 index 0000000..16b8ace --- /dev/null +++ b/en.lproj/Localizable.strings @@ -0,0 +1,7 @@ +/* + Localizable.strings + iTunesSearch + + Created by Lucas Leal Mendonça on 14/03/15. + Copyright (c) 2015 joaquim. All rights reserved. +*/ diff --git a/fr.lproj/Localizable.strings b/fr.lproj/Localizable.strings new file mode 100644 index 0000000..ad535d5 --- /dev/null +++ b/fr.lproj/Localizable.strings @@ -0,0 +1,12 @@ +/* + Localizable.strings + iTunesSearch + + Created by Lucas Leal Mendonça on 14/03/15. + Copyright (c) 2015 joaquim. All rights reserved. +*/ +"Search" = "Recherche"; +"Movie" = "Film"; +"Music"= "Músique"; +"Movies" = "Films"; +"Musics"= "Músiques"; \ No newline at end of file diff --git a/iTunesSearch.xcodeproj/project.pbxproj b/iTunesSearch.xcodeproj/project.pbxproj index 79e06d7..9db378e 100644 --- a/iTunesSearch.xcodeproj/project.pbxproj +++ b/iTunesSearch.xcodeproj/project.pbxproj @@ -7,13 +7,20 @@ objects = { /* Begin PBXBuildFile section */ + 4E0A0E731AB4986C00E2CB45 /* Musica.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0A0E721AB4986C00E2CB45 /* Musica.m */; }; + 4E0A0E7B1AB4BE7700E2CB45 /* TableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4E0A0E7D1AB4BE7700E2CB45 /* TableView.xib */; }; + 4E4D1FF01AB0D52B0024AADB /* Podcast.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E4D1FEF1AB0D52B0024AADB /* Podcast.m */; }; + 4E4D1FF31AB0D5680024AADB /* EBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E4D1FF21AB0D5680024AADB /* EBook.m */; }; + 4E58B0E91AB33DF8006D4291 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E58B0E71AB33DF8006D4291 /* DetailViewController.m */; }; + 4E58B0EA1AB33DF8006D4291 /* DetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4E58B0E81AB33DF8006D4291 /* DetailViewController.xib */; }; + 4E58B0ED1AB350A4006D4291 /* Midia.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E58B0EC1AB350A4006D4291 /* Midia.m */; }; + 4E9CEB301AB51B50005BB08D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4E9CEB321AB51B50005BB08D /* Localizable.strings */; }; 92C21CB61AAE757A0052ABE6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CB51AAE757A0052ABE6 /* main.m */; }; 92C21CB91AAE757A0052ABE6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CB81AAE757A0052ABE6 /* AppDelegate.m */; }; 92C21CBC1AAE757A0052ABE6 /* TableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CBB1AAE757A0052ABE6 /* TableViewController.m */; }; 92C21CC11AAE757A0052ABE6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CC01AAE757A0052ABE6 /* Images.xcassets */; }; 92C21CD01AAE757A0052ABE6 /* iTunesSearchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CCF1AAE757A0052ABE6 /* iTunesSearchTests.m */; }; 92C21CDB1AAE75B30052ABE6 /* iTunesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */; }; - 92C21CDD1AAE75DC0052ABE6 /* TableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */; }; 92C21CE11AAE76930052ABE6 /* TableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CDF1AAE76930052ABE6 /* TableViewCell.m */; }; 92C21CE21AAE76930052ABE6 /* TableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CE01AAE76930052ABE6 /* TableViewCell.xib */; }; 92C21CE81AAE858E0052ABE6 /* Filme.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CE71AAE858E0052ABE6 /* Filme.m */; }; @@ -30,6 +37,24 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 4E0A0E711AB4986C00E2CB45 /* Musica.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Musica.h; path = Entidades/Musica.h; sourceTree = ""; }; + 4E0A0E721AB4986C00E2CB45 /* Musica.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Musica.m; path = Entidades/Musica.m; sourceTree = ""; }; + 4E0A0E7C1AB4BE7700E2CB45 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TableView.xib; sourceTree = ""; }; + 4E0A0E7F1AB4BE8100E2CB45 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/TableView.strings; sourceTree = ""; }; + 4E4D1FEE1AB0D52B0024AADB /* Podcast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Podcast.h; path = Entidades/Podcast.h; sourceTree = ""; }; + 4E4D1FEF1AB0D52B0024AADB /* Podcast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Podcast.m; path = Entidades/Podcast.m; sourceTree = ""; }; + 4E4D1FF11AB0D5680024AADB /* EBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EBook.h; path = Entidades/EBook.h; sourceTree = ""; }; + 4E4D1FF21AB0D5680024AADB /* EBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EBook.m; path = Entidades/EBook.m; sourceTree = ""; }; + 4E58B0E61AB33DF8006D4291 /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; + 4E58B0E71AB33DF8006D4291 /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; + 4E58B0E81AB33DF8006D4291 /* DetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DetailViewController.xib; sourceTree = ""; }; + 4E58B0EB1AB350A4006D4291 /* Midia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Midia.h; sourceTree = ""; }; + 4E58B0EC1AB350A4006D4291 /* Midia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Midia.m; sourceTree = ""; }; + 4E9CEB2F1AB51AED005BB08D /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/TableView.strings; sourceTree = ""; }; + 4E9CEB311AB51B50005BB08D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 4E9CEB331AB51B6D005BB08D /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; + 4E9CEB341AB51E5E005BB08D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/TableView.strings; sourceTree = ""; }; + 4E9CEB351AB51E63005BB08D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 92C21CB01AAE757A0052ABE6 /* iTunesSearch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iTunesSearch.app; sourceTree = BUILT_PRODUCTS_DIR; }; 92C21CB41AAE757A0052ABE6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92C21CB51AAE757A0052ABE6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; @@ -43,7 +68,6 @@ 92C21CCF1AAE757A0052ABE6 /* iTunesSearchTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iTunesSearchTests.m; sourceTree = ""; }; 92C21CD91AAE75B30052ABE6 /* iTunesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTunesManager.h; sourceTree = ""; }; 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTunesManager.m; sourceTree = ""; }; - 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TableView.xib; sourceTree = ""; }; 92C21CDE1AAE76930052ABE6 /* TableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewCell.h; sourceTree = ""; }; 92C21CDF1AAE76930052ABE6 /* TableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewCell.m; sourceTree = ""; }; 92C21CE01AAE76930052ABE6 /* TableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TableViewCell.xib; sourceTree = ""; }; @@ -96,9 +120,13 @@ 92C21CB81AAE757A0052ABE6 /* AppDelegate.m */, 92C21CBA1AAE757A0052ABE6 /* TableViewController.h */, 92C21CBB1AAE757A0052ABE6 /* TableViewController.m */, - 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */, + 4E0A0E7D1AB4BE7700E2CB45 /* TableView.xib */, + 4E9CEB321AB51B50005BB08D /* Localizable.strings */, 92C21CD91AAE75B30052ABE6 /* iTunesManager.h */, 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */, + 4E58B0E61AB33DF8006D4291 /* DetailViewController.h */, + 4E58B0E71AB33DF8006D4291 /* DetailViewController.m */, + 4E58B0E81AB33DF8006D4291 /* DetailViewController.xib */, 92C21CC01AAE757A0052ABE6 /* Images.xcassets */, 92C21CB31AAE757A0052ABE6 /* Supporting Files */, ); @@ -146,6 +174,14 @@ children = ( 92C21CE61AAE858E0052ABE6 /* Filme.h */, 92C21CE71AAE858E0052ABE6 /* Filme.m */, + 4E4D1FEE1AB0D52B0024AADB /* Podcast.h */, + 4E4D1FEF1AB0D52B0024AADB /* Podcast.m */, + 4E4D1FF11AB0D5680024AADB /* EBook.h */, + 4E4D1FF21AB0D5680024AADB /* EBook.m */, + 4E58B0EB1AB350A4006D4291 /* Midia.h */, + 4E58B0EC1AB350A4006D4291 /* Midia.m */, + 4E0A0E711AB4986C00E2CB45 /* Musica.h */, + 4E0A0E721AB4986C00E2CB45 /* Musica.m */, ); name = Entidades; sourceTree = ""; @@ -213,6 +249,8 @@ knownRegions = ( en, Base, + pt, + fr, ); mainGroup = 92C21CA71AAE757A0052ABE6; productRefGroup = 92C21CB11AAE757A0052ABE6 /* Products */; @@ -230,9 +268,11 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4E9CEB301AB51B50005BB08D /* Localizable.strings in Resources */, 92C21CC11AAE757A0052ABE6 /* Images.xcassets in Resources */, 92C21CE21AAE76930052ABE6 /* TableViewCell.xib in Resources */, - 92C21CDD1AAE75DC0052ABE6 /* TableView.xib in Resources */, + 4E0A0E7B1AB4BE7700E2CB45 /* TableView.xib in Resources */, + 4E58B0EA1AB33DF8006D4291 /* DetailViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -251,10 +291,15 @@ buildActionMask = 2147483647; files = ( 92C21CBC1AAE757A0052ABE6 /* TableViewController.m in Sources */, + 4E4D1FF01AB0D52B0024AADB /* Podcast.m in Sources */, + 4E0A0E731AB4986C00E2CB45 /* Musica.m in Sources */, 92C21CDB1AAE75B30052ABE6 /* iTunesManager.m in Sources */, 92C21CB91AAE757A0052ABE6 /* AppDelegate.m in Sources */, + 4E58B0E91AB33DF8006D4291 /* DetailViewController.m in Sources */, 92C21CE81AAE858E0052ABE6 /* Filme.m in Sources */, + 4E4D1FF31AB0D5680024AADB /* EBook.m in Sources */, 92C21CE11AAE76930052ABE6 /* TableViewCell.m in Sources */, + 4E58B0ED1AB350A4006D4291 /* Midia.m in Sources */, 92C21CB61AAE757A0052ABE6 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -277,6 +322,31 @@ }; /* End PBXTargetDependency section */ +/* Begin PBXVariantGroup section */ + 4E0A0E7D1AB4BE7700E2CB45 /* TableView.xib */ = { + isa = PBXVariantGroup; + children = ( + 4E0A0E7C1AB4BE7700E2CB45 /* Base */, + 4E0A0E7F1AB4BE8100E2CB45 /* en */, + 4E9CEB2F1AB51AED005BB08D /* pt */, + 4E9CEB341AB51E5E005BB08D /* fr */, + ); + name = TableView.xib; + sourceTree = ""; + }; + 4E9CEB321AB51B50005BB08D /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 4E9CEB311AB51B50005BB08D /* en */, + 4E9CEB331AB51B6D005BB08D /* pt */, + 4E9CEB351AB51E63005BB08D /* fr */, + ); + name = Localizable.strings; + path = ..; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ 92C21CD11AAE757A0052ABE6 /* Debug */ = { isa = XCBuildConfiguration; diff --git a/iTunesSearch/AppDelegate.m b/iTunesSearch/AppDelegate.m index d513fd8..d45800e 100644 --- a/iTunesSearch/AppDelegate.m +++ b/iTunesSearch/AppDelegate.m @@ -28,8 +28,9 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( #warning Adicionado codigo para iniciar com a interface do TableView // TableViewController *tvc = [[TableViewController alloc] initWithNibName:@"TableView" bundle:nil]; TableViewController *tvc = [[TableViewController alloc] init]; - [self.window setRootViewController:tvc]; [self.window makeKeyAndVisible]; + UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:tvc]; + [self.window setRootViewController:navigation]; return YES; } diff --git a/iTunesSearch/TableView.xib b/iTunesSearch/Base.lproj/TableView.xib similarity index 87% rename from iTunesSearch/TableView.xib rename to iTunesSearch/Base.lproj/TableView.xib index 55f128c..bb26af1 100644 --- a/iTunesSearch/TableView.xib +++ b/iTunesSearch/Base.lproj/TableView.xib @@ -1,5 +1,5 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/iTunesSearch/DetailViewController.h b/iTunesSearch/DetailViewController.h new file mode 100644 index 0000000..305fa37 --- /dev/null +++ b/iTunesSearch/DetailViewController.h @@ -0,0 +1,19 @@ +// +// DetailViewController.h +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import +#import "Filme.h" +#import "Musica.h" +#import "Podcast.h" +#import "EBook.h" +#import "Midia.h" + +@interface DetailViewController : UIViewController +@property (nonatomic, strong) Midia *midia; + +@end diff --git a/iTunesSearch/DetailViewController.m b/iTunesSearch/DetailViewController.m new file mode 100644 index 0000000..7c6e96d --- /dev/null +++ b/iTunesSearch/DetailViewController.m @@ -0,0 +1,54 @@ +// +// DetailViewController.m +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "DetailViewController.h" + +@interface DetailViewController () +@property (weak, nonatomic) IBOutlet UIImageView *imagem; +@property (weak, nonatomic) IBOutlet UILabel *nome; +@property (weak, nonatomic) IBOutlet UILabel *artista; +@property (weak, nonatomic) IBOutlet UILabel *preco; +@property (weak, nonatomic) IBOutlet UILabel *customA; +@property (weak, nonatomic) IBOutlet UILabel *customB; +@property (weak, nonatomic) IBOutlet UILabel *tipo; + +@end + +@implementation DetailViewController + +- (void) viewWillAppear:(BOOL)animated{ + self.nome.text = [NSString stringWithFormat:@"Nome: %@", _midia.nome]; + self.artista.text = [NSString stringWithFormat:@"Artista: %@", _midia.artista]; + self.preco.text = [NSString stringWithFormat:@"Preço: %@", _midia.preco]; + _tipo.text = (NSStringFromClass([_midia class])); + + UIImage *tmpImage = _midia.image; + + self.imagem.image = tmpImage; + //[NSString stringWithFormat:@" %@",]; + if([_midia isMemberOfClass:[Filme class]]){ + Filme *filme = (Filme *) self.midia; + self.customA.text = [NSString stringWithFormat:@"Duração: %@",filme.duracao]; + self.customB.text = [NSString stringWithFormat:@"Gênero: %@", filme.genero]; + } else if ([_midia isMemberOfClass:[Musica class]]){ + Musica *musica = (Musica *) self.midia; + self.customA.text = [NSString stringWithFormat:@"Duração: %@",musica.duracao]; + self.customB.text = [NSString stringWithFormat:@"Coleção: %@",musica.colecao]; + } else if ([_midia isMemberOfClass:[Podcast class]]){ + Podcast *podcast = (Podcast *) self.midia; + self.customA.text = [NSString stringWithFormat:@"Gênero: %@",podcast.genero]; + self.customB.text = [NSString stringWithFormat:@"Coleção: %@",podcast.colecao]; + } else if ([_midia isMemberOfClass:[EBook class]]){ + EBook *ebook = (EBook *) self.midia; + self.customA.text = [NSString stringWithFormat:@"Tamanho: %@",ebook.fileSize]; + self.customB.text = [NSString stringWithFormat:@"Nota media: %@",ebook.media]; + } + +} + +@end diff --git a/iTunesSearch/DetailViewController.xib b/iTunesSearch/DetailViewController.xib new file mode 100644 index 0000000..1caa042 --- /dev/null +++ b/iTunesSearch/DetailViewController.xib @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iTunesSearch/Entidades/EBook.h b/iTunesSearch/Entidades/EBook.h new file mode 100644 index 0000000..a109e26 --- /dev/null +++ b/iTunesSearch/Entidades/EBook.h @@ -0,0 +1,22 @@ +// +// EBook.h +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import +#import "Midia.h" + + +@interface EBook : Midia + +@property (nonatomic, strong) NSString *trackId; +@property (nonatomic, strong) NSString *duracao; +@property (nonatomic, strong) NSString *fileSize; +@property (nonatomic, strong) NSString *media; + + + +@end diff --git a/iTunesSearch/Entidades/EBook.m b/iTunesSearch/Entidades/EBook.m new file mode 100644 index 0000000..121d80e --- /dev/null +++ b/iTunesSearch/Entidades/EBook.m @@ -0,0 +1,13 @@ +// +// EBook.m +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "EBook.h" + +@implementation EBook + +@end diff --git a/iTunesSearch/Entidades/Filme.h b/iTunesSearch/Entidades/Filme.h index eb126dc..8f57809 100644 --- a/iTunesSearch/Entidades/Filme.h +++ b/iTunesSearch/Entidades/Filme.h @@ -7,12 +7,11 @@ // #import +#import "Midia.h" -@interface Filme : NSObject +@interface Filme : Midia -@property (nonatomic, strong) NSString *nome; @property (nonatomic, strong) NSString *trackId; -@property (nonatomic, strong) NSString *artista; @property (nonatomic, strong) NSString *duracao; @property (nonatomic, strong) NSString *genero; @property (nonatomic, strong) NSString *pais; diff --git a/iTunesSearch/Entidades/Musica.h b/iTunesSearch/Entidades/Musica.h new file mode 100644 index 0000000..42beaee --- /dev/null +++ b/iTunesSearch/Entidades/Musica.h @@ -0,0 +1,17 @@ +// +// Musica.h +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 14/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "Midia.h" + +@interface Musica : Midia + +@property (nonatomic, strong) NSString *trackId; +@property (nonatomic, strong) NSString *duracao; +@property (nonatomic, strong) NSString *colecao; + +@end diff --git a/iTunesSearch/Entidades/Musica.m b/iTunesSearch/Entidades/Musica.m new file mode 100644 index 0000000..28528d1 --- /dev/null +++ b/iTunesSearch/Entidades/Musica.m @@ -0,0 +1,13 @@ +// +// Musica.m +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 14/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "Musica.h" + +@implementation Musica + +@end diff --git a/iTunesSearch/Entidades/Podcast.h b/iTunesSearch/Entidades/Podcast.h new file mode 100644 index 0000000..1de74c6 --- /dev/null +++ b/iTunesSearch/Entidades/Podcast.h @@ -0,0 +1,19 @@ +// +// Podcast.h +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import +#import "Midia.h" + + +@interface Podcast : Midia + +@property (nonatomic, strong) NSString *trackId; +@property (nonatomic, strong) NSString *genero; +@property (nonatomic, strong) NSString *colecao; + +@end diff --git a/iTunesSearch/Entidades/Podcast.m b/iTunesSearch/Entidades/Podcast.m new file mode 100644 index 0000000..719c904 --- /dev/null +++ b/iTunesSearch/Entidades/Podcast.m @@ -0,0 +1,13 @@ +// +// Podcast.m +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "Podcast.h" + +@implementation Podcast + +@end diff --git a/iTunesSearch/Midia.h b/iTunesSearch/Midia.h new file mode 100644 index 0000000..34251c9 --- /dev/null +++ b/iTunesSearch/Midia.h @@ -0,0 +1,22 @@ +// +// Midia.h +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import +#import + +@interface Midia : NSObject + +@property (nonatomic, strong) NSString *nome; +@property (nonatomic, strong) NSString *artista; +@property (nonatomic, strong) NSString *preco; +@property (nonatomic, strong) UIImage *image; +@property (nonatomic, strong) UIImage *image60; + +- (void) converteImagem: (NSString *)s full:(bool)f; + +@end diff --git a/iTunesSearch/Midia.m b/iTunesSearch/Midia.m new file mode 100644 index 0000000..fbead3f --- /dev/null +++ b/iTunesSearch/Midia.m @@ -0,0 +1,25 @@ +// +// Midia.m +// iTunesSearch +// +// Created by Lucas Leal Mendonça on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "Midia.h" + +@implementation Midia + +- (void) converteImagem: (NSString *)s full:(bool)f{ + NSURL *url = [[NSURL alloc] initWithString:s]; + + NSData *data = [[NSData alloc] initWithContentsOfURL:url]; + + if (f) { + _image = [[UIImage alloc] initWithData:data]; + } else { + _image60 = [[UIImage alloc] initWithData:data]; + } +} + +@end diff --git a/iTunesSearch/TableViewCell.h b/iTunesSearch/TableViewCell.h index b630349..a8eb24a 100644 --- a/iTunesSearch/TableViewCell.h +++ b/iTunesSearch/TableViewCell.h @@ -12,6 +12,10 @@ @property (weak, nonatomic) IBOutlet UILabel *nome; @property (weak, nonatomic) IBOutlet UILabel *tipo; +@property (weak, nonatomic) IBOutlet UILabel *artista; +@property (weak, nonatomic) IBOutlet UILabel *duracao; +@property (weak, nonatomic) IBOutlet UILabel *preco; +@property (weak, nonatomic) IBOutlet UIImageView *imagem; @end diff --git a/iTunesSearch/TableViewCell.xib b/iTunesSearch/TableViewCell.xib index bf8bd3f..a85a2ba 100644 --- a/iTunesSearch/TableViewCell.xib +++ b/iTunesSearch/TableViewCell.xib @@ -1,5 +1,5 @@ - + @@ -14,18 +14,39 @@ - @@ -37,10 +58,14 @@ + + + + - + diff --git a/iTunesSearch/TableViewController.m b/iTunesSearch/TableViewController.m index f689980..773b8f3 100644 --- a/iTunesSearch/TableViewController.m +++ b/iTunesSearch/TableViewController.m @@ -9,10 +9,20 @@ #import "TableViewController.h" #import "TableViewCell.h" #import "iTunesManager.h" +#import "Midia.h" #import "Entidades/Filme.h" +#import "Entidades/Musica.h" +#import "Entidades/Podcast.h" +#import "Entidades/EBook.h" +#import "DetailViewController.h" @interface TableViewController () { - NSArray *midias; + NSArray *filmes; + NSArray *musicas; + NSArray *podcasts; + NSArray *ebooks; + UITextField *search; + iTunesManager *itunes; } @end @@ -20,18 +30,27 @@ @interface TableViewController () { @implementation TableViewController - - (void)viewDidLoad { [super viewDidLoad]; UINib *nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil]; [self.tableview registerNib:nib forCellReuseIdentifier:@"celulaPadrao"]; - iTunesManager *itunes = [iTunesManager sharedInstance]; - midias = [itunes buscarMidias:@"Apple"]; #warning Necessario para que a table view tenha um espaco em relacao ao topo, pois caso contrario o texto ficara atras da barra superior - self.tableview.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableview.bounds.size.width, 15.f)]; + self.tableview.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableview.bounds.size.width, 75.f)]; + + search = [[UITextField alloc] initWithFrame:CGRectMake(0, 25, self.tableview.frame.size.width -100, 35)]; + [search setBackgroundColor:[UIColor colorWithRed:200/255.0 green:200/255.0 blue:200/255.0 alpha:1.0]]; + [search becomeFirstResponder]; + [self.tableview.tableHeaderView addSubview:search]; + + UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + button.frame = CGRectMake(265, 25, 50, 35); + [button setTitle:NSLocalizedString(@"Search", nil) forState:UIControlStateNormal]; + [button addTarget:self action:@selector(busca:) forControlEvents:UIControlEventTouchUpInside]; + [self.tableview.tableHeaderView addSubview:button]; + itunes = [iTunesManager sharedInstance]; } - (void)didReceiveMemoryWarning { @@ -39,24 +58,98 @@ - (void)didReceiveMemoryWarning { // Dispose of any resources that can be recreated. } +- (void)busca:(UIButton *)button { + filmes = [itunes buscarFilmes:search.text]; + musicas = [itunes buscarMusicas:search.text]; + podcasts = [itunes buscarPodcasts:search.text]; + ebooks = [itunes buscarEBooks:search.text]; + [self resignFirstResponder]; + + [self.tableview reloadData]; +} #pragma mark - Metodos do UITableViewDataSource -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; + return 4; +} + +-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + DetailViewController *details = [[DetailViewController alloc] init]; + Midia *midia; + if(indexPath.section == 0){ + midia = filmes[indexPath.row]; + } else if(indexPath.section == 1){ + midia = musicas[indexPath.row]; + + } else if(indexPath.section == 2){ + midia = podcasts[indexPath.row]; + + } else if(indexPath.section == 3){ + midia = ebooks[indexPath.row]; + } + details.midia = midia; + [self.navigationController pushViewController:details animated:YES]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [midias count]; + if (section == 0) { + return [filmes count]; + } else if (section == 1) { + return [musicas count]; + } else if (section == 2) { + return [podcasts count]; + } else if (section == 3) { + return [ebooks count]; + } + return 0; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - TableViewCell *celula = [self.tableview dequeueReusableCellWithIdentifier:@"celulaPadrao"]; - - Filme *filme = [midias objectAtIndex:indexPath.row]; - [celula.nome setText:filme.nome]; - [celula.tipo setText:@"Filme"]; + TableViewCell *celula = [self.tableview dequeueReusableCellWithIdentifier:@"celulaPadrao"]; + if(indexPath.section == 0){ + Filme *filme = [filmes objectAtIndex:indexPath.row]; + + [celula.nome setText:filme.nome]; + [celula.tipo setText:NSLocalizedString(@"Movie", nil)]; + [celula.artista setText:filme.artista]; + [celula.duracao setText:filme.duracao]; + [celula.preco setText:filme.preco]; + [celula.imagem setImage:filme.image60]; + + } else if(indexPath.section == 1){ + Musica *musica = [musicas objectAtIndex:indexPath.row]; + + [celula.nome setText:musica.nome]; + [celula.tipo setText:NSLocalizedString(@"Music", nil)]; + [celula.artista setText:musica.artista]; + [celula.duracao setText:musica.duracao]; + [celula.preco setText:musica.preco]; + [celula.imagem setImage:musica.image60]; + + } else if(indexPath.section == 2){ + Podcast *podcast = [podcasts objectAtIndex:indexPath.row]; + + [celula.nome setText:podcast.nome]; + [celula.tipo setText:@"Podcast"]; + [celula.artista setText:podcast.artista]; +// [celula.duracao setText:podcast.duracao]; + [celula.preco setText:podcast.preco]; + [celula.duracao setHidden:YES]; + [celula.imagem setImage:podcast.image60]; + + } else if(indexPath.section == 3){ + EBook *ebook = [podcasts objectAtIndex:indexPath.row]; + + [celula.nome setText:ebook.nome]; + [celula.tipo setText:@"EBook"]; + [celula.artista setText:ebook.artista]; + [celula.preco setText:ebook.preco]; + [celula.duracao setHidden:YES]; + [celula.imagem setImage:ebook.image60]; + } + return celula; } @@ -64,5 +157,17 @@ -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPat return 70; } +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if (section == 0) + return NSLocalizedString(@"Movies", nil); + if (section == 1) + return NSLocalizedString(@"Musics", nil); + if (section == 2) + return @"Podcasts"; + if (section == 3) + return @"EBooks"; + return @"undefined"; +} + @end diff --git a/iTunesSearch/en.lproj/TableView.strings b/iTunesSearch/en.lproj/TableView.strings new file mode 100644 index 0000000..e69de29 diff --git a/iTunesSearch/fr.lproj/TableView.strings b/iTunesSearch/fr.lproj/TableView.strings new file mode 100644 index 0000000..e69de29 diff --git a/iTunesSearch/iTunesManager.h b/iTunesSearch/iTunesManager.h index c0e366b..28e815d 100644 --- a/iTunesSearch/iTunesManager.h +++ b/iTunesSearch/iTunesManager.h @@ -16,6 +16,9 @@ */ + (iTunesManager*)sharedInstance; -- (NSArray *)buscarMidias:(NSString *)termo; +- (NSArray *)buscarFilmes:(NSString *)termo; +- (NSArray *)buscarMusicas:(NSString *)termo; +- (NSArray *)buscarPodcasts:(NSString *)termo; +- (NSArray *)buscarEBooks:(NSString *)termo; @end diff --git a/iTunesSearch/iTunesManager.m b/iTunesSearch/iTunesManager.m index e2babda..8ce9b34 100644 --- a/iTunesSearch/iTunesManager.m +++ b/iTunesSearch/iTunesManager.m @@ -8,6 +8,9 @@ #import "iTunesManager.h" #import "Entidades/Filme.h" +#import "Entidades/Musica.h" +#import "Entidades/Podcast.h" +#import "Entidades/EBook.h" @implementation iTunesManager @@ -28,8 +31,8 @@ + (id)sharedInstance return SINGLETON; } - -- (NSArray *)buscarMidias:(NSString *)termo { +//Filme +- (NSArray *)buscarFilmes:(NSString *)termo{ if (!termo) { termo = @""; } @@ -54,16 +57,158 @@ - (NSArray *)buscarMidias:(NSString *)termo { [filme setNome:[item objectForKey:@"trackName"]]; [filme setTrackId:[item objectForKey:@"trackId"]]; [filme setArtista:[item objectForKey:@"artistName"]]; - [filme setDuracao:[item objectForKey:@"trackTimeMillis"]]; + [filme setDuracao:[self formatInterval:[NSString stringWithFormat:@"%@", [item objectForKey:@"trackTimeMillis"]]]]; [filme setGenero:[item objectForKey:@"primaryGenreName"]]; [filme setPais:[item objectForKey:@"country"]]; + [filme setPreco:[NSString stringWithFormat:@"U$ %@", [item objectForKey:@"trackPrice"]]]; + [filme converteImagem:[item objectForKey:@"artworkUrl100"] full: true]; + [filme converteImagem:[item objectForKey:@"artworkUrl60"] full: false]; [filmes addObject:filme]; } return filmes; } +//Musica +- (NSArray *)buscarMusicas:(NSString *)termo { + if (!termo) { + termo = @""; + } + + NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&media=music", termo]; + NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; + + NSError *error; + NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:&error]; + if (error) { + NSLog(@"Não foi possível fazer a busca. ERRO: %@", error); + return nil; + } + + NSArray *resultados = [resultado objectForKey:@"results"]; + NSMutableArray *musicas = [[NSMutableArray alloc] init]; + + for (NSDictionary *item in resultados) { + Musica *musica = [[Musica alloc] init]; + [musica setNome:[item objectForKey:@"trackName"]]; + [musica setTrackId:[item objectForKey:@"trackId"]]; + [musica setArtista:[item objectForKey:@"artistName"]]; + [musica setDuracao:[self formatInterval:[NSString stringWithFormat:@"%@", [item objectForKey:@"trackTimeMillis"]]]]; + [musica setPreco:[NSString stringWithFormat:@"U$ %@", [item objectForKey:@"trackPrice"]]]; + [musica converteImagem:[item objectForKey:@"artworkUrl100"] full: true]; + [musica setColecao:[item objectForKey:@"collectionName"]]; + [musica converteImagem:[item objectForKey:@"artworkUrl60"] full: false]; + [musicas addObject:musica]; + } + + return musicas; +} + +//Podcast +- (NSArray *)buscarPodcasts:(NSString *)termo { + if (!termo) { + termo = @""; + } + + NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&media=podcast", termo]; + NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; + + NSError *error; + NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:&error]; + if (error) { + NSLog(@"Não foi possível fazer a busca. ERRO: %@", error); + return nil; + } + + NSArray *resultados = [resultado objectForKey:@"results"]; + NSMutableArray *podcasts = [[NSMutableArray alloc] init]; + + for (NSDictionary *item in resultados) { + Podcast *podcast = [[Podcast alloc] init]; + [podcast setNome:[item objectForKey:@"trackName"]]; + [podcast setTrackId:[item objectForKey:@"trackId"]]; + [podcast setArtista:[item objectForKey:@"artistName"]]; + [podcast setGenero:[item objectForKey:@"primaryGenreName"]]; + [podcast setPreco:[NSString stringWithFormat:@"U$ %@", [item objectForKey:@"trackPrice"]]]; + [podcast converteImagem:[item objectForKey:@"artworkUrl100"] full: true]; + [podcast setColecao:[item objectForKey:@"collectionName"]]; + [podcast converteImagem:[item objectForKey:@"artworkUrl60"] full: false]; + [podcasts addObject:podcast]; + } + + return podcasts; +} + +//Ebook +- (NSArray *)buscarEBooks:(NSString *)termo { + if (!termo) { + termo = @""; + } + + NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&media=ebook", termo]; + NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; + + NSError *error; + NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:&error]; + if (error) { + NSLog(@"Não foi possível fazer a busca. ERRO: %@", error); + return nil; + } + + NSArray *resultados = [resultado objectForKey:@"results"]; + NSMutableArray *ebooks = [[NSMutableArray alloc] init]; + + for (NSDictionary *item in resultados) { + EBook *ebook = [[EBook alloc] init]; + [ebook setNome:[item objectForKey:@"trackName"]]; + [ebook setTrackId:[item objectForKey:@"trackId"]]; + [ebook setArtista:[item objectForKey:@"artistName"]]; + [ebook setPreco:[NSString stringWithFormat:@"U$ %@", [item objectForKey:@"price"]]]; + [ebook converteImagem:[item objectForKey:@"artworkUrl100"] full: true]; + [ebook setFileSize:[NSString stringWithFormat:@"%@ bytes", [item objectForKey:@"fileSizeBytes"]]]; + [ebook setMedia:[NSString stringWithFormat:@"%@", [item objectForKey:@"averageUserRating"]]]; + [ebook converteImagem:[item objectForKey:@"artworkUrl60"] full: false]; + [ebooks addObject:ebook]; + } + + return ebooks; +} +//Método que converte double de milissegundos em uma NSString hh:mm:ss +- (NSString *) formatInterval: (NSString *) i{ + NSTimeInterval interval; + if ([i doubleValue]) { + interval = [i doubleValue]; + } else { + interval = 0.0; + } + unsigned long milliseconds = interval; + unsigned long seconds = milliseconds / 1000; + milliseconds %= 1000; + unsigned long minutes = seconds / 60; + seconds %= 60; + unsigned long hours = minutes / 60; + minutes %= 60; + + NSMutableString * result = [NSMutableString new]; + + if(hours) + [result appendFormat: @"%d:", hours]; + else + [result appendFormat: @"0:"]; + + [result appendFormat: @"%2d:", minutes]; + [result appendFormat: @"%2d", seconds]; + //[result appendFormat: @"%2d",milliseconds]; + + return result; +} #pragma mark - Life Cycle diff --git a/iTunesSearch/pt.lproj/TableView.strings b/iTunesSearch/pt.lproj/TableView.strings new file mode 100644 index 0000000..e69de29 diff --git a/pt.lproj/Localizable.strings b/pt.lproj/Localizable.strings new file mode 100644 index 0000000..39caa61 --- /dev/null +++ b/pt.lproj/Localizable.strings @@ -0,0 +1,12 @@ +/* + Localizable.strings + iTunesSearch + + Created by Lucas Leal Mendonça on 14/03/15. + Copyright (c) 2015 joaquim. All rights reserved. +*/ +"Search" = "Buscar"; +"Movie" = "Filme"; +"Music"= "Música"; +"Movie" = "Filmes"; +"Music"= "Músicas";