APL Tablo Client

APL Tablo .11 - just giving it a work out (not particularly an issue for me)

  • Click on/open Airings.
  • Change Tags drop-down to option of your choice.
  • Make second choice, any choice, third even fourth
    image
    and it was full with I first opened it.

Re-open and I get another single choice.

+ java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml -jar APLTablo.jar
2019-08-27 19:52:19,619 [INFO ] APL Tablo .11
2019-08-27 19:52:19,619 [INFO ] Logging set at INFO
2019-08-27 19:52:19,620 [INFO ] Starting Processing
2019-08-27 19:52:19,738 [INFO ] Retrieving list of Tablos from https://api.tablotv.com/assocserver/getipinfo/
2019-08-27 19:52:20,694 [INFO ] Adding Tablo 'tablo' (192.168.1.11) Firmware 2.2.26
2019-08-27 19:52:20,694 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-27 19:52:24,770 [INFO ] Starting tablo all airing list
2019-08-27 19:52:58,157 [INFO ] Finished list
2019-08-27 19:53:20,599 [INFO ] Starting tablo all airing list
2019-08-27 19:53:53,064 [INFO ] Finished list
2019-08-27 20:00:34,876 [INFO ] Starting tablo all airing list
2019-08-27 20:01:07,257 [INFO ] Finished list
2019-08-27 20:04:02,310 [INFO ] Starting tablo all airing list
2019-08-27 20:04:34,733 [INFO ] Finished list

I believe I’ve corrected this issue with Airing filtering

Just posted .12, got all of the recording issues ironed out and updated the interface a bit. I still have a few feature requests from people on this list (I haven’t forgotten about them)…but I’m getting pretty close to needing to finish up the menu structure and call this version 1…enjoy over your long weekend (if you get one of those in the country you reside)

The only real error I can see in the Exception message filling the screen. Haven’t actually looked into it further. Scheduled is great, found shows guide tags as new, but of course aren’t. So I click to don’t record this show . Click on the second one, it’s odd there’s only 2 context menu options? I should have clicked don’t record episode.

I restarted APL Tablo twice and repeated with same results. Remove show from schedule, get error. Paid closer attention, don’t record this airing (episode) get error. Seems if I remove anything from schedule, it functions as expected - I think, but spits out an error.

hightlights” followed by full text.

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Caused by: java.lang.reflect.InvocationTargetException

Caused by: java.lang.NullPointerException

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.controls/javafx.scene.control.MenuItem.fire(MenuItem.java:465)
	at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1380)
	at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1333)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
	at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
	at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
	at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.enterNestedEventLoopImpl(Native Method)
	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._enterNestedEventLoop(GtkApplication.java:347)
	at javafx.graphics/com.sun.glass.ui.Application.enterNestedEventLoop(Application.java:509)
	at javafx.graphics/com.sun.glass.ui.EventLoop.enter(EventLoop.java:107)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(QuantumToolkit.java:591)
	at javafx.graphics/javafx.stage.Stage.showAndWait(Stage.java:465)
	at com.apl.view.MainOverviewController.handleScheduled(MainOverviewController.java:50)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
	at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
	at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
	at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8879)
	at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
	at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
	at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
	at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
	at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
	at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at javafx.graphics/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.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
	at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
	at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
	at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
	... 105 more
Caused by: java.lang.NullPointerException
	at com.apl.view.AiringController.getAirings(AiringController.java:156)
	at com.apl.view.AiringController.handleModify(AiringController.java:299)
	at com.apl.view.AiringController.handlDontRecordThisAiring(AiringController.java:287)
	... 116 more

Took me a bit to figure out where this NPE was coming from, but I’ve nailed it. I also took care of a few more places where they could be coming from and fixed that DB Init situation you reported offline. In .13, along with those fixes I added Conflict Resolution capabilities :slight_smile:

So…in regard to the ‘only two options’ report. So, on the right click on any of the Airings, I’m trying to only show you options that are relevant…so, if the item you right clicked on is scheduled, I’m not showing you the ‘schedule this airing’ option…likewise, if it’s not scheduled, I’m not offering ‘don’t record’ option. So…if on right click you think that you should have an option that you aren’t seeing, please let me know with a screen shot…that’ll be helpful :)…

Otherwise, enjoy the bug fixes and new feature of .13

I didn’t try any functions aka context menu options, time constraints. All buttons opened windows - Shows left a long screen dump. I’ve attached via email as they’re cumbersome as forum posts and are rather meaningless to everyone else.

After some offline discussion with djk44883, I’ve posted .14…a few bug fixes, a few features

This there a way to jump to a date and Time in the schedule?

On Prime time listing (All listings) Show the list - In a detailed Line with times or by Icon

I don’t currently have any sort of jump capability. In your minds eye, what would this look like or how would it function?

Sorry, I’m not entirely sure what you are asking for here

Unclear exactly if this is a statement or question.

If you want to go to a specific date. Not directly, guide schedul doesn’t seem to be currently development. Weather you mean schedule All Airings listing or recording scheduling You can sort any table by any column by clicking on it. then scroll to the date you want.

This may not be ideal, but may get you to where you’re heading. The All Airings, has a radio button to default sort by date.

I’ve just posted .15 that includes a few feature requests…we are coming dangerously close to a 1.0…are there any major issues that anyone’s having?

I exported my recordings to CSV and did the analysis below to see the commercial skip success rate by channel. Super cool :sunglasses:

Count - Size Commercial Skip
Channel Error:Internal Error:Network Error:Recption Ready Total Result
11.1 (NBC) 12 12 100.00%
11.3 (JUSTNW) 4 4 100.00%
11.4 (QUESTSD) 4 1 24 29 82.76%
2.1 (PBS) 5 5 0.00%
2.3 (PBS) 2 2 0.00%
23.1 (CW) 6 59 65 90.77%
23.2 (COMET) 2 81 83 97.59%
23.3 (CHARGE) 5 5 100.00%
23.4 (TBD) 1 1 100.00%
25.6 (GETTV) 1 1 0.00%
33.1 (BOUNCE) 2 2 0.00%
33.2 (ESCAPE) 1 1 0.00%
33.3 (LAFF) 2 2 0.00%
33.7 (GRIT) 3 3 0.00%
4.1 (CBS) 4 1 2 38 45 84.44%
4.2 (STARTTV) 14 93 107 86.92%
5.1 (ABC) 1 2 44 47 93.62%
5.2 () 2 6 73 81 90.12%
5.3 (METVN) 60 8 7 185 260 71.15%
5.4 (ANTENNA) 2 29 31 93.55%
5.6 (THIS) 10 1 39 50 78.00%
5.7 (HEROICN) 34 1 93 128 72.66%
9.1 (FOX) 8 8 100.00%
9.2 (MNT) 1 2 3 66.67%
9.3 (MVIES) 1 2 29 32 90.63%
9.5 (LIGHTTV) 1 2 3 66.67%
Total Result 134 13 42 821 1010 81.29%

Now that you know that 70% of your CS failures come from the 5.x channels what now?

5.2-5.6 were just repacked last week so fingers crossed that there will be an improvement.

Some stations that repack use that as an oppotunity to install a new transmitter and tower. And if there are other non-repack stations on the location they might get a package installation deal. Mine did. Of course it took almost 2 months to adjust the transmitters. And they have to lower everyones power output during that time.

Or maybe you will win the lottery and get the uhf to lo-vhf repack.

Luckily I have no lo-vhf to contend with. Half the 9.x and all the 11.x stations are hi-vhf and everything else is uhf.

I’m always curious about the ‘Error:Internal’ ones personally…but I always love to see what someone chooses to do with raw data…over 1000 recordings…that’s quite a bit

What does the data really mean? Is this the total since the time CS was turned? Does the the data clear if CS is turned off and on?

How are you going to fix network error, etc. etc?