Code Monkey home page Code Monkey logo

gitlabtimetracker's People

Contributors

emanguy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

emrul

gitlabtimetracker's Issues

Issue updates get lost when changing filters

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.

Slack Integration

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:

  • Add an options dialog which can be used to configure the slack integration
    • User should be able to turn the slack integration on and off
    • User should be able to choose a generic status to set while tracking time
    • User should be able to inject variables into the status - issue ID, issue title

Issue appears in another project

If you start tracking an issue, switch to another project, then stop tracking it it will appear in the other project's issue list.

Add refresh button for issues

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

Add icons for buttons so the interface isn't so full of text, improve UI

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:

  • "Settings" button in the user display should be a gear
  • "Go to project" on the projects in the list should be some sort of "external link" button
  • "Start" buttons on issues in the list should be "play button" icons
  • "Stop and submit" button at the bottom should be a combined "stop" icon with a checkmark in the corner
  • "Refresh" button in the filter bar should be a looped arrow pointing at itself
  • "Find issue in project" button should be a magnifying glass. If possible, an octothorpe should be in the center of the glass

Additionally, I should make the following improvements to the filter bar:

  • The label for "issue name/number" should just be the placeholder in the text box
    • I don't think I'll do this after all

Finally, there's this requirement:

  • All icon buttons should have tooltip text containing the label of what they used to be

Error on first time run when logged on a private gitlab server.

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)`

Add an optional persistent tracker widget/system tray entry that stays on top of other windows

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:

  • Add a button to the time tracking bar at the bottom which pops out the mini-tracker
  • Mini tracker should always be on top of other windows
  • Add an entry to the settings for auto-launching the mini-tracker
  • The mini tracker should primarily show the amount of time spent on the current issue. If there's space, show the issue title and number in small text on the mini-tracker.
  • Time spent should be able to be submitted from the mini-tracker.
  • If there is space, also provide triggers for the "cancel recording" and "stop and edit" options on the mini-tracker.

Add support for recording time on an arbitrary issue

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.

Add a "clear field" button for the issue number field

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.

Add loading spinners

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.

Add activity log

I should add an activity log to the time tracker that presents a persistent summary of tracked issues on a timeline.

Requirements:

  • Show issues tracked by project, starting from the most recent entry going backwards
  • Provide a button to remove entries from the activity log
  • Delete entries older than 30 days
  • Entries should show issue number, start time, stop time, and duration
  • Entries should provide links to the tracked issue like the issue list does

Add support for pinning projects

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

Add buttons for additional control over time submitted

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:

  • Add a button which stops the timer and does not submit time (cancel)
  • Add a button which stops the timer and shows a popup allowing the user to edit the amount of time spent on an issue (edit & submit)

Add more testing for the time tracker

I need to add more and better testing for the controllers on the time tracker. I should probably:

  • Have the controllers retrieve the GitlabAPI via scope
  • Write unit tests for IssueController/ProjectController and inject a mocked GitlabAPI which has its own internal issue state that mutates when GitlabAPI methods are invoked

Add "retry" button on dialog when first loading up the time tracker

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.

Update GitLab status when working on issues

GitLab has support for setting statuses like Slack does, and as of 13.8 you can mark yourself "busy". I should add support for updating your GitLab status as well and setting a "busy" status.

image

Show issue weight in the time tracker

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.