manictime / manictime-client-plugin-example Goto Github PK
View Code? Open in Web Editor NEWManicTime Client plugin examples
ManicTime Client plugin examples
Just going through trying to create a plugin for listing all open tickets assigned to me from a ticket management system, and present them in ManicTime as tags. This is pretty easy, no problem there. Though I did notice, that if I selectively pull one tag from the list, and not the entire TagSourceItem
entry, I don't get any of the HiddenTagLabel
the example has, so that's not going to work for exporting my items afterward. Fortunately it's not a big deal to simply regex the tags, and look for a anything matching the format the external ticketing systems uses for ticket numbers.
However now I'm trying to export the activities out to the time management system and I'm running into issues. I'd like to update the information in ManicTime so that I add another tag to any activities that have been newly exported. But all of the methods for updating groups expect a full Group
object instance, or Dictionary<string, Group>
, which I'm not sure where that comes into play here?
I see methods for updating, setting, adding, but none of their signatures seem to be really intuitive on how to use them when I'm running the export. Given the example, is it possible to modify the TagActivity
s returned by (or inside of) the example TagsExporter.ExportTags()
method?
Is there a way to change the color or the notes of a tag through the Plugin?
Since the new version of ManicTime the Tracker Plugin will give the error CS0117.
And even when Building the Tag Plugin, the Window to send the Tags disappeared.
Are the Timeline plugin "How to use" instructions correct?
I am asking because when I am on the step "3. Click on Add timeline button", then I do not see the "Timeline plugin example" that is displayed in the step's screenshot.
My "db folder" is at "C:\Users\jon\AppData\Local\Finkit\ManicTime". Here are the 11 files for the plugin that I have within that folder . As far as I can tell, their paths match the path that is in the instructions.
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\PluginIcon.png
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\PluginSpec.json
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\Finkit.ManicTime.Client.dll
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\Finkit.ManicTime.Common.dll
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\Finkit.ManicTime.Shared.dll
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\PluginIcon.png
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\PluginSpec.json
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\TagPlugins.Core.dll
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\TimelinePlugins.TrayTagStopwatch.dll
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\TimelinePlugins.TrayTagStopwatch.dll.config
\Plugins\Packages\TimelinePlugins.TrayTagStopwatch\Lib\TimelinePlugins.TrayTagStopwatch.pdb
I am also attaching the files to this issue.
Packages.zip
I tried exiting ManicTime and restarting ManicTime before looking. I tried restarting my entire computer before looking. Neither made any difference.
So... when I go to my "Add Timeline" dialog window, why do I not see the "Timeline plugin example" item?
Incidentally, I did open the "Plugin manager", and I do not see the plugin there. It is not in the "Installed plugins" tab, and it is not in the "More plugins" tab.
I'm generally having a lot of issues running the Tag Plugin in ManicTime v4.7.5.1
This stack trace is the first issue that I ran into, and I'm wondering if this repo has not been updated to account for some changes in the plugin api.
Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 'Finkit.ManicTime.Common.IEventHub' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Finkit.ManicTime.Shared.ObjectBuilding.ComponentContextExtensions.ResolveUnregistered(IComponentContext container, Type serviceType, IDictionary`2 parameters)
at Finkit.ManicTime.Shared.ObjectBuilding.AutofacObjectBuilder.Build(Type objectType, ConstructorParameter[] parameters)
at Finkit.ManicTime.Shared.Plugins.ServiceProviders.PluginCommands.PluginCommandRegistry.<>c__DisplayClass7_0.b__0(Type t)
at System.Linq.Utilities.<>c__DisplayClass2_0`3.b__0(TSource x)
at System.Linq.Enumerable.SelectIPartitionIterator`2.PreallocatingToArray(Int32 count)
at System.Linq.Enumerable.SelectIPartitionIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Finkit.ManicTime.Shared.Plugins.ServiceProviders.PluginCommands.PluginCommandRegistry.ResolveCommands(IEnumerable`1 commandTypes, PluginSpec spec)
at Finkit.ManicTime.Shared.Plugins.ServiceProviders.PluginCommands.PluginCommandRegistry.b__6_0(KeyValuePair`2 kv)
at System.Linq.Enumerable.SelectEnumerableIterator`2.ToArray()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Finkit.ManicTime.Shared.Plugins.ServiceProviders.PluginCommands.PluginCommandRegistry.ResolveCommands()
at Finkit.ManicTime.Client.Views.MainView.PluginMenu.PluginMenuViewModel.EnumerateItems()+MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Finkit.ManicTime.Client.Views.MainView.PluginMenu.PluginMenuViewModel.EnsureLoaded()
at Finkit.ManicTime.Client.Views.MainView.PluginMenu.PluginMenuViewModel.GetEnumerator()
at Finkit.ManicTime.Client.Views.MainView.PluginMenu.PluginMenuViewModel.System.Collections.IEnumerable.GetEnumerator()
at MS.Internal.Data.EnumerableCollectionView.LoadSnapshotCore(IEnumerable source)
at MS.Internal.Data.EnumerableCollectionView..ctor(IEnumerable source)
at MS.Internal.Data.ViewManager.GetViewRecord(Object collection, CollectionViewSource cvs, Type collectionViewType, Boolean createView, Func`2 GetSourceItem)
at MS.Internal.Data.DataBindEngine.GetViewRecord(Object collection, CollectionViewSource key, Type collectionViewType, Boolean createView, Func`2 GetSourceItem)
at System.Windows.Data.CollectionViewSource.GetDefaultCollectionView(Object source, Boolean createView, Func`2 GetSourceItem)
at System.Windows.Data.CollectionViewSource.GetDefaultCollectionView(Object source, DependencyObject d, Func`2 GetSourceItem)
at System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value, Func`2 GetSourceItem)
at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp)
at System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange)
at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
at System.Windows.Data.BindingExpression.Activate(Object item)
at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
at System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Run(Object arg)
at MS.Internal.Data.DataBindEngine.OnLayoutUpdated(Object sender, EventArgs e)
at System.Windows.ContextLayoutManager.fireLayoutUpdateEvent()
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
at System.Windows.Interop.HwndSource.SetLayoutSize()
at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
at System.Windows.Window.SetRootVisual()
at System.Windows.Window.SetRootVisualAndUpdateSTC()
at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
at System.Windows.Window.CreateSourceWindowDuringShow()
at System.Windows.Window.SafeCreateWindowDuringShow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Window.Show()
at Finkit.ManicTime.Client.Main.Logic.MainWindowController.ActivateMainWindow(Boolean activateAsTopmost)
at Finkit.ManicTime.Client.Logic.ClientApplication.ManicTimeClient.ApplicationController.ActivateMainWindow()
at Finkit.ManicTime.Client.Logic.ClientApplication.ManicTimeClient.ApplicationController.ShowMainWindow()
at Finkit.ManicTime.Client.Logic.ClientApplication.ManicTimeClient.ClientApplicationInstance.Run()
at Finkit.ManicTime.Client.WpfApp.App.StartApplication(StartupEventArgs e)
at Finkit.ManicTime.Client.WpfApp.App.Application_Startup(Object sender, StartupEventArgs e)
at System.Windows.Application.OnStartup(StartupEventArgs e)
at System.Windows.Application.<.ctor>b__1_0(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)System.Object:
***ManicTime Version 4.7.5.1
Please update the .json file(s) provided so that they target the latest version.
Come to think of it, the .dlls provided are also out of date. please can they be updated too?
Looking to make a Tag plugin. I cloned your plugin example and followed your "How to use" page on GitHub. I will dig into this further...
System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
at System.Reflection.Assembly.LoadFile(String path)
at Finkit.ManicTime.Shared.Plugins.ServiceProviders.ServiceProviderAssemblyLoader.EnsureAssembliesLoaded(IEnumerable`1 pluginAssemblyFileNames)
***ManicTime Version 4.0.15.0
Not a direct issue, more of a question regarding potential future changes in the Plugin Code Basis.
We are working on a TagPlugin and are currently working on the GUI, which, as of now, opperates on WPF. However, one of our senior developers mentioned that WPF might be mostly replaced by .NET MAUI across the .NET World in the near future. So we are wondering whether you plan on moving ManicTime, and the Code Basis of the Plugin(s), to MAUI any time soon or whether you will just stick to WPF?
Building and installing the sample TagSource plugin results in this error being displayed in the plugin manager
Is there a way to access AutoTag activity via a plugin?
I've written a plugin based on the SampleTagPlugin exporter which connects to the Harvest timetracking API and adds tag activity as Harvest Time Entries, which all works perfectly. However I'm only able to get tag activity for manually added tags, but my ManicTime workflow relies solely on AutoTags. I'd rather not have to constantly send autotags to tags in the GUI so my time gets picked up by my plugin.
I've looked at editing GetTagActivitiesAsync()
to try and make it get activity from the AutoTag timeline but with no success. What would be the correct way to achieve this? Thanks.
I'm having trouble getting the timeline example to show up in ManicTime. Here's what I did:
$REPO
)$REPO\source\timeline-plugin\TimelinePlugin.sln
)$REPO\installable-plugin\Plugins\Packages\
to C:\Users\me\AppData\Local\Finkit\ManicTime\Plugins
. (Note that there was no "Packages" directory before I did this; the Plugins
folder only contained Cache
, Cache.UI
, and Storage
directories.)PluginSpec.json
file: C:\Users\me\AppData\Local\Finkit\ManicTime\Plugins\Packages\ManicTime.TagSource.SampleTagPlugin\PluginSpec.json
. There is a Lib
folder there as well, which has some binaries in it.Did I miss a step? Perhaps the folder structure has changed since the README was written for the timeline example?
where can i find the api documentation for the libs?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.