コード例 #1
0
ファイル: MiroGuideSource.cs プロジェクト: thoja21/banshee-1
        private bool MaybeShowTeaserInPodcasts()
        {
            var manager     = ServiceManager.SourceManager;
            var podcast_src = manager.Sources.FirstOrDefault(s => s.UniqueId == "PodcastSource-PodcastLibrary");

            if (podcast_src != null)
            {
                var show = CreateSchema <bool> ("show_miro_guide_teaser_in_podcasts", true, null, null);
                if (show.Get())
                {
                    var msg = new SourceMessage(podcast_src)
                    {
                        CanClose = true,
                        Text     = Catalog.GetString("Discover interesting podcasts in the Miro Guide podcast directory!")
                    };
                    msg.SetIconName("miro-guide-source");
                    msg.AddAction(new MessageAction(Catalog.GetString("Open Miro Guide"),
                                                    delegate { manager.SetActiveSource(this); }
                                                    ));
                    msg.Updated += delegate {
                        if (msg.IsHidden)
                        {
                            show.Set(false);
                        }
                    };

                    teaser = msg;
                    podcast_src.PushMessage(msg);
                }
                return(true);
            }

            return(false);
        }
コード例 #2
0
 private void DestroyQueryMessage()
 {
     if (query_message != null)
     {
         RemoveMessage(query_message);
         query_message = null;
     }
 }
コード例 #3
0
 void HandleMulticastDataMessage(SourceMessage<MulticastData> sourceMessage)
 {
     IDictionary<Interactor, Subscription> subscribers;
     if (_subscriptionCache.TryGetValue(sourceMessage.Content.Topic, out subscribers))
     {
         foreach (var subscriber in subscribers.Keys)
             _messageBus.SendableMulticastDataMessages.OnNext(SourceSinkMessage.Create(sourceMessage.Source, subscriber, sourceMessage.Content));
     }
 }
コード例 #4
0
        void HandleNotificationRequest(SourceMessage<NotificationRequest> sourceMessage)
        {
            Log.DebugFormat("Handling notification request for {0} on {1}", sourceMessage.Source, sourceMessage.Content);

            if (sourceMessage.Content.IsAdd)
                AddNotificationRequest(sourceMessage.Source, sourceMessage.Content);
            else
                RemoveNotificationRequest(sourceMessage.Source, sourceMessage.Content);
        }
コード例 #5
0
        void ForwardSubscriptionRequests(SourceMessage<Regex> sourceMessage)
        {
            foreach (var item in _subscriptionCache.Where(x => sourceMessage.Content.Match(x.Key).Success))
            {
                Log.DebugFormat("Notification pattern {0} matched [{1}] subscribers", sourceMessage.Content, string.Join(",", item.Value));

                foreach (var subscriber in item.Value.Keys)
                    sourceMessage.Source.SendMessage(new ForwardedSubscriptionRequest(subscriber.Id, item.Key, true));
            }
        }
コード例 #6
0
ファイル: MiroGuideSource.cs プロジェクト: thoja21/banshee-1
 public void Dispose()
 {
     if (teaser != null)
     {
         var podcast_src = ServiceManager.SourceManager.Sources.FirstOrDefault(s => s.UniqueId == "PodcastSource-PodcastLibrary");
         if (podcast_src != null)
         {
             podcast_src.RemoveMessage(teaser);
         }
         teaser = null;
     }
 }
コード例 #7
0
        public bool Unmap()
        {
            StopPlayingDisc();

            foreach (TrackInfo track in DiscModel)
            {
                track.CanPlay = false;
            }

            OnUpdated();

            SourceMessage eject_message = new SourceMessage(this);

            eject_message.FreezeNotify();
            eject_message.IsSpinning = true;
            eject_message.CanClose   = false;
            // Translators: {0} is the type of disc, "Audio CD" or "DVD"
            eject_message.Text = String.Format(Catalog.GetString("Ejecting {0}..."), GenericName.ToLower());
            eject_message.ThawNotify();
            PushMessage(eject_message);

            ThreadPool.QueueUserWorkItem(delegate {
                try {
                    DiscModel.Volume.Unmount();
                    DiscModel.Volume.Eject();

                    ThreadAssist.ProxyToMain(delegate {
                        Service.UnmapDiscVolume(DiscModel.Volume.Uuid);
                        Dispose();
                    });
                } catch (Exception e) {
                    ThreadAssist.ProxyToMain(delegate {
                        ClearMessages();
                        eject_message.IsSpinning = false;
                        eject_message.SetIconName("dialog-error");
                        // Translators: {0} is the type of disc, "Audio CD" or "DVD". {1} is the error message.
                        eject_message.Text = String.Format(Catalog.GetString("Could not eject {0}: {1}"), GenericName.ToLower(), e.Message);
                        PushMessage(eject_message);

                        foreach (TrackInfo track in Model)
                        {
                            track.CanPlay = true;
                        }
                        OnUpdated();
                    });

                    Log.Exception(e);
                }
            });

            return(true);
        }
コード例 #8
0
        public bool Unmap()
        {
            StopPlayingDisc();

            foreach (TrackInfo track in disc_model)
            {
                track.CanPlay = false;
            }

            OnUpdated();

            SourceMessage eject_message = new SourceMessage(this);

            eject_message.FreezeNotify();
            eject_message.IsSpinning = true;
            eject_message.CanClose   = false;
            eject_message.Text       = Catalog.GetString("Ejecting audio CD...");
            eject_message.ThawNotify();
            PushMessage(eject_message);

            ThreadPool.QueueUserWorkItem(delegate {
                try {
                    disc_model.Volume.Unmount();
                    disc_model.Volume.Eject();

                    ThreadAssist.ProxyToMain(delegate {
                        service.UnmapDiscVolume(disc_model.Volume.Uuid);
                        Dispose();
                    });
                } catch (Exception e) {
                    ThreadAssist.ProxyToMain(delegate {
                        ClearMessages();
                        eject_message.IsSpinning = false;
                        eject_message.SetIconName("dialog-error");
                        eject_message.Text = String.Format(Catalog.GetString("Could not eject audio CD: {0}"), e.Message);
                        PushMessage(eject_message);

                        foreach (TrackInfo track in disc_model)
                        {
                            track.CanPlay = true;
                        }
                        OnUpdated();
                    });

                    Log.Exception(e);
                }
            });

            return(true);
        }
コード例 #9
0
        private void OnMetadataQueryStarted(object o, EventArgs args)
        {
            if (query_message != null)
            {
                DestroyQueryMessage();
            }

            query_message = new SourceMessage(this);
            query_message.FreezeNotify();
            query_message.CanClose   = false;
            query_message.IsSpinning = true;
            query_message.Text       = Catalog.GetString("Searching for CD metadata...");
            query_message.ThawNotify();

            PushMessage(query_message);
        }
コード例 #10
0
 internal static void SetStatus(SourceMessage status_message, LastfmSource lastfm, bool error, ConnectionState state)
 {
     status_message.FreezeNotify();
     if (error)
     {
         if (state == ConnectionState.NoAccount || state == ConnectionState.InvalidAccount || state == ConnectionState.NotAuthorized)
         {
             status_message.AddAction(new MessageAction(Catalog.GetString("Account Settings"),
                                                        delegate { lastfm.Actions.ShowLoginDialog(); }));
         }
         if (state == ConnectionState.NoAccount || state == ConnectionState.InvalidAccount)
         {
             status_message.AddAction(new MessageAction(Catalog.GetString("Join Last.fm"),
                                                        delegate { lastfm.Account.SignUp(); }));
         }
     }
     status_message.ThawNotify();
 }
コード例 #11
0
 public void CancelDraft()
 {
     SourceMessage.MoveToFolder(Folders.Trash);
 }
コード例 #12
0
 public virtual void SetStatus(SourceMessage status_message, string preferences_page_id)
 {
 }
コード例 #13
0
        private void ShowResponseMessage()
        {
            getting_response = true;

            if (response_message == null)
            {
                response_message            = new SourceMessage(this);
                response_message.CanClose   = false;
                response_message.IsSpinning = false;
                response_message.SetIconName(null);
                response_message.IsHidden = false;
            }

            PushMessage(response_message);
            response_message.FreezeNotify();
            response_message.ClearActions();

            string status_name = String.Format("<i>{0}</i>", GLib.Markup.EscapeText(Name));
            string message     = String.Format(AddinManager.CurrentLocalizer.GetString("{0} is requesting to browse your library"), Contact.Name);

            response_message.Text = String.Format(GLib.Markup.EscapeText(message), status_name);

            response_message.AddAction(new MessageAction(AddinManager.CurrentLocalizer.GetString("Accept"),
                                                         delegate {
                tube_manager.AcceptBrowseRequest();
                ResetResponseMessage();
            }));
            response_message.AddAction(new MessageAction(AddinManager.CurrentLocalizer.GetString("Reject"),
                                                         delegate {
                tube_manager.RejectBrowseRequest();
                ResetResponseMessage();
            }));

            response_message.ThawNotify();
            TelepathyNotification.Create().Show(Contact.Name,
                                                AddinManager.CurrentLocalizer.GetString("is requesting to browse your Banshee library"));

            // show notify bubble every 30 seconds
            System.Timers.Timer notify_timer = new System.Timers.Timer(30000);
            notify_timer.Elapsed += (o, a) => {
                if (!getting_response)
                {
                    notify_timer.Stop();
                }
                else
                {
                    TelepathyNotification.Create().Show(Contact.Name,
                                                        AddinManager.CurrentLocalizer.GetString("is requesting to browse your Banshee library"));
                }
            };
            notify_timer.AutoReset = true;
            notify_timer.Start();

            // pulse source every 5 seconds
            NotifyUser();
            System.Timers.Timer timer = new System.Timers.Timer(5000);
            timer.Elapsed += (o, a) => {
                if (!getting_response)
                {
                    timer.Stop();
                    notify_timer.Stop();
                }
                else
                {
                    NotifyUser();
                }
            };
            timer.AutoReset = true;
            timer.Start();
        }
コード例 #14
0
        void HandleSubscriptionRequest(SourceMessage<SubscriptionRequest> sourceMessage)
        {
            Log.DebugFormat("Received subscription from {0} on \"{1}\"", sourceMessage.Source, sourceMessage.Content);

            if (sourceMessage.Content.IsAdd)
                AddSubscription(sourceMessage.Content.Topic, sourceMessage.Source);
            else
                RemoveSubscription(sourceMessage.Content.Topic, sourceMessage.Source);
        }
コード例 #15
0
 void HandleUnicastDataMessage(SourceMessage<UnicastData> sourceMessage)
 {
     IDictionary<Interactor, Subscription> subscribers;
     if (_subscriptionCache.TryGetValue(sourceMessage.Content.Topic, out subscribers))
     {
         var subscriber = subscribers.FirstOrDefault(x => x.Key.Id == sourceMessage.Content.ClientId).Key;
         if (subscriber != null)
             _messageBus.SendableUnicastDataMessages.OnNext(SourceSinkMessage.Create(sourceMessage.Source, subscriber, sourceMessage.Content));
     }
 }
コード例 #16
0
        Message CreateMessage(int messageFolder)
        {
            Message message = IsDraft ? SourceMessage : new Message();
            var     channel = (ChannelInstance)FromAccount.SelectedItem;

            if (IsDraft)
            {
                if (message.BodyHtmlStreamName.HasValue)
                {
                    // Delete old body stream
                    ClientState.Current.Storage.Delete("m", message.BodyHtmlStreamName.ToString());
                }

                message.To.Clear();
                message.CC.Clear();
                message.BCC.Clear();
            }

            if (channel == null)
            {
                channel = MailChannels.First();
            }

            if (SourceMessage != null)
            {
                message.InReplyTo = SourceMessage.MessageIdentifier;
                message.ConversationIdentifier = SourceMessage.ConversationIdentifier;
            }
            else
            {
                message.ConversationIdentifier = Guid.NewGuid().ToConversationId();
            }

            message.Context         = ContextTextBox.Text;
            message.From            = new SourceAddress(channel.InputChannel.SourceAdress, SettingsManager.ClientSettings.AppConfiguration.Fullname);
            message.TargetChannelId = channel.Configuration.ChannelId;
            message.To.AddRange(To);
            message.CC.AddRange(CC);
            message.BCC.AddRange(BCC);

            var access = new ClientMessageAccess(message, null, GetBodyStream());

            message.BodyHtmlStreamName = access.WriteBodyHtml();
            message.BodyPreview        = access.GetBodyPreview();
            message.IsRead             = true;
            message.DateSent           = DateTime.Now;
            message.MessageFolder      = messageFolder;
            message.DateSent           = DateTime.Now;
            message.DateCreated        = DateTime.Now;

            if (AddWaitingFor && !message.IsWaitingFor)
            {
                message.AddLabel(new Label(LabelType.WaitingFor), false);
            }
            else if (!AddWaitingFor && message.IsWaitingFor)
            {
                message.RemoveLabel(message.LabelsList.First(l => l.LabelType == LabelType.WaitingFor), false);
            }

            if (SourceMessage != null)
            {
                SourceMessage.TrackAction(ActionType.ReplyForward);
            }

            return(message);
        }
コード例 #17
0
 void HandleStalePublisher(SourceMessage<IEnumerable<string>> forwardedMessage)
 {
     foreach (var staleTopic in forwardedMessage.Content)
     {
         IDictionary<Interactor, Subscription> subscribers;
         if (_subscriptionCache.TryGetValue(staleTopic, out subscribers))
         {
             var staleMessage = new MulticastData(staleTopic, true, null);
             foreach (var subscriber in subscribers.Keys)
                 subscriber.SendMessage(staleMessage);
         }
     }
 }
コード例 #18
0
 void FaultedInteractor(SourceMessage<Exception> sourceMessage)
 {
     Log.Warn("Interactor faulted: " + sourceMessage.Source, sourceMessage.Content);
     RemoveInteractor(sourceMessage.Source);
 }