/// <summary> /// Returns a new locked <see cref="SemaLock"/>. /// </summary> public SemaLock NewSemaLock() { SemaLock l = new SemaLock(LOCK_SEMA); l.Wait(); return(l); }
private async Task AddMucAsync(Client client, string roomBareJid, string nickname, string password, bool bookmark, bool autoJoin) { ChatModel chat = new ChatModel(roomBareJid, client.dbAccount) { chatType = ChatType.MUC, inRoster = bookmark, subscription = "none", isChatActive = true }; MucInfoModel muc = new MucInfoModel() { chat = chat, subject = null, autoEnterRoom = autoJoin, name = null, nickname = nickname, password = string.IsNullOrEmpty(password) ? null : password, state = MucState.DISCONNECTED }; chat.muc = muc; SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock(); semaLock.Wait(); DataCache.INSTANCE.AddChatUnsafe(chat, client); semaLock.Dispose(); if (muc.autoEnterRoom) { await MucHandler.INSTANCE.EnterMucAsync(client.xmppClient, muc); } if (bookmark) { List <ConferenceItem> conferenceItems; using (MainDbContext ctx = new MainDbContext()) { conferenceItems = ctx.GetXEP0048ConferenceItemsForAccount(client.dbAccount.bareJid); } MessageResponseHelperResult <IQMessage> result = await client.xmppClient.PUB_SUB_COMMAND_HELPER.setBookmars_xep_0048Async(conferenceItems); if (result.STATE == MessageResponseHelperResultState.SUCCESS) { if (result.RESULT is IQErrorMessage errMsg) { Logger.Warn("Failed to set bookmarks: " + errMsg.ToString()); } } else { Logger.Warn("Failed to set bookmarks: " + result.STATE); } } }
private async Task AddMucAsync(Client client, string roomBareJid, string nickname, string password, bool bookmark, bool autoJoin) { ChatModel chat = new ChatModel(roomBareJid, client.dbAccount) { chatType = ChatType.MUC, inRoster = bookmark, subscription = "none", isChatActive = true }; MucInfoModel muc = new MucInfoModel() { chat = chat, subject = null, autoEnterRoom = autoJoin, name = null, nickname = nickname, password = string.IsNullOrEmpty(password) ? null : password, state = MucState.DISCONNECTED }; chat.muc = muc; SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock(); semaLock.Wait(); DataCache.INSTANCE.AddChatUnsafe(chat, client); semaLock.Dispose(); if (muc.autoEnterRoom) { await MucHandler.INSTANCE.EnterMucAsync(client.xmppClient, muc); } if (bookmark) { await client.PublishBookmarksAsync(); } }