示例#1
0
        /// <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);
        }
示例#2
0
        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);
            }
        }