PostView.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. //
  2. // This file is part of the Gasteizko Margolariak IOS app.
  3. //
  4. // The Gasteizko Margolariak IOS app is free software: you can
  5. // redistribute it and/or modify it under the terms of the
  6. // GNU General Public License as published by the Free Software
  7. // Foundation, either version 3 of the License, or (at your
  8. // option) any later version.
  9. //
  10. // The Gasteizko Margolariak IOS app is distributed in the
  11. // hope that it will be useful, but WITHOUT ANY WARRANTY;
  12. // without even the implied warranty of MERCHANTABILITY or
  13. // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  14. // Public License for more details.
  15. //
  16. // You should have received a copy of the GNU General Public
  17. // License along with the Gasteizko Margolariak IOS app.
  18. // If not, see <http://www.gnu.org/licenses/>.
  19. import Foundation
  20. import CoreData
  21. import UIKit
  22. /**
  23. Class to handle the post view.
  24. */
  25. class PostView: UIView {
  26. //The main scroll view.
  27. @IBOutlet weak var scrollView: UIScrollView!
  28. //The container of the view.
  29. @IBOutlet var container: UIView!
  30. //Each of the sections of the view.
  31. @IBOutlet weak var section: Section!
  32. override init(frame: CGRect){
  33. super.init(frame: frame)
  34. }
  35. /**
  36. Run when the view is started.
  37. */
  38. required init?(coder aDecoder: NSCoder) {
  39. super.init(coder: aDecoder)
  40. //Load the contents of the HomeView.xib file.
  41. Bundle.main.loadNibNamed("BlogView", owner: self, options: nil)
  42. self.addSubview(container)
  43. container.frame = self.bounds
  44. }
  45. func loadPost(id : Int){
  46. // Show posts
  47. let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
  48. let appDelegate = UIApplication.shared.delegate as! AppDelegate
  49. let lang : String = getLanguage()
  50. context.persistentStoreCoordinator = appDelegate.persistentStoreCoordinator
  51. let fetchRequest: NSFetchRequest<Post> = Post.fetchRequest()
  52. let sortDescriptor = NSSortDescriptor(key: "dtime", ascending: false)
  53. let sortDescriptors = [sortDescriptor]
  54. fetchRequest.sortDescriptors = sortDescriptors
  55. do {
  56. //go get the results
  57. let searchResults = try context.fetch(fetchRequest)
  58. //I like to check the size of the returned results!
  59. print ("Post: \(searchResults.count)")
  60. var row : RowBlog
  61. var count = 0
  62. var id: Int
  63. var title: String
  64. var text: String
  65. var image: String
  66. //You need to convert to NSManagedObject to use 'for' loops
  67. for r in searchResults as [NSManagedObject] {
  68. count = count + 1
  69. //get the Key Value pairs (although there may be a better way to do that...
  70. print("Perm: \(r.value(forKey: "permalink"))")
  71. //Create a new row
  72. row = RowBlog.init(s: "rowBlog\(count)", i: count)
  73. id = r.value(forKey: "id")! as! Int
  74. title = r.value(forKey: "title_\(lang)")! as! String
  75. text = r.value(forKey: "text_\(lang)")! as! String
  76. print(title)
  77. row.setTitle(text: title)
  78. row.setText(text: text)
  79. // Get main image
  80. image = ""
  81. let imgFetchRequest: NSFetchRequest<Post_image> = Post_image.fetchRequest()
  82. let imgSortDescriptor = NSSortDescriptor(key: "idx", ascending: true)
  83. let imgSortDescriptors = [imgSortDescriptor]
  84. imgFetchRequest.sortDescriptors = imgSortDescriptors
  85. imgFetchRequest.predicate = NSPredicate(format: "post == %i", id)
  86. imgFetchRequest.fetchLimit = 1
  87. do{
  88. let imgSearchResults = try context.fetch(imgFetchRequest)
  89. for imgR in imgSearchResults as [NSManagedObject]{
  90. image = imgR.value(forKey: "image")! as! String
  91. print ("IMAGE: \(image)")
  92. row.setImage(filename: image)
  93. }
  94. } catch {
  95. print("Error getting image for post \(id): \(error)")
  96. }
  97. print("Row height: \(row.frame.height)")
  98. parent.addArrangedSubview(row)
  99. }
  100. } catch {
  101. print("Error with request: \(error)")
  102. }
  103. //Always at the end: update scrollview
  104. var h: Int = 0
  105. for view in scrollView.subviews {
  106. //contentRect = contentRect.union(view.frame);
  107. h = h + Int(view.frame.height) + 30 //Why 30?
  108. print("Blog curh: \(h)")
  109. }
  110. // TODO: Calculate at the end
  111. self.scrollView.contentSize.height = 2500//CGFloat(h);
  112. }
  113. func getLanguage() -> String{
  114. let pre = NSLocale.preferredLanguages[0].subStr(start: 0, end: 1)
  115. if(pre == "es" || pre == "en" || pre == "eu"){
  116. return pre
  117. }
  118. else{
  119. return "es"
  120. }
  121. }
  122. }