/// <summary> /// Gets a user by username from the list of all known users. If user does not exist then /// a new user is created with that username and added to the dictionary. The client then /// requests basic information for this new user from the Skype application. /// </summary> /// <param name="username"></param> /// <returns></returns> private SkypeUser GetOrCreateUser(string username) { SkypeUser user; if (!_users.TryGetValue(username, out user)) { user = new SkypeUser() { UserName = username }; _users.Add(username, user); } return(user); }
public override T GetPanel <T>(params object[] parameters) { try { var skypePanel = new SkypePanel(); var skypeContext = skypePanel.DataContext as SkypeContext; if (skypeContext != null) { var settingsManager = VA.SettingsManager; foreach (var item in Settings["Skype-Users"].GetTuples <string, string>()) { var skypeUser = new SkypeUser(item.Item1, item.Item2); skypeContext.Users.Add(skypeUser); } var settingsWindow = VA.Components.Get <SettingsWindow>(); skypeContext.AddAction = async() => { try { var selectedName = await settingsWindow.GetInput(StringResource.SkypePlugin_AddNameTitle, StringResource.SkypePlugin_AddNameDescription); if (!string.IsNullOrEmpty(selectedName)) { var selectedId = await settingsWindow.GetInput(StringResource.SkypePlugin_AddIdTitle, StringResource.SkypePlugin_AddIdDescription); if (!string.IsNullOrEmpty(selectedId)) { Settings["Skype-users"].Add(new Tuple <string, string>(selectedName, selectedId)); skypeContext.Users.Add(new SkypeUser(selectedName, selectedId)); settingsManager.Save(Settings); settingsWindow.DisplayMessage(Name, StringResource.SkypePlugin_UserAdded); } } } catch (Exception exception) { VA.Logger.Error(exception); } }; skypeContext.RemoveAction = () => { try { var skypeUser = skypePanel.UserGrid.SelectedItem as SkypeUser; if (skypeUser != null) { Settings["Skype-Users"].Remove(new Tuple <string, string>(skypeUser.Name, skypeUser.Id)); skypeContext.Users.Remove(skypeUser); settingsManager.Save(Settings); settingsWindow.DisplayMessage(Name, StringResource.SkypePlugin_UserRemoved); } } catch (Exception exception) { VA.Logger.Error(exception); } }; } return(skypePanel as T); } catch (Exception exception) { VA.Logger.Error(exception); } return(null); }
protected virtual void ParseCall(string call) { try { var doc = new XmlDocument(); doc.LoadXml(call); var nodes = doc.GetElementsByTagName("partlist"); if (nodes.Count > 0) { var rootNote = nodes[0]; var type = rootNote.Attributes["type"].Value; var callId = rootNote.Attributes["callId"].Value; var users = new List <SkypeUser>(); foreach (XmlNode partNode in rootNote.ChildNodes) { if ("part".Equals(partNode.Name)) { var skypeId = partNode.Attributes["identity"].Value; var user = new SkypeUser() { SkypeId = skypeId }; foreach (XmlNode nameNode in partNode.ChildNodes) { if ("name".Equals(nameNode.Name)) { user.DisplayName = nameNode.InnerText; break; } } users.Add(user); } } var skypeCall = new SkypeCall() { CallId = callId, From = users.Count > 0 ? users[0] : null, To = users.Count > 1 ? users[1] : null }; SkypeCallState state = SkypeCallState.Unknown; if ("started".Equals(type)) { state = SkypeCallState.Started; } else if ("missed".Equals(type)) { state = SkypeCallState.Missed; } else if ("ended".Equals(type)) { state = SkypeCallState.Finished; } if (state != SkypeCallState.Started || IsNewCall(callId)) { OnCallChanged(skypeCall, state); } } } catch (Exception ex) { log.Error($"Error parsing call: {call}", ex); } }