mirror of
https://github.com/chylex/TweetDuck.git
synced 2024-11-15 02:42:46 +01:00
81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
using System;
|
|
using CefSharp;
|
|
using TweetLib.Browser.Contexts;
|
|
using TweetLib.Browser.Interfaces;
|
|
using TweetLib.Core.Features.TweetDeck;
|
|
using TweetLib.Core.Features.Twitter;
|
|
|
|
namespace TweetDuck.Browser.Adapters {
|
|
sealed class CefContextMenuModel : IContextMenuBuilder {
|
|
private readonly IMenuModel model;
|
|
private readonly CefContextMenuActionRegistry actionRegistry;
|
|
|
|
public CefContextMenuModel(IMenuModel model, CefContextMenuActionRegistry actionRegistry) {
|
|
this.model = model;
|
|
this.actionRegistry = actionRegistry;
|
|
}
|
|
|
|
public void AddAction(string name, Action action) {
|
|
var id = actionRegistry.AddAction(action);
|
|
model.AddItem(id, name);
|
|
}
|
|
|
|
public void AddActionWithCheck(string name, bool isChecked, Action action) {
|
|
var id = actionRegistry.AddAction(action);
|
|
model.AddCheckItem(id, name);
|
|
model.SetChecked(id, isChecked);
|
|
}
|
|
|
|
public void AddSeparator() {
|
|
if (model.Count > 0 && model.GetTypeAt(model.Count - 1) != MenuItemType.Separator) { // do not add separators if there is nothing to separate
|
|
model.AddSeparator();
|
|
}
|
|
}
|
|
|
|
public static Context CreateContext(IContextMenuParams parameters, TweetDeckExtraContext extraContext, ImageQuality imageQuality) {
|
|
var context = new Context();
|
|
var flags = parameters.TypeFlags;
|
|
|
|
var tweet = extraContext?.Tweet;
|
|
if (tweet != null && !flags.HasFlag(ContextMenuType.Editable)) {
|
|
context.Tweet = tweet;
|
|
}
|
|
|
|
context.Link = GetLink(parameters, extraContext);
|
|
context.Media = GetMedia(parameters, extraContext, imageQuality);
|
|
|
|
if (flags.HasFlag(ContextMenuType.Selection)) {
|
|
context.Selection = new Selection(parameters.SelectionText, flags.HasFlag(ContextMenuType.Editable));
|
|
}
|
|
|
|
return context;
|
|
}
|
|
|
|
private static Link? GetLink(IContextMenuParams parameters, TweetDeckExtraContext extraContext) {
|
|
var link = extraContext?.Link;
|
|
if (link != null) {
|
|
return link;
|
|
}
|
|
|
|
if (parameters.TypeFlags.HasFlag(ContextMenuType.Link) && extraContext?.Media == null) {
|
|
return new Link(parameters.LinkUrl, parameters.UnfilteredLinkUrl);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static Media? GetMedia(IContextMenuParams parameters, TweetDeckExtraContext extraContext, ImageQuality imageQuality) {
|
|
var media = extraContext?.Media;
|
|
if (media != null) {
|
|
return media;
|
|
}
|
|
|
|
if (parameters.TypeFlags.HasFlag(ContextMenuType.Media) && parameters.HasImageContents) {
|
|
return new Media(Media.Type.Image, TwitterUrls.GetMediaLink(parameters.SourceUrl, imageQuality));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|