APL Tablo Client

Yes, correct…26 is the one that introduces commskip, as you are on 24 you don’t have it, I’ve updated the code to account for that and not throw an error, .04 should eliminate that error for you.

So, may have been looking in the wrong direction… not everyone has their tablo’s configured the same - who’d figure.

See what happens, since it may work with …24

[edit]
I’ll have to wait to provide full feedback
silly

VICTORY! Success, to some degree. I do get a nice long list of an actual schedule!! That more than Nuvvyo provides! Not sure about the other buttons, you admitted you haven’t checked all the features. I clicked on the buttons a couple of times, so the screen is extra full. But, yes, finally have something working on a system that’s not yours :boom::full_moon_with_face::tada::fireworks:

image

1 Like

Shows Button These my be the highlights, followed by full output

2019-08-16 20:37:09,921 [INFO ] APL Tablo .04
2019-08-16 20:37:09,922 [INFO ] Starting Processing
2019-08-16 20:37:10,834 [INFO ] Adding Tablo 'tablo' (192.168.1.11)
2019-08-16 20:37:10,834 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-16 20:37:16,252 [INFO ] Starting: tablo shows list
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Caused by: java.lang.reflect.InvocationTargetException

Caused by: org.json.JSONException: JSONObject["genres"] not found.


./apltablo
2019-08-16 20:37:09,921 [INFO ] APL Tablo .04
2019-08-16 20:37:09,922 [INFO ] Starting Processing
2019-08-16 20:37:10,834 [INFO ] Adding Tablo 'tablo' (192.168.1.11)
2019-08-16 20:37:10,834 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-16 20:37:16,252 [INFO ] Starting: tablo shows list
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.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)
	... 47 more
Caused by: org.json.JSONException: JSONObject["genres"] not found.
	at org.json.JSONObject.get(JSONObject.java:520)
	at org.json.JSONObject.getJSONArray(JSONObject.java:714)
	at com.apl.model.Show.<init>(Show.java:73)
	at com.apl.Tablo.showShows(Tablo.java:240)
	at com.apl.view.ShowsController.getShows(ShowsController.java:72)
	at com.apl.view.ShowsController.getShows(ShowsController.java:68)
	at com.apl.view.MainOverviewController.handleShows(MainOverviewController.java:39)
	... 58 more

#~–~#~–~#~–~#~–~#

Recorded button…

+ java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml -jar APLTablo.jar
2019-08-16 20:45:39,812 [INFO ] APL Tablo .04
2019-08-16 20:45:39,813 [INFO ] Starting Processing
2019-08-16 20:45:40,801 [INFO ] Adding Tablo 'tablo' (192.168.1.11)
2019-08-16 20:45:40,802 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-16 20:45:46,915 [INFO ] Starting: tablo recording list
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Caused by: java.lang.reflect.InvocationTargetException

Caused by: org.json.JSONException: JSONObject["comskip"] not found.


+ java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml -jar APLTablo.jar
2019-08-16 20:45:39,812 [INFO ] APL Tablo .04
2019-08-16 20:45:39,813 [INFO ] Starting Processing
2019-08-16 20:45:40,801 [INFO ] Adding Tablo 'tablo' (192.168.1.11)
2019-08-16 20:45:40,802 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-16 20:45:46,915 [INFO ] Starting: tablo recording list
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.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)
	... 47 more
Caused by: org.json.JSONException: JSONObject["comskip"] not found.
	at org.json.JSONObject.get(JSONObject.java:520)
	at org.json.JSONObject.getJSONObject(JSONObject.java:732)
	at com.apl.model.Recording.<init>(Recording.java:116)
	at com.apl.Tablo.showRecorded(Tablo.java:420)
	at com.apl.view.RecordingsController.getRecordings(RecordingsController.java:101)
	at com.apl.view.MainOverviewController.handleRecorded(MainOverviewController.java:59)
	... 58 more

Ok…I’ve fixed those errors as well. The biggest problem I had was that I only had my Tablos to work with, and I fixed all of the issues with JSON regularity in that and mine functions perfectly…as soon as I let it out in the wild I’ve been dealing with different configurations (remote access not defined), which is expected…but the one that’s throwing me most is the JSON differences…I understand comskip…that was a 26 thing…but genres? Why would your JSON not include that?..either way, it’s likely something to do with not running 26…no biggie.

I have put .05 out there this morning, hopefully it allows all 3 of the buttons to function :slight_smile:

:fireworks::tada::boom:
I’ve made myself take care of my household business (like it’s really a day off). Since I’m easily distracted, I’m going to have to leave that system along until later… see I can’t even not see if there’s an update.

I’ve refrained from the upgrade, I have no use for commercial skip*. I wasn’t sure how 2.2.26 would interact with the 3rd party tools I had been using (no updates, so probably no issues). Everything is working great. In a post, it had been suggested:

In the case of this release, those ‘improvements’ include tweaks required to add Tablo QUAD into the lineup, code to support manual recordings on Roku (which is in the Roku notes) and many, many other things.

So I left well enough alone. There may be no real reason not to upgrade.

*

I watch shows via a media PC, using smplayer. It has configurable keys for jump, not FF, for 1min, 30sec, 15sec. For me, a few 1minute taps to jump through commercial. As lazy as I am, it’s not exhaustive… like clicking on another show to play.

1 Like

hey…I’m not here to tell you how to run your system by any means :D…I just assumed everyone WOULD upgrade, so what was on my 26 should work on a majority of other Tablos…and honestly, based on what I read from Tablo themselves…90+% of users are upgraded, so that’s certainly a majority…but whatever your reasons are, they are legitimate to you :D. It’ll be good for my app to be able to work on older firmwares anyway, gives it more flexibility.

Break-time, ok let’s see what we’ve got now… hey that’s exactly the same - :poop: du-du head didn’t download the updated version.

Changelog tells me about v0.5 click the button and ask what I want to do with APLTablo-.04.zip …now you :poop: oversight :exploding_head: .

I just used the Scheduled button - it works! To sort through show I have scheduled to record… wow it sure is great how you order things in “calendar” order instead of episode order! Oh, you have a Scheduled Button, Tablo has a Scheduled Tab. I accept typical consumers don’t always follow logical progression, so I’ll tone done my sarcasm.

It’s a great tool for sorting what’s already come back around, or has fallen off the ‘don’t record duplicates’ list.

My bad, did everything except hit the update button, updated

1 Like

to be clear… I was running it before evening trying to download the update that wasn’t there :neutral_face:
[edit]
VICTORY! SUCCESS!

+ java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml -jar APLTablo.jar
2019-08-17 14:18:06,364 [INFO ] APL Tablo .05
2019-08-17 14:18:06,365 [INFO ] Starting Processing
2019-08-17 14:18:06,461 [INFO ] Retrieving list of Tablos from https://api.tablotv.com/assocserver/getipinfo/
2019-08-17 14:18:07,375 [INFO ] Adding Tablo 'tablo' (192.168.1.11)
2019-08-17 14:18:07,375 [INFO ] Loaded 1 Tablos with 2 tuners
2019-08-17 14:18:11,684 [INFO ] Starting: tablo shows list
2019-08-17 14:18:18,231 [INFO ] Starting Show DB Updates
2019-08-17 14:18:18,278 [INFO ] Finished shows list (661)
2019-08-17 14:18:44,662 [INFO ] Starting: tablo recording list
2019-08-17 14:18:45,552 [INFO ] Starting Recording DB Updates
2019-08-17 14:18:45,597 [INFO ] Finished recording list
2019-08-17 14:18:45,617 [INFO ] Starting HD data collection

I didn’t test beyond basic buttons on the initial window!! Absolutely NO error not even a warning message!

1 Like

wow cool. 149.9% used disk space :slight_smile: Is that what tablo is reporting? I tried debug mode but it didn’t provide any more info on disk capacity. Running .05.

2019-08-17 12:27:47,673 [INFO ] Starting HD data collection
2019-08-17 12:27:47,739 [INFO ] TabloTV2 80.95% of 1922GB
2019-08-17 12:27:47,795 [INFO ] TabloTV1 149.90% of 2884GB
2019-08-17 12:27:47,852 [INFO ] TabloTV0 40.76% of 1922GB

That’s being reported by the Tablo, I can certainly add more detail, but it’s pretty simple math, it’s used/total, but I can put all of the info the tablo provides in the debug in a future version

Oh, mine stops with

2019-08-17 16:40:14,659 [INFO ] Starting HD data collection

@andersonas25 you can retrieve HD info from your tablo in JSON format at (of course using your own tablo or IP) and see what it’s sending.

http://tablo.lan:8885/server/harddrives

What does the lif show the error is?

As noted previously, no error or warning - stops at Starting HD data collection, unless I click another button, the just more info as expected.

If this tied to my outdated firmware, I don’t want to be the source of headaches.
If this is related to the “genres” issue (genres is meaningless to me)
image
I have an empty column, along with the blank HD info. Concerns me enough to wonder did field positions get shifted just that much from .24 to .26? or is it something else altogether?

 capto -i
[capto] name: tablo
[capto] ip: 192.168.1.11
[capto] version: 2.2.24
[capto] guide last updated: Sat Aug 17 03:01 2019
[capto] drive: WDC WD50 00AZRX-00A8LB0 1A01 (500 GB)
[capto] usage: 25.05GB / 469.32GB (444.27GB free) [312.88 hours]
[capto] tuners:
[capto] 	[1] Not in use
[capto] 	[2] Not in use

it’s there and obtainable. So let’s not get too tied up getting new software backwards compatible if it keeps you from moving forward.

measurements from the one listed as 149% It looks correct.

measurements
capacity 2953372
limit 2953372
used 1769743
free 1183629

are those percentages %used of Total
less likely %free(space available) of Total

Do you need/want to know how much you have stored up… or how much more recordings you can store before you need to look into cleaning up? :thinking:

I presume the Resolution column in Recorded Shows is relative to channel information? As actual recorded resolution may be limited by Recording Quality under General in tablo’s settings
image image
I should never actually have a recording with a resolution hd_1080. I guess it can show possible max resolution, up to you settings, maybe.

Actually it’s airing details, specifying channel info. Sometimes my OCD acts up a bit :slightly_frowning_face:

So…it took me about 15 reads and a clear head this morning to realize the sarcasm…I don’t really like to think of myself a slow on the uptake…but, here ya go. I have it sorted as calendar so I can easily see ‘what’s being recorded today’…but I also allow you to sort by title, which I think gives you the ability to sort by show/episode, if that is your desired ‘upcoming’ listing you would like to see :slight_smile: