IncomingThread.swift 153 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428
  1. //
  2. // IncomingThread.swift
  3. // Runner
  4. //
  5. // Created by Yayan Dwi on 16/04/20.
  6. // Copyright © 2020 The Chromium Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import UIKit
  10. import NotificationBannerSwift
  11. import nuSDKService
  12. class IncomingThread {
  13. static let `default` = IncomingThread()
  14. private var isRunning = false
  15. private var semaphore = DispatchSemaphore(value: 0)
  16. private var dispatchQueue = DispatchQueue(label: "IncomingThread")
  17. static var dispatch: DispatchGroup?
  18. private var queue = [TMessage]()
  19. func addQueue(message: TMessage) {
  20. do {
  21. queue.append(message)
  22. semaphore.signal()
  23. } catch {
  24. }
  25. }
  26. func getQueue() -> TMessage {
  27. do {
  28. while queue.isEmpty || queue.count == 0 {
  29. semaphore.wait()
  30. }
  31. return queue.remove(at: 0)
  32. } catch {
  33. }
  34. }
  35. func run() {
  36. do {
  37. if (isRunning) {
  38. return
  39. }
  40. isRunning = true
  41. dispatchQueue.async {
  42. while self.isRunning {
  43. self.process(message: self.getQueue())
  44. }
  45. }
  46. } catch {
  47. }
  48. }
  49. private func process(message: TMessage) {
  50. // print("incoming process", message.toLogString())
  51. if message.getCode() == CoreMessage_TMessageCode.LOGIN_FILE {
  52. loginFile(message: message)
  53. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_MYSELF || message.getCode() == CoreMessage_TMessageCode.PUSH_MYSELF_ACK || message.getCode() == CoreMessage_TMessageCode.PULL_MYSELF {
  54. pushMyself(message: message)
  55. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_BUDDY {
  56. DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
  57. self.initBatchBuddy(message: message)
  58. })
  59. makeNotifAddFriend(message: message)
  60. } else if message.getCode() == CoreMessage_TMessageCode.INIT_BATCH_BUDDY {
  61. initBatchBuddy(message: message)
  62. } else if message.getCode() == CoreMessage_TMessageCode.CHANGE_BATCH_PERSON_INFO {
  63. initBatchBuddy(message: message)
  64. } else if message.getCode() == CoreMessage_TMessageCode.DELETE_BUDDY {
  65. deleteBuddy(message: message)
  66. } else if message.getCode() == CoreMessage_TMessageCode.INIT_BATCH_GROUP {
  67. onInitGroupInfoBatch(message: message)
  68. } else if message.getCode() == CoreMessage_TMessageCode.INIT_BATCH_GROUP_NO_MEMBERS {
  69. onInitGroupInfoBatchNoMember(message: message)
  70. } else if message.getCode() == CoreMessage_TMessageCode.INIT_BATCH_TOPIC {
  71. onInitForumInfoBatch(message: message)
  72. } else if message.getCode() == CoreMessage_TMessageCode.UPLOAD_FILE {
  73. uploadFile(message: message)
  74. } else if message.getCode() == CoreMessage_TMessageCode.SEND_CHAT || message.getCode() == CoreMessage_TMessageCode.EDIT_MESSAGE {
  75. receiveMessage(message: message)
  76. } else if message.getCode() == CoreMessage_TMessageCode.UPDATE_CTEXT {
  77. receiveMessageStatus(message: message)
  78. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_GROUP || message.getCode() == CoreMessage_TMessageCode.PUSH_GROUP_A {
  79. pushGroup(message: message)
  80. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_GROUP_MEMBER {
  81. pushGroupMembers(message: message)
  82. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_GROUP_MEMBER_BATCH {
  83. pushGroupMembers(message: message)
  84. } else if message.getCode() == CoreMessage_TMessageCode.CHANGE_GROUP_MEMBER_POSITION {
  85. changeGroupPosition(message: message)
  86. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_CHAT {
  87. onInitForumInfoBatch(message: message, with: true)
  88. } else if message.getCode() == CoreMessage_TMessageCode.EXIT_GROUP {
  89. exitGroup(message: message)
  90. } else if message.getCode() == CoreMessage_TMessageCode.CHANGE_GROUP_INFO {
  91. changeGroupInfo(message: message)
  92. } else if message.getCode() == CoreMessage_TMessageCode.UPDATE_CHAT {
  93. updateChat(message: message)
  94. } else if message.getCode() == CoreMessage_TMessageCode.DELETE_CHAT {
  95. deleteChat(message: message)
  96. } else if message.getCode() == CoreMessage_TMessageCode.IMAGE_DOWNLOAD {
  97. imageDownload(message: message)
  98. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_LIVE_VIDEO_LIST {
  99. getLiveVideoList(message: message)
  100. } else if message.getCode() == CoreMessage_TMessageCode.UPDATE_LIVE_VIDEO {
  101. getLSTitle(message: message)
  102. } else if message.getCode() == CoreMessage_TMessageCode.LIVE_PROFILE_PUSH_LEAVE {
  103. leftLiveVideo(message: message)
  104. } else if message.getCode() == CoreMessage_TMessageCode.LIVE_PROFILE_PUSH_JOIN {
  105. joinLivevideo(message: message)
  106. } else if message.getCode() == CoreMessage_TMessageCode.LIVE_PROFILE_EMOTION_GET {
  107. getLSData(message: message)
  108. } else if message.getCode() == CoreMessage_TMessageCode.DELETE_CTEXT {
  109. deleteMessage(message: message)
  110. } else if message.getCode() == CoreMessage_TMessageCode.SEND_UPDATE_TYPING {
  111. sendUpdateTyping(message: message)
  112. } else if message.getCode() == CoreMessage_TMessageCode.LIVE_PROFILE_PUSH_CHAT {
  113. getLSChat(message: message)
  114. } else if message.getCode() == CoreMessage_TMessageCode.SEMINAR_PUSH_JOIN {
  115. joinSeminar(message: message)
  116. } else if message.getCode() == CoreMessage_TMessageCode.SEMINAR_PUSH_LEFT {
  117. leftSeminar(message: message)
  118. } else if message.getCode() == CoreMessage_TMessageCode.SEMINAR_PUSH_CHAT {
  119. getSeminarChat(message: message)
  120. } else if message.getCode() == CoreMessage_TMessageCode.SEMINAR_PUSH_RAISE_HAND {
  121. getSeminarRaiseHand(message: message)
  122. } else if message.getCode() == CoreMessage_TMessageCode.SEMINAR_FACE_DETECTION {
  123. } else if message.getCode() == CoreMessage_TMessageCode.SCREEN_SHARING {
  124. incomingScreenSharing(message: message, state: 1)
  125. } else if message.getCode() == CoreMessage_TMessageCode.SCREEN_SHARING_STOP {
  126. incomingScreenSharing(message: message, state: 88 )
  127. } else if message.getCode() == CoreMessage_TMessageCode.CHANGE_PERSON_INFO {
  128. changePersonInfo(message: message)
  129. } else if message.getCode() == CoreMessage_TMessageCode.SEND_COMMENTS {
  130. receiveComment(message: message)
  131. } else if message.getCode() == CoreMessage_TMessageCode.DELETE_COMMENTS {
  132. deleteComment(message: message)
  133. } else if message.getCode() == CoreMessage_TMessageCode.BLOCK_BUDDY {
  134. blockBuddy(message: message)
  135. } else if message.getCode() == CoreMessage_TMessageCode.UNBLOCK_BUDDY {
  136. blockBuddy(message: message)
  137. } else if message.getCode() == CoreMessage_TMessageCode.SEND_SIGNUP_MSISDN {
  138. sendMSISDN(message: message)
  139. } else if message.getCode() == CoreMessage_TMessageCode.VERIFY_OTP {
  140. verifyOTP(message: message)
  141. } else if message.getCode() == CoreMessage_TMessageCode.REMOVE_FRIEND {
  142. deleteBuddy(message: message)
  143. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_CALL_CENTER || message.getCode() == CoreMessage_TMessageCode.ACCEPT_CALL_CENTER || message.getCode() == CoreMessage_TMessageCode.END_CALL_CENTER || message.getCode() == CoreMessage_TMessageCode.TIMEOUT_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.INVITE_TO_ROOM_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.ACCEPT_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.PUSH_MEMBER_ROOM_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.INVITE_END_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.INVITE_EXIT_CONTACT_CENTER || message.getCode() == CoreMessage_TMessageCode.PUSH_SECOND_CONTACT_CENTER {
  144. handleCallCenter(message: message)
  145. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_DISCUSSION_COMMENT {
  146. if let delegate = Nexilis.shared.messageDelegate {
  147. delegate.onReceiveComment(message: message)
  148. }
  149. ack(message: message)
  150. } else if message.getCode() == CoreMessage_TMessageCode.APPROVE_FORM {
  151. onApproveForm(message: message)
  152. } else if message.getCode() == CoreMessage_TMessageCode.END_CALL {
  153. endCall(message: message)
  154. } else if message.getCode() == CoreMessage_TMessageCode.PUSH_SERVICE_BNI {
  155. pushServiceBNI(message: message)
  156. } else if message.getCode() == CoreMessage_TMessageCode.MOBILE_INQUIRY {
  157. mobileInquiry(message: message)
  158. } else if message.getCode() == CoreMessage_TMessageCode.INQUIRY {
  159. inquiry(message: message)
  160. } else if message.getCode() == CoreMessage_TMessageCode.BACKUP_AVAILABILITY {
  161. backupAvailability(message: message)
  162. } else if message.getCode() == CoreMessage_TMessageCode.FORWARD_MESSAGE {
  163. incomingWBSS(message: message)
  164. } else if message.getCode() == CoreMessage_TMessageCode.INCOMING_CALL_CC {
  165. incomingCallCC(message: message)
  166. } else if message.getCode() == CoreMessage_TMessageCode.GET_WORKING_AREA_CONTACT_CENTER {
  167. saveWorkingArea(message: message)
  168. } else if message.getCode() == CoreMessage_TMessageCode.ASKING_FOR_END_CALL {
  169. askingForEndCall(message: message)
  170. } else if message.getCode() == CoreMessage_TMessageCode.GET_BATCH_GROUP_NO_MEMBERS {
  171. pushGroupNoMembers(message: message)
  172. } else if message.getCode() == CoreMessage_TMessageCode.INIT_PREFS || message.getCode() == CoreMessage_TMessageCode.PULL_PREFS {
  173. initPrefs(message: message)
  174. } else if message.getCode() == CoreMessage_TMessageCode.NOTIFY_TO_CALLING {
  175. notifyCalling(message: message)
  176. } else if message.getCode() == CoreMessage_TMessageCode.CALLING {
  177. sendOnlineUser(message: message)
  178. } else if message.getCode() == CoreMessage_TMessageCode.PAYMENT_NOTIFICATION {
  179. showTransactionApprovalRequest(message: message)
  180. } else if message.getCode() == CoreMessage_TMessageCode.LOGOUT {
  181. logoutDevice(message: message)
  182. } else if message.getCode() == CoreMessage_TMessageCode.UPDATE_MESSAGE {
  183. updateMessage(message: message)
  184. } else {
  185. //print("unprocessed code", message.getCode())
  186. ack(message: message)
  187. }
  188. // case (CoreMessage_TMessageCode.FORM_PUSH_UPDATE):
  189. // onPushForm(msg);
  190. // break;
  191. }
  192. /**
  193. *
  194. */
  195. private func updateMessage(message: TMessage) -> Void {
  196. let data = message.getBody(key: CoreMessage_TMessageKey.DATA, default_value: "[]")
  197. let item_code = message.getBody(key: CoreMessage_TMessageKey.ITEM_CODE, default_value: "")
  198. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
  199. let l_pin = message.getBody(key: CoreMessage_TMessageKey.OPPOSITE_PIN, default_value: "")
  200. let chat_id = message.getBody(key: CoreMessage_TMessageKey.CHAT_ID, default_value: "")
  201. let scope_id = message.getBody(key: CoreMessage_TMessageKey.SCOPE_ID, default_value: "")
  202. if item_code == "pinorunpin" {
  203. if !data.isEmpty {
  204. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  205. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  206. do {
  207. for json in jsonArray {
  208. let pinned = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_PINNED_MESSAGE)
  209. let messageId = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MESSAGE_ID)
  210. var messageIdNotif = ""
  211. if pinned != "0" {
  212. if let dataUser = User.getData(pin: f_pin, lPin: l_pin, fmdb: fmdb) {
  213. messageIdNotif = Nexilis.saveMessageNotif(textMessage: dataUser.fullName + " " + "pinned a message".localized(), fPin: f_pin, lPin: l_pin, chatId: chat_id, scopeId: scope_id, fmdb: fmdb)
  214. }
  215. }
  216. _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE", cvalues: [
  217. "is_pinned" : pinned
  218. ], _where: "message_id = '\(messageId)'")
  219. var dataMessage: [AnyHashable : Any] = [:]
  220. dataMessage["message_id"] = messageId
  221. dataMessage["message_id_notif"] = messageIdNotif
  222. dataMessage["is_pinned"] = pinned
  223. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onUpdatedMessage"), object: nil, userInfo: dataMessage)
  224. }
  225. ack(message: message)
  226. } catch {
  227. rollback.pointee = true
  228. print("Access database error: \(error.localizedDescription)")
  229. }
  230. })
  231. }
  232. }
  233. }
  234. }
  235. private func sendUpdateLiveStream(message: TMessage) -> Void {
  236. var dataMessage: [AnyHashable : Any] = [:]
  237. dataMessage["message"] = message
  238. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "liveStreamingUpdate"), object: nil, userInfo: dataMessage)
  239. ack(message: message)
  240. }
  241. private func logoutDevice(message: TMessage) -> Void {
  242. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  243. _ = Nexilis.responseString(packetId: packetId, message: "00", timeout: 3000)
  244. }
  245. DispatchQueue.global().async {
  246. let apiKey = Nexilis.sAPIKey
  247. var id = Utils.getConnectionID()
  248. if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getSignUpApi(api: apiKey, p_pin: id), timeout: 15 * 1000) {
  249. id = response.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
  250. if(!id.isEmpty){
  251. // Nexilis.changeUser(f_pin: id)
  252. SecureUserDefaults.shared.set(id, forKey: "me")
  253. APIS.sendPushToken(Utils.getTokenAPN(), isResend: true)
  254. Nexilis.sendVersionToBE()
  255. Utils.setProfile(value: false)
  256. if Utils.getForceAnonymous() {
  257. DispatchQueue.main.async {
  258. APIS.setFloatingButton(isShow: false)
  259. UIApplication.shared.visibleViewController?.deleteAllRecordDatabase()
  260. }
  261. SecureUserDefaults.shared.removeValue(forKey: "device_id")
  262. Nexilis.destroyAll()
  263. _ = Nexilis.write(message: CoreMessage_TMessageBank.getPostRegistration(p_pin: id))
  264. }
  265. DispatchQueue.main.async {
  266. var dataImage: [AnyHashable : Any] = [:]
  267. dataImage["name"] = ""
  268. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "imageFBUpdate"), object: nil, userInfo: dataImage)
  269. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadTabChats"), object: nil, userInfo: nil)
  270. if !Utils.getForceAnonymous() {
  271. Nexilis.showForceSignIn()
  272. }
  273. }
  274. } else {
  275. DispatchQueue.main.async {
  276. Nexilis.hideLoader(completion: {
  277. let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
  278. imageView.tintColor = .white
  279. let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
  280. banner.show()
  281. })
  282. }
  283. }
  284. } else {
  285. DispatchQueue.main.async {
  286. Nexilis.hideLoader(completion: {
  287. let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
  288. imageView.tintColor = .white
  289. let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
  290. banner.show()
  291. })
  292. }
  293. }
  294. }
  295. ack(message: message)
  296. }
  297. private func showTransactionApprovalRequest(message: TMessage) -> Void {
  298. let limit = Utils.getLimitValidTrans()
  299. let totalPayment = message.getBody(key: CoreMessage_TMessageKey.TOTAL_PAYMENT, default_value: limit)
  300. if Int64(totalPayment) ?? 0 > Int64(limit) ?? 0 {
  301. let dialog = DialogTransactionApproval()
  302. dialog.modalTransitionStyle = .crossDissolve
  303. dialog.modalPresentationStyle = .overCurrentContext
  304. dialog.valueAmount = "Rp." + totalPayment
  305. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  306. dialog.packetId = packetId
  307. _ = Nexilis.responseString(packetId: packetId, message: "00", timeout: 3000)
  308. }
  309. UIApplication.shared.visibleViewController?.present(dialog, animated: true)
  310. } else {
  311. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  312. _ = Nexilis.responseString(packetId: packetId, message: "00", timeout: 3000)
  313. }
  314. }
  315. ack(message: message)
  316. }
  317. private func sendOnlineUser(message: TMessage) -> Void {
  318. DispatchQueue.main.async {
  319. if !APIS.checkAppStateisBackground() {
  320. let fPIn = message.getPIN()
  321. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  322. if fPIn != User.getMyPin() {
  323. _ = Nexilis.responseString(packetId: packetId, message: "01", timeout: 3000)
  324. }
  325. }
  326. }
  327. }
  328. }
  329. private func notifyCalling(message: TMessage) -> Void {
  330. let lPin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
  331. let fPin = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
  332. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  333. _ = Nexilis.responseString(packetId: packetId, message: "00", timeout: 3000)
  334. }
  335. var dataMessage: [AnyHashable : Any] = [:]
  336. dataMessage["l_pin"] = lPin
  337. dataMessage["f_pin"] = fPin
  338. NotificationCenter.default.post(name: NSNotification.Name(rawValue: Nexilis.callFCM), object: nil, userInfo: dataMessage)
  339. }
  340. private func initPrefs(message: TMessage) -> Void {
  341. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  342. if !data.isEmpty && !Utils.getIsLoadThemeFromOther() {
  343. Utils.setPrefTheme(value: data)
  344. Utils.setValueInitialApp(data: data)
  345. }
  346. Utils.setFinishInitPrefs(value: true)
  347. ack(message: message)
  348. }
  349. private func askingForEndCall(message: TMessage) -> Void {
  350. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  351. _ = Nexilis.responseString(packetId: packetId, message: "00")
  352. }
  353. ack(message: message)
  354. }
  355. private func saveWorkingArea(message: TMessage) -> Void {
  356. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  357. if !data.isEmpty {
  358. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  359. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  360. do {
  361. for json in jsonArray {
  362. var parent = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID)
  363. if parent.isEmpty {
  364. parent = "-99"
  365. }
  366. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "WORKING_AREA", cvalues: [
  367. "area_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.WORKING_AREA),
  368. "name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.NAME),
  369. "parent" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID),
  370. "level" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL)
  371. ], replace: true)
  372. }
  373. ack(message: message)
  374. } catch {
  375. rollback.pointee = true
  376. print("Access database error: \(error.localizedDescription)")
  377. }
  378. })
  379. }
  380. }
  381. }
  382. private func incomingCallCC(message: TMessage) {
  383. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  384. _ = Nexilis.responseString(packetId: packetId, message: "01")
  385. }
  386. ack(message: message)
  387. DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
  388. let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
  389. let channelCC: String = SecureUserDefaults.shared.value(forKey: "channelCC") ?? ""
  390. if onGoingCC.isEmpty || channelCC.isEmpty || (!onGoingCC.isEmpty && onGoingCC.components(separatedBy: ",").count < 3) {
  391. SecureUserDefaults.shared.removeValue(forKey: "onGoingCC")
  392. SecureUserDefaults.shared.removeValue(forKey: "channelCC")
  393. return
  394. }
  395. let complaintId = onGoingCC.components(separatedBy: ",")[2]
  396. let fPinCC = onGoingCC.components(separatedBy: ",")[1]
  397. if fPinCC == User.getMyPin() {
  398. return
  399. }
  400. if channelCC == "1" {
  401. let controller = QmeraAudioViewController()
  402. controller.isOutgoing = false
  403. controller.user = User.getData(pin: fPinCC)
  404. controller.ticketId = complaintId
  405. controller.modalPresentationStyle = .overCurrentContext
  406. if UIApplication.shared.visibleViewController is UIAlertController {
  407. let vc = UIApplication.shared.visibleViewController as! UIAlertController
  408. vc.dismiss(animated: true, completion: {
  409. if UIApplication.shared.visibleViewController?.navigationController != nil {
  410. UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
  411. } else {
  412. UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
  413. }
  414. })
  415. return
  416. }
  417. if UIApplication.shared.visibleViewController?.navigationController != nil {
  418. UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
  419. } else {
  420. UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
  421. }
  422. } else if channelCC == "2" {
  423. let videoController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "videoVCQmera") as! QmeraVideoViewController
  424. let user = User.getData(pin: fPinCC)
  425. videoController.fPin = user!.pin
  426. videoController.isInisiator = false
  427. videoController.users.append(user!)
  428. videoController.isAutoAccept = true
  429. videoController.ticketId = complaintId
  430. let navigationController = CustomNavigationController(rootViewController: videoController)
  431. navigationController.modalPresentationStyle = .fullScreen
  432. if UIApplication.shared.visibleViewController is UIAlertController {
  433. let vc = UIApplication.shared.visibleViewController as! UIAlertController
  434. vc.dismiss(animated: true, completion: {
  435. if UIApplication.shared.visibleViewController?.navigationController != nil {
  436. UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
  437. } else {
  438. UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
  439. }
  440. })
  441. return
  442. }
  443. if UIApplication.shared.visibleViewController?.navigationController != nil {
  444. UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
  445. } else {
  446. UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
  447. }
  448. }
  449. })
  450. }
  451. private func incomingWBSS(message: TMessage) {
  452. let type = message.getBody(key: CoreMessage_TMessageKey.TYPE, default_value: "")
  453. let status = message.getBody(key: CoreMessage_TMessageKey.STATUS, default_value: "")
  454. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_USER_ID, default_value: "")
  455. if type == "wb" {
  456. switch (Int(status)) {
  457. case CoreMessage_TMessageCode.WB_INCOMING:
  458. //print("WB_INCOMING")
  459. DispatchQueue.main.async {
  460. let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "wbVC") as! WhiteboardViewController
  461. controller.modalPresentationStyle = .overFullScreen
  462. controller.fromContact = 1
  463. controller.user = User.getData(pin: f_pin)
  464. if UIApplication.shared.visibleViewController?.navigationController != nil {
  465. UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
  466. } else {
  467. UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
  468. }
  469. }
  470. default:
  471. //print("default")
  472. var dataMessage: [AnyHashable : Any] = [:]
  473. dataMessage["message"] = message
  474. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "wbSession"), object: nil, userInfo: dataMessage)
  475. }
  476. } else if type == "ss"{
  477. switch (Int(status)) {
  478. case CoreMessage_TMessageCode.SS_INCOMING:
  479. //print("SS_INCOMING")
  480. DispatchQueue.main.async {
  481. let controller = ScreenSharingViewController()
  482. controller.modalPresentationStyle = .overFullScreen
  483. controller.fromContact = 1
  484. controller.user = User.getData(pin: f_pin)
  485. if UIApplication.shared.visibleViewController?.navigationController != nil {
  486. UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
  487. } else {
  488. UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
  489. }
  490. }
  491. default:
  492. //print("default")
  493. var dataMessage: [AnyHashable : Any] = [:]
  494. dataMessage["message"] = message
  495. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ssSession"), object: nil, userInfo: dataMessage)
  496. }
  497. }
  498. ack(message: message)
  499. }
  500. private func backupAvailability(message: TMessage) {
  501. var dataMessage: [AnyHashable : Any] = [:]
  502. dataMessage["message"] = message
  503. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "backupAvailability"), object: nil, userInfo: dataMessage)
  504. ack(message: message)
  505. }
  506. private func makeNotifAddFriend(message: TMessage) {
  507. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  508. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  509. for json in jsonArray {
  510. DispatchQueue.main.async {
  511. let f_pin = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN)
  512. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  513. do {
  514. if message.getPIN() == User.getMyPin() {
  515. return
  516. }
  517. if let cursorUser = Database.shared.getRecords(fmdb: fmdb, query: "SELECT f_pin FROM BUDDY where f_pin='\(f_pin)'"), cursorUser.next() {
  518. return
  519. }
  520. if message.getBody(key: "is_silent") == "1" {
  521. return
  522. }
  523. let firstname = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.FIRST_NAME)
  524. let lastname = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_NAME)
  525. let f_pin = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN)
  526. if (firstname + " " + lastname).trimmingCharacters(in: .whitespaces) == "USR\(f_pin)" {
  527. return
  528. }
  529. let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
  530. if !onGoingCC.isEmpty {
  531. return
  532. }
  533. let container = UIView()
  534. container.backgroundColor = .gray
  535. let profileImage = UIImageView()
  536. profileImage.frame.size = CGSize(width: 60, height: 60)
  537. container.addSubview(profileImage)
  538. profileImage.translatesAutoresizingMaskIntoConstraints = false
  539. NSLayoutConstraint.activate([
  540. profileImage.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 8.0),
  541. profileImage.centerYAnchor.constraint(equalTo: container.centerYAnchor),
  542. profileImage.widthAnchor.constraint(equalToConstant: 60),
  543. profileImage.heightAnchor.constraint(equalToConstant: 60),
  544. ])
  545. let title = UILabel()
  546. container.addSubview(title)
  547. title.translatesAutoresizingMaskIntoConstraints = false
  548. NSLayoutConstraint.activate([
  549. title.leadingAnchor.constraint(equalTo: profileImage.trailingAnchor, constant: 8.0),
  550. title.centerYAnchor.constraint(equalTo: container.centerYAnchor),
  551. title.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -8.0)
  552. ])
  553. title.font = UIFont.systemFont(ofSize: 14)
  554. title.text = (firstname + " " + lastname).trimmingCharacters(in: .whitespaces) + " " + "added you as friend".localized()
  555. title.textColor = .white
  556. title.numberOfLines = 0
  557. if Nexilis.shared.floating != nil {
  558. Nexilis.shared.floating.dismiss()
  559. }
  560. Nexilis.shared.floating = FloatingNotificationBanner(customView: container)
  561. Nexilis.shared.floating.bannerHeight = UIScreen.main.bounds.height / 6 - 10
  562. Nexilis.shared.floating.transparency = 0.9
  563. let profile = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID)
  564. if profile != "" {
  565. profileImage.circle()
  566. do {
  567. let documentDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
  568. let file = documentDir.appendingPathComponent(profile)
  569. if FileManager().fileExists(atPath: file.path) {
  570. profileImage.image = UIImage(contentsOfFile: file.path)
  571. profileImage.backgroundColor = .clear
  572. } else if FileEncryption.shared.isSecureExists(filename: profile) {
  573. do {
  574. if var data = try FileEncryption.shared.readSecure(filename: profile) {
  575. let dataDecrypt = FileEncryption.shared.decryptFileFromServer(data: data)
  576. if dataDecrypt != nil {
  577. data = dataDecrypt!
  578. }
  579. profileImage.image = UIImage(data: data)
  580. profileImage.backgroundColor = .clear
  581. }
  582. } catch {
  583. }
  584. } else {
  585. Download().startHTTP(forKey: profile) { (name, progress) in
  586. guard progress == 100 else {
  587. return
  588. }
  589. DispatchQueue.main.async {
  590. if FileEncryption.shared.isSecureExists(filename: profile) {
  591. do {
  592. if var data = try FileEncryption.shared.readSecure(filename: profile) {
  593. let dataDecrypt = FileEncryption.shared.decryptFileFromServer(data: data)
  594. if dataDecrypt != nil {
  595. data = dataDecrypt!
  596. }
  597. profileImage.image = UIImage(data: data)
  598. profileImage.backgroundColor = .clear
  599. }
  600. } catch {
  601. }
  602. }
  603. Nexilis.shared.floating.show(queuePosition: .front, bannerPosition: .top, queue: NotificationBannerQueue(maxBannersOnScreenSimultaneously: 1), on: nil, edgeInsets: UIEdgeInsets(top: 8.0, left: 8.0, bottom: 0, right: 8.0), cornerRadius: 8.0, shadowColor: .clear, shadowOpacity: .zero, shadowBlurRadius: .zero, shadowCornerRadius: .zero, shadowOffset: .zero, shadowEdgeInsets: nil)
  604. return
  605. }
  606. }
  607. }
  608. } catch {}
  609. profileImage.contentMode = .scaleAspectFill
  610. } else {
  611. profileImage.circle()
  612. profileImage.image = UIImage(systemName: "person")
  613. profileImage.contentMode = .scaleAspectFit
  614. profileImage.backgroundColor = .lightGray
  615. profileImage.tintColor = .white
  616. }
  617. Nexilis.shared.floating.show(queuePosition: .front, bannerPosition: .top, queue: NotificationBannerQueue(maxBannersOnScreenSimultaneously: 1), on: nil, edgeInsets: UIEdgeInsets(top: 8.0, left: 8.0, bottom: 0, right: 8.0), cornerRadius: 8.0, shadowColor: .clear, shadowOpacity: .zero, shadowBlurRadius: .zero, shadowCornerRadius: .zero, shadowOffset: .zero, shadowEdgeInsets: nil)
  618. } catch {
  619. rollback.pointee = true
  620. print("Access database error: \(error.localizedDescription)")
  621. }
  622. })
  623. }
  624. }
  625. }
  626. }
  627. private func inquiry(message: TMessage) {
  628. let message_id = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_ID, default_value: "")
  629. var err_code = "10"
  630. if !message_id.isEmpty {
  631. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  632. do {
  633. if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select message_id from MESSAGE where message_id = '\(message_id)'") {
  634. if cursor.next() {
  635. err_code = "00"
  636. }
  637. _ = Nexilis.write(message: CoreMessage_TMessageBank.getInquiry(message_id: message_id, error_code: err_code, data: message_id))
  638. cursor.close()
  639. }
  640. } catch {
  641. rollback.pointee = true
  642. print("Access database error: \(error.localizedDescription)")
  643. }
  644. })
  645. }
  646. }
  647. private func mobileInquiry(message: TMessage) {
  648. var message_id = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_ID)
  649. let err_code = message.getBody(key: CoreMessage_TMessageKey.ERRCOD)
  650. let message_scope = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID)
  651. if message_id.isEmpty {
  652. message_id = message.getStatus()
  653. }
  654. if err_code == "00" {
  655. self.updateInquiry(messageId: message_id)
  656. } else {
  657. //print("MASUK MINQ SEND CHAT")
  658. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  659. do {
  660. if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select message from INQUIRY where id = '\(message_id)'"), cursor.next() {
  661. if let message = cursor.string(forColumnIndex: 0) {
  662. //print("MASUK MINQ ADA MESSAGE")
  663. OutgoingThread.default.addQueue(message: TMessage(data: message))
  664. if message_scope != MessageScope.WHISPER {
  665. DispatchQueue.main.async {
  666. self.updateInquiry(messageId: message_id)
  667. }
  668. }
  669. }
  670. cursor.close()
  671. }
  672. } catch {
  673. rollback.pointee = true
  674. print("Access database error: \(error.localizedDescription)")
  675. }
  676. })
  677. }
  678. }
  679. private func updateInquiry(messageId: String) {
  680. //print("UPDATE INQUIRY")
  681. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  682. do {
  683. _ = Database.shared.updateRecord(fmdb: fmdb, table: "INQUIRY", cvalues: [
  684. "status" : "1"
  685. ], _where: "id = '\(messageId)'")
  686. } catch {
  687. rollback.pointee = true
  688. print("Access database error: \(error.localizedDescription)")
  689. }
  690. })
  691. }
  692. private func endCall(message: TMessage) {
  693. // if let call = Nexilis.shared.callManager.call(with: message.mPIN) {
  694. // call.isReceiveEnd = true
  695. // DispatchQueue.main.async {
  696. // Nexilis.shared.callManager.end(call: call)
  697. // }
  698. // }
  699. ack(message: message)
  700. }
  701. private func onApproveForm(message: TMessage) {
  702. if let me = User.getMyPin() {
  703. _ = Nexilis.write(message: CoreMessage_TMessageBank.getPostRegistration(p_pin: me))
  704. }
  705. ack(message: message)
  706. }
  707. private func handleCallCenter(message: TMessage) -> Void {
  708. if let delegate = Nexilis.shared.messageDelegate {
  709. delegate.onReceive(message: message)
  710. }
  711. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID], (message.getCode() == CoreMessage_TMessageCode.PUSH_CALL_CENTER || message.getCode() == CoreMessage_TMessageCode.PUSH_SECOND_CONTACT_CENTER) {
  712. _ = Nexilis.responseString(packetId: packetId, message: "00")
  713. }
  714. ack(message: message)
  715. // TODO: notif call center
  716. }
  717. private func blockBuddy(message: TMessage) -> Void {
  718. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
  719. let block = message.getBody(key: CoreMessage_TMessageKey.BLOCK)
  720. //print ("BLOCK INCOMING \(block)")
  721. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  722. do {
  723. _ = Database.shared.updateRecord(fmdb: fmdb, table: "BUDDY", cvalues: [
  724. "ex_block" : block
  725. ], _where: "f_pin = '\(l_pin)'")
  726. } catch {
  727. rollback.pointee = true
  728. print("Access database error: \(error.localizedDescription)")
  729. }
  730. })
  731. if let delegate = Nexilis.shared.personInfoDelegate {
  732. var object = [String:String]()
  733. let encoder = JSONEncoder()
  734. object["l_pin"] = l_pin
  735. object["block"] = block
  736. let data = try! encoder.encode(object)
  737. delegate.onUpdatePersonInfo(state: 01, message: String(data: data, encoding: .utf8)!)
  738. }
  739. ack(message: message)
  740. }
  741. private func deleteComment(message: TMessage) -> Void {
  742. if let delegate = Nexilis.shared.commentDelegate {
  743. delegate.onDeleteComment(message: message)
  744. }
  745. ack(message: message)
  746. }
  747. private func receiveComment(message: TMessage) -> Void {
  748. if let delegate = Nexilis.shared.commentDelegate {
  749. delegate.onReceiveComment(message: message)
  750. }
  751. ack(message: message)
  752. }
  753. private func sendUpdateTyping(message: TMessage) -> Void {
  754. //print("update typing \(message)")
  755. if let delegate = Nexilis.shared.messageDelegate {
  756. delegate.onTyping(message: message)
  757. }
  758. ack(message: message)
  759. }
  760. private func deleteMessage(message: TMessage) -> Void {
  761. var messageId = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_ID)
  762. if message.mBodies["message_id"] != nil {
  763. messageId = message.getBody(key: "message_id")
  764. }
  765. let type = message.getBody(key: CoreMessage_TMessageKey.DELETE_MESSAGE_FLAG)
  766. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  767. do {
  768. if type == "1" {
  769. if !messageId.contains("'") {
  770. messageId = "'\(messageId)'"
  771. }
  772. _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE", cvalues: [
  773. "message_text" : "🚫 _This message was deleted_",
  774. "lock" : "1",
  775. "thumb_id" : "",
  776. "image_id" : "",
  777. "file_id" : "",
  778. "audio_id" : "",
  779. "video_id" : "",
  780. "reff_id" : "",
  781. "attachment_flag" : 0,
  782. "is_stared" : "0",
  783. "credential" : "0",
  784. "read_receipts" : "4"
  785. ], _where: "message_id = \(messageId)")
  786. }
  787. if let delegate = Nexilis.shared.messageDelegate {
  788. delegate.onMessage(message: message)
  789. }
  790. } catch {
  791. rollback.pointee = true
  792. print("Access database error: \(error.localizedDescription)")
  793. }
  794. })
  795. ack(message: message)
  796. }
  797. private func imageDownload(message: TMessage) -> Void {
  798. let key_filename = message.getBody(key: CoreMessage_TMessageKey.FILE_NAME)
  799. let key_part_size = message.getBodyAsInteger(key: CoreMessage_TMessageKey.PART_SIZE, default_value: 0)
  800. let key_part_of = message.getBodyAsInteger(key: CoreMessage_TMessageKey.PART_OF, default_value: 0)
  801. let key_file_size = message.getBodyAsInteger(key: CoreMessage_TMessageKey.FILE_SIZE, default_value: 0)
  802. let media = message.getMedia()
  803. var data = Data(media)
  804. if !key_filename.isEmpty, data.count == 0, let download = Nexilis.getDownload(forKey: key_filename) {
  805. //print("corrupted...", key_filename)
  806. if let delegate = download.delegate {
  807. delegate.onDownloadProgress(fileName: key_filename, progress: -1)
  808. } else if let completion = download.onDownloadProgress {
  809. completion(key_filename, -1)
  810. }
  811. return
  812. }
  813. if media.count > 0 {
  814. if key_part_size > 0, let download = Nexilis.getDownload(forKey: key_filename) {
  815. download.put(part: key_part_of, buffer: Data(media))
  816. if download.size() == key_file_size {
  817. data = download.remove()
  818. } else {
  819. let progress = Double(download.size()) / Double(key_file_size) * 100.0
  820. if let delegate = download.delegate {
  821. delegate.onDownloadProgress(fileName: key_filename, progress: progress)
  822. } else if let completion = download.onDownloadProgress {
  823. completion(key_filename, progress)
  824. }
  825. return
  826. }
  827. }
  828. }
  829. do {
  830. let documentDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
  831. let url = documentDir.appendingPathComponent(key_filename)
  832. //print("write file \(url.path)")
  833. try data.write(to: url, options: .atomic)
  834. if let download = Nexilis.getDownload(forKey: key_filename) {
  835. if let delegate = download.delegate {
  836. delegate.onDownloadProgress(fileName: key_filename, progress: 100)
  837. } else if let completion = download.onDownloadProgress {
  838. completion(key_filename, 100)
  839. }
  840. }
  841. } catch {
  842. //print(error)
  843. if let download = Nexilis.getDownload(forKey: key_filename) {
  844. if let delegate = download.delegate {
  845. delegate.onDownloadProgress(fileName: key_filename, progress: -1)
  846. } else if let completion = download.onDownloadProgress {
  847. completion(key_filename, -1)
  848. }
  849. }
  850. }
  851. ack(message: message)
  852. }
  853. private func deleteChat(message: TMessage) -> Void {
  854. let chat_id = message.getBody(key: CoreMessage_TMessageKey.CHAT_ID)
  855. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  856. do {
  857. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "DISCUSSION_FORUM", _where: "chat_id = '\(chat_id)'")
  858. } catch {
  859. rollback.pointee = true
  860. print("Access database error: \(error.localizedDescription)")
  861. }
  862. })
  863. if let delegate = Nexilis.shared.groupDelegate {
  864. delegate.onTopic(code: message.getCode(), f_pin: message.getPIN(), topicId: chat_id)
  865. }
  866. ack(message: message)
  867. }
  868. private func updateChat(message: TMessage) -> Void {
  869. let chat_id = message.getBody(key: CoreMessage_TMessageKey.CHAT_ID)
  870. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  871. do {
  872. _ = Database.shared.updateRecord(fmdb: fmdb, table: "DISCUSSION_FORUM", cvalues: [
  873. "title" : message.getBody(key: CoreMessage_TMessageKey.TITLE)
  874. ], _where: "chat_id = '\(chat_id)'")
  875. } catch {
  876. rollback.pointee = true
  877. print("Access database error: \(error.localizedDescription)")
  878. }
  879. })
  880. if let delegate = Nexilis.shared.groupDelegate {
  881. delegate.onTopic(code: message.getCode(), f_pin: message.getPIN(), topicId: chat_id)
  882. }
  883. ack(message: message)
  884. }
  885. private func pushServiceBNI(message: TMessage) -> Void {
  886. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  887. if !data.isEmpty {
  888. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  889. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  890. do {
  891. for json in jsonArray {
  892. var parent = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID)
  893. if parent.isEmpty {
  894. parent = "-99"
  895. }
  896. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "SERVICE_BANK", cvalues: [
  897. "service_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CATEGORY_ID),
  898. "service_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.NAME),
  899. "description" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.DESCRIPTION),
  900. "parent" : parent,
  901. "is_tablet" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PLATFORM)
  902. ], replace: true)
  903. }
  904. ack(message: message)
  905. } catch {
  906. rollback.pointee = true
  907. print("Access database error: \(error.localizedDescription)")
  908. }
  909. })
  910. }
  911. }
  912. }
  913. private func changeGroupInfo(message: TMessage) -> Void {
  914. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  915. let group_name = message.getBody(key: CoreMessage_TMessageKey.GROUP_NAME)
  916. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID)
  917. let quote = message.getBody(key: CoreMessage_TMessageKey.QUOTE)
  918. let chat_modifier = message.getBody(key: CoreMessage_TMessageKey.CHAT_MODIFIER)
  919. let last_update = message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE)
  920. let is_open = message.getBody(key: CoreMessage_TMessageKey.IS_OPEN)
  921. let official = message.getBody(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT)
  922. let lvl_edu = message.getBody(key: CoreMessage_TMessageKey.LEVEL_EDU)
  923. let mtr_edu = message.getBody(key: CoreMessage_TMessageKey.MATERI_EDU)
  924. let is_edu = message.getBody(key: CoreMessage_TMessageKey.IS_EDUCATION)
  925. var cvalues = [String:String]()
  926. if (!group_name.isEmpty) { cvalues["f_name"] = group_name }
  927. if (!thumb_id.isEmpty) { cvalues["image_id"] = thumb_id }
  928. if (!quote.isEmpty) { cvalues["quote"] = quote }
  929. if (!chat_modifier.isEmpty) { cvalues["chat_modifier"] = chat_modifier }
  930. if (!last_update.isEmpty) { cvalues["last_update"] = last_update }
  931. if (!is_open.isEmpty) { cvalues["is_open"] = is_open }
  932. if (!official.isEmpty) { cvalues["official"] = official }
  933. if (!lvl_edu.isEmpty) { cvalues["level_edu"] = official }
  934. if (!mtr_edu.isEmpty) { cvalues["materi_edu"] = official }
  935. if (!is_edu.isEmpty) { cvalues["is_education"] = official }
  936. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  937. do {
  938. _ = Database.shared.updateRecord(fmdb: fmdb, table: "GROUPZ", cvalues: cvalues, _where: "group_id = '\(group_id)'")
  939. } catch {
  940. rollback.pointee = true
  941. print("Access database error: \(error.localizedDescription)")
  942. }
  943. })
  944. if let delegate = Nexilis.shared.groupDelegate {
  945. delegate.onGroup(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id)
  946. }
  947. ack(message: message)
  948. }
  949. private func exitGroup(message: TMessage) -> Void {
  950. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
  951. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  952. if let me = User.getMyPin(), me == f_pin {
  953. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  954. do {
  955. if let cursorIsEducation = Database.shared.getRecords(fmdb: fmdb, query: "select is_education from GROUPZ where group_id='\(group_id)'"), cursorIsEducation.next() {
  956. let is_education = Int(cursorIsEducation.int(forColumnIndex: 0))
  957. if (is_education == 3 || is_education == 2 || is_education == 4) {
  958. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", _where: "group_id = '\(group_id)' and f_pin = '\(f_pin)'")
  959. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE", _where: "l_pin='\(group_id)'")
  960. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(group_id)'")
  961. if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select chat_id from DISCUSSION_FORUM where group_id='\(group_id)'") {
  962. while cursor.next() {
  963. if let chat_id = cursor.string(forColumnIndex: 0) {
  964. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(chat_id)'")
  965. }
  966. }
  967. cursor.close()
  968. }
  969. } else {
  970. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "GROUPZ", _where: "group_id = '\(group_id)'")
  971. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE", _where: "l_pin='\(group_id)'")
  972. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(group_id)'")
  973. if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select chat_id from DISCUSSION_FORUM where group_id='\(group_id)'") {
  974. while cursor.next() {
  975. if let chat_id = cursor.string(forColumnIndex: 0) {
  976. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(chat_id)'")
  977. }
  978. }
  979. cursor.close()
  980. }
  981. if let cursorSub = Database.shared.getRecords(fmdb: fmdb, query: "select group_id from GROUPZ where parent='\(group_id)'") {
  982. while cursorSub.next() {
  983. if let subGroup = cursorSub.string(forColumnIndex: 0) {
  984. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "GROUPZ", _where: "group_id = '\(subGroup)'")
  985. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE", _where: "l_pin='\(subGroup)'")
  986. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(subGroup)'")
  987. if let cursorSubGroupTopic = Database.shared.getRecords(fmdb: fmdb, query: "select chat_id from DISCUSSION_FORUM where group_id='\(subGroup)'") {
  988. while cursorSubGroupTopic.next() {
  989. if let chat_id_sub = cursorSubGroupTopic.string(forColumnIndex: 0) {
  990. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(chat_id_sub)'")
  991. }
  992. }
  993. cursorSubGroupTopic.close()
  994. }
  995. }
  996. }
  997. cursorSub.close()
  998. }
  999. }
  1000. cursorIsEducation.close()
  1001. }
  1002. } catch {
  1003. rollback.pointee = true
  1004. print("Access database error: \(error.localizedDescription)")
  1005. }
  1006. })
  1007. } else {
  1008. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1009. do {
  1010. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", _where: "group_id = '\(group_id)' and f_pin = '\(f_pin)'")
  1011. } catch {
  1012. rollback.pointee = true
  1013. print("Access database error: \(error.localizedDescription)")
  1014. }
  1015. })
  1016. }
  1017. if let delegate = Nexilis.shared.groupDelegate {
  1018. delegate.onMember(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id, member: f_pin)
  1019. }
  1020. ack(message: message)
  1021. }
  1022. private func changeGroupPosition(message: TMessage) -> Void {
  1023. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  1024. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
  1025. let position = message.getBody(key: CoreMessage_TMessageKey.POSITION)
  1026. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1027. do {
  1028. _ = Database.shared.updateRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", cvalues: [
  1029. "position" : position
  1030. ], _where: "group_id = '\(group_id)' and f_pin = '\(f_pin)'")
  1031. } catch {
  1032. rollback.pointee = true
  1033. print("Access database error: \(error.localizedDescription)")
  1034. }
  1035. })
  1036. if let delegate = Nexilis.shared.groupDelegate {
  1037. delegate.onMember(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id, member: f_pin)
  1038. }
  1039. ack(message: message)
  1040. }
  1041. var listPushGroupMember: [TMessage] = []
  1042. private func pushGroupMembers(message: TMessage, isFromIncoming: Bool = true) -> Void {
  1043. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  1044. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
  1045. if(f_pin.isEmpty) {
  1046. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1047. if !data.isEmpty {
  1048. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1049. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1050. do {
  1051. for json in jsonArray {
  1052. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", cvalues: [
  1053. "group_id" : group_id,
  1054. "f_pin" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN),
  1055. "position" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.POSITION),
  1056. "user_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.USER_ID),
  1057. "ac" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.AC),
  1058. "ac_desc" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.AC_DESC),
  1059. "first_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.FIRST_NAME),
  1060. "last_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_NAME),
  1061. "msisdn" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MSISDN),
  1062. "thumb_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1063. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE)
  1064. ], replace: true)
  1065. }
  1066. if let delegate = Nexilis.shared.groupDelegate {
  1067. delegate.onMember(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id, member: "")
  1068. }
  1069. ack(message: message)
  1070. } catch {
  1071. rollback.pointee = true
  1072. print("Access database error: \(error.localizedDescription)")
  1073. }
  1074. })
  1075. }
  1076. }
  1077. } else {
  1078. if isFromIncoming {
  1079. listPushGroupMember.append(message)
  1080. }
  1081. if listPushGroupMember.count == 1 || !isFromIncoming {
  1082. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1083. do {
  1084. let result = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", cvalues: [
  1085. "group_id" : group_id,
  1086. "f_pin" : f_pin,
  1087. "position" : message.getBody(key: CoreMessage_TMessageKey.POSITION),
  1088. "user_id" : message.getBody(key: CoreMessage_TMessageKey.USER_ID),
  1089. "ac" : message.getBody(key: CoreMessage_TMessageKey.AC),
  1090. "ac_desc" : message.getBody(key: CoreMessage_TMessageKey.AC_DESC),
  1091. "first_name" : message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME),
  1092. "last_name" : message.getBody(key: CoreMessage_TMessageKey.LAST_NAME),
  1093. "msisdn" : message.getBody(key: CoreMessage_TMessageKey.MSISDN),
  1094. "thumb_id" : message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  1095. "created_date" : message.getBody(key: CoreMessage_TMessageKey.CREATED_DATE)
  1096. ], replace: true)
  1097. if result > 0 {
  1098. if let delegate = Nexilis.shared.groupDelegate {
  1099. delegate.onMember(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id, member: f_pin)
  1100. }
  1101. self.listPushGroupMember.remove(at: 0)
  1102. ack(message: message)
  1103. if listPushGroupMember.count > 0 {
  1104. dispatchQueue.asyncAfter(deadline: .now() + 1, execute: {
  1105. self.pushGroupMembers(message: self.listPushGroupMember[0], isFromIncoming: false)
  1106. })
  1107. }
  1108. }
  1109. } catch {
  1110. rollback.pointee = true
  1111. print("Access database error: \(error.localizedDescription)")
  1112. }
  1113. })
  1114. }
  1115. }
  1116. }
  1117. private func pushGroup(message: TMessage) -> Void {
  1118. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1119. if !data.isEmpty {
  1120. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1121. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1122. do {
  1123. for json in jsonArray {
  1124. let group_id = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID)
  1125. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ", cvalues: [
  1126. "group_id" : group_id,
  1127. "f_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_NAME),
  1128. "scope_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1129. "image_id": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1130. "quote": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.QUOTE),
  1131. "last_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_UPDATE),
  1132. "created_by" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_BY),
  1133. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE),
  1134. "ex_block" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BLOCK),
  1135. "folder_id" : "",
  1136. "chat_modifier" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1137. "group_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_ORGANIZATION),
  1138. "parent" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID),
  1139. "level" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL),
  1140. "is_open" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_OPEN),
  1141. "official" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1142. "level_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL_EDU),
  1143. "materi_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MATERI_EDU),
  1144. "is_education" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_EDUCATION)
  1145. ], replace: true)
  1146. if let delegate = Nexilis.shared.groupDelegate {
  1147. delegate.onGroup(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id)
  1148. }
  1149. }
  1150. ack(message: message)
  1151. } catch {
  1152. rollback.pointee = true
  1153. print("Access database error: \(error.localizedDescription)")
  1154. }
  1155. })
  1156. }
  1157. } else {
  1158. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  1159. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1160. do {
  1161. let result = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ", cvalues: [
  1162. "group_id" : group_id,
  1163. "f_name" : message.getBody(key: CoreMessage_TMessageKey.GROUP_NAME),
  1164. "scope_id" : message.getBody(key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1165. "image_id": message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  1166. "quote": message.getBody(key: CoreMessage_TMessageKey.QUOTE),
  1167. "last_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE),
  1168. "created_by" : message.getBody(key: CoreMessage_TMessageKey.CREATED_BY),
  1169. "created_date" : message.getBody(key: CoreMessage_TMessageKey.CREATED_DATE),
  1170. "ex_block" : message.getBody(key: CoreMessage_TMessageKey.BLOCK),
  1171. "folder_id" : "",
  1172. "chat_modifier" : message.getBody(key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1173. "group_type" : message.getBody(key: CoreMessage_TMessageKey.IS_ORGANIZATION),
  1174. "parent" : message.getBody(key: CoreMessage_TMessageKey.PARENT_ID),
  1175. "level" : message.getBody(key: CoreMessage_TMessageKey.LEVEL),
  1176. "is_open" : message.getBody(key: CoreMessage_TMessageKey.IS_OPEN),
  1177. "official" : message.getBody(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1178. "level_edu" : message.getBody(key: CoreMessage_TMessageKey.LEVEL_EDU),
  1179. "materi_edu" : message.getBody(key: CoreMessage_TMessageKey.MATERI_EDU),
  1180. "is_education" : message.getBody(key: CoreMessage_TMessageKey.IS_EDUCATION)
  1181. ], replace: true)
  1182. if result > 0 {
  1183. if let delegate = Nexilis.shared.groupDelegate {
  1184. delegate.onGroup(code: message.getCode(), f_pin: message.getPIN(), groupId: group_id)
  1185. }
  1186. ack(message: message)
  1187. }
  1188. } catch {
  1189. rollback.pointee = true
  1190. print("Access database error: \(error.localizedDescription)")
  1191. }
  1192. })
  1193. }
  1194. }
  1195. private func pushGroupNoMembers(message: TMessage) -> Void {
  1196. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1197. if !data.isEmpty {
  1198. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1199. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1200. do {
  1201. for json in jsonArray {
  1202. let group_id = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID)
  1203. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUP_NM", cvalues: [
  1204. "group_id" : group_id,
  1205. "f_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_NAME),
  1206. "scope_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1207. "image_id": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1208. "quote": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.QUOTE),
  1209. "last_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_UPDATE),
  1210. "created_by" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_BY),
  1211. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE),
  1212. "ex_block" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BLOCK),
  1213. "folder_id" : "",
  1214. "chat_modifier" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1215. "group_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_ORGANIZATION),
  1216. "parent" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID),
  1217. "level" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL),
  1218. "is_open" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_OPEN),
  1219. "official" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1220. "level_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL_EDU),
  1221. "materi_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MATERI_EDU),
  1222. "is_education" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_EDUCATION)
  1223. ], replace: true)
  1224. }
  1225. ack(message: message)
  1226. } catch {
  1227. rollback.pointee = true
  1228. print("Access database error: \(error.localizedDescription)")
  1229. }
  1230. })
  1231. }
  1232. } else {
  1233. let group_id = message.getBody(key: CoreMessage_TMessageKey.GROUP_ID)
  1234. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1235. do {
  1236. let result = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUP_NM", cvalues: [
  1237. "group_id" : group_id,
  1238. "f_name" : message.getBody(key: CoreMessage_TMessageKey.GROUP_NAME),
  1239. "scope_id" : message.getBody(key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1240. "image_id": message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  1241. "quote": message.getBody(key: CoreMessage_TMessageKey.QUOTE),
  1242. "last_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE),
  1243. "created_by" : message.getBody(key: CoreMessage_TMessageKey.CREATED_BY),
  1244. "created_date" : message.getBody(key: CoreMessage_TMessageKey.CREATED_DATE),
  1245. "ex_block" : message.getBody(key: CoreMessage_TMessageKey.BLOCK),
  1246. "folder_id" : "",
  1247. "chat_modifier" : message.getBody(key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1248. "group_type" : message.getBody(key: CoreMessage_TMessageKey.IS_ORGANIZATION),
  1249. "parent" : message.getBody(key: CoreMessage_TMessageKey.PARENT_ID),
  1250. "level" : message.getBody(key: CoreMessage_TMessageKey.LEVEL),
  1251. "is_open" : message.getBody(key: CoreMessage_TMessageKey.IS_OPEN),
  1252. "official" : message.getBody(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1253. "level_edu" : message.getBody(key: CoreMessage_TMessageKey.LEVEL_EDU),
  1254. "materi_edu" : message.getBody(key: CoreMessage_TMessageKey.MATERI_EDU),
  1255. "is_education" : message.getBody(key: CoreMessage_TMessageKey.IS_EDUCATION)
  1256. ], replace: true)
  1257. if result > 0 {
  1258. ack(message: message)
  1259. }
  1260. } catch {
  1261. rollback.pointee = true
  1262. print("Access database error: \(error.localizedDescription)")
  1263. }
  1264. })
  1265. }
  1266. }
  1267. private func receiveMessage(message: TMessage) -> Void {
  1268. // print("receive message \(message.toLogString())")
  1269. if Utils.getSecureFolderOffline() == "0" {
  1270. if API.nGetCLXConnState() == 0 {
  1271. do {
  1272. let id = Utils.getConnectionID()
  1273. try API.initConnection(sAPIK: Nexilis.sAPIKey, cbiI: Callback(), sTCPAddr: Nexilis.ADDRESS, nTCPPort: Nexilis.PORT, sUserID: id, sStartWH: "09:00")
  1274. } catch {}
  1275. }
  1276. if FileEncryption.shared.aesKey == nil {
  1277. IncomingThread.dispatch = DispatchGroup()
  1278. IncomingThread.dispatch?.enter()
  1279. Nexilis.getFeatureAccess()
  1280. IncomingThread.dispatch?.wait()
  1281. IncomingThread.dispatch = nil
  1282. }
  1283. }
  1284. guard let _: String = SecureUserDefaults.shared.value(forKey: "status") else {
  1285. //print("App not ready!!! skip receive message \(message_id)")
  1286. ack(message: message)
  1287. return
  1288. }
  1289. // var messageExist = false
  1290. // Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1291. // if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select message_id from MESSAGE where message_id = '\(message.getBody(key: CoreMessage_TMessageKey.MESSAGE_ID))'"), cursor.next() {
  1292. // messageExist = true
  1293. // cursor.close()
  1294. // }
  1295. // })
  1296. // DispatchQueue.main.async {
  1297. // if APIS.checkAppStateisBackground() {
  1298. // if !messageExist {
  1299. // let message_id = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_ID)
  1300. // DispatchQueue.global().async {
  1301. // _ = Nexilis.write(message: CoreMessage_TMessageBank.getAckMessage(messageId: message_id))
  1302. // }
  1303. // APIS.addNotificationNexilis(message)
  1304. // }
  1305. // }
  1306. // }
  1307. let media = message.getMedia()
  1308. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID)
  1309. if media.count != 0 {
  1310. do {
  1311. let data = Data(media)
  1312. try FileEncryption.shared.writeSecure(filename: thumb_id, data: data)
  1313. } catch {
  1314. }
  1315. }
  1316. // if (!thumb_id.isEmpty && media.count == 0) {
  1317. // Download().startHTTP(forKey: thumb_id) { (file, progress) in
  1318. // //print ("masuk download \(progress)")
  1319. // if(progress == 100 || progress == -100) {
  1320. // Nexilis.saveMessage(message: message, withStatus: false)
  1321. // //print("save message incoming")
  1322. // }
  1323. // }
  1324. // } else {
  1325. Nexilis.saveMessage(message: message, withStatus: false)
  1326. // }
  1327. DispatchQueue.main.async {
  1328. if APIS.checkAppStateisBackground() {
  1329. UIApplication.shared.applicationIconBadgeNumber = Int(APIS.getTotalCounter())
  1330. }
  1331. }
  1332. //print("save message incoming")
  1333. ack(message: message)
  1334. }
  1335. private func ackAPN(id: String) {
  1336. DispatchQueue.global().async {
  1337. // Nexilis.sendStateToServer(s: "send ack from apn")
  1338. DispatchQueue.global().async {
  1339. let parameter: [String : Any] = [
  1340. "pin": User.getMyPin() ?? "",
  1341. "message_id": id
  1342. ]
  1343. Utils.postDataWithCookiesAndUserAgent(from: URL(string: Utils.getDomainOpr() + "ack_message")!, parameter: parameter, isFormData: true) { data, response, error in
  1344. }
  1345. }
  1346. }
  1347. }
  1348. private func receiveMessageStatus(message: TMessage) -> Void {
  1349. guard let _: String = SecureUserDefaults.shared.value(forKey: "status") else {
  1350. //print("App not ready!!! skip receive message \(message_id)")
  1351. return
  1352. }
  1353. Nexilis.updateMessageStatus(message: message)
  1354. if let delegate = Nexilis.shared.messageDelegate {
  1355. delegate.onMessage(message: message)
  1356. }
  1357. ack(message: message)
  1358. }
  1359. private func uploadFile(message: TMessage) -> Void {
  1360. let fileName = message.getBody(key: "file_id")
  1361. guard !fileName.isEmpty else {
  1362. return
  1363. }
  1364. guard let upload = Nexilis.getUploadFile(forKey: fileName) else {
  1365. return
  1366. }
  1367. upload.uploadGroup.leave()
  1368. ack(message: message)
  1369. }
  1370. private func initBatchBuddy(message: TMessage) -> Void {
  1371. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1372. if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1373. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1374. do {
  1375. for json in jsonArray {
  1376. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "BUDDY", cvalues: [
  1377. "f_pin" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN),
  1378. "upline_pin" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.UPLINE_PIN),
  1379. "first_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.FIRST_NAME),
  1380. "last_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_NAME),
  1381. "image_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1382. "user_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.USER_ID),
  1383. "quote" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.QUOTE),
  1384. "connected" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CONNECTED),
  1385. "last_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_UPDATE),
  1386. "latitude" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LATITUDE),
  1387. "longitude" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LONGITUDE),
  1388. "altitude" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ALTITUDE),
  1389. "cell" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CELL),
  1390. "last_loc_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_LOC_UPDATE),
  1391. "type" : "0",
  1392. "empty_2" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PLACE_NAME),
  1393. "timezone" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TIMEZONE),
  1394. "privacy_flag" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PRIVACY_FLAG),
  1395. "msisdn" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MSISDN),
  1396. "email" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.EMAIL),
  1397. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE),
  1398. "offline_mode" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFLINE_MODE),
  1399. "network_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.NETWORK_TYPE),
  1400. "ex_block" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BLOCK),
  1401. "ex_follow" : "0",
  1402. "ex_follower" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TOTAL_FOLLOWERS),
  1403. "ex_offmp" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFMP),
  1404. "ex_status" : "1",
  1405. "shop_code" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.SHOP_CODE),
  1406. "shop_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.SHOP_NAME),
  1407. "extension" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.EXTENSION),
  1408. "auto_quote" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.AUTO_QUOTE),
  1409. "auto_quote_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.AUTO_QUOTE_TYPE),
  1410. "android_version" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ANDROID_VERSION),
  1411. "device_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IMEI),
  1412. "be_info" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BE_INFO),
  1413. "org_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ORG_ID),
  1414. "org_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ORG_NAME),
  1415. "org_thumb" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ORG_THUMB),
  1416. "gender" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GENDER),
  1417. "birthdate" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BIRTHDATE),
  1418. "type_ads" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TYPE_ADS),
  1419. "type_lp" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TYPE_LP),
  1420. "type_post" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TYPE_POST),
  1421. "address" : message.getBody(key: CoreMessage_TMessageKey.ADDRESS),
  1422. "bidang_industri" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BIDANG_INDUSTRI),
  1423. "visi" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.VISI),
  1424. "misi" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MISI),
  1425. "company_lat" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.COMPANY_LAT),
  1426. "company_lng" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.COMPANY_LNG),
  1427. "web" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.COMPANY_WEB),
  1428. "certificate_image" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE),
  1429. "card_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CARD_ID),
  1430. "user_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.USER_TYPE),
  1431. "real_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.REAL_NAME),
  1432. "official_account" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1433. "is_sub_account" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_SUB_ACCOUNT),
  1434. "last_sign" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_SIGN),
  1435. "android_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ANDROID_ID),
  1436. "is_change_profile" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_CHANGE_PROFILE),
  1437. "area" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.WORKING_AREA),
  1438. "is_second_layer" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_SECOND_LAYER),
  1439. ], replace: true)
  1440. _ = Database.shared.updateRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", cvalues: [
  1441. "first_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.FIRST_NAME),
  1442. "last_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_NAME),
  1443. "thumb_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1444. ], _where: "f_pin = '\(CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN))'")
  1445. _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE", cvalues: [
  1446. "f_display_name" : (CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.FIRST_NAME) + " " + CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_NAME)).trimmingCharacters(in: .whitespaces)
  1447. ], _where: "f_pin = '\(CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN))'")
  1448. }
  1449. if let delegate = Nexilis.shared.personInfoDelegate {
  1450. delegate.onUpdatePersonInfo(state: 99, message: "update_buddy")
  1451. }
  1452. ack(message: message)
  1453. } catch {
  1454. rollback.pointee = true
  1455. print("Access database error: \(error.localizedDescription)")
  1456. }
  1457. })
  1458. }
  1459. }
  1460. private func deleteBuddy(message: TMessage) -> Void {
  1461. var l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
  1462. l_pin = (l_pin == User.getMyPin()) ? message.mPIN : l_pin
  1463. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1464. do {
  1465. if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select * from BUDDY where f_pin = '\(l_pin)'"), cursor.next() {
  1466. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "BUDDY", _where: "f_pin = '\(l_pin)'")
  1467. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE", _where: "(f_pin='\(l_pin)' or l_pin='\(l_pin)') and (message_scope_id='\(MessageScope.WHISPER)' or message_scope_id='\(MessageScope.FORM)' or message_scope_id='\(MessageScope.CALL)' or message_scope_id='\(MessageScope.MISSED_CALL)')")
  1468. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", _where: "l_pin='\(l_pin)'")
  1469. _ = Database.shared.deleteRecord(fmdb: fmdb, table: "POST", _where: "author_f_pin='\(l_pin)'")
  1470. cursor.close()
  1471. //print("Buddy deleted: \(l_pin)")
  1472. if let delegate = Nexilis.shared.personInfoDelegate {
  1473. delegate.onUpdatePersonInfo(state: 99, message: "delete_buddy,\(l_pin)")
  1474. }
  1475. }
  1476. ack(message: message)
  1477. } catch {
  1478. rollback.pointee = true
  1479. print("Access database error: \(error.localizedDescription)")
  1480. }
  1481. })
  1482. }
  1483. private func pushMyself(message: TMessage) -> Void {
  1484. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1485. do {
  1486. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "BUDDY", cvalues: [
  1487. "f_pin" : message.getBody(key: CoreMessage_TMessageKey.F_PIN),
  1488. "upline_pin" : message.getBody(key: CoreMessage_TMessageKey.UPLINE_PIN),
  1489. "first_name" : message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME),
  1490. "last_name" : message.getBody(key: CoreMessage_TMessageKey.LAST_NAME),
  1491. "image_id" : message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  1492. "user_id" : message.getBody(key: CoreMessage_TMessageKey.USER_ID),
  1493. "quote" : message.getBody(key: CoreMessage_TMessageKey.QUOTE),
  1494. "connected" : message.getBody(key: CoreMessage_TMessageKey.CONNECTED),
  1495. "last_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE),
  1496. "latitude" : message.getBody(key: CoreMessage_TMessageKey.LATITUDE),
  1497. "longitude" : message.getBody(key: CoreMessage_TMessageKey.LONGITUDE),
  1498. "altitude" : message.getBody(key: CoreMessage_TMessageKey.ALTITUDE),
  1499. "cell" : message.getBody(key: CoreMessage_TMessageKey.CELL),
  1500. "last_loc_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_LOC_UPDATE),
  1501. "type" : "1",
  1502. "empty_2" : message.getBody(key: CoreMessage_TMessageKey.PLACE_NAME),
  1503. "timezone" : message.getBody(key: CoreMessage_TMessageKey.TIMEZONE),
  1504. "privacy_flag" : message.getBody(key: CoreMessage_TMessageKey.PRIVACY_FLAG),
  1505. "msisdn" : message.getBody(key: CoreMessage_TMessageKey.MSISDN),
  1506. "email" : message.getBody(key: CoreMessage_TMessageKey.EMAIL),
  1507. "created_date" : message.getBody(key: CoreMessage_TMessageKey.CREATED_DATE),
  1508. "offline_mode" : message.getBody(key: CoreMessage_TMessageKey.OFFLINE_MODE),
  1509. "network_type" : message.getBody(key: CoreMessage_TMessageKey.NETWORK_TYPE),
  1510. "ex_block" : "0",
  1511. "ex_follow" : "0",
  1512. "ex_follower" : message.getBody(key: CoreMessage_TMessageKey.TOTAL_FOLLOWERS),
  1513. "ex_offmp" : message.getBody(key: CoreMessage_TMessageKey.OFFMP),
  1514. "ex_status" : "0",
  1515. "device_id" : message.getBody(key: CoreMessage_TMessageKey.IMEI),
  1516. "shop_code" : message.getBody(key: CoreMessage_TMessageKey.SHOP_CODE),
  1517. "shop_name" : message.getBody(key: CoreMessage_TMessageKey.SHOP_NAME),
  1518. "extension" : message.getBody(key: CoreMessage_TMessageKey.EXTENSION),
  1519. "auto_quote" : message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE),
  1520. "auto_quote_type" : message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE_TYPE),
  1521. "be_info" : message.getBody(key: CoreMessage_TMessageKey.BE_INFO),
  1522. "org_id" : message.getBody(key: CoreMessage_TMessageKey.ORG_ID),
  1523. "org_name" : message.getBody(key: CoreMessage_TMessageKey.ORG_NAME),
  1524. "org_thumb" : message.getBody(key: CoreMessage_TMessageKey.ORG_THUMB),
  1525. "gender" : message.getBody(key: CoreMessage_TMessageKey.GENDER),
  1526. "birthdate" : message.getBody(key: CoreMessage_TMessageKey.BIRTHDATE),
  1527. "type_ads" : message.getBody(key: CoreMessage_TMessageKey.TYPE_ADS),
  1528. "type_lp" : message.getBody(key: CoreMessage_TMessageKey.TYPE_LP),
  1529. "type_post" : message.getBody(key: CoreMessage_TMessageKey.TYPE_POST),
  1530. "address" : message.getBody(key: CoreMessage_TMessageKey.ADDRESS),
  1531. "bidang_industri" : message.getBody(key: CoreMessage_TMessageKey.BIDANG_INDUSTRI),
  1532. "visi" : message.getBody(key: CoreMessage_TMessageKey.VISI),
  1533. "misi" : message.getBody(key: CoreMessage_TMessageKey.MISI),
  1534. "company_lat" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_LAT),
  1535. "company_lng" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_LNG),
  1536. "web" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_WEB),
  1537. "certificate_image" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE),
  1538. "card_id" : message.getBody(key: CoreMessage_TMessageKey.CARD_ID),
  1539. "user_type" : message.getBody(key: CoreMessage_TMessageKey.USER_TYPE),
  1540. "real_name" : message.getBody(key: CoreMessage_TMessageKey.REAL_NAME),
  1541. "official_account" : message.getBody(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1542. "is_sub_account" : message.getBody(key: CoreMessage_TMessageKey.IS_SUB_ACCOUNT),
  1543. "last_sign" : message.getBody(key: CoreMessage_TMessageKey.LAST_SIGN),
  1544. "android_id" : message.getBody(key: CoreMessage_TMessageKey.ANDROID_ID),
  1545. "is_change_profile" : message.getBody(key: CoreMessage_TMessageKey.IS_CHANGE_PROFILE),
  1546. "area" : message.getBody(key: CoreMessage_TMessageKey.WORKING_AREA),
  1547. "is_second_layer" : message.getBody(key: CoreMessage_TMessageKey.IS_SECOND_LAYER),
  1548. ], replace: true)
  1549. let device_id: String = SecureUserDefaults.shared.value(forKey: "device_id") ?? ""
  1550. if !device_id.isEmpty, let cursorUser = Database.shared.getRecords(fmdb: fmdb, query: "SELECT f_pin FROM BUDDY where device_id='\(device_id)'"), cursorUser.next() {
  1551. if User.getMyPin() != cursorUser.string(forColumnIndex: 0) {
  1552. SecureUserDefaults.shared.set(cursorUser.string(forColumnIndex: 0), forKey: "me")
  1553. APIS.sendPushToken(Utils.getTokenAPN(), isResend: true)
  1554. Nexilis.sendVersionToBE()
  1555. }
  1556. cursorUser.close()
  1557. }
  1558. ack(message: message)
  1559. let idMe = User.getMyPin()!
  1560. if message.getBody(key: CoreMessage_TMessageKey.USER_TYPE) != "24" && message.getBody(key: CoreMessage_TMessageKey.F_PIN) == idMe {
  1561. let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
  1562. if !onGoingCC.isEmpty {
  1563. let requester = onGoingCC.components(separatedBy: ",")[0]
  1564. let officer = onGoingCC.isEmpty ? "" : onGoingCC.components(separatedBy: ",")[1]
  1565. let complaintId = onGoingCC.isEmpty ? "" : onGoingCC.components(separatedBy: ",")[2]
  1566. let startTimeCC: String = SecureUserDefaults.shared.value(forKey: "startTimeCC") ?? ""
  1567. let date = "\(Date().currentTimeMillis())"
  1568. if officer == idMe {
  1569. _ = Nexilis.write(message: CoreMessage_TMessageBank.endCallCenter(complaint_id: complaintId, l_pin: requester))
  1570. } else {
  1571. if requester == idMe {
  1572. _ = Nexilis.write(message: CoreMessage_TMessageBank.endCallCenter(complaint_id: complaintId, l_pin: officer))
  1573. } else {
  1574. _ = Nexilis.write(message: CoreMessage_TMessageBank.leaveCCRoomInvite(ticket_id: complaintId))
  1575. }
  1576. }
  1577. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "CALL_CENTER_HISTORY", cvalues: [
  1578. "type" : "0",
  1579. "title" : "Contact Center".localized(),
  1580. "time" : startTimeCC,
  1581. "f_pin" : officer,
  1582. "data" : complaintId,
  1583. "time_end" : date,
  1584. "complaint_id" : complaintId,
  1585. "members" : "",
  1586. "requester": requester
  1587. ], replace: true)
  1588. SecureUserDefaults.shared.removeValue(forKey: "onGoingCC")
  1589. SecureUserDefaults.shared.removeValue(forKey: "membersCC")
  1590. SecureUserDefaults.shared.removeValue(forKey: "startTimeCC")
  1591. DispatchQueue.main.async {
  1592. let imageView = UIImageView(image: UIImage(systemName: "info.circle"))
  1593. imageView.tintColor = .white
  1594. let banner = FloatingNotificationBanner(title: "Call Center Session has ended".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .info, colors: nil, iconPosition: .center)
  1595. banner.show()
  1596. if UIApplication.shared.visibleViewController is UINavigationController {
  1597. let nc = UIApplication.shared.visibleViewController as! UINavigationController
  1598. if nc.visibleViewController is QmeraAudioViewController || nc.visibleViewController is QmeraVideoViewController {
  1599. API.terminateCall(sParty: nil)
  1600. }
  1601. if nc.visibleViewController is EditorPersonal{
  1602. let vc = nc.visibleViewController as! EditorPersonal
  1603. vc.timeoutCC.invalidate()
  1604. }
  1605. nc.visibleViewController?.dismiss(animated: true, completion: nil)
  1606. } else {
  1607. if UIApplication.shared.visibleViewController is QmeraAudioViewController || UIApplication.shared.visibleViewController is QmeraVideoViewController {
  1608. API.terminateCall(sParty: nil)
  1609. }
  1610. if UIApplication.shared.visibleViewController is EditorPersonal{
  1611. let vc = UIApplication.shared.visibleViewController as! EditorPersonal
  1612. vc.timeoutCC.invalidate()
  1613. }
  1614. UIApplication.shared.visibleViewController?.dismiss(animated: true, completion: nil)
  1615. }
  1616. }
  1617. }
  1618. }
  1619. } catch {
  1620. rollback.pointee = true
  1621. print("Access database error: \(error.localizedDescription)")
  1622. }
  1623. })
  1624. }
  1625. private func onInitGroupInfoBatch(message: TMessage) -> Void {
  1626. let dataGroup = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1627. if let jsonArray = try! JSONSerialization.jsonObject(with: dataGroup.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1628. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1629. do {
  1630. for json in jsonArray {
  1631. let groupType = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_ORGANIZATION)
  1632. let official = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT)
  1633. let imageId = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID)
  1634. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ", cvalues: [
  1635. "group_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID),
  1636. "f_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_NAME),
  1637. "scope_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1638. "image_id": imageId,
  1639. "quote": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.QUOTE),
  1640. "last_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_UPDATE),
  1641. "created_by" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_BY),
  1642. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE),
  1643. "ex_block" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BLOCK),
  1644. "folder_id" : "",
  1645. "chat_modifier" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1646. "group_type" : groupType,
  1647. "parent" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID),
  1648. "level" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL),
  1649. "is_open" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_OPEN),
  1650. "official" : official,
  1651. "level_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL_EDU),
  1652. "materi_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MATERI_EDU),
  1653. "is_education" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_EDUCATION)
  1654. ], replace: true)
  1655. if groupType == "1" && official == "1"{
  1656. do {
  1657. do {
  1658. let documentDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
  1659. let file = documentDir.appendingPathComponent(imageId)
  1660. if !FileManager().fileExists(atPath: file.path) || !FileEncryption.shared.isSecureExists(filename: imageId) {
  1661. Download().startHTTP(forKey: imageId) { (name, progress) in}
  1662. }
  1663. } catch {}
  1664. } catch {}
  1665. }
  1666. let member = CoreMessage_TMessageUtil.getString(json: json, key: "member")
  1667. if let jsonArrayMember = try! JSONSerialization.jsonObject(with: member.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1668. for jsonMember in jsonArrayMember {
  1669. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUPZ_MEMBER", cvalues: [
  1670. "group_id" :CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID),
  1671. "f_pin" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.F_PIN),
  1672. "position" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.POSITION),
  1673. "user_id" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.USER_ID),
  1674. "ac" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.AC),
  1675. "ac_desc" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.AC_DESC),
  1676. "first_name" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.FIRST_NAME),
  1677. "last_name" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.LAST_NAME),
  1678. "msisdn" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.MSISDN),
  1679. "thumb_id" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.THUMB_ID),
  1680. "created_date" : CoreMessage_TMessageUtil.getString(json: jsonMember, key: CoreMessage_TMessageKey.CREATED_DATE),
  1681. ], replace: true)
  1682. }
  1683. }
  1684. }
  1685. ack(message: message)
  1686. } catch {
  1687. rollback.pointee = true
  1688. print("Access database error: \(error.localizedDescription)")
  1689. }
  1690. })
  1691. }
  1692. }
  1693. private func onInitGroupInfoBatchNoMember(message: TMessage) -> Void {
  1694. let dataGroup = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1695. if let jsonArray = try! JSONSerialization.jsonObject(with: dataGroup.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1696. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1697. do {
  1698. for json in jsonArray {
  1699. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "GROUP_NM", cvalues: [
  1700. "group_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID),
  1701. "f_name" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_NAME),
  1702. "scope_id" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MESSAGE_SCOPE_ID),
  1703. "image_id": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMB_ID),
  1704. "quote": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.QUOTE),
  1705. "last_update" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LAST_UPDATE),
  1706. "created_by" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_BY),
  1707. "created_date" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CREATED_DATE),
  1708. "ex_block" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.BLOCK),
  1709. "folder_id" : "",
  1710. "chat_modifier" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CHAT_MODIFIER),
  1711. "group_type" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_ORGANIZATION),
  1712. "parent" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.PARENT_ID),
  1713. "level" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL),
  1714. "is_open" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_OPEN),
  1715. "official" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  1716. "level_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LEVEL_EDU),
  1717. "materi_edu" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.MATERI_EDU),
  1718. "is_education" : CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IS_EDUCATION)
  1719. ], replace: true)
  1720. }
  1721. ack(message: message)
  1722. } catch {
  1723. rollback.pointee = true
  1724. print("Access database error: \(error.localizedDescription)")
  1725. }
  1726. })
  1727. }
  1728. }
  1729. private func onInitForumInfoBatch(message: TMessage, with isDelegate: Bool = false) -> Void {
  1730. let dataForum = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1731. if let jsonArray = try! JSONSerialization.jsonObject(with: dataForum.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  1732. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1733. do {
  1734. for json in jsonArray {
  1735. let chat_id = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CHAT_ID)
  1736. let group_id = CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.F_PIN)
  1737. _ = try Database.shared.insertRecord(fmdb: fmdb, table: "DISCUSSION_FORUM", cvalues: [
  1738. "chat_id": chat_id,
  1739. "title":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TITLE),
  1740. "group_id": group_id,
  1741. "anonym":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ANONYMOUS),
  1742. "scope_id":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.SCOPE_ID),
  1743. "thumb":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.IMAGE),
  1744. "category":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CATEGORY_ID),
  1745. "activity":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.ACTVITY),
  1746. "milis":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.EMAIL),
  1747. "sharing_flag":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.SHARING_FLAG),
  1748. "clients":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.CLIENTS),
  1749. "owner":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.GROUP_ID),
  1750. "raci_r":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.RACI_R),
  1751. "raci_a":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.RACI_A),
  1752. "raci_c":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.RACI_C),
  1753. "raci_i":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.RACI_I),
  1754. "act_thumb":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMBNAIL_ACTIVITY),
  1755. "client_thumb":CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.THUMBNAIL_CLIENT)
  1756. ], replace: true)
  1757. if isDelegate {
  1758. if let delegate = Nexilis.shared.groupDelegate {
  1759. delegate.onTopic(code: message.getCode(), f_pin: message.getPIN(), topicId: chat_id)
  1760. }
  1761. }
  1762. }
  1763. ack(message: message)
  1764. } catch {
  1765. rollback.pointee = true
  1766. print("Access database error: \(error.localizedDescription)")
  1767. }
  1768. })
  1769. }
  1770. }
  1771. func loginFile(message: TMessage) -> Void {
  1772. let response = TMessage()
  1773. var isSuccess = false
  1774. let media = message.getMedia()
  1775. if media.count != 0 {
  1776. let data = MyArchive.unzip(bytes: media)
  1777. let lines = data.components(separatedBy: .newlines)
  1778. let line_count = lines.count
  1779. var line_processed = 0
  1780. for line in lines {
  1781. let message = TMessage()
  1782. if message.unpack(data: line) {
  1783. isSuccess = true
  1784. line_processed = line_processed + 1
  1785. process(message: message)
  1786. let progress = line_processed * 100 / line_count
  1787. if let delegate = Nexilis.shared.loginDelegate {
  1788. delegate.onProgress(code: message.getCode(), progress: progress)
  1789. }
  1790. }
  1791. else {
  1792. response.mBodies[CoreMessage_TMessageKey.ERRCOD] = "Failed unpack"
  1793. }
  1794. }
  1795. if isSuccess {
  1796. response.mBodies[CoreMessage_TMessageKey.ERRCOD] = "00"
  1797. if let delegate = Nexilis.shared.loginDelegate {
  1798. delegate.onProgress(code: message.getCode(), progress: 100)
  1799. }
  1800. SecureUserDefaults.shared.set("READY", forKey: "status")
  1801. }
  1802. }
  1803. else {
  1804. response.mBodies[CoreMessage_TMessageKey.ERRCOD] = "Media not found"
  1805. }
  1806. if let packetId = message.mBodies[CoreMessage_TMessageKey.PACKET_ID] {
  1807. _ = Nexilis.response(packetId: packetId, message: response)
  1808. if isSuccess {
  1809. _ = Nexilis.write(message: CoreMessage_TMessageBank.getVersionCheck())
  1810. Nexilis.initFollowing()
  1811. }
  1812. }
  1813. ack(message: message)
  1814. }
  1815. private func getLiveVideoList(message: TMessage) -> Void {
  1816. let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  1817. //print(data)
  1818. if let delegate = Nexilis.shared.streamingDelagate {
  1819. delegate.onStartLS(state: 99, message: data)
  1820. }
  1821. ack(message: message)
  1822. }
  1823. private func getLSTitle(message: TMessage) -> Void {
  1824. let title = message.getBody(key: CoreMessage_TMessageKey.TITLE)
  1825. //print(title)
  1826. if let delegate = Nexilis.shared.streamingDelagate {
  1827. delegate.onJoinLS(state: 999, message: title)
  1828. }
  1829. sendUpdateLiveStream(message: message)
  1830. ack(message: message)
  1831. }
  1832. private func changePersonInfoPassword(message: TMessage) -> Void {
  1833. ack(message: message)
  1834. }
  1835. private func changePersonInfoName(message: TMessage) -> Void {
  1836. let fPin = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
  1837. let fname = message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME)
  1838. let lname = message.getBody(key: CoreMessage_TMessageKey.LAST_NAME)
  1839. let offline_mode = message.getBody(key: CoreMessage_TMessageKey.OFFLINE_MODE)
  1840. let auto_quote = message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE)
  1841. let cell = message.getBody(key: CoreMessage_TMessageKey.CELL)
  1842. let connected = message.getBody(key: CoreMessage_TMessageKey.CONNECTED)
  1843. let latitude = message.getBody(key: CoreMessage_TMessageKey.LATITUDE)
  1844. let last_loc_update = message.getBody(key: CoreMessage_TMessageKey.LAST_LOC_UPDATE)
  1845. let user_type = message.getBody(key: CoreMessage_TMessageKey.USER_TYPE)
  1846. if let delegate = Nexilis.shared.personInfoDelegate {
  1847. //print("INcoming \(connected)")
  1848. delegate.onUpdatePersonInfo(state: 00, message: connected)
  1849. }
  1850. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  1851. do {
  1852. _ = Database.shared.updateRecord(fmdb: fmdb, table: "BUDDY", cvalues: [
  1853. "first_name" : fname,
  1854. "last_name" : lname,
  1855. "offline_mode" : offline_mode,
  1856. "auto_quote" : auto_quote,
  1857. "cell" : cell,
  1858. "connected" : connected,
  1859. "latitude" : latitude,
  1860. "last_loc_update" : last_loc_update,
  1861. "user_type" : user_type
  1862. ], _where: "f_pin = '\(fPin)'")
  1863. } catch {
  1864. rollback.pointee = true
  1865. print("Access database error: \(error.localizedDescription)")
  1866. }
  1867. })
  1868. ack(message: message)
  1869. }
  1870. private func ack(message: TMessage) -> Void {
  1871. _ = Nexilis.write(message: CoreMessage_TMessageBank.getAcknowledgment(p_id: message.mStatus))
  1872. }
  1873. private func joinLivevideo(message: TMessage) -> Void {
  1874. let broadcaster = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1875. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1876. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1877. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1878. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1879. let data = broadcaster+","+f_pin+","+thumb_id+","+name+","+quantity
  1880. //print(data)
  1881. if let delegate = Nexilis.shared.streamingDelagate {
  1882. delegate.onJoinLS(state: 98, message: data)
  1883. }
  1884. ack(message: message)
  1885. }
  1886. private func leftLiveVideo(message: TMessage) -> Void {
  1887. let broadcaster = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1888. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1889. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1890. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1891. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1892. let data = broadcaster+","+f_pin+","+thumb_id+","+name+","+quantity
  1893. //print(data)
  1894. if let delegate = Nexilis.shared.streamingDelagate {
  1895. delegate.onJoinLS(state: 97, message: data)
  1896. }
  1897. ack(message: message)
  1898. }
  1899. private func getLSEmotion(message: TMessage) -> Void {
  1900. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1901. let likes = message.getBody(key: CoreMessage_TMessageKey.LIKES,default_value: "")
  1902. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1903. let data = l_pin+","+likes+","+quantity
  1904. //print(data)
  1905. if let delegate = Nexilis.shared.streamingDelagate {
  1906. delegate.onJoinLS(state: 96, message: data)
  1907. }
  1908. ack(message: message)
  1909. }
  1910. private func getLSChat(message: TMessage) -> Void {
  1911. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1912. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1913. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1914. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1915. let messages = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_TEXT,default_value: "")
  1916. let data = l_pin+","+f_pin+","+thumb_id+","+name+","+messages
  1917. //print(data)
  1918. if let delegate = Nexilis.shared.streamingDelagate {
  1919. delegate.onJoinLS(state: 95, message: data)
  1920. }
  1921. ack(message: message)
  1922. }
  1923. private func getLSData(message: TMessage) -> Void {
  1924. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1925. let likes = message.getBody(key: CoreMessage_TMessageKey.LIKES,default_value: "")
  1926. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1927. let data = l_pin+","+likes+","+quantity
  1928. //print(data)
  1929. if let delegate = Nexilis.shared.streamingDelagate {
  1930. delegate.onJoinLS(state: 94, message: data)
  1931. }
  1932. ack(message: message)
  1933. }
  1934. private func joinSeminar(message: TMessage) -> Void {
  1935. let broadcaster = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1936. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1937. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1938. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1939. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1940. let data = broadcaster+","+f_pin+","+thumb_id+","+name+","+quantity
  1941. //print(data)
  1942. if let delegate = Nexilis.shared.seminarDelegate {
  1943. delegate.onJoinSeminar(state: 98, message: data)
  1944. }
  1945. ack(message: message)
  1946. }
  1947. private func leftSeminar(message: TMessage) -> Void {
  1948. let broadcaster = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1949. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1950. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1951. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1952. let quantity = message.getBody(key: CoreMessage_TMessageKey.QUANTITY,default_value: "")
  1953. let data = broadcaster+","+f_pin+","+thumb_id+","+name+","+quantity
  1954. //print(data)
  1955. if let delegate = Nexilis.shared.seminarDelegate {
  1956. delegate.onJoinSeminar(state: 97, message: data)
  1957. }
  1958. ack(message: message)
  1959. }
  1960. private func getSeminarRaiseHand(message: TMessage) -> Void {
  1961. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1962. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1963. let status = message.getBody(key: CoreMessage_TMessageKey.STATUS,default_value: "")
  1964. let data = f_pin+","+l_pin+","+status
  1965. //print(data)
  1966. if let delegate = Nexilis.shared.seminarDelegate {
  1967. delegate.onJoinSeminar(state: 96, message: data)
  1968. }
  1969. ack(message: message)
  1970. }
  1971. private func getSeminarChat(message: TMessage) -> Void {
  1972. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1973. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1974. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  1975. let name = message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: "")
  1976. let messages = message.getBody(key: CoreMessage_TMessageKey.MESSAGE_TEXT,default_value: "")
  1977. let data = l_pin+","+f_pin+","+thumb_id+","+name+","+messages
  1978. //print(data)
  1979. if let delegate = Nexilis.shared.seminarDelegate {
  1980. delegate.onJoinSeminar(state: 95, message: data)
  1981. }
  1982. ack(message: message)
  1983. }
  1984. private func incomingScreenSharing(message: TMessage, state: Int) -> Void {
  1985. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: "")
  1986. let l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN,default_value: "")
  1987. let data = f_pin
  1988. //print("data ss")
  1989. //print(data)
  1990. //print(l_pin)
  1991. //print(state)
  1992. if let delegate = Nexilis.shared.screenSharingDelegate {
  1993. delegate.onJoinScreenSharing(state: state, message: data)
  1994. }
  1995. ack(message: message)
  1996. }
  1997. private func sendMSISDN(message: TMessage) -> Void {
  1998. let errcod = message.getBody(key: CoreMessage_TMessageKey.ERRCOD,default_value: "")
  1999. let data = errcod
  2000. //print(data)
  2001. if (errcod == "00"){
  2002. if let delegate = Nexilis.shared.loginDelegate {
  2003. delegate.onProcess(message: "Success", status: "1")
  2004. }
  2005. } else {
  2006. if let delegate = Nexilis.shared.loginDelegate {
  2007. delegate.onProcess(message: "Failed", status: "0")
  2008. }
  2009. }
  2010. ack(message: message)
  2011. }
  2012. private func verifyOTP(message: TMessage) -> Void {
  2013. let errcod = message.getBody(key: CoreMessage_TMessageKey.ERRCOD,default_value: "00")
  2014. if errcod == "00" {
  2015. let reg_status = message.getBody(key: CoreMessage_TMessageKey.REG_STATUS, default_value: "")
  2016. if reg_status == "1" {
  2017. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
  2018. let f_name = message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME, default_value: "")
  2019. let l_name = message.getBody(key: CoreMessage_TMessageKey.LAST_NAME, default_value: "")
  2020. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID, default_value: "")
  2021. let data = f_pin+"|"+f_name+"|"+l_name+"|"+thumb_id
  2022. //print(data)
  2023. if let delegate = Nexilis.shared.loginDelegate {
  2024. delegate.onProcess(message: data, status: reg_status)
  2025. }
  2026. } else {
  2027. if let delegate = Nexilis.shared.loginDelegate {
  2028. delegate.onProcess(message: "Signup", status: reg_status)
  2029. }
  2030. }
  2031. } else {
  2032. if let delegate = Nexilis.shared.loginDelegate {
  2033. delegate.onProcess(message: "Wrong OTP", status: errcod)
  2034. }
  2035. }
  2036. ack(message: message)
  2037. }
  2038. private func signInOTP(message: TMessage) -> Void {
  2039. if (message.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "00") == "00") {
  2040. let f_pin = message.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "00")
  2041. SecureUserDefaults.shared.set(f_pin, forKey: "me")
  2042. APIS.sendPushToken(Utils.getTokenAPN(), isResend: true)
  2043. Nexilis.sendVersionToBE()
  2044. if let delegate = Nexilis.shared.loginDelegate {
  2045. delegate.onProcess(message: f_pin, status: message.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "00"))
  2046. }
  2047. } else {
  2048. if let delegate = Nexilis.shared.loginDelegate {
  2049. delegate.onProcess(message: "Failed", status: message.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "00"))
  2050. }
  2051. }
  2052. ack(message: message)
  2053. }
  2054. private func updateTimeline(message:TMessage) -> Void {
  2055. Database.shared.database?.inTransaction({ (fmdb, rollback) in
  2056. do {
  2057. let _ = try Database.shared.insertRecord(fmdb: fmdb, table: "POST", cvalues: [
  2058. "post_id" : message.getBody(key: CoreMessage_TMessageKey.POST_ID,default_value: ""),
  2059. "author_f_pin" : message.getBody(key: CoreMessage_TMessageKey.F_PIN,default_value: ""),
  2060. "author_name" : message.getBody(key: CoreMessage_TMessageKey.NAME,default_value: ""),
  2061. "author_thumbnail" : message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: ""),
  2062. "type" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.TYPE,default_value: 2),
  2063. "created_date" : message.getBodyAsLong(key: CoreMessage_TMessageKey.CREATED_DATE,default_value: CLong(Utils.getCurrentTimeMillis())),
  2064. "title" : message.getBody(key: CoreMessage_TMessageKey.TITLE,default_value: ""),
  2065. "description" : message.getBody(key: CoreMessage_TMessageKey.DESCRIPTION,default_value: ""),
  2066. "privacy" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.PRIVACY_FLAG,default_value: 3),
  2067. "audition_date" : message.getBodyAsLong(key: CoreMessage_TMessageKey.START_DATE,default_value: CLong(0)),
  2068. "total_comment" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.COMMENTS,default_value: 0),
  2069. "total_like" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.LIKES,default_value: 0),
  2070. "total_dislike" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.DISLIKES,default_value: 0),
  2071. "last_update" : message.getBodyAsLong(key: CoreMessage_TMessageKey.LAST_UPDATE,default_value: CLong(Utils.getCurrentTimeMillis())),
  2072. "file_type" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.MEDIA_TYPE,default_value: 3),
  2073. "thumb_id" : message.getBody(key: CoreMessage_TMessageKey.IMAGE_ID),
  2074. "file_id" : message.getBody(key: CoreMessage_TMessageKey.FILE_ID),
  2075. "video_duration" : message.getBodyAsLong(key: CoreMessage_TMessageKey.DURATION,default_value: CLong(0)),
  2076. "category_id" : message.getBody(key: CoreMessage_TMessageKey.USER_ID),
  2077. "like_flag" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.FLAG_REACTION,default_value: 0),
  2078. "report_flag" : message.getBody(key: CoreMessage_TMessageKey.FLAG_REPORT,default_value: "0"),
  2079. "last_edit" : message.getBodyAsLong(key: CoreMessage_TMessageKey.LAST_EDIT,default_value: CLong(0)),
  2080. "post_id_participate" : message.getBody(key: CoreMessage_TMessageKey.PARTICIPATE_ID,default_value: ""),
  2081. "participate_date" : message.getBodyAsLong(key: CoreMessage_TMessageKey.PARTICIPATE_DATE,default_value: CLong(0)),
  2082. "certificates" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE,default_value: ""),
  2083. "participate_size" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.PARTICIPATE_SIZE, default_value: 0),
  2084. "total_view" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.N_VIEWS,default_value: 0),
  2085. "view_flag" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.VIEW_MEDIA_FLAG,default_value: 0),
  2086. "total_followers" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.FOLLOWER_SIZE,default_value: 0),
  2087. "score" : message.getBodyAsLong(key: CoreMessage_TMessageKey.SCORE, default_value: CLong(0)),
  2088. "share_sosmed_type" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.SHARING_FLAG, default_value: 0),
  2089. "link" : message.getBody(key: CoreMessage_TMessageKey.LINK, default_value: ""),
  2090. "category_flag" : message.getBody(key: CoreMessage_TMessageKey.CATEGORY_FLAG,default_value: ""),
  2091. "official_account" : message.getBodyAsInteger(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT,default_value: 0)
  2092. // "roc_date" : message.getBody(key: CoreMessage_TMessageKey.LAST_NAME),
  2093. // "roc_size" : message.getBody(key: CoreMessage_TMessageKey.MSISDN),
  2094. // "level_edu" : message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  2095. // "materi_edu" : message.getBody(key: CoreMessage_TMessageKey.USER_ID),
  2096. // "finaltest_edu" : message.getBody(key: CoreMessage_TMessageKey.AC),
  2097. // "file_summarization" : message.getBody(key: CoreMessage_TMessageKey.AC_DESC),
  2098. // "target" : message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME),
  2099. // "pricing" : message.getBody(key: CoreMessage_TMessageKey.LAST_NAME),
  2100. // "pricing_money" : message.getBody(key: CoreMessage_TMessageKey.MSISDN)
  2101. ], replace: true)
  2102. ack(message: message)
  2103. } catch {
  2104. rollback.pointee = true
  2105. print("Access database error: \(error.localizedDescription)")
  2106. }
  2107. })
  2108. }
  2109. private func changePersonInfo(message: TMessage){
  2110. let error_code = message.getBody(key: CoreMessage_TMessageKey.ERRCOD)
  2111. let first_name = message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME,default_value: "")
  2112. let last_name = message.getBody(key: CoreMessage_TMessageKey.LAST_NAME,default_value: "")
  2113. let thumb_id = message.getBody(key: CoreMessage_TMessageKey.THUMB_ID,default_value: "")
  2114. let quote = message.getBody(key: CoreMessage_TMessageKey.QUOTE,default_value: "")
  2115. let email = message.getBody(key: CoreMessage_TMessageKey.EMAIL)
  2116. let last_update = message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE)
  2117. let connected = message.getBody(key: CoreMessage_TMessageKey.CONNECTED)
  2118. let msisdn = message.getBody(key: CoreMessage_TMessageKey.MSISDN)
  2119. let ext_text_1 = message.getBody(key: CoreMessage_TMessageKey.EXT_TEXT_1)
  2120. let auto_quote = message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE,default_value: "")
  2121. let auto_quote_type = message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE_TYPE,default_value: "")
  2122. let _extension = message.getBody(key: CoreMessage_TMessageKey.EXTENSION)
  2123. let be_info = message.getBody(key: CoreMessage_TMessageKey.BE_INFO)
  2124. let imei = message.getBody(key: CoreMessage_TMessageKey.IMEI)
  2125. let offline_mode = message.getBody(key: CoreMessage_TMessageKey.OFFLINE_MODE)
  2126. let card_id = message.getBody(key: CoreMessage_TMessageKey.CARD_ID,default_value: "")
  2127. let card_type = message.getBody(key: CoreMessage_TMessageKey.CARD_TYPE,default_value: "0")
  2128. let gender = message.getBody(key: CoreMessage_TMessageKey.GENDER,default_value: "0")
  2129. let birthdate = message.getBody(key: CoreMessage_TMessageKey.BIRTHDATE,default_value: "0")
  2130. let type_ads = message.getBody(key: CoreMessage_TMessageKey.TYPE_ADS,default_value: "")
  2131. let type_lp = message.getBody(key: CoreMessage_TMessageKey.TYPE_LP,default_value: "")
  2132. let type_post = message.getBody(key: CoreMessage_TMessageKey.TYPE_POST,default_value: "")
  2133. let address = message.getBody(key: CoreMessage_TMessageKey.ADDRESS,default_value: "")
  2134. let bidang_industri = message.getBody(key: CoreMessage_TMessageKey.BIDANG_INDUSTRI,default_value: "")
  2135. let visi = message.getBody(key: CoreMessage_TMessageKey.VISI, default_value: "")
  2136. let misi = message.getBody(key: CoreMessage_TMessageKey.MISI, default_value: "")
  2137. let company_lat = message.getBody(key: CoreMessage_TMessageKey.COMPANY_LAT, default_value: "")
  2138. let company_lng = message.getBody(key: CoreMessage_TMessageKey.COMPANY_LNG, default_value: "")
  2139. let web = message.getBody(key: CoreMessage_TMessageKey.COMPANY_WEB, default_value: "")
  2140. let certificate_image = message.getBody(key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE, default_value: "")
  2141. let official_account = message.getBody(key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE, default_value: "")
  2142. let user_type = message.getBody(key: CoreMessage_TMessageKey.USER_TYPE,default_value: "")
  2143. let real_name = message.getBody(key: CoreMessage_TMessageKey.REAL_NAME, default_value: "")
  2144. let is_sub_account = message.getBody(key: CoreMessage_TMessageKey.IS_SUB_ACCOUNT, default_value: "")
  2145. let last_sign = message.getBody(key: CoreMessage_TMessageKey.LAST_SIGN)
  2146. let android_id = message.getBody(key: CoreMessage_TMessageKey.ANDROID_ID)
  2147. let is_pull = message.getBody(key: CoreMessage_TMessageKey.IS_PULL, default_value: "0")
  2148. if(is_pull != "0"){
  2149. }
  2150. if(error_code == "00"){
  2151. var msisdnChanged = false
  2152. var emailChanged = false
  2153. var cvalues = [String:Any]()
  2154. if(!first_name.isEmpty){ cvalues["first_name"] = first_name}
  2155. if(!last_name.isEmpty){ cvalues["last_name"] = last_name}
  2156. if(!thumb_id.isEmpty){ cvalues["image_id"] = thumb_id}
  2157. if(!quote.isEmpty){cvalues["quote"] = quote}
  2158. if(!last_update.isEmpty){cvalues["last_update"] = last_update}
  2159. if(!auto_quote.isEmpty){cvalues["auto_quote"] = auto_quote}
  2160. if(!auto_quote_type.isEmpty){cvalues["auto_quote_type"] = auto_quote_type}
  2161. if(!email.isEmpty){cvalues["email"] = email; emailChanged = true}
  2162. if(!last_update.isEmpty){cvalues["last_update"] = last_update}
  2163. if(!msisdn.isEmpty){cvalues["msisdn"] = msisdn; msisdnChanged = true}
  2164. if(!_extension.isEmpty){cvalues["extension"] = _extension}
  2165. if(!be_info.isEmpty){cvalues["be_info"] = be_info}
  2166. if(!card_id.isEmpty){cvalues["card_id"] = card_id}
  2167. if(gender != "0"){cvalues["gender"] = gender}
  2168. if(birthdate != "0"){cvalues["birthdate"] = birthdate}
  2169. if(!offline_mode.isEmpty){cvalues["offline_mode"] = offline_mode}
  2170. if(!official_account.isEmpty){cvalues["official_account"] = official_account}
  2171. if(!connected.isEmpty){cvalues["connected"] = connected}
  2172. // "first_name" : message.getBody(key: CoreMessage_TMessageKey.FIRST_NAME),
  2173. // "last_name" : message.getBody(key: CoreMessage_TMessageKey.LAST_NAME),
  2174. // "image_id" : message.getBody(key: CoreMessage_TMessageKey.THUMB_ID),
  2175. // "quote" : message.getBody(key: CoreMessage_TMessageKey.QUOTE),
  2176. // "last_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_UPDATE),
  2177. // "latitude" : message.getBody(key: CoreMessage_TMessageKey.LATITUDE),
  2178. // "longitude" : message.getBody(key: CoreMessage_TMessageKey.LONGITUDE),
  2179. // "altitude" : message.getBody(key: CoreMessage_TMessageKey.ALTITUDE),
  2180. // "cell" : message.getBody(key: CoreMessage_TMessageKey.CELL),
  2181. // "last_loc_update" : message.getBody(key: CoreMessage_TMessageKey.LAST_LOC_UPDATE),
  2182. // "type" : "1",
  2183. // "empty_2" : message.getBody(key: CoreMessage_TMessageKey.PLACE_NAME),
  2184. // "timezone" : message.getBody(key: CoreMessage_TMessageKey.TIMEZONE),
  2185. // "privacy_flag" : message.getBody(key: CoreMessage_TMessageKey.PRIVACY_FLAG),
  2186. // "msisdn" : message.getBody(key: CoreMessage_TMessageKey.MSISDN),
  2187. // "email" : message.getBody(key: CoreMessage_TMessageKey.EMAIL),
  2188. // "created_date" : message.getBody(key: CoreMessage_TMessageKey.CREATED_DATE),
  2189. // "offline_mode" : message.getBody(key: CoreMessage_TMessageKey.OFFLINE_MODE),
  2190. // "network_type" : message.getBody(key: CoreMessage_TMessageKey.NETWORK_TYPE),
  2191. // "ex_block" : "0",
  2192. // "ex_follow" : "0",
  2193. // "ex_follower" : message.getBody(key: CoreMessage_TMessageKey.TOTAL_FOLLOWERS),
  2194. // "ex_offmp" : message.getBody(key: CoreMessage_TMessageKey.OFFMP),
  2195. // "ex_status" : "0",
  2196. // "shop_code" : message.getBody(key: CoreMessage_TMessageKey.SHOP_CODE),
  2197. // "shop_name" : message.getBody(key: CoreMessage_TMessageKey.SHOP_NAME),
  2198. // "extension" : message.getBody(key: CoreMessage_TMessageKey.EXTENSION),
  2199. // "auto_quote" : message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE),
  2200. // "auto_quote_type" : message.getBody(key: CoreMessage_TMessageKey.AUTO_QUOTE_TYPE),
  2201. // "be_info" : message.getBody(key: CoreMessage_TMessageKey.BE_INFO),
  2202. // "org_id" : message.getBody(key: CoreMessage_TMessageKey.ORG_ID),
  2203. // "org_name" : message.getBody(key: CoreMessage_TMessageKey.ORG_NAME),
  2204. // "org_thumb" : message.getBody(key: CoreMessage_TMessageKey.ORG_THUMB),
  2205. // "gender" : message.getBody(key: CoreMessage_TMessageKey.GENDER),
  2206. // "birthdate" : message.getBody(key: CoreMessage_TMessageKey.BIRTHDATE),
  2207. // "type_ads" : message.getBody(key: CoreMessage_TMessageKey.TYPE_ADS),
  2208. // "type_lp" : message.getBody(key: CoreMessage_TMessageKey.TYPE_LP),
  2209. // "type_post" : message.getBody(key: CoreMessage_TMessageKey.TYPE_POST),
  2210. // "address" : message.getBody(key: CoreMessage_TMessageKey.ADDRESS),
  2211. // "bidang_industri" : message.getBody(key: CoreMessage_TMessageKey.BIDANG_INDUSTRI),
  2212. // "visi" : message.getBody(key: CoreMessage_TMessageKey.VISI),
  2213. // "misi" : message.getBody(key: CoreMessage_TMessageKey.MISI),
  2214. // "company_lat" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_LAT),
  2215. // "company_lng" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_LNG),
  2216. // "web" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_WEB),
  2217. // "certificate_image" : message.getBody(key: CoreMessage_TMessageKey.COMPANY_CERTIFICATE),
  2218. // "card_id" : message.getBody(key: CoreMessage_TMessageKey.CARD_ID),
  2219. // "user_type" : message.getBody(key: CoreMessage_TMessageKey.USER_TYPE),
  2220. // "real_name" : message.getBody(key: CoreMessage_TMessageKey.REAL_NAME),
  2221. // "official_account" : message.getBody(key: CoreMessage_TMessageKey.OFFICIAL_ACCOUNT),
  2222. Database.shared.database?.inTransaction({ (fmdb,rollback) in
  2223. do {
  2224. if let me = User.getMyPin(), me == message.mPIN, !cvalues.isEmpty {
  2225. let update = Database.shared.updateRecord(fmdb: fmdb, table: "BUDDY", cvalues: cvalues, _where: "f_pin = '\(message.mPIN)'")
  2226. if(update > 0){
  2227. if let delegate = Nexilis.shared.personInfoDelegate {
  2228. if (!thumb_id.isEmpty){
  2229. delegate.onUpdatePersonInfo(state: 6, message: thumb_id)
  2230. }
  2231. }
  2232. }
  2233. } else if !cvalues.isEmpty {
  2234. let update = Database.shared.updateRecord(fmdb: fmdb, table: "BUDDY", cvalues: cvalues, _where: "f_pin = '\(message.mPIN)'")
  2235. if(update > 0){
  2236. if let delegate = Nexilis.shared.personInfoDelegate {
  2237. if (!thumb_id.isEmpty){
  2238. delegate.onUpdatePersonInfo(state: 5, message: thumb_id)
  2239. }
  2240. }
  2241. }
  2242. }
  2243. } catch {
  2244. rollback.pointee = true
  2245. print("Access database error: \(error.localizedDescription)")
  2246. }
  2247. })
  2248. ack(message: message)
  2249. }
  2250. if let delegate = Nexilis.shared.personInfoDelegate {
  2251. if(!connected.isEmpty){
  2252. delegate.onUpdatePersonInfo(state: 55, message:connected)
  2253. }else{
  2254. delegate.onUpdatePersonInfo(state: 0, message:error_code)
  2255. }
  2256. }
  2257. }
  2258. private static func onPushForm(message: TMessage) {
  2259. // var form = Form()
  2260. // form.formId = message.getBody(key: CoreMessage_TMessageKey.FORM_ID)
  2261. // form.title = message.getBody(key: CoreMessage_TMessageKey.TITLE)
  2262. // form.createdDate = message.getBodyAsLong(key: CoreMessage_TMessageKey.CREATED_DATE, default_value: 0)
  2263. // form.createdBy = message.getBody(key: CoreMessage_TMessageKey.CREATED_BY)
  2264. // form.sqNo = message.getBodyAsInteger(key: CoreMessage_TMessageKey.SEQUENCE, default_value: 0)
  2265. // Database.shared.database?.inTransaction({ (fmdb, rollback) in
  2266. // _ = Database.shared.deleteRecord(fmdb: fmdb, table: "FORM", _where: "form_id = '\(form.formId)'")
  2267. // _ = Database.shared.deleteRecord(fmdb: fmdb, table: "FORM_ITEM", _where: "form_id = '\(form.formId)'")
  2268. // })
  2269. // if(message.getBody(key: CoreMessage_TMessageKey.STATUS) == "0"){
  2270. // return
  2271. // }
  2272. // Database.shared.database?.inTransaction({ (fmdb, rollback) in
  2273. // _ = try? Database.shared.insertRecord(fmdb: fmdb, table: "FORM", cvalues: [
  2274. // "form_id" : form.formId,
  2275. // "name": form.title,
  2276. // "created_date": form.createdDate,
  2277. // "created_by": form.createdBy,
  2278. // "sq_no": form.sqNo
  2279. // ],
  2280. // replace: true)
  2281. // })
  2282. // let data = message.getBody(key: CoreMessage_TMessageKey.DATA)
  2283. // if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
  2284. // Database.shared.database?.inTransaction({ (fmdb, rollback) in
  2285. // for json in jsonArray{
  2286. // _ = try? Database.shared.insertRecord(fmdb: fmdb, table: "FORM_ITEM",
  2287. // cvalues: [
  2288. // "form_id" : form.formId,
  2289. // "label": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.LABEL),
  2290. // "value": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.VALUE),
  2291. // "key": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.KEY),
  2292. // "type": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.TYPE),
  2293. // "sq_no": CoreMessage_TMessageUtil.getString(json: json, key: CoreMessage_TMessageKey.SEQUENCE)
  2294. // ],
  2295. // replace: false)
  2296. // }
  2297. // })
  2298. // }
  2299. }
  2300. // private static void onPushForm(TMessage p_tmessage) throws Exception {
  2301. // Form_FormHolder form = new Form_FormHolder();
  2302. // form.form_id = p_tmessage.getBody(CoreMessage_TMessageKey.FORM_ID);
  2303. // form.title = p_tmessage.getBody(CoreMessage_TMessageKey.TITLE);
  2304. // form.created_date = p_tmessage.getBodyAsLong(CoreMessage_TMessageKey.CREATED_DATE, 0);
  2305. // form.created_by = p_tmessage.getBody(CoreMessage_TMessageKey.CREATED_BY);
  2306. // form.sq_no = p_tmessage.getBodyAsInteger(CoreMessage_TMessageKey.SEQUENCE, 0);
  2307. // Form_FormDB.deleteRecord(Form_FormDB.FIELD_FORM_ID + "='" + form.form_id + "'");
  2308. // Form_FormItemDB.deleteRecord(Form_FormItemDB.FIELD_FORM_ID + "='" + form.form_id + "'");
  2309. // if (p_tmessage.getBody(CoreMessage_TMessageKey.STATUS, "").equals("0")) {//Delete
  2310. // return;
  2311. // }
  2312. // Form_FormDB.insertRecord(form.getContentValues());
  2313. // JSONArray array = new JSONArray(p_tmessage.getBody(CoreMessage_TMessageKey.DATA));
  2314. // for (int i = 0; i < array.length(); i++) {
  2315. // JSONObject jo = array.getJSONObject(i);
  2316. // Form_FormItemHolder item = new Form_FormItemHolder();
  2317. // item.form_id = form.form_id;
  2318. // item.label = getString(jo, CoreMessage_TMessageKey.LABEL);
  2319. // item.value = getString(jo, CoreMessage_TMessageKey.VALUE);
  2320. // item.key = getString(jo, CoreMessage_TMessageKey.KEY);
  2321. // item.sq_no = getLong(jo);
  2322. // item.type = getString(jo, CoreMessage_TMessageKey.TYPE);
  2323. // Form_FormItemDB.insertRecord(item.getContentValues());
  2324. // }
  2325. // App.postUI(Form_B.FORM_PUSH, form);
  2326. // }
  2327. }