From 5b658874146d18c44e536e4c22d6ececdb576ca8 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 9 Jan 2020 18:14:57 +0100
Subject: [PATCH] Improve documentation on signalproxy objects

---
 .../serialization/signalproxy_objects.md      | 727 +++++++++++++++++-
 mkdocs.yml                                    |   2 +-
 2 files changed, 696 insertions(+), 33 deletions(-)

diff --git a/docs/protocol/serialization/signalproxy_objects.md b/docs/protocol/serialization/signalproxy_objects.md
index f488e38..8e09ec9 100644
--- a/docs/protocol/serialization/signalproxy_objects.md
+++ b/docs/protocol/serialization/signalproxy_objects.md
@@ -11,6 +11,9 @@ are translated into the maps used in `InitData` responses and arguments to
 
 All types in this document are written in typescript typings notation.
 
+In Network representation, all map/hash notations refer to QVariantMaps, all
+list/array notations to QVariantList.
+
 ## AoS to SoA
 
 For most network objects, the runtime representation contains a
@@ -70,7 +73,7 @@ interface AliasManager {
      * Replaces all properties of the object with the content of the
      * "properties" parameter. This parameter is in network representation.
      */
-    update(properties: QVariantMap)
+    requestUpdate(properties: QVariantMap)
 
 
     // S->C calls
@@ -97,7 +100,7 @@ Applied translations:
 
 ```typescript
 interface AliasManager {
-    Aliases: QVariantMap{
+    Aliases: {
         names: QStringList,
         expansions: QStringList  
     }
@@ -223,10 +226,10 @@ Applied translations:
 
 ```typescript
 interface BufferSyncer {
-    Activities: QVariantList[BufferId | Int],
-    HiglightCounts: QVariantList[BufferId | Int],
-    LastSeenMsg: QVariantList[BufferId | MsgId],
-    MarkerLines: QVariantList[BufferId | MsgId]
+    Activities: [BufferId | Int],
+    HiglightCounts: [BufferId | Int],
+    LastSeenMsg: [BufferId | MsgId],
+    MarkerLines: [BufferId | MsgId]
 }
 ```
 
@@ -240,16 +243,33 @@ interface BufferViewConfig {
     removedBuffers: [BufferId],
     temporarilyRemovedBuffers: [BufferId],
     
+    /** ID of the associated BufferView */
     bufferViewId: Int,
+    /** Display name of the associated BufferView */
     bufferViewName: QString,
+    /** If showing only buffers from one network, the NetworkId of it */
     networkId: NetworkId,
+    /** Automatically add new buffers when created */
     addNewBuffersAutomatically: Bool,
+    /** Sort buffers alphabetically */
     sortAlphabetically: Bool,
+    /** Hide buffers which are disconnected/parted */
     hideInactiveBuffers: Bool,
+    /** Hide networks which are disconnected/quit */
     hideInactiveNetworks: Bool,
+    /** Disable buffer decoration (not fully implemented) */
     disableDecoration: Bool,
+    /**
+     * Filter buffers by type
+     * Int value of the BufferInfo.Type enum
+     */
     allowedBuffersTypes: Int,
+    /**
+     * Filter buffers by minimum activity
+     * Bitset of the BufferInfo.Activity enum values which should be shown
+     */
     minimumActivity: Int,
+    /** Persistently show the buffer search UI */
     showSearch: Bool
 
   
@@ -264,7 +284,7 @@ interface BufferViewConfig {
      * Replaces all properties of the object with the content of the
      * "properties" parameter. This parameter is in network representation.
      */
-    update(properties: QVariantMap)
+    requestUpdate(properties: QVariantMap)
 
 
     // S->C calls
@@ -294,9 +314,9 @@ interface BufferViewConfig {
 
 ```typescript
 interface BufferViewConfig {
-    BufferList: QVariantList[BufferId],
-    RemovedBuffers: QVariantList[BufferId],
-    TemporarilyRemovedBuffers: QVariantList[BufferId],
+    BufferList: [BufferId],
+    RemovedBuffers: [BufferId],
+    TemporarilyRemovedBuffers: [BufferId],
 
     bufferViewName: QString,
     networkId: NetworkId,
@@ -326,11 +346,6 @@ interface BufferViewManager {
     requestCreateBufferViews(properties: QVariantList)
     requestDeleteBufferView(bufferViewId: Int)
     requestDeleteBufferViews(bufferViews: QVariantList)
-    /**
-     * Replaces all properties of the object with the content of the
-     * "properties" parameter. This parameter is in network representation.
-     */
-    update(properties: QVariantMap)
 
 
     // S->C calls
@@ -350,7 +365,7 @@ interface BufferViewManager {
 
 ```typescript
 interface BufferViewManager {
-    BufferViewIds: QVariantList[Int]
+    BufferViewIds: [Int]
 }
 ```
 
@@ -370,7 +385,7 @@ interface CertManager {
      * Replaces all properties of the object with the content of the
      * "properties" parameter. This parameter is in network representation.
      */
-    update(properties: QVariantMap)
+    requestUpdate(properties: QVariantMap)
 
 
     // S->C calls
@@ -441,8 +456,8 @@ interface CoreInfo {
         quasselBuildDate: QString,
         startTime: QDateTime,
         sessionConnectedClients: Int,
-        sessionConnectedClientData: QVariantList[
-            QVariantMap{
+        sessionConnectedClientData: [
+            {
                    id: Int,
                    remoteAddress: String,
                    location: String,
@@ -460,6 +475,9 @@ interface CoreInfo {
 
 ## DccConfig
 
+!!! danger
+    This part is still unfinished.
+
 **Runtime**
 
 ```typescript
@@ -482,15 +500,95 @@ interface DccConfig {
 
 ```typescript
 interface HighlightRuleManager {
-    
+    highlightRuleList: [HighlightRule],
+    highlightNick: HighlightNickType,
+    nicksCaseSensitive: Bool
+
+
+    // C->S calls
+
+    /**
+     * Request removal of an ignore rule based on the rule itself.
+     * Use this method if you want to remove a single ignore rule
+     * and get that synced with the core immediately.
+     */
+    requestRemoveHighlightRule(highlightRule: Int)
+    /**
+     * Request toggling of "isEnabled" flag of a given ignore rule.
+     * Use this method if you want to toggle the "isEnabled" flag of a single ignore rule
+     * and get that synced with the core immediately.
+     */
+    requestToggleHighlightRule(highlightRule: Int)
+    /**
+     * Request an HighlightRule to be added to the ignore list
+     * Items added to the list with this method, get immediately synced with the core
+     */
+    requestAddHighlightRule(id: Int, name: QString | null, isRegEx: Boolean,
+        isCaseSensitive: Boolean, isEnabled: Boolean, isInverse: Boolean,
+        sender: QString | null, chanName: QString | null)
+    requestSetHighlightNick(highlightNick: Int)
+    requestSetNicksCaseSensitive(nicksCaseSensitive: Boolean)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    requestUpdate(properties: QVariantMap)
+
+
+    // S->C calls
+
+    removeHighlightRule(highlightRule: Int)
+    toggleHighlightRule(highlightRule: Int)
+    addHighlightRule(id: Int, name: QString | null, isRegEx: Boolean,
+            isCaseSensitive: Boolean, isEnabled: Boolean, isInverse: Boolean,
+            sender: QString | null, chanName: QString | null)
+    setHighlightNick(highlightNick: Int)
+    setNicksCaseSensitive(nicksCaseSensitive: Boolean)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
+}
+
+interface HighlightRule {
+    id: Int,
+    name: QString,
+    isRegEx: Bool,
+    isCaseSensitive: Bool,
+    isEnabled: Bool,
+    isInverse: Bool,
+    sender: QString,
+    channel: QString
+}
+
+enum HighlightNickType {
+    NoNick = 0x00,
+    CurrentNick = 0x01,
+    AllNicks = 0x02
 }
 ```
 
 **Network**
 
+Applied translations:
+
+- [AoS to SoA](#aos-to-soa)
+
 ```typescript
 interface HighlightRuleManager {
-    
+    HighlightRuleList: {
+        id: [Int],
+        name: QStringList,
+        isRegEx: [Bool],
+        isCaseSensitive: [Bool],
+        isEnabled: [Bool],
+        isInverse: [Bool],
+        sender: QStringList,
+        channel: QStringList        
+    },
+    highlightNick: Int,
+    nicksCaseSensitive: Bool
 }
 ```
 
@@ -500,7 +598,63 @@ interface HighlightRuleManager {
 
 ```typescript
 interface Identity {
-    
+    identityId: IdentityId,
+    identityName: QString,
+    realName: QString,
+    nicks: QStringList,
+    awayNick: QString,
+    awayNickEnabled: Bool,
+    awayReason: QString,
+    awayReasonEnabled: Bool,
+    autoAwayEnabled: Bool,
+    autoAwayTime: Int,
+    autoAwayReason: QString,
+    autoAwayReasonEnabled: Bool,
+    detachAwayEnabled: Bool,
+    detachAwayReason: QString,
+    detachAwayReasonEnabled: Bool,
+    ident: QString,
+    kickReason: QString,
+    partReason: QString,
+    quitReason: QString
+
+
+    // C->S calls
+
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    requestUpdate(properties: QVariantMap)
+
+
+    // S->C calls
+
+    copyFrom(other: Identity)
+    setAutoAwayEnabled(enabled: Bool) 
+    setAutoAwayReason(reason: QString | null) 
+    setAutoAwayReasonEnabled(enabled: Bool) 
+    setAutoAwayTime(time: Int) 
+    setAwayNick(awayNick: QString | null) 
+    setAwayNickEnabled(enabled: Bool) 
+    setAwayReason(awayReason: QString | null) 
+    setAwayReasonEnabled(enabled: Bool) 
+    setDetachAwayEnabled(enabled: Bool) 
+    setDetachAwayReason(reason: QString | null) 
+    setDetachAwayReasonEnabled(enabled: Bool) 
+    setId(id: IdentityId) 
+    setIdent(ident: QString | null) 
+    setIdentityName(name: QString | null) 
+    setKickReason(reason: QString | null) 
+    setNicks(nicks: QStringList) 
+    setPartReason(reason: QString | null) 
+    setQuitReason(reason: QString | null) 
+    setRealName(realName: QString | null) 
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
 }
 ```
 
@@ -508,7 +662,25 @@ interface Identity {
 
 ```typescript
 interface Identity {
-    
+    identityId: IdentityId,
+    identityName: QString,
+    realName: QString,
+    nicks: QStringList,
+    awayNick: QString,
+    awayNickEnabled: Bool,
+    awayReason: QString,
+    awayReasonEnabled: Bool,
+    autoAwayEnabled: Bool,
+    autoAwayTime: Int,
+    autoAwayReason: QString,
+    autoAwayReasonEnabled: Bool,
+    detachAwayEnabled: Bool,
+    detachAwayReason: QString,
+    detachAwayReasonEnabled: Bool,
+    ident: QString,
+    kickReason: QString,
+    partReason: QString,
+    quitReason: QString
 }
 ```
 
@@ -518,15 +690,87 @@ interface Identity {
 
 ```typescript
 interface IgnoreListManager {
+    ignoreList: [IgnoreListItem]
     
+
+    // C->S calls
+
+    requestAddIgnoreListItem(type: Int, ignoreRule: QString | null,
+        isRegEx: Bool, strictness: Int, scope: Int, scopeRule: QString | null,
+        isActive: Bool)
+    requestRemoveIgnoreListItem(ignoreRule: QString | null)
+    requestToggleIgnoreRule(ignoreRule: QString | null)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    requestUpdate(properties: QVariantMap)
+
+
+    // S->C calls
+
+    addIgnoreListItem(type: Int, ignoreRule: QString | null, isRegEx: Bool,
+        strictness: Int, scope: Int, scopeRule: QString | null, isActive: Bool)
+    removeIgnoreListItem(ignoreRule: QString | null)
+    toggleIgnoreRule(ignoreRule: QString | null)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
+}
+
+interface IgnoreListItem {
+    type: IgnoreType,
+    ignoreRule: String,
+    isRegEx: Boolean,
+    strictness: StrictnessType,
+    scope: ScopeType,
+    scopeRule: String,
+    isActive: Boolean
+}
+
+enum IgnoreType {
+    SenderIgnore = 0x00,
+    MessageIgnore = 0x01,
+    CtcpIgnore = 0x02
+}
+
+enum StrictnessType {
+    UnmatchedStrictness = 0x00,
+    /**
+     * Dynamic ignore, ignore rule has to be applied by the client to the
+     * messages it receives
+     */
+    SoftStrictness = 0x01,
+    /** Permanent ignore, messages don't even get saved to the database */
+    HardStrictness = 0x02
+}
+
+enum ScopeType {
+    GlobalScope = 0x00,
+    NetworkScope = 0x01,
+    ChannelScope = 0x02
 }
 ```
 
 **Network**
 
+Applied translations:
+
+- [AoS to SoA](#aos-to-soa)
+
 ```typescript
 interface IgnoreListManager {
-    
+    IgnoreList: {
+        ignoreType: [Int],
+        ignoreRule: QStringList,
+        isRegEx: [Bool],
+        strictness: [Int],
+        scope: [Int],
+        scopeRule: QStringList,
+        isActive: [Bool]    
+    }
 }
 ```
 
@@ -536,7 +780,33 @@ interface IgnoreListManager {
 
 ```typescript
 interface IrcChannel {
-    
+    channelModesA: Map<QChar, QStringList>,
+    channelModesB: Map<QChar, QString>,
+    channelModesC: Map<QChar, QString>,
+    channelModesD: [QChar],
+    name: QString,
+    topic: QString,
+    password: QString,
+    encrypted: Bool
+
+
+    // S->C calls
+
+    addChannelMode(mode: QChar, value: QString | null)
+    addUserMode(nick: QString | null, mode: QString | null)
+    joinIrcUsers(nicks: QStringList, modes: QStringList)
+    part(nick: QString | null)
+    removeChannelMode(mode: QChar, value: QString | null)
+    removeUserMode(nick: QString | null, mode: QString | null)
+    setEncrypted(encrypted: Bool)
+    setPassword(password: QString | null)
+    setTopic(topic: QString | null)
+    setUserModes(nick: QString | null, modes: QString | null)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
 }
 ```
 
@@ -544,12 +814,25 @@ interface IrcChannel {
 
 ```typescript
 interface IrcChannel {
-    
+    ChanModes: {
+        A: Map<QString, QStringList>,
+        B: Map<QString, QString>,
+        C: Map<QString, QString>,
+        D: QString    
+    },
+    UserModes: Map<QString, QString>,
+    name: QString,
+    topic: QString,
+    password: QString,
+    encrypted: Bool
 }
 ```
 
 ## IrcListHelper
 
+!!! danger
+    This part is still unfinished.
+
 **Runtime**
 
 ```typescript
@@ -572,7 +855,56 @@ interface IrcListHelper {
 
 ```typescript
 interface IrcUser {
-    
+    user: QString,
+    host: QString,
+    nick: QString,
+    realName: QString,
+    account: QString,
+    away: Bool,
+    awayMessage: QString,
+    idleTime: QDateTime,
+    loginTime: QDateTime,
+    server: QString,
+    ircOperator: QString,
+    lastAwayMessage: Int,
+    lastAwayMessageTime: QDateTime,
+    whoisServiceReply: QString,
+    suserHost: QString,
+    encrypted: Bool,
+    channels: QStringList,
+    userModes: QString
+
+
+    // S->C calls
+
+    addUserModes(modes: QString | null)
+    joinChannel(channelname: QString | null)
+    partChannel(channelname: QString | null)
+    quit()
+    removeUserModes(modes: QString | null)
+    setAccount(account: QString | null)
+    setAway(away: Boolean)
+    setAwayMessage(awayMessage: QString | null)
+    setEncrypted(encrypted: Boolean)
+    setHost(host: QString | null)
+    setIdleTime(idleTime: QDateTime)
+    setIrcOperator(ircOperator: QString | null)
+    setLastAwayMessage(lastAwayMessage: Int)
+    setLastAwayMessageTime(lastAwayMessageTime: QDateTime)
+    setLoginTime(loginTime: Temporal)
+    setNick(nick: QString | null)
+    setRealName(realName: QString | null)
+    setServer(server: QString | null)
+    setSuserHost(suserHost: QString | null)
+    setUser(user: QString | null)
+    setUserModes(modes: QString | null)
+    setWhoisServiceReply(whoisServiceReply: QString | null)
+    updateHostmask(mask: QString | null)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
 }
 ```
 
@@ -580,7 +912,24 @@ interface IrcUser {
 
 ```typescript
 interface IrcUser {
-    
+    user: QString,
+    host: QString,
+    nick: QString,
+    realName: QString,
+    account: QString,
+    away: Bool,
+    awayMessage: QString,
+    idleTime: QDateTime,
+    loginTime: QDateTime,
+    server: QString,
+    ircOperator: QString,
+    lastAwayMessage: Int,
+    lastAwayMessageTime: QDateTime,
+    whoisServiceReply: QString,
+    suserHost: QString,
+    encrypted: Bool,
+    channels: QStringList,
+    userModes: QString
 }
 ```
 
@@ -590,7 +939,108 @@ interface IrcUser {
 
 ```typescript
 interface Network {
-    
+    myNick: QString,
+    latency: Int,
+    currentServer: QString,
+    isConnected: Bool,
+    connectionState: ConnectionState,
+    prefixes: [QChar],
+    prefixModes: [QChar],
+    channelModes: Map<ChannelModeType, [QChar]>,
+    ircUsers: Map<QString, IrcUser>,
+    ircChannels: Map<QString, IrcChannel>,
+    supports: Map<QString, QString>,
+    caps: Map<QString, QString | null>,
+    capsEnabled: [QString],
+    networkInfo: NetworkInfo
+
+
+    // C->S calls
+
+    requestConnect()
+    requestDisconnect()
+    requestSetNetworkInfo(info: NetworkInfo)
+
+
+    // S->C calls
+
+    acknowledgeCap(capability: QString | null)
+    addCap(capability: String, value: QString | null = null)
+    addIrcChannel(channel: QString | null)
+    addIrcUser(hostmask: QString | null)
+    addSupport(param: QString | null, value: QString | null = null)
+    clearCaps()
+    emitConnectionError(error: QString | null)
+    ircUserNickChanged(before: QString | null, after: QString | null)
+    removeCap(capability: QString | null)
+    removeSupport(param: QString | null)
+    setAutoIdentifyPassword(password: QString | null)
+    setAutoIdentifyService(service: QString | null)
+    setAutoReconnectInterval(interval: UInt)
+    setAutoReconnectRetries(retries: UShort)
+    setCodecForDecoding(codecName: QByteBuffer | null)
+    setCodecForEncoding(codecName: QByteBuffer | null)
+    setCodecForServer(codecName: QByteBuffer | null)
+    setConnected(isConnected: Bool)
+    setConnectionState(state: Int)
+    setCurrentServer(currentServer: QString | null)
+    setIdentity(identity: IdentityId)
+    setLatency(latency: Int)
+    setMessageRateBurstSize(burstSize: UInt)
+    setMessageRateDelay(messageDelay: UInt)
+    setMyNick(mynick: QString | null)
+    setNetworkName(networkName: QString | null)
+    setNetworkInfo(info: NetworkInfo)
+    setPerform(perform: QStringList)
+    setRejoinChannels(rejoinChannels: Bool)
+    setSaslAccount(account: QString | null)
+    setSaslPassword(password: QString | null)
+    setServerList(serverList: QVariantList)
+    setActualServerList(serverList: [NetworkServer])
+    setUnlimitedMessageRate(unlimitedRate: Bool)
+    setUnlimitedReconnectRetries(unlimitedRetries: Bool)
+    setUseAutoIdentify(autoIdentify: Bool)
+    setUseAutoReconnect(autoReconnect: Bool)
+    setUseCustomMessageRate(useCustomRate: Bool)
+    setUseRandomServer(randomServer: Bool)
+    setUseSasl(sasl: Bool)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
+}
+
+interface NetworkServer {
+    host: QString,
+    port: UInt,
+    password: QString,
+    useSSL: Bool,
+    sslVerify: Bool,
+    sslVersion: Int,
+    useProxy: Bool,
+    proxyType: Int,
+    proxyHost: QString,
+    proxyPort: UInt,
+    proxyUser: QString,
+    proxyPass: QString
+}
+
+enum ConnectionState {
+    Disconnected = 0x00,
+    Connecting = 0x01,
+    Initializing = 0x02,
+    Initialized = 0x03,
+    Reconnecting = 0x04,
+    Disconnecting = 0x05
+}
+
+enum ChannelModeType {
+    NOT_A_CHANMODE = 0x00,
+    A_CHANMODE = 0x01,
+    B_CHANMODE = 0x02,
+    C_CHANMODE = 0x04,
+    D_CHANMODE = 0x08
 }
 ```
 
@@ -598,7 +1048,172 @@ interface Network {
 
 ```typescript
 interface Network {
-    
+    Caps: Map<QString, QString>,
+    CapsEnabled: [QString],
+    IrcUsersAndChannels: {
+        Users: {
+            user: [QString],
+            host: [QString],
+            nick: [QString],
+            realName: [QString],
+            account: [QString],
+            away: [Bool],
+            awayMessage: [QString],
+            idleTime: [QDateTime],
+            loginTime: [QDateTime],
+            server: [QString],
+            ircOperator: [QString],
+            lastAwayMessage: [Int],
+            lastAwayMessageTime: [QDateTime],
+            whoisServiceReply: [QString],
+            suserHost: [QString],
+            encrypted: [Bool],
+            channels: [QStringList],
+            userModes: [QString]
+        },
+        Channels: {
+            ChanModes: [
+                {
+                    A: Map<QString, QStringList>,
+                    B: Map<QString, QString>,
+                    C: Map<QString, QString>,
+                    D: QString    
+                }
+            ],
+            UserModes: [Map<QString, QString>],
+            name: [QString],
+            topic: [QString],
+            password: [QString],
+            encrypted: [Bool]
+        }
+    },
+    ServerList: [
+        {
+            Host: QString,
+            Port: UInt,
+            Password: QString,
+            UseSSL: Bool,
+            sslVerify: Bool,
+            sslVersion: Int,
+            UseProxy: Bool,
+            ProxyType: Int,
+            ProxyHost: QString,
+            ProxyPort: UInt,
+            ProxyUser: QString,
+            ProxyPass: QString
+        }
+    ],
+    Supports: Map<QString, QString>,
+    networkId: NetworkId,
+    networkName: QString,
+    currentServer: QString,
+    myNick: QString,
+    latency: Int,
+    codecForServer: QByteArray
+    codecForEncoding: QByteArray
+    codecForDecoding: QByteArray
+    identityId: IdentityId,
+    isConnected: Bool,
+    connectionState: Int,
+    useRandomServer: Bool,
+    perform: QStringList,
+    useAutoIdentify: Bool,
+    autoIdentifyService: QString,
+    autoIdentifyPassword: QString,
+    useSasl: Bool,
+    saslAccount: QString,
+    saslPassword: QString,
+    useAutoReconnect: Bool,
+    autoReconnectInterval: UInt,
+    autoReconnectRetries: UShort,
+    unlimitedReconnectRetries: Bool,
+    rejoinChannels: Bool,
+    useCustomMessageRate: Bool,
+    msgRateBurstSize: UInt,
+    msgRateMessageDelay: UInt,
+    unlimitedMessageRate: Bool
+}
+```
+
+## NetworkInfo
+
+**Runtime**
+
+```typescript
+interface NetworkInfo {
+    networkName: QString,
+
+    serverList: [NetworkServer],
+    perform: QStringList,
+
+    autoIdentifyService: QString,
+    autoIdentifyPassword: QString,
+
+    saslAccount: QString,
+    saslPassword: QString,
+
+    codecForServer: QByteArray,
+    codecForEncoding: QByteArray,
+    codecForDecoding: QByteArray,
+
+    networkId: NetworkId,
+    identityId: IdentityId,
+
+    msgRateBurstSize: UInt,
+    msgRateMessageDelay: UInt,
+
+    autoReconnectInterval: UInt,
+    autoReconnectRetries: UShort,
+
+    rejoinChannels: Bool,
+    useRandomServer: Bool,
+    useAutoIdentify: Bool,
+    useSasl: Bool,
+    useAutoReconnect: Bool,
+    unlimitedReconnectRetries: Bool,
+    useCustomMessageRate: Bool,
+    unlimitedMessageRate: Bool,
+    autoAwayActive: Bool
+}
+```
+
+**Network**
+
+```typescript
+interface NetworkInfo {
+    NetworkName: QString,
+
+    ServerList: [NetworkServer],
+    Perform: QStringList,
+
+    AutoIdentifyService: QString,
+    AutoIdentifyPassword: QString,
+
+    SaslAccount: QString,
+    SaslPassword: QString,
+
+    CodecForServer: QByteArray,
+    CodecForEncoding: QByteArray,
+    CodecForDecoding: QByteArray,
+
+    NetworkId: NetworkId,
+    IdentityId: IdentityId,
+
+    MsgRateBurstSize: UInt,
+    MsgRateMessageDelay: UInt,
+
+    AutoReconnectInterval: UInt,
+    AutoReconnectRetries: UShort,
+
+    RejoinChannels: Bool,
+    UseRandomServer: Bool,
+    UseAutoIdentify: Bool,
+    UseSasl: Bool,
+    UseAutoReconnect: Bool,
+    UnlimitedReconnectRetries: Bool,
+    UseCustomMessageRate: Bool,
+    UnlimitedMessageRate: Bool,
+    AutoAwayActive: Bool
 }
 ```
 
@@ -608,7 +1223,48 @@ interface Network {
 
 ```typescript
 interface NetworkConfig {
-    
+    pingTimeoutEnabled: Bool,
+    pingInterval: Int,
+    maxPingCount: Int,
+    autoWhoEnabled: Bool,
+    autoWhoInterval: Int,
+    autoWhoNickLimit: Int,
+    autoWhoDelay: Int,
+    standardCtcp: Bool
+
+
+    // C->S calls
+
+    requestSetAutoWhoDelay(delay: Int) 
+    requestSetAutoWhoEnabled(enabled: Boolean) 
+    requestSetAutoWhoInterval(interval: Int) 
+    requestSetAutoWhoNickLimit(limit: Int) 
+    requestSetMaxPingCount(count: Int) 
+    requestSetPingInterval(interval: Int) 
+    requestSetPingTimeoutEnabled(enabled: Boolean) 
+    requestSetStandardCtcp(enabled: Boolean) 
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    requestUpdate(properties: QVariantMap)
+
+
+    // S->C calls
+
+    setAutoWhoDelay(delay: Int) 
+    setAutoWhoEnabled(enabled: Boolean) 
+    setAutoWhoInterval(interval: Int) 
+    setAutoWhoNickLimit(limit: Int) 
+    setMaxPingCount(count: Int) 
+    setPingInterval(interval: Int) 
+    setPingTimeoutEnabled(enabled: Boolean) 
+    setStandardCtcp(standardCtcp: Boolean)
+    /**
+     * Replaces all properties of the object with the content of the
+     * "properties" parameter. This parameter is in network representation.
+     */
+    update(properties: QVariantMap)
 }
 ```
 
@@ -616,6 +1272,13 @@ interface NetworkConfig {
 
 ```typescript
 interface NetworkConfig {
-    
+    pingTimeoutEnabled: Bool,
+    pingInterval: Int,
+    maxPingCount: Int,
+    autoWhoEnabled: Bool,
+    autoWhoInterval: Int,
+    autoWhoNickLimit: Int,
+    autoWhoDelay: Int,
+    standardCtcp: Bool
 }
 ```
diff --git a/mkdocs.yml b/mkdocs.yml
index 775fd0d..5cc1175 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -5,7 +5,7 @@ site_author: 'Janne Koschinski'
 site_url: 'https://quasseldroid.info/docs/'
 
 # Copyright
-copyright: 'Copyright &copy; 2019 Janne Koschinski'
+copyright: 'Copyright &copy; 2020 Janne Koschinski'
 
 nav:
   - "Overview": index.md
-- 
GitLab