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); }
private void DestroyQueryMessage() { if (query_message != null) { RemoveMessage(query_message); query_message = null; } }
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)); } }
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); }
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)); } }
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; } }
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); }
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); }
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); }
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(); }
public void CancelDraft() { SourceMessage.MoveToFolder(Folders.Trash); }
public virtual void SetStatus(SourceMessage status_message, string preferences_page_id) { }
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(); }
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); }
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)); } }
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); }
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); } } }
void FaultedInteractor(SourceMessage<Exception> sourceMessage) { Log.Warn("Interactor faulted: " + sourceMessage.Source, sourceMessage.Content); RemoveInteractor(sourceMessage.Source); }