internal static void NotifyRetweetRetweeted(TwitterUser source, TwitterUser target, TwitterStatus status)
        {
            if (MuteBlockManager.IsBlocked(source) || MuteBlockManager.IsOfficialMuted(source))
            {
                return;
            }
            if (!Setting.NotifyBackfilledTweets.Value && status.CreatedAt < App.StartupDateTime)
            {
                // backfilled tweets
                return;
            }
            var original = status.RetweetedStatus;

            if (original == null)
            {
                return;
            }
            Task.Run(() => UserProxy.StoreUser(source));
            Task.Run(() => StatusModel.UpdateStatusInfo(
                         original.Id,
                         model => model.AddRetweetedUser(source), _ =>
            {
                StatusProxy.AddRetweeter(original.Id, source.Id);
                StatusBroadcaster.Republish(original);
            }));
            Head.NotifyRetweetRetweeted(source, target, status);
        }
        internal static void NotifyRetweetFavorited(TwitterUser source, TwitterUser target, TwitterStatus status)
        {
            if (MuteBlockManager.IsBlocked(source) || MuteBlockManager.IsOfficialMuted(source))
            {
                return;
            }
            if (!NotificationLatch.CheckSetPositive(NotificationLatchTarget.Favorite, source.Id, status.Id))
            {
                return;
            }
            var original = status.RetweetedStatus;

            if (original == null)
            {
                return;
            }
            Task.Run(() => UserProxy.StoreUser(source));
            Task.Run(() => StatusModel.UpdateStatusInfo(
                         original.Id,
                         model => model.AddFavoritedUser(source), _ =>
            {
                StatusProxy.AddFavoritor(original.Id, source.Id);
                StatusBroadcaster.Republish(original);
            }));
            Head.NotifyRetweetFavorited(source, target, status);
        }
Exemple #3
0
 internal static void NotifyUserUpdated(TwitterUser source)
 {
     if (MuteBlockManager.IsBlocked(source))
     {
         return;
     }
     Head.NotifyUserUpdated(source);
 }
Exemple #4
0
        internal static void StartAcceptNewArrival(TwitterStatus status)
        {
            // check muted or blocked
            if (MuteBlockManager.IsUnwanted(status))
            {
                return;
            }

            lock (_acceptingArrivals)
            {
                _acceptingArrivals[status.Id] = new List <TabModel>();
            }
        }
Exemple #5
0
 internal static void NotifyUnblocked(TwitterUser source, TwitterUser target)
 {
     if (MuteBlockManager.IsBlocked(source))
     {
         return;
     }
     if (!NotificationLatch.CheckSetNegative(
             NotificationLatchTarget.Block, source.Id, target.Id))
     {
         return;
     }
     Head.NotifyUnblocked(source, target);
 }
 internal static void NotifyMuted(TwitterUser source, TwitterUser target)
 {
     if (MuteBlockManager.IsBlocked(source) || MuteBlockManager.IsOfficialMuted(source))
     {
         return;
     }
     if (!NotificationLatch.CheckSetPositive(
             NotificationLatchTarget.Mute, source.Id, target.Id))
     {
         return;
     }
     Head.NotifyMuted(source, target);
 }
Exemple #7
0
 private static async Task <IEnumerable <TwitterStatus> > FindCache(
     Func <TwitterStatus, bool> predicate, long?maxId = null, bool applyMuteBlockFilter = true)
 {
     if (maxId != null)
     {
         var op = predicate;
         predicate = s => op(s) && s.Id < maxId;
     }
     if (applyMuteBlockFilter)
     {
         var op = predicate;
         predicate = s => op(s) && !MuteBlockManager.IsUnwanted(s);
     }
     return(await Task.Run(() => _statusQueue.Find(predicate)).ConfigureAwait(false));
 }
 internal static void NotifyQuoted(TwitterUser source, TwitterStatus original, TwitterStatus quote)
 {
     if (MuteBlockManager.IsBlocked(source) || MuteBlockManager.IsOfficialMuted(source))
     {
         return;
     }
     if (!Setting.NotifyBackfilledTweets.Value &&
         quote.CreatedAt < App.StartupDateTime)
     {
         // backfilled tweets
         return;
     }
     Task.Run(() => UserProxy.StoreUser(source));
     Head.NotifyQuoted(source, original, quote);
 }
Exemple #9
0
 internal static void NotifyRetweeted(TwitterUser source, TwitterStatus status)
 {
     if (MuteBlockManager.IsBlocked(source))
     {
         return;
     }
     Task.Run(() => UserProxy.StoreUser(source));
     Task.Run(() => StatusModel.UpdateStatusInfo(
                  status.Id,
                  model => model.AddRetweetedUser(source), _ =>
     {
         StatusProxy.AddRetweeter(status.Id, source.Id);
         StatusBroadcaster.Republish(status);
     }));
     Head.NotifyRetweeted(source, status);
 }
Exemple #10
0
        private static async void StatusPump()
        {
            StatusNotification n;

            while (true)
            {
                _signal.Reset();
                while (_queue.TryDequeue(out n) && !_isHaltRequested)
                {
                    var status = n.Status;
                    if (n.IsAdded && status != null)
                    {
                        if (Setting.UseLightweightMute.Value && MuteBlockManager.IsUnwanted(status))
                        {
                            // muted
                            continue;
                        }
                        // check registered as removed or not
                        var removed = IsRegisteredAsRemoved(status.Id) ||
                                      (status.RetweetedStatus != null &&
                                       IsRegisteredAsRemoved(status.RetweetedStatus.Id));
                        // check status is registered as removed or already received
                        if (removed || !await StatusReceived(status).ConfigureAwait(false))
                        {
                            continue;
                        }
                        StatusBroadcaster.Enqueue(n);
                    }
                    else
                    {
                        StatusDeleted(n.StatusId);
                    }
                    // post next
                    _signal.Reset();
                }
                if (_isHaltRequested)
                {
                    break;
                }
                _signal.Wait();
            }
            _signal.Dispose();
        }
Exemple #11
0
        private static void StatusPump()
        {
            StatusModelNotification notification;

            while (true)
            {
                _signal.Reset();
                while (_queue.TryDequeue(out notification) && !_isHaltRequested)
                {
                    var status = notification.StatusModel?.Status;
                    var added  = notification.IsAdded && status != null;
                    if (added && MuteBlockManager.IsUnwanted(status))
                    {
                        // MUTE CAPTURE
                        System.Diagnostics.Debug.WriteLine("*** Mute or Block Capture: " + status);
                        continue;
                    }
                    if (added && notification.IsNew)
                    {
                        NotificationService.NotifyReceived(status);
                        NotificationService.StartAcceptNewArrival(status);
                    }
                    _broadcastSubject.OnNext(notification);
                    if (!added)
                    {
                        NotificationService.NotifyDeleted(notification.StatusId, status);
                    }
                    else if (notification.IsNew)
                    {
                        NotificationService.EndAcceptNewArrival(status);
                    }
                    _signal.Reset();
                }
                if (_isHaltRequested)
                {
                    break;
                }
                _signal.Wait();
            }
            _signal.Dispose();
            _broadcastSubject.OnCompleted();
        }
Exemple #12
0
 internal static void NotifyUnfavorited(TwitterUser source, TwitterStatus status)
 {
     if (MuteBlockManager.IsBlocked(source))
     {
         return;
     }
     if (!NotificationLatch.CheckSetNegative(
             NotificationLatchTarget.Favorite, source.Id, status.Id))
     {
         return;
     }
     Task.Run(() => StatusModel.UpdateStatusInfo(
                  status.Id,
                  model => model.RemoveFavoritedUser(source.Id), _ =>
     {
         StatusProxy.RemoveFavoritor(status.Id, source.Id);
         StatusBroadcaster.Republish(status);
     }));
     Head.NotifyUnfavorited(source, status);
 }
        internal static void StartAcceptNewArrival(TwitterStatus status)
        {
            // check muted or blocked
            if (MuteBlockManager.IsUnwanted(status))
            {
                return;
            }

            if (!Setting.NotifyBackfilledTweets.Value &&
                status.CreatedAt < App.StartupDateTime)
            {
                // backfilled tweets
                return;
            }

            lock (_acceptingArrivals)
            {
                _acceptingArrivals[status.Id] = new List <TabModel>();
            }
        }
Exemple #14
0
        public static void PostInitialize()
        {
            // initialize subsystems
            StatisticsService.Initialize();
            PostLimitPredictionService.Initialize();
            MuteBlockManager.Initialize();
            StatusBroadcaster.Initialize();
            StatusInbox.Initialize();
            AutoUpdateService.StartSchedule();
            NotificationService.Initialize();
            UINotificationProxy.Initialize();

            // activate plugins
            PluginManager.LoadedPlugins.ForEach(p => p.Initialize());

            // activate scripts
            ScriptingManagerImpl.Initialize();

            // other core systems initialize
            ReceiveManager.Initialize();
            TwitterConfigurationService.Initialize();
            BackstageModel.Initialize();
        }
Exemple #15
0
 private bool CheckAcceptStatus(TwitterStatus status)
 {
     return(!MuteBlockManager.IsUnwanted(status) && CheckAcceptStatusCore(status));
 }