API support

This commit is contained in:
Peter 2018-11-12 20:14:58 +04:00
parent 58d362381e
commit 6573493174
6 changed files with 92 additions and 24 deletions

View File

@ -84,6 +84,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
dict[55281185] = { return Api.RichText.parse_textMarked($0) }
dict[483104362] = { return Api.RichText.parse_textPhone($0) }
dict[136105807] = { return Api.RichText.parse_textImage($0) }
dict[894777186] = { return Api.RichText.parse_textAnchor($0) }
dict[-1901811583] = { return Api.UserFull.parse_userFull($0) }
dict[-292807034] = { return Api.InputChannel.parse_inputChannelEmpty($0) }
dict[-1343524562] = { return Api.InputChannel.parse_inputChannel($0) }
@ -408,7 +409,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
dict[-1182234929] = { return Api.InputUser.parse_inputUserEmpty($0) }
dict[-138301121] = { return Api.InputUser.parse_inputUserSelf($0) }
dict[-668391402] = { return Api.InputUser.parse_inputUser($0) }
dict[-241590104] = { return Api.Page.parse_page($0) }
dict[-1366746132] = { return Api.Page.parse_page($0) }
dict[871426631] = { return Api.SecureCredentialsEncrypted.parse_secureCredentialsEncrypted($0) }
dict[157948117] = { return Api.upload.File.parse_file($0) }
dict[-242427324] = { return Api.upload.File.parse_fileCdnRedirect($0) }

View File

@ -1843,6 +1843,7 @@ extension Api {
case textMarked(text: Api.RichText)
case textPhone(text: Api.RichText, phone: String)
case textImage(documentId: Int64, w: Int32, h: Int32)
case textAnchor(text: Api.RichText, name: String)
func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
switch self {
@ -1946,6 +1947,13 @@ extension Api {
serializeInt32(w, buffer: buffer, boxed: false)
serializeInt32(h, buffer: buffer, boxed: false)
break
case .textAnchor(let text, let name):
if boxed {
buffer.appendInt32(894777186)
}
text.serialize(buffer, true)
serializeString(name, buffer: buffer, boxed: false)
break
}
}
@ -1981,6 +1989,8 @@ extension Api {
return ("textPhone", [("text", text), ("phone", phone)])
case .textImage(let documentId, let w, let h):
return ("textImage", [("documentId", documentId), ("w", w), ("h", h)])
case .textAnchor(let text, let name):
return ("textAnchor", [("text", text), ("name", name)])
}
}
@ -2183,6 +2193,22 @@ extension Api {
return nil
}
}
static func parse_textAnchor(_ reader: BufferReader) -> RichText? {
var _1: Api.RichText?
if let signature = reader.readInt32() {
_1 = Api.parse(reader, signature: signature) as? Api.RichText
}
var _2: String?
_2 = parseString(reader)
let _c1 = _1 != nil
let _c2 = _2 != nil
if _c1 && _c2 {
return Api.RichText.textAnchor(text: _1!, name: _2!)
}
else {
return nil
}
}
}
enum UserFull: TypeConstructorDescription {
@ -10006,15 +10032,16 @@ extension Api {
}
enum Page: TypeConstructorDescription {
case page(flags: Int32, blocks: [Api.PageBlock], photos: [Api.Photo], documents: [Api.Document])
case page(flags: Int32, url: String, blocks: [Api.PageBlock], photos: [Api.Photo], documents: [Api.Document])
func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
switch self {
case .page(let flags, let blocks, let photos, let documents):
case .page(let flags, let url, let blocks, let photos, let documents):
if boxed {
buffer.appendInt32(-241590104)
buffer.appendInt32(-1366746132)
}
serializeInt32(flags, buffer: buffer, boxed: false)
serializeString(url, buffer: buffer, boxed: false)
buffer.appendInt32(481674261)
buffer.appendInt32(Int32(blocks.count))
for item in blocks {
@ -10036,32 +10063,35 @@ extension Api {
func descriptionFields() -> (String, [(String, Any)]) {
switch self {
case .page(let flags, let blocks, let photos, let documents):
return ("page", [("flags", flags), ("blocks", blocks), ("photos", photos), ("documents", documents)])
case .page(let flags, let url, let blocks, let photos, let documents):
return ("page", [("flags", flags), ("url", url), ("blocks", blocks), ("photos", photos), ("documents", documents)])
}
}
static func parse_page(_ reader: BufferReader) -> Page? {
var _1: Int32?
_1 = reader.readInt32()
var _2: [Api.PageBlock]?
var _2: String?
_2 = parseString(reader)
var _3: [Api.PageBlock]?
if let _ = reader.readInt32() {
_2 = Api.parseVector(reader, elementSignature: 0, elementType: Api.PageBlock.self)
_3 = Api.parseVector(reader, elementSignature: 0, elementType: Api.PageBlock.self)
}
var _3: [Api.Photo]?
var _4: [Api.Photo]?
if let _ = reader.readInt32() {
_3 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Photo.self)
_4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Photo.self)
}
var _4: [Api.Document]?
var _5: [Api.Document]?
if let _ = reader.readInt32() {
_4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Document.self)
_5 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Document.self)
}
let _c1 = _1 != nil
let _c2 = _2 != nil
let _c3 = _3 != nil
let _c4 = _4 != nil
if _c1 && _c2 && _c3 && _c4 {
return Api.Page.page(flags: _1!, blocks: _2!, photos: _3!, documents: _4!)
let _c5 = _5 != nil
if _c1 && _c2 && _c3 && _c4 && _c5 {
return Api.Page.page(flags: _1!, url: _2!, blocks: _3!, photos: _4!, documents: _5!)
}
else {
return nil

View File

@ -4967,6 +4967,20 @@ extension Api {
})
}
static func cancelPasswordEmail() -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Bool>) {
let buffer = Buffer()
buffer.appendInt32(-1043606090)
return (FunctionDescription(name: "account.cancelPasswordEmail", parameters: []), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Bool? in
let reader = BufferReader(buffer)
var result: Api.Bool?
if let signature = reader.readInt32() {
result = Api.parse(reader, signature: signature) as? Api.Bool
}
return result
})
}
static func getContactSignUpNotification() -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Bool>) {
let buffer = Buffer()
buffer.appendInt32(-1626880216)

View File

@ -47,3 +47,15 @@ public func resendTwoStepRecoveryEmail(network: Network) -> Signal<Never, Resend
}
|> ignoreValues
}
public enum CancelTwoStepRecoveryEmailError {
case generic
}
public func cancelTwoStepRecoveryEmail(network: Network) -> Signal<Never, CancelTwoStepRecoveryEmailError> {
return network.request(Api.functions.account.cancelPasswordEmail(), automaticFloodWait: false)
|> mapError { _ -> CancelTwoStepRecoveryEmailError in
return .generic
}
|> ignoreValues
}

View File

@ -848,12 +848,14 @@ public final class InstantPage: PostboxCoding, Equatable {
public let media: [MediaId: Media]
public let isComplete: Bool
public let rtl: Bool
public let url: String
init(blocks: [InstantPageBlock], media: [MediaId: Media], isComplete: Bool, rtl: Bool) {
init(blocks: [InstantPageBlock], media: [MediaId: Media], isComplete: Bool, rtl: Bool, url: String) {
self.blocks = blocks
self.media = media
self.isComplete = isComplete
self.rtl = rtl
self.url = url
}
public init(decoder: PostboxDecoder) {
@ -861,6 +863,7 @@ public final class InstantPage: PostboxCoding, Equatable {
self.media = MediaDictionary(decoder: decoder).dict
self.isComplete = decoder.decodeInt32ForKey("c", orElse: 0) != 0
self.rtl = decoder.decodeInt32ForKey("r", orElse: 0) != 0
self.url = decoder.decodeStringForKey("url", orElse: "")
}
public func encode(_ encoder: PostboxEncoder) {
@ -868,6 +871,7 @@ public final class InstantPage: PostboxCoding, Equatable {
MediaDictionary(dict: self.media).encode(encoder)
encoder.encodeInt32(self.isComplete ? 1 : 0, forKey: "c")
encoder.encodeInt32(self.rtl ? 1 : 0, forKey: "r")
encoder.encodeString(self.url, forKey: "url")
}
public static func ==(lhs: InstantPage, rhs: InstantPage) -> Bool {
@ -893,6 +897,9 @@ public final class InstantPage: PostboxCoding, Equatable {
if lhs.rtl != rhs.rtl {
return false
}
if lhs.url != rhs.url {
return false
}
return true
}
}
@ -900,8 +907,8 @@ public final class InstantPage: PostboxCoding, Equatable {
extension InstantPageCaption {
convenience init(apiCaption: Api.PageCaption) {
switch apiCaption {
case let .pageCaption(text, credit):
self.init(text: RichText(apiText: text), credit: RichText(apiText: credit))
case let .pageCaption(text, credit):
self.init(text: RichText(apiText: text), credit: RichText(apiText: credit))
}
}
}
@ -1063,13 +1070,15 @@ extension InstantPage {
let files: [Api.Document]
let isComplete: Bool
let rtl: Bool
let url: String
switch apiPage {
case let .page(flags, apiBlocks, apiPhotos, apiVideos):
blocks = apiBlocks
photos = apiPhotos
files = apiVideos
isComplete = (flags & (1 << 0)) == 0
rtl = (flags & (1 << 1)) != 0
case let .page(page):
url = page.url
blocks = page.blocks
photos = page.photos
files = page.documents
isComplete = (page.flags & (1 << 0)) == 0
rtl = (page.flags & (1 << 1)) != 0
}
var media: [MediaId: Media] = [:]
for photo in photos {
@ -1082,6 +1091,6 @@ extension InstantPage {
media[id] = file
}
}
self.init(blocks: blocks.map({ InstantPageBlock(apiBlock: $0) }), media: media, isComplete: isComplete, rtl: rtl)
self.init(blocks: blocks.map({ InstantPageBlock(apiBlock: $0) }), media: media, isComplete: isComplete, rtl: rtl, url: url)
}
}

View File

@ -315,6 +315,8 @@ extension RichText {
self = .phone(text: RichText(apiText: text), phone: phone)
case let .textImage(documentId, w, h):
self = .image(id: MediaId(namespace: Namespaces.Media.CloudFile, id: documentId), dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)))
case let .textAnchor(text, name):
self = RichText(apiText: text)
}
}
}