emanguy / gitlabtimetracker Goto Github PK
View Code? Open in Web Editor NEWAllows you to record time on GitLab issues with less effort.
Allows you to record time on GitLab issues with less effort.
Rather than the current behavior where we unset the milestone during an issue refresh, I should try to re-detect the currently selected milestone and retain it if it still exists, or unset it otherwise.
When we update an issue's spent time we also update it in the list of issues. However, we only do so in the filtered issue list and not the unfiltered issue list. This means if we change the filter in the time tracker an incorrect amount of time is shown on the issue until we switch back and forth between projects.
It appears that in version 1.3.1 of Gitlab Time Tracker, the "could not reach gitlab" dialog no longer shows when first signing in to the app.
When user is tracking time, they should be able to optionally set their slack status to say they're working on tickets. So the requirements should be:
If you start tracking an issue, switch to another project, then stop tracking it it will appear in the other project's issue list.
Issue estimates are not reloaded unless the project is changed. We should add a refresh button so we can update the estimates in the app
I should replace the excessive amount of text on controls in the gitlab time tracker to both conserve space and make it look a little more pretty. The controls I should add icons for are:
Additionally, I should make the following improvements to the filter bar:
Finally, there's this requirement:
When submitting time spent on an issue, if GitLab cannot be reached we get the "sorry, couldn't reach gitlab" message rather than the message that tells you what the spend command is
Projects consider both milestones created at the project level and at the group level. We should pull milestones from both sources.
After selecting any project, I got this.
running GitLab Enterprise Edition 13.8.1-ee
`mar 04, 2021 2:43:41 PM tornadofx.DefaultErrorHandler uncaughtException
GRAVE: Uncaught error
java.lang.NoClassDefFoundError: com/sun/javafx/scene/control/skin/TableColumnHeader
at tornadofx.NodesKt.isInsideRow(Nodes.kt:488)
at tornadofx.ListViewKt$onUserSelect$1.handle(ListView.kt:31)
at tornadofx.ListViewKt$onUserSelect$1.handle(ListView.kt)
at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3564)
at javafx.scene.Scene$ClickGenerator.access$8200(Scene.java:3492)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3860)
at javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
at javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.scene.control.skin.TableColumnHeader
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 38 more
mar 04, 2021 2:43:47 PM tornadofx.DefaultErrorHandler uncaughtException
GRAVE: Uncaught error
java.lang.NoClassDefFoundError: com/sun/javafx/scene/control/skin/TableColumnHeader
at tornadofx.NodesKt.isInsideRow(Nodes.kt:488)
at tornadofx.ListViewKt$onUserSelect$1.handle(ListView.kt:31)
at tornadofx.ListViewKt$onUserSelect$1.handle(ListView.kt)
at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3564)
at javafx.scene.Scene$ClickGenerator.access$8200(Scene.java:3492)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3860)
at javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
at javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:834)`
It's annoying to have to switch between windows when tracking time to check how much time you've spent on an issue. I should add an "always on top" method of keeping track of time, most likely an always-on-top mini tracker window, or if there's a good way to show the current spent time on the system tray I could do that instead.
Requirements:
There should be a button available which allows a user to enter an issue number for a project, verify the title of the issue, then just start tracking it. It doesn't need to appear in the list, it should just be sent directly to the time tracking controller.
It's annoying to have to manually select and clear the text in the issue number filter field, I should add an in-box button that appears on the right side of the box when it's at all filled. Clicking the button should clear the text field.
I should also take care to ensure that programmatic field clears also hide the button, such as when a user chooses a different project.
The projects list and the issue list should both have some form of loading spinner turning when they're loading data so it's easier to tell when they're doing something.
I should add an activity log to the time tracker that presents a persistent summary of tracked issues on a timeline.
Requirements:
Currently, the project list sorts by last modified time which causes the project you're looking for to become buried sometimes. Users should be able to pin a project in the projects list so it always appears at the top of the list on load. This can be done on a project ID basis and should be cleared if connecting to a different gitlab server
We can only update time spent on tickets right now in the time tracker, we should also add the capability to update the estimated spend as well.
I frequently forget to turn off the timer or get distracted and don't actually work on the task I'm timing for, so it would be nice to be able to:
I need to add more and better testing for the controllers on the time tracker. I should probably:
Check up on Compose for Desktop and see how easy it is in comparison with TornadoFX: https://www.jetbrains.com/lp/compose/
I believe it has Swing compatibility, so assuming Swing components can be added in JavaFX, it's possible new views and such could be done in Compose for Desktop rather than TornadoFX
The dialog that appears saying we couldn't connect to GitLab just reports the problem but doesn't provide an easy way of loading the necessary data. I should add a "retry" button to the "couldn't connect to GitLab" dialog so the user doesn't need to restart the program to get to the time recording software.
Following on to #36, if we can update time estimates on issues we should also be able to see issue weight at a glance, because without a time estimate that can affect perception of how long the issue will take.
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.