|
|
@@ -21,18 +21,16 @@
|
|
|
import Foundation
|
|
|
import CoreData
|
|
|
import UIKit
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
- Class to handle the home view.
|
|
|
- */
|
|
|
+Class to handle the home view.
|
|
|
+*/
|
|
|
class HomeView: UIView {
|
|
|
|
|
|
- //The main scroll view.
|
|
|
+ // Outlets
|
|
|
@IBOutlet weak var scrollView: UIScrollView!
|
|
|
-
|
|
|
- //The container of the view.
|
|
|
@IBOutlet weak var container: UIView!
|
|
|
-
|
|
|
- //Each of the sections of the view.
|
|
|
@IBOutlet weak var locationSection: Section!
|
|
|
@IBOutlet weak var lablancaSection: Section!
|
|
|
@IBOutlet weak var futureActivitiesSection: Section!
|
|
|
@@ -45,24 +43,31 @@ class HomeView: UIView {
|
|
|
var moc: NSManagedObjectContext? = nil
|
|
|
var appDelegate: AppDelegate? = nil
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ Run when the view is started.
|
|
|
+ :param: frame Frame for the view.
|
|
|
+ */
|
|
|
override init(frame: CGRect){
|
|
|
super.init(frame: frame)
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- Run when the view is started.
|
|
|
+ Run when the view is started.
|
|
|
+ :param: coder Application decoder.
|
|
|
*/
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
|
|
|
|
super.init(coder: aDecoder)
|
|
|
|
|
|
- //Load the contents of the HomeView.xib file.
|
|
|
+ // Load the contents of the HomeView.xib file.
|
|
|
Bundle.main.loadNibNamed("HomeView", owner: self, options: nil)
|
|
|
self.addSubview(container)
|
|
|
container.frame = self.bounds
|
|
|
|
|
|
|
|
|
- //Set titles for each section
|
|
|
+ // Set titles for each section
|
|
|
locationSection.setTitle(text: "Encuentranos")
|
|
|
lablancaSection.setTitle(text: "La Blanca")
|
|
|
futureActivitiesSection.setTitle(text: "Proximas actividades")
|
|
|
@@ -71,13 +76,13 @@ class HomeView: UIView {
|
|
|
pastActivitiesSection.setTitle(text: "Ultimas actividades")
|
|
|
socialSection.setTitle(text: "Siguenos")
|
|
|
|
|
|
- //Get info to populate sections
|
|
|
+ // Get info to populate sections
|
|
|
self.moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
|
|
|
self.appDelegate = UIApplication.shared.delegate as! AppDelegate
|
|
|
self.moc?.persistentStoreCoordinator = appDelegate?.persistentStoreCoordinator
|
|
|
self.lang = getLanguage()
|
|
|
|
|
|
- //Populate sections
|
|
|
+ // Populate sections
|
|
|
self.populate()
|
|
|
|
|
|
|
|
|
@@ -92,11 +97,14 @@ class HomeView: UIView {
|
|
|
//self.scrollView.contentSize.height = 1300// CGFloat(h);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- Triggers a reloading (or initial loading) of all sections.
|
|
|
+ Triggers a reloading (or initial loading) of all sections.
|
|
|
*/
|
|
|
func populate(){
|
|
|
|
|
|
+ NSLog(":HOME:DEBUG: Populating home view.")
|
|
|
+
|
|
|
//Populate sections
|
|
|
self.setUpPastActivities(context: self.moc!, delegate: appDelegate!, lang: self.lang!, parent: self.pastActivitiesSection.getContentStack())
|
|
|
self.setUpBlog(context: self.moc!, delegate: self.appDelegate!, lang: self.lang!, parent: self.blogSection.getContentStack())
|
|
|
@@ -106,6 +114,11 @@ class HomeView: UIView {
|
|
|
self.pastActivitiesSection.expandSection()
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ Retrieves the device language. The only available ones are Spanish, English and Basque.
|
|
|
+ :return: Two letter language code (en, eu, es). If other, spanish will be selected.
|
|
|
+ */
|
|
|
func getLanguage() -> String{
|
|
|
let pre = NSLocale.preferredLanguages[0].subStr(start: 0, end: 1)
|
|
|
if(pre == "es" || pre == "en" || pre == "eu"){
|
|
|
@@ -116,9 +129,17 @@ class HomeView: UIView {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ Sets the future activities section.
|
|
|
+ Loads up to two future activities.
|
|
|
+ :param: context Aplication context.
|
|
|
+ :param: delegate Application delegate.
|
|
|
+ :param: lang Device language. Two letter code. Accepts 'es', 'en' and 'eu'.
|
|
|
+ :param: parent View where the rows will be loaded.
|
|
|
+ */
|
|
|
func setUpFutureActivities(context : NSManagedObjectContext, delegate: AppDelegate, lang: String, parent : UIStackView){
|
|
|
|
|
|
- //context.persistentStoreCoordinator = delegate.persistentStoreCoordinator
|
|
|
let fetchRequest: NSFetchRequest<Activity> = Activity.fetchRequest()
|
|
|
let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)
|
|
|
let sortDescriptors = [sortDescriptor]
|
|
|
@@ -127,11 +148,8 @@ class HomeView: UIView {
|
|
|
fetchRequest.fetchLimit = 2
|
|
|
|
|
|
do {
|
|
|
- //go get the results
|
|
|
let searchResults = try context.fetch(fetchRequest)
|
|
|
-
|
|
|
- //I like to check the size of the returned results!
|
|
|
- print ("Activities: \(searchResults.count)")
|
|
|
+ NSLog(":HOME:DEBUG: Future activity count: \(searchResults.count)")
|
|
|
|
|
|
var row : RowHomePastActivities
|
|
|
var count = 0
|
|
|
@@ -140,19 +158,14 @@ class HomeView: UIView {
|
|
|
var text: String
|
|
|
var image: String
|
|
|
|
|
|
- //You need to convert to NSManagedObject to use 'for' loops
|
|
|
for r in searchResults as [NSManagedObject] {
|
|
|
count = count + 1
|
|
|
- //get the Key Value pairs (although there may be a better way to do that...
|
|
|
- print("Perm: \(r.value(forKey: "permalink"))")
|
|
|
-
|
|
|
|
|
|
//Create a new row
|
|
|
row = RowHomePastActivities.init(s: "rowHomeFutureActivities\(count)", i: count)
|
|
|
id = r.value(forKey: "id")! as! Int
|
|
|
title = r.value(forKey: "title_\(lang)")! as! String
|
|
|
text = r.value(forKey: "text_\(lang)")! as! String
|
|
|
- print(title)
|
|
|
row.setTitle(text: title)
|
|
|
row.setText(text: text)
|
|
|
|
|
|
@@ -168,26 +181,30 @@ class HomeView: UIView {
|
|
|
let imgSearchResults = try context.fetch(imgFetchRequest)
|
|
|
for imgR in imgSearchResults as [NSManagedObject]{
|
|
|
image = imgR.value(forKey: "image")! as! String
|
|
|
- print ("IMAGE: \(image)")
|
|
|
row.setImage(filename: image)
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error getting image for activity \(id): \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error getting image for futureactivity \(id): \(error)")
|
|
|
}
|
|
|
-
|
|
|
- print("Row height: \(row.frame.height)")
|
|
|
-
|
|
|
parent.addArrangedSubview(row)
|
|
|
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error with request: \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error setting the future activities section up: \(error)")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ Sets the blog section.
|
|
|
+ Loads up to two posts.
|
|
|
+ :param: context Aplication context.
|
|
|
+ :param: delegate Application delegate.
|
|
|
+ :param: lang Device language. Two letter code. Accepts 'es', 'en' and 'eu'.
|
|
|
+ :param: parent View where the rows will be loaded.
|
|
|
+ */
|
|
|
func setUpBlog(context : NSManagedObjectContext, delegate: AppDelegate, lang: String, parent : UIStackView){
|
|
|
|
|
|
- //context.persistentStoreCoordinator = delegate.persistentStoreCoordinator
|
|
|
let fetchRequest: NSFetchRequest<Post> = Post.fetchRequest()
|
|
|
let sortDescriptor = NSSortDescriptor(key: "dtime", ascending: false)
|
|
|
let sortDescriptors = [sortDescriptor]
|
|
|
@@ -195,11 +212,8 @@ class HomeView: UIView {
|
|
|
fetchRequest.fetchLimit = 2
|
|
|
|
|
|
do {
|
|
|
- //go get the results
|
|
|
let searchResults = try context.fetch(fetchRequest)
|
|
|
-
|
|
|
- //I like to check the size of the returned results!
|
|
|
- print ("Post: \(searchResults.count)")
|
|
|
+ NSLog(":HOME:DEBUG: Post count: \(searchResults.count)")
|
|
|
|
|
|
var row : RowHomeBlog
|
|
|
var count = 0
|
|
|
@@ -208,12 +222,8 @@ class HomeView: UIView {
|
|
|
var text: String
|
|
|
var image: String
|
|
|
|
|
|
- //You need to convert to NSManagedObject to use 'for' loops
|
|
|
for r in searchResults as [NSManagedObject] {
|
|
|
count = count + 1
|
|
|
- //get the Key Value pairs (although there may be a better way to do that...
|
|
|
- print("Perm: \(r.value(forKey: "permalink"))")
|
|
|
-
|
|
|
|
|
|
//Create a new row
|
|
|
row = RowHomeBlog.init(s: "rowHomeBlog\(count)", i: count)
|
|
|
@@ -237,15 +247,12 @@ class HomeView: UIView {
|
|
|
let imgSearchResults = try context.fetch(imgFetchRequest)
|
|
|
for imgR in imgSearchResults as [NSManagedObject]{
|
|
|
image = imgR.value(forKey: "image")! as! String
|
|
|
- print ("IMAGE: \(image)")
|
|
|
row.setImage(filename: image)
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error getting image for post \(id): \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error getting image for post \(id): \(error)")
|
|
|
}
|
|
|
|
|
|
- print("Row height: \(row.frame.height)")
|
|
|
-
|
|
|
parent.addArrangedSubview(row)
|
|
|
|
|
|
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(openPost(_:)))
|
|
|
@@ -254,13 +261,21 @@ class HomeView: UIView {
|
|
|
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error with request: \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error setting the blog section up: \(error)")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ Sets the past activities section.
|
|
|
+ Loads up to two past activities.
|
|
|
+ :param: context Aplication context.
|
|
|
+ :param: delegate Application delegate.
|
|
|
+ :param: lang Device language. Two letter code. Accepts 'es', 'en' and 'eu'.
|
|
|
+ :param: parent View where the rows will be loaded.
|
|
|
+ */
|
|
|
func setUpPastActivities(context : NSManagedObjectContext, delegate: AppDelegate, lang: String, parent : UIStackView){
|
|
|
|
|
|
- //context.persistentStoreCoordinator = delegate.persistentStoreCoordinator
|
|
|
let fetchRequest: NSFetchRequest<Activity> = Activity.fetchRequest()
|
|
|
let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
|
|
|
let sortDescriptors = [sortDescriptor]
|
|
|
@@ -269,11 +284,8 @@ class HomeView: UIView {
|
|
|
fetchRequest.fetchLimit = 2
|
|
|
|
|
|
do {
|
|
|
- //go get the results
|
|
|
let searchResults = try context.fetch(fetchRequest)
|
|
|
-
|
|
|
- //I like to check the size of the returned results!
|
|
|
- print ("Activities: \(searchResults.count)")
|
|
|
+ NSLog(":HOME:LOG: Setting past activities up. Count: \(searchResults.count)")
|
|
|
|
|
|
var row : RowHomePastActivities
|
|
|
var count = 0
|
|
|
@@ -282,12 +294,8 @@ class HomeView: UIView {
|
|
|
var text: String
|
|
|
var image: String
|
|
|
|
|
|
- //You need to convert to NSManagedObject to use 'for' loops
|
|
|
for r in searchResults as [NSManagedObject] {
|
|
|
count = count + 1
|
|
|
- //get the Key Value pairs (although there may be a better way to do that...
|
|
|
- print("Perm: \(r.value(forKey: "permalink"))")
|
|
|
-
|
|
|
|
|
|
//Create a new row
|
|
|
row = RowHomePastActivities.init(s: "rowHomePastActivities\(count)", i: count)
|
|
|
@@ -311,32 +319,35 @@ class HomeView: UIView {
|
|
|
let imgSearchResults = try context.fetch(imgFetchRequest)
|
|
|
for imgR in imgSearchResults as [NSManagedObject]{
|
|
|
image = imgR.value(forKey: "image")! as! String
|
|
|
- print ("IMAGE: \(image)")
|
|
|
row.setImage(filename: image)
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error getting image for activity \(id): \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error getting image for past activity \(id): \(error)")
|
|
|
}
|
|
|
|
|
|
- print("Row height: \(row.frame.height)")
|
|
|
-
|
|
|
parent.addArrangedSubview(row)
|
|
|
|
|
|
}
|
|
|
} catch {
|
|
|
- print("Error with request: \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error setting the past activities section up: \(error)")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ Sets the fgallery section.
|
|
|
+ Loads up to four photos.
|
|
|
+ :param: context Aplication context.
|
|
|
+ :param: delegate Application delegate.
|
|
|
+ :param: parent View where the rows will be loaded.
|
|
|
+ */
|
|
|
func setUpGallery(context : NSManagedObjectContext, delegate: AppDelegate,parent: UIStackView){
|
|
|
- print("HOME:LOG: Setting up gallery.")
|
|
|
+ NSLog(":HOME:LOG: Setting gallery section up.")
|
|
|
|
|
|
// Create the row
|
|
|
var row: RowHomeGallery
|
|
|
row = RowHomeGallery.init(s: "rowHomeGallery", i: 0)
|
|
|
parent.addArrangedSubview(row)
|
|
|
|
|
|
-
|
|
|
// Set images
|
|
|
let fetchRequest: NSFetchRequest<Photo> = Photo.fetchRequest()
|
|
|
let sortDescriptor = NSSortDescriptor(key: "uploaded", ascending: false)
|
|
|
@@ -345,10 +356,7 @@ class HomeView: UIView {
|
|
|
fetchRequest.fetchLimit = 4
|
|
|
|
|
|
do {
|
|
|
- //go get the results
|
|
|
let searchResults = try context.fetch(fetchRequest)
|
|
|
-
|
|
|
- var id: Int
|
|
|
var image: String
|
|
|
|
|
|
// Loop images
|
|
|
@@ -365,24 +373,31 @@ class HomeView: UIView {
|
|
|
|
|
|
}
|
|
|
catch{
|
|
|
- print("HOME:ERROR: Error setting gallery up: \(error)")
|
|
|
+ NSLog(":HOME:ERROR: Error setting gallery up: \(error)")
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ Sets the social section.
|
|
|
+ :param: parent View where the rows will be loaded.
|
|
|
+ */
|
|
|
func setUpSocial(parent : UIStackView){
|
|
|
- print("SETING UP SOCIAL")
|
|
|
+ NSLog(":HOME:LOG: Setting soceial section up.")
|
|
|
//Create a new row
|
|
|
var row : RowHomeSocial
|
|
|
row = RowHomeSocial.init(s: "rowHomeSocial", i: 0)
|
|
|
- print("ROW CREATED")
|
|
|
parent.addArrangedSubview(row)
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ opens the blog section, showing a post.
|
|
|
+ :param: sender: View calling the function.
|
|
|
+ */
|
|
|
func openPost(_ sender:UITapGestureRecognizer? = nil){
|
|
|
- print("HOME:DEBUG: getting delegate and showing post.")
|
|
|
+ NSLog(":HOME:DEBUG: Getting delegate and showing post.")
|
|
|
let delegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
|
|
|
delegate.controller?.showPost(id: (sender?.view as! RowHomeBlog).id)
|
|
|
- print("HOME:DEBUG: Post should be shown.")
|
|
|
+ NSLog(":HOME:DEBUG: Post should be shown.")
|
|
|
}
|
|
|
}
|