示例#1
0
        public static void ProtectAccount(UserToken User)
        {
            InitializeIfNull();

            if (!_protectedAccounts.Contains(User))
                _protectedAccounts.Add(User);
        }
示例#2
0
        public static void UnprotectAccount(UserToken User)
        {
            InitializeIfNull();

            if (_protectedAccounts.Contains(User))
                _protectedAccounts.Remove(User);
        }
示例#3
0
文件: GroupedDM.cs 项目: Quertz/Ocell
 public GroupedDM(UserToken mainUser)
 {
     user = mainUser;
     Messages = new SafeObservable<TwitterDirectMessage>();
     lastId = -1;
     Messages.CollectionChanged += MessagesChanged;
 }
示例#4
0
        public static bool IsProtected(UserToken User)
        {
            InitializeIfNull();

            if (User == null)
                return false;
            return _protectedAccounts.Contains(User);
        }
示例#5
0
 public static bool SwitchAccountState(UserToken User)
 {
     if (IsProtected(User))
     {
         UnprotectAccount(User);
         return false;
     }
     else
     {
         ProtectAccount(User);
         return true;
     }
 }
示例#6
0
        private static void ReceiveFriends(TwitterCursorList<TwitterUser> friends, TwitterResponse response, UserToken user)
        {
            if (friends == null || response.StatusCode != HttpStatusCode.OK)
                return;

            if (dicUsers.ContainsKey(user))
                dicUsers[user] = dicUsers[user].Union(friends.Select(x => x.ScreenName)).ToList();
            else
                dicUsers[user] = friends.Select(x => x.ScreenName).ToList();

            if (friends.NextCursor != null && friends.NextCursor != 0)
                ServiceDispatcher.GetService(user).ListFriends(new ListFriendsOptions { ScreenName = user.ScreenName, Cursor = (long)friends.NextCursor }, (l, r) => ReceiveFriends(l, r, user));
            else
            {
                finishedUsers[user] = true;
                SaveUserCache(user, dicUsers[user]);
            }
        }
示例#7
0
        public static ITwitterService GetService(UserToken account)
        {
            lock (_lockFlag)
            {
                if (_services == null)
                    _services = new Dictionary<string, ITwitterService>();
            }

            if (account == null || account.Key == null)
                return null;

            ITwitterService srv;

            lock (_lockFlag)
            {
                if (_services.ContainsKey(account.Key))
                    return _services[account.Key];

                if (TestSession)
                    srv = new MockTwitterService();
                else
                {
                    var tempSrv = new TwitterService();
                    tempSrv.AuthenticateWith(SensitiveData.ConsumerToken, SensitiveData.ConsumerSecret, account.Key, account.Secret);
                    srv = tempSrv;
                }

                try
                {

                    _services.Add(account.Key, srv);
                }
                catch
                {
                    // Again, this sometimes gives some weird exceptions. Investigate!
                }
            }

            return srv;
        }
示例#8
0
        private static void CheckIfExistsAndInsert(UserToken Token)
        {
            foreach (var item in Config.Accounts)
            {
                if (item.Key == Token.Key && item.ScreenName == Token.ScreenName)
                {
                    if (item.Secret != Token.Secret)
                    {
                        Config.Accounts.Remove(item);
                        Config.Accounts.Add(Token);
                        Config.SaveAccounts();
                    }
                    return;
                }
            }

            Config.Accounts.Add(Token);
            Config.SaveAccounts();
        }
示例#9
0
 private void CreateColumns(UserToken user)
 {
     TwitterResource Home = new TwitterResource { Type = ResourceType.Home, User = user };
     TwitterResource Mentions = new TwitterResource { Type = ResourceType.Mentions, User = user };
     TwitterResource Messages = new TwitterResource { Type = ResourceType.Messages, User = user };
     Deployment.Current.Dispatcher.InvokeIfRequired(() =>
     {
         if (!Config.Columns.Contains(Home))
             Config.Columns.Add(Home);
         if (!Config.Columns.Contains(Mentions))
             Config.Columns.Add(Mentions);
         if (!Config.Columns.Contains(Messages))
             Config.Columns.Add(Messages);
         Config.SaveColumns();
     });
 }
示例#10
0
文件: GroupedDM.cs 项目: Quertz/Ocell
 public GroupedDM(TwitterDirectMessage element, UserToken mainUser)
     : this(mainUser)
 {
     Messages.Add(element);
 }
示例#11
0
        protected override void PostProcess(string contents)
        {
            var parameters = System.Web.HttpUtility.ParseQueryString(contents);

            if (!parameters.AllKeys.Contains("oauth_token") || !parameters.AllKeys.Contains("oauth_token_secret"))
            {
                MessageService.ShowError(Localization.Resources.ErrorClientTokens);
                GoBack();
                return;
            }

            UserToken Token = new UserToken
            {
                Key = parameters["oauth_token"],
                Secret = parameters["oauth_token_secret"],
                Preferences = new NotificationPreferences
                {
                    MentionsPreferences = NotificationType.TileAndToast,
                    MessagesPreferences = NotificationType.TileAndToast
                }
            };

            var filler = new UserTokenFiller(Token);
            filler.UserDataFilled += new UserTokenFiller.OnUserDataFilled(InsertTokenIntoAccounts);
            filler.FillUserData();
        }
示例#12
0
 public ConversationService(UserToken token)
 {
     service = ServiceDispatcher.GetService(token);
 }
示例#13
0
文件: GroupedDM.cs 项目: Quertz/Ocell
 public GroupedDM(IEnumerable<TwitterDirectMessage> list, UserToken mainUser)
     : this(mainUser)
 {
     Messages.BulkAdd(list);
 }
示例#14
0
 private NotificationType PreferencesForType(TweetType type, UserToken user)
 {
     if (type == TweetType.Mention)
         return user.Preferences.MentionsPreferences;
     else
         return user.Preferences.MessagesPreferences;
 }
示例#15
0
        public static void UnregisterPushChannel(UserToken user, string type)
        {
            HttpNotificationChannel channel;
            string channelName = "OcellPushChannel";
            channel = HttpNotificationChannel.Find(channelName);

            if (channel != null)
                channel.Close();

            SendRemoveRequestToServer(user, type);
        }
示例#16
0
 public static Sharplonger.TwitlongerService GetTwitlongerService(UserToken user)
 {
     return GetTwitlongerService(user.ScreenName);
 }
示例#17
0
        private void CheckNotificationsForUser(UserToken user)
        {
            var service = new LightTwitterClient(SensitiveData.ConsumerToken, SensitiveData.ConsumerSecret, user.Key, user.Secret);
            if (user.Preferences.MentionsPreferences == NotificationType.TileAndToast
                || user.Preferences.MentionsPreferences == NotificationType.Tile)
            {
                SignalThreadStart();

                service.ListMentions(10, (statuses, response) =>
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    WriteMemUsage("Received mentions");
                    if (statuses == null || response.StatusCode != System.Net.HttpStatusCode.OK)
                    {
                        WriteMemUsage("Mentions: exit with error " + response.StatusDescription);
                        SignalThreadEnd();
                        return;
                    }

                    var CheckDate = DateSync.GetLastCheckDate();
                    var ToastDate = DateSync.GetLastToastNotificationDate();

                    if (CheckDate > ToastDate)
                        ToastDate = CheckDate;

                    var newStatuses = statuses.Where(item =>
                    {
                        return TwitterObjectIsOlderThan(item, CheckDate);
                    });

                    var newToastStatuses = statuses.Where(item =>
                    {
                        return TwitterObjectIsOlderThan(item, ToastDate);
                    });

                    if (newStatuses.Count() > 0)
                    {
                        newMentions = true;

                        if (newStatuses.Count() == 1)
                        {
                            string userstring = "";
                            if (newStatuses.FirstOrDefault().TryGetProperty("user", out userstring))
                                new TwitterObject(userstring).TryGetProperty("screen_name", out from);
                            else
                                from = "no_name";
                        }

                        if (!usersWithNotifications.Contains(user.ScreenName))
                            usersWithNotifications.Add(user.ScreenName);

                        notifications += newStatuses.Count();

                        if (user.Preferences.MentionsPreferences == NotificationType.TileAndToast && newToastStatuses.Count() > 1)
                        {
                            string toastFrom, userstring = "";
                            if (newToastStatuses.FirstOrDefault().TryGetProperty("user", out userstring))
                                new TwitterObject(userstring).TryGetProperty("screen_name", out toastFrom);
                            else
                                toastFrom = "no_name";

                            CreateToast("mention", newToastStatuses.Count(), toastFrom, user.ScreenName);
                            DateSync.WriteLastToastNotificationDate(DateTime.Now.ToUniversalTime());
                        }

                        BuildTile();

                    }

                    WriteMemUsage("Mentions: Exit with " + newStatuses.Count().ToString() + " new statuses.");
                    SignalThreadEnd();
                });
            }
            if (user.Preferences.MessagesPreferences == NotificationType.TileAndToast
                || user.Preferences.MessagesPreferences == NotificationType.Tile)
            {
                SignalThreadStart();

                service.ListMessages(10, (statuses, response) =>
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    WriteMemUsage("Received messages");

                    if (statuses == null || response.StatusCode != System.Net.HttpStatusCode.OK)
                    {
                        WriteMemUsage("Messages: exit with error " + response.StatusDescription);
                        SignalThreadEnd();
                        return;
                    }

                    var CheckDate = DateSync.GetLastCheckDate();
                    var ToastDate = DateSync.GetLastToastNotificationDate();

                    var newStatuses = statuses.Where(item =>
                    {
                        return TwitterObjectIsOlderThan(item, CheckDate);
                    });

                    var newToastStatuses = statuses.Where(item =>
                    {
                        return TwitterObjectIsOlderThan(item, ToastDate);
                    });

                    if (newStatuses.Count() > 0)
                    {
                        newMessages = true;

                        if (newStatuses.Count() == 1)
                            newStatuses.FirstOrDefault().TryGetProperty("sender_screen_name", out from);

                        if (!usersWithNotifications.Contains(user.ScreenName))
                            usersWithNotifications.Add(user.ScreenName);

                        notifications += newStatuses.Count();

                        if (user.Preferences.MessagesPreferences == NotificationType.TileAndToast && newToastStatuses.Count() > 0)
                        {
                            string toastFrom;
                            newStatuses.FirstOrDefault().TryGetProperty("sender_screen_name", out toastFrom);

                            CreateToast("message", newToastStatuses.Count(), toastFrom, user.ScreenName);
                            DateSync.WriteLastToastNotificationDate(DateTime.Now.ToUniversalTime());
                        }

                        BuildTile();

                    }

                    WriteMemUsage("Messages: Exit with " + newStatuses.Count().ToString() + " new statuses.");
                    SignalThreadEnd();
                });
            }
        }
示例#18
0
 private static IEnumerable<string> GetUserCache(UserToken user)
 {
     string filename = "AUTOCOMPLETECACHE" + user.ScreenName;
     return FileAbstractor.ReadLinesOfFile(filename);
 }
示例#19
0
 private static void SaveUserCache(UserToken user, IEnumerable<string> names)
 {
     string filename = "AUTOCOMPLETECACHE" + user.ScreenName;
     FileAbstractor.WriteLinesToFile(names, filename);
 }
示例#20
0
        static async void SendRemoveRequestToServer(UserToken token, string type)
        {
            string encoded = Library.Encrypting.EncodeTokens(token.Key, token.Secret);
            string url = string.Format(Library.SensitiveData.PushUnregisterUriFormat, Uri.EscapeDataString(encoded), type);

            var request = (HttpWebRequest)WebRequest.Create(url);

            try
            {
                var response = await request.GetResponseAsync();
            }
            catch (Exception)
            {
            }
        }
示例#21
0
 private void InsertTokenIntoAccounts(UserToken Token)
 {
     CheckIfExistsAndInsert(Token);
     CreateColumns(Token);
     GoBack();
     return;
 }
示例#22
0
        private void ReceiveTweetObjects(TweetType type, UserToken user, TwitterObjectCollection statuses, RestResponse response)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            WriteMemUsage("Received " + type.ToString());
            if (statuses == null || response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                WriteMemUsage(type.ToString() + ": exit with error " + response.StatusDescription);
                return;
            }

            var CheckDate = DateSync.GetLastCheckDate();
            var ToastDate = DateSync.GetLastToastNotificationDate();

            if (CheckDate > ToastDate)
                ToastDate = CheckDate;

            var newStatuses = statuses.Where(item => TwitterObjectIsOlderThan(item, CheckDate));
            var newToastStatuses = statuses.Where(item => TwitterObjectIsOlderThan(item, ToastDate));

            var tileStatuses = newStatuses.Select(item => TwitterObjectToNotification(type, user.ScreenName, item));
            var toastStatuses = newToastStatuses.Select(item => TwitterObjectToNotification(type, user.ScreenName, item));

            var notPrefs = PreferencesForType(type, user);

            if (notPrefs == NotificationType.Tile || notPrefs == NotificationType.TileAndToast)
                lock (notsSync)
                    tileNotifications.AddRange(tileStatuses);

            if (notPrefs == NotificationType.Toast || notPrefs == NotificationType.TileAndToast)
                lock (notsSync)
                    toastNotifications.AddRange(toastStatuses);
        }
示例#23
0
 public UserTokenFiller(UserToken token)
 {
     Token = token;
 }
示例#24
0
        public ColumnViewPivotModel(UserToken User)
        {
            user = User;
            Username = user.ScreenName;

            Resources = new SafeObservable<TwitterResource>();

            this.PropertyChanged += (sender, e) =>
                {
                    if (e.PropertyName == "SelectedResource" && selectedResource is TwitterResource)
                    {
                        if (FastAddMode)
                            AddResource((TwitterResource)selectedResource);
                        else
                            NavigateToResource((TwitterResource)selectedResource);
                    }
                };

            GenerateCoreColumns();

            GetLists();
            GetSearches();
        }
示例#25
0
        private void CheckNotificationsForUser(UserToken user)
        {
            var service = new LightTwitterClient(SensitiveData.ConsumerToken, SensitiveData.ConsumerSecret, user.Key, user.Secret);

            if (user.Preferences.MentionsPreferences != NotificationType.None)
            {
                Interlocked.Increment(ref requestsPending);
                service.ListMentions(10, (statuses, response) =>
                {
                    ReceiveTweetObjects(TweetType.Mention, user, statuses, response);
                    if (Interlocked.Decrement(ref requestsPending) == 0)
                        notificationsWaitHandle.Set();
                });
            }

            if (user.Preferences.MessagesPreferences != NotificationType.None)
            {
                Interlocked.Increment(ref requestsPending);
                service.ListMessages(10, (statuses, response) =>
                {
                    ReceiveTweetObjects(TweetType.Message, user, statuses, response);
                    if (Interlocked.Decrement(ref requestsPending) == 0)
                        notificationsWaitHandle.Set();
                });
            }
        }
示例#26
0
 public static Sharplonger.TwitlongerService GetTwitlongerService(UserToken user)
 {
     return(GetTwitlongerService(user.ScreenName));
 }