Bladeren bron

Merge pull request #196 from deltachat/no-panic

cleanup wrapper
björn petersen 5 jaren geleden
bovenliggende
commit
8697d518dc
1 gewijzigde bestanden met toevoegingen van 40 en 39 verwijderingen
  1. 40 39
      deltachat-ios/DC/Wrapper.swift

+ 40 - 39
deltachat-ios/DC/Wrapper.swift

@@ -3,7 +3,7 @@ import MessageKit
 import UIKit
 
 class DcContext {
-    let contextPointer: OpaquePointer
+    let contextPointer: OpaquePointer?
 
     init() {
         contextPointer = dc_context_new(callback_ios, nil, "iOS")
@@ -14,7 +14,7 @@ class DcContext {
     }
 
     func getChatlist(flags: Int32, queryString: String?, queryId: Int) -> DcChatlist {
-        let chatlistPointer = dc_get_chatlist(mailboxPointer, flags, queryString, UInt32(queryId))
+        let chatlistPointer = dc_get_chatlist(contextPointer, flags, queryString, UInt32(queryId))
         let chatlist = DcChatlist(chatListPointer: chatlistPointer)
         return chatlist
     }
@@ -306,15 +306,19 @@ class DcConfig {
 class DcChatlist {
     private var chatListPointer: OpaquePointer?
 
-    var length: Int {
-        return dc_chatlist_get_cnt(chatListPointer)
-    }
-
     // takes ownership of specified pointer
     init(chatListPointer: OpaquePointer?) {
         self.chatListPointer = chatListPointer
     }
 
+    deinit {
+        dc_chatlist_unref(chatListPointer)
+    }
+
+    var length: Int {
+        return dc_chatlist_get_cnt(chatListPointer)
+    }
+
     func getChatId(index: Int) -> Int {
         return Int(dc_chatlist_get_chat_id(chatListPointer, index))
     }
@@ -329,14 +333,22 @@ class DcChatlist {
         }
         return DcLot(lotPointer)
     }
-
-    deinit {
-        dc_chatlist_unref(chatListPointer)
-    }
 }
 
 class DcChat {
-    var chatPointer: OpaquePointer
+    var chatPointer: OpaquePointer?
+
+    init(id: Int) {
+        if let p = dc_get_chat(mailboxPointer, UInt32(id)) {
+            chatPointer = p
+        } else {
+            fatalError("Invalid chatID opened \(id)")
+        }
+    }
+
+    deinit {
+        dc_chat_unref(chatPointer)
+    }
 
     var id: Int {
         return Int(dc_chat_get_id(chatPointer))
@@ -394,22 +406,18 @@ class DcChat {
         }
         return nil
     }
+}
+
+class DcMsg: MessageType {
+    private var messagePointer: OpaquePointer?
 
     init(id: Int) {
-        if let p = dc_get_chat(mailboxPointer, UInt32(id)) {
-            chatPointer = p
-        } else {
-            fatalError("Invalid chatID opened \(id)")
-        }
+        messagePointer = dc_get_msg(mailboxPointer, UInt32(id))
     }
 
     deinit {
-        dc_chat_unref(chatPointer)
+        dc_msg_unref(messagePointer)
     }
-}
-
-class DcMsg: MessageType {
-    private var messagePointer: OpaquePointer
 
     lazy var sender: SenderType = {
         Sender(id: "\(fromContactId)", displayName: fromContact.name)
@@ -609,10 +617,6 @@ class DcMsg: MessageType {
         return dc_msg_is_info(messagePointer) == 1
     }
 
-    init(id: Int) {
-        messagePointer = dc_get_msg(mailboxPointer, UInt32(id))
-    }
-
     func summary(chars: Int) -> String? {
         guard let result = dc_msg_get_summarytext(messagePointer, Int32(chars)) else { return nil }
 
@@ -623,14 +627,18 @@ class DcMsg: MessageType {
         let chatId = dc_create_chat_by_msg_id(mailboxPointer, UInt32(id))
         return DcChat(id: Int(chatId))
     }
-
-    deinit {
-        dc_msg_unref(messagePointer)
-    }
 }
 
 class DcContact {
-    private var contactPointer: OpaquePointer
+    private var contactPointer: OpaquePointer?
+
+    init(id: Int) {
+        contactPointer = dc_get_contact(mailboxPointer, UInt32(id))
+    }
+
+    deinit {
+        dc_contact_unref(contactPointer)
+    }
 
     var nameNAddr: String {
         return String(cString: dc_contact_get_name_n_addr(contactPointer))
@@ -680,14 +688,6 @@ class DcContact {
         return Int(dc_contact_get_id(contactPointer))
     }
 
-    init(id: Int) {
-        contactPointer = dc_get_contact(mailboxPointer, UInt32(id))
-    }
-
-    deinit {
-        dc_contact_unref(contactPointer)
-    }
-
     func block() {
         dc_block_contact(mailboxPointer, UInt32(id), 1)
     }
@@ -702,8 +702,9 @@ class DcContact {
 }
 
 class DcLot {
-    private var dcLotPointer: OpaquePointer
+    private var dcLotPointer: OpaquePointer?
 
+    // takes ownership of specified pointer
     init(_ dcLotPointer: OpaquePointer) {
         self.dcLotPointer = dcLotPointer
     }