Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,18 @@ public interface IPublicAPI
/// <exception cref="FileNotFoundException">Thrown when unable to find the file specified in the command </exception>
/// <exception cref="Win32Exception">Thrown when error occurs during the execution of the command </exception>
void ShellRun(string cmd, string filename = "cmd.exe");

/// <summary>
/// Copy Text to clipboard
/// Copies the passed in text and shows a message indicating whether the operation was completed successfully.
/// When directCopy is set to true and passed in text is the path to a file or directory,
/// the actual file/directory will be copied to clipboard. Otherwise the text itself will still be copied to clipboard.
/// </summary>
/// <param name="text">Text to save on clipboard</param>
public void CopyToClipboard(string text);
/// <param name="directCopy">When true it will directly copy the file/folder from the path specified in text</param>
/// <param name="showDefaultNotification">Whether to show the default notification from this method after copy is done.
/// It will show file/folder/text is copied successfully.
/// Turn this off to show your own notification after copy is done.</param>>
public void CopyToClipboard(string text, bool directCopy = false, bool showDefaultNotification = true);

/// <summary>
/// Save everything, all of Flow Launcher and plugins' data and settings
Expand Down
5 changes: 2 additions & 3 deletions Flow.Launcher/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,11 @@ private void OnCopy(object sender, ExecutedRoutedEventArgs e)
if (QueryTextBox.SelectionLength == 0 && result != null)
{
string copyText = result.CopyText;
_viewModel.ResultCopy(copyText);

App.API.CopyToClipboard(copyText, directCopy: true);
}
else if (!string.IsNullOrEmpty(QueryTextBox.Text))
{
System.Windows.Clipboard.SetText(QueryTextBox.SelectedText);
App.API.CopyToClipboard(QueryTextBox.SelectedText, showDefaultNotification: false);
}
}

Expand Down
31 changes: 29 additions & 2 deletions Flow.Launcher/PublicAPIInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using Flow.Launcher.Infrastructure.Storage;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Collections.Specialized;

namespace Flow.Launcher
{
Expand Down Expand Up @@ -116,9 +117,35 @@ public void ShellRun(string cmd, string filename = "cmd.exe")
ShellCommand.Execute(startInfo);
}

public void CopyToClipboard(string text)
public void CopyToClipboard(string stringToCopy, bool directCopy = false, bool showDefaultNotification = true)
{
_mainVM.ResultCopy(text);
if (string.IsNullOrEmpty(stringToCopy))
return;

var isFile = File.Exists(stringToCopy);
if (directCopy && (isFile || Directory.Exists(stringToCopy)))
{
var paths = new StringCollection
{
stringToCopy
};

Clipboard.SetFileDropList(paths);

if (showDefaultNotification)
ShowMsg(
$"{GetTranslation("copy")} {(isFile ? GetTranslation("fileTitle") : GetTranslation("folderTitle"))}",
GetTranslation("completedSuccessfully"));
}
else
{
Clipboard.SetDataObject(stringToCopy);

if (showDefaultNotification)
ShowMsg(
$"{GetTranslation("copy")} {GetTranslation("textTitle")}",
GetTranslation("completedSuccessfully"));
}
}

public void StartLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Visible;
Expand Down
36 changes: 0 additions & 36 deletions Flow.Launcher/ViewModel/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1103,42 +1103,6 @@ public void UpdateResultView(IEnumerable<ResultsForUpdate> resultsForUpdates)
Results.AddResults(resultsForUpdates, token);
}

/// <summary>
/// Copies the specified file or folder path to the clipboard, or the specified text if it is not a valid file or folder path.
/// Shows a message indicating whether the operation was completed successfully.
/// </summary>
/// <param name="stringToCopy">The file or folder path, or text to copy to the clipboard.</param>
/// <returns>Nothing.</returns>
public void ResultCopy(string stringToCopy)
{
if (string.IsNullOrEmpty(stringToCopy))
{
return;
}
var isFile = File.Exists(stringToCopy);
var isFolder = Directory.Exists(stringToCopy);
if (isFile || isFolder)
{
var paths = new StringCollection
{
stringToCopy
};

Clipboard.SetFileDropList(paths);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {(isFile ? App.API.GetTranslation("fileTitle") : App.API.GetTranslation("folderTitle"))}",
App.API.GetTranslation("completedSuccessfully"));
}
else
{
Clipboard.SetDataObject(stringToCopy);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {App.API.GetTranslation("textTitle")}",
App.API.GetTranslation("completedSuccessfully"));
}
return;
}

#endregion
}
}
2 changes: 1 addition & 1 deletion Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
{
try
{
Clipboard.SetDataObject(((BookmarkAttributes)selectedResult.ContextData).Url);
context.API.CopyToClipboard(((BookmarkAttributes)selectedResult.ContextData).Url);

return true;
}
Expand Down
2 changes: 1 addition & 1 deletion Plugins/Flow.Launcher.Plugin.Calculator/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public List<Result> Query(Query query)
{
try
{
Clipboard.SetDataObject(newResult);
Context.API.CopyToClipboard(newResult);
return true;
}
catch (ExternalException)
Expand Down
7 changes: 2 additions & 5 deletions Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
{
try
{
Clipboard.SetText(record.FullPath);
Context.API.CopyToClipboard(record.FullPath);
return true;
}
catch (Exception e)
Expand All @@ -147,10 +147,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
{
try
{
Clipboard.SetFileDropList(new System.Collections.Specialized.StringCollection
{
record.FullPath
});
Context.API.CopyToClipboard(record.FullPath, directCopy: true);
return true;
}
catch (Exception e)
Expand Down
2 changes: 1 addition & 1 deletion Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
? action
: _ =>
{
Clipboard.SetDataObject(e.ToString());
Context.API.CopyToClipboard(e.ToString());
return new ValueTask<bool>(true);
}
}
Expand Down
14 changes: 9 additions & 5 deletions Plugins/Flow.Launcher.Plugin.Shell/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ public List<Result> Query(Query query)

Execute(Process.Start, PrepareProcessStartInfo(m, runAsAdministrator));
return true;
}
},
CopyText = m
}));
}
}
Expand Down Expand Up @@ -123,7 +124,8 @@ private List<Result> GetHistoryCmds(string cmd, Result result)

Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
return true;
}
},
CopyText = m.Key
};
return ret;
}).Where(o => o != null);
Expand Down Expand Up @@ -152,7 +154,8 @@ private Result GetCurrentCmd(string cmd)

Execute(Process.Start, PrepareProcessStartInfo(cmd, runAsAdministrator));
return true;
}
},
CopyText = cmd
};

return result;
Expand All @@ -176,7 +179,8 @@ private List<Result> ResultsFromHistory()

Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
return true;
}
},
CopyText = m.Key
});

if (_settings.ShowOnlyMostUsedCMDs)
Expand Down Expand Up @@ -406,7 +410,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_copy"),
Action = c =>
{
Clipboard.SetDataObject(selectedResult.Title);
context.API.CopyToClipboard(selectedResult.Title);
return true;
},
IcoPath = "Images/copy.png",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,26 +22,6 @@ internal static class ContextMenuHelper
internal static List<Result> GetContextMenu(in Result result, in string assemblyName)
{
return new List<Result>(0);
}

/// <summary>
/// Copy the given text to the clipboard
/// </summary>
/// <param name="text">The text to copy to the clipboard</param>
/// <returns><see langword="true"/>The text successful copy to the clipboard, otherwise <see langword="false"/></returns>
private static bool TryToCopyToClipBoard(in string text)
{
try
{
Clipboard.Clear();
Clipboard.SetText(text);
return true;
}
catch (Exception exception)
{
Log.Exception("Can't copy to clipboard", exception, typeof(Main));
return false;
}
}
}
}
}