Kodi Community Forum

Full Version: gdrive - Google Drive Video/Music Add-on
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
(2015-04-17, 19:54)ashlar Wrote: [ -> ]Hi! Has the download function been reimplemented in the 5.x branch?

Yes, it has, in 0.5.10 (-- Google Drive API 2 module - add support for download). Not only does it allow you to download (and playback from download) the "original" file, but it allows you to "download" and playback a transcoded copy.
(2015-04-17, 21:51)dr_cure Wrote: [ -> ]
(2015-04-17, 15:11)dmdsoftware Wrote: [ -> ]
(2015-04-17, 08:30)dr_cure Wrote: [ -> ]Also, the video cache doesn't appear to be working well in the latest beta 0.5.12 (getting lots of buffering pauses - the older plugin worked fine). The settings are slightly different, but even if I increase the buffer a lot, it doesn't appear to be buffering ahead.

For the video cache issue, are you selecting a stream or original, or are you "download" and "play from cache"?

I was using "original" and tried increasing the cache buffer to download like 10%, but I guess using original doesn't use the buffer (even when I pause the video, the buffer doesn't move forward). I like how the 0.4.8 version worked with the memoryCacheVideo option (having the ability to buffer 10% and play back in the original format).

I did not see a download and play from cache option in the main configuration menu. The only way to pull that up is to pull up the menu while selecting the video and then selecting that option vs. having a default way to play the original with a buffer. Let me try the download and play from cache option tonight again to see. But if we could set that as the default, maybe that would be good. Thanks.

Yes, the download+cache was removed as an ability to set as the default. I'll add in some option to allow you to default to it in another fix release tonight (0.5.14). Let me know if there are any other issues you run into. I'm pushing to get a 0.6.0 release (before Sunday) that ends the need to use 0.4.x. I've probably spent 40 hours this week trying to get everything polished and tested. There are some features like subtitles that I have included but disabled from activating until I can get around to testing those. Those probably won't be activated until a 0.6.1.

BTW, I'm trying to simply things as much as possible. That is why I dropped the terms disk, memory, stream, etc from playback types. The goal is to present all the playback types to the user when they play a video and also allow them to right click on a video and force playback using a specific type.
(2015-04-17, 22:00)dmdsoftware Wrote: [ -> ]Another release candidate. Has passed all regression testing. All 0.4.x functionality that could be carried over has been. This will be probably the final release before 0.6.0 where 0.4.x will become obsolete.
http://dmdsoftware.net/repository.ddurdl...0.5.13.zip


Version 0.5.13
- tested against regression bucket (pass)
- fix streamurl
- improved error handling on deleted videos
-- Google Drive API 2 module - add playback via public (not logged in)
- disable <options>; not in use anymore
- if invoked without a username or instancename, don't default on the first account but prompt the user to select
-- Google Drive API 2 module - bug fix with header authorization

Having a few issues (pretty sure that I am doing everything right, getting good at it).

1) I'm getting a script error when launching 0.5.13. All my information is correct in the settings.xml file as I can uninstall 0.13 and roll back to 0.5.12, I am able to access Google Drive and see my files using Login Type "ClientLogin".

2) I followed all your instructions for my own OAUTH2 authentication (everything matched fine). Got all the required information and put it in my settings.xml file and everything looks good on the configuration screen. But when I run the 0.5.12 script with "you own OAUTH2", I get a "Login information is incorrect or permission is denied show all" error. When I double check the permission settings here https://security.google.com/settings/sec...ions?pli=1, it says that I haven't granted any access. Not sure if the script is failing and not following through as the reason why.

I've tried it several times and created different client id and logins and used the permissions auth script & got the code fine and put in the settings.xml file, but still now luck. Used this with my client id: https://accounts.google.com/o/oauth2/aut...&client_id=[CLIENT-ID]

Any suggestions?

I'll be around all weekend, so can help you test any revisions of the script you post. Thanks for all your help.
(2015-04-18, 04:02)dr_cure Wrote: [ -> ]
(2015-04-17, 22:00)dmdsoftware Wrote: [ -> ]Another release candidate. Has passed all regression testing. All 0.4.x functionality that could be carried over has been. This will be probably the final release before 0.6.0 where 0.4.x will become obsolete.
http://dmdsoftware.net/repository.ddurdl...0.5.13.zip


Version 0.5.13
- tested against regression bucket (pass)
- fix streamurl
- improved error handling on deleted videos
-- Google Drive API 2 module - add playback via public (not logged in)
- disable <options>; not in use anymore
- if invoked without a username or instancename, don't default on the first account but prompt the user to select
-- Google Drive API 2 module - bug fix with header authorization

Having a few issues (pretty sure that I am doing everything right, getting good at it).

1) I'm getting a script error when launching 0.5.13. All my information is correct in the settings.xml file as I can uninstall 0.13 and roll back to 0.5.12, I am able to access Google Drive and see my files using Login Type "ClientLogin".

2) I followed all your instructions for my own OAUTH2 authentication (everything matched fine). Got all the required information and put it in my settings.xml file and everything looks good on the configuration screen. But when I run the 0.5.12 script with "you own OAUTH2", I get a "Login information is incorrect or permission is denied show all" error. When I double check the permission settings here https://security.google.com/settings/sec...ions?pli=1, it says that I haven't granted any access. Not sure if the script is failing and not following through as the reason why.

I've tried it several times and created different client id and logins and used the permissions auth script & got the code fine and put in the settings.xml file, but still now luck. Used this with my client id: https://accounts.google.com/o/oauth2/aut...&client_id=[CLIENT-ID]

Any suggestions?

I'll be around all weekend, so can help you test any revisions of the script you post. Thanks for all your help.

How are you inputting the "OAUTH2 code" into the plugin?
(2015-04-17, 22:00)dmdsoftware Wrote: [ -> ]How are you inputting the "OAUTH2 code" into the plugin?

Copying & pasting the results/data from my browser and directly into the settings.xml file (as plain text).
Another release with the option to force "cache" in settings among a few other tweaks.
http://dmdsoftware.net/repository.ddurdl...0.5.14.zip


Version 0.5.14
- passed regression testing: Support for Drive API 2 #21
- passed regression testing: OAUTH 2 support #20
- passed regression testing: Move to CloudService framework #16
- passed regression testing: Photo playback on Android #14
- passed regression testing: Playback fails #13
- passed regression testing: title when using mode=playvideo&title=file_name_in_drive #11
- passed regression testing: Pictures support #5
- passed regression testing: Music and Pictures? #1
-- Google Drive API 2 module - added "always cache for playback" (used to be known as memorycache)
-- Google Drive API 2 module - added "never transcode" (used to be known as playvideo -- plays original, never a stream)
(2015-04-18, 04:38)dr_cure Wrote: [ -> ]
(2015-04-17, 22:00)dmdsoftware Wrote: [ -> ]How are you inputting the "OAUTH2 code" into the plugin?

Copying & pasting the results/data from my browser and directly into the settings.xml file (as plain text).

When you go back into the settings.xml, and navigate to your entry for that account, do you see a gdrive#_auth_access_token and gdrive#_auth_refresh_token?

BTW, you can have multiple accounts defined for the same "account", so that you can play with the various login types. I have 6 accounts defined in my plugin, 4 are the same Google Account, but I have the 4 repeated across logins but using the various account types, so I can test each without having to change my settings each time. The "username" only really needs to be your username for the client login type -- for the others, it isn't actually used when talking with Google. Hope that makes sense.
(2015-04-18, 04:43)dmdsoftware Wrote: [ -> ]
(2015-04-18, 04:38)dr_cure Wrote: [ -> ]
(2015-04-17, 22:00)dmdsoftware Wrote: [ -> ]How are you inputting the "OAUTH2 code" into the plugin?

Copying & pasting the results/data from my browser and directly into the settings.xml file (as plain text).

When you go back into the settings.xml, and navigate to your entry for that account, do you see a gdrive#_auth_access_token and gdrive#_auth_refresh_token?

BTW, you can have multiple accounts defined for the same "account", so that you can play with the various login types. I have 6 accounts defined in my plugin, 4 are the same Google Account, but I have the 4 repeated across logins but using the various account types, so I can test each without having to change my settings each time. The "username" only really needs to be your username for the client login type -- for the others, it isn't actually used when talking with Google. Hope that makes sense.

Ok, I got 0.5.13 working using multiple accounts, but only for ClientLogin and dmdsoftwareOAUTH2. When using "your own OUATH2" with my own settings, I'm still getting "Login information is incorrect or permission is denied ". For that particular one, there is no token information in the xml file since it's having a problem logging in I'm assuming. I followed your instructions here line by line http://dmdsoftware.net/GoogleSetupOAUTH2...AUTH2.html

There must be some other setting or step that I am missing in the OUATH2 setup on Google developer that is causing the problem. I created another project and still get the same login error when using my own OAUTH2. When looking at Configure on the menu, the settings.xml is bringing in all the correction information in 3 the fields (code, client id, client secret). Any other ideas?
Tried accessing with OAUTH2 and get the following in debug log, while the script fails:

Code:
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (plugin://plugin.video.gdrive-testing/?content_type=video)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/video/]
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::StartScript - calling plugin gdrive-testing('plugin://plugin.video.gdrive-testing/','1','?content_type=video')
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::WaitOnScriptResult - waiting on the gdrive-testing (id=3) plugin...
12:58:01 T:6708  NOTICE: Thread LanguageInvoker start, auto delete: false
12:58:01 T:6708    INFO: initializing python engine.
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): start processing
12:58:01 T:6708  NOTICE: -->Python Interpreter Initialized<--
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): the source file to load is "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py"
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): setting the Python path to C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing;C:\Program Files (x86)\Kodi\system\python\DLLs;C:\Program Files (x86)\Kodi\system\python\Lib;C:\Program Files (x86)\Kodi\python27.zip;C:\Program Files (x86)\Kodi\system\python\lib\plat-win;C:\Program Files (x86)\Kodi\system\python\lib\lib-tk;C:\Program Files (x86)\Kodi;C:\Program Files (x86)\Kodi\system\python;C:\Program Files (x86)\Kodi\system\python\lib\site-packages
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): entering source directory C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): instantiating addon using automatically obtained id of "plugin.video.gdrive-testing" dependent on version 2.1.0 of the xbmc.python api
12:58:01 T:6708   DEBUG: gdrive-testing: plugin url: plugin://plugin.video.gdrive-testing/
12:58:01 T:6708   DEBUG: gdrive-testing: plugin queries: {'mode': 'main', 'content_type': 'video'}
12:58:01 T:6708   DEBUG: gdrive-testing: plugin handle: 1
12:58:01 T:6708   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.NameError'>
                                            Error Contents: name 'max_count' is not defined
                                            Traceback (most recent call last):
                                              File "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py", line 593, in <module>
                                                for count in range (1, max_count):
                                            NameError: name 'max_count' is not defined
                                            -->End of Python script error report<--
12:58:01 T:6708    INFO: Python script stopped
12:58:01 T:6708   DEBUG: Thread LanguageInvoker 6708 terminating
12:58:01 T:7792   DEBUG:  XFILE::CPluginDirectory::WaitOnScriptResult - plugin exited prematurely - terminating
12:58:01 T:7064   ERROR: XFILE::CDirectory::GetDirectory - Error getting plugin://plugin.video.gdrive-testing/?content_type=video
12:58:01 T:7064   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.gdrive-testing/?content_type=video) failed
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (addons://sources/video/)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/]
(2015-04-18, 13:01)ashlar Wrote: [ -> ]Tried accessing with OAUTH2 and get the following in debug log, while the script fails:

Code:
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (plugin://plugin.video.gdrive-testing/?content_type=video)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/video/]
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::StartScript - calling plugin gdrive-testing('plugin://plugin.video.gdrive-testing/','1','?content_type=video')
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::WaitOnScriptResult - waiting on the gdrive-testing (id=3) plugin...
12:58:01 T:6708  NOTICE: Thread LanguageInvoker start, auto delete: false
12:58:01 T:6708    INFO: initializing python engine.
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): start processing
12:58:01 T:6708  NOTICE: -->Python Interpreter Initialized<--
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): the source file to load is "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py"
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): setting the Python path to C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing;C:\Program Files (x86)\Kodi\system\python\DLLs;C:\Program Files (x86)\Kodi\system\python\Lib;C:\Program Files (x86)\Kodi\python27.zip;C:\Program Files (x86)\Kodi\system\python\lib\plat-win;C:\Program Files (x86)\Kodi\system\python\lib\lib-tk;C:\Program Files (x86)\Kodi;C:\Program Files (x86)\Kodi\system\python;C:\Program Files (x86)\Kodi\system\python\lib\site-packages
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): entering source directory C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): instantiating addon using automatically obtained id of "plugin.video.gdrive-testing" dependent on version 2.1.0 of the xbmc.python api
12:58:01 T:6708   DEBUG: gdrive-testing: plugin url: plugin://plugin.video.gdrive-testing/
12:58:01 T:6708   DEBUG: gdrive-testing: plugin queries: {'mode': 'main', 'content_type': 'video'}
12:58:01 T:6708   DEBUG: gdrive-testing: plugin handle: 1
12:58:01 T:6708   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.NameError'>
                                            Error Contents: name 'max_count' is not defined
                                            Traceback (most recent call last):
                                              File "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py", line 593, in <module>
                                                for count in range (1, max_count):
                                            NameError: name 'max_count' is not defined
                                            -->End of Python script error report<--
12:58:01 T:6708    INFO: Python script stopped
12:58:01 T:6708   DEBUG: Thread LanguageInvoker 6708 terminating
12:58:01 T:7792   DEBUG:  XFILE::CPluginDirectory::WaitOnScriptResult - plugin exited prematurely - terminating
12:58:01 T:7064   ERROR: XFILE::CDirectory::GetDirectory - Error getting plugin://plugin.video.gdrive-testing/?content_type=video
12:58:01 T:7064   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.gdrive-testing/?content_type=video) failed
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (addons://sources/video/)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/]

Got it. Fixed, new release by 10am. Want to try to deal with an audio file issue first (for some reason the audio file links won't stream through XBMC, but they are fine if you "cache" them).
(2015-04-18, 13:01)ashlar Wrote: [ -> ]Tried accessing with OAUTH2 and get the following in debug log, while the script fails:

Code:
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (plugin://plugin.video.gdrive-testing/?content_type=video)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/video/]
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::StartScript - calling plugin gdrive-testing('plugin://plugin.video.gdrive-testing/','1','?content_type=video')
12:58:01 T:7792   DEBUG: XFILE::CPluginDirectory::WaitOnScriptResult - waiting on the gdrive-testing (id=3) plugin...
12:58:01 T:6708  NOTICE: Thread LanguageInvoker start, auto delete: false
12:58:01 T:6708    INFO: initializing python engine.
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): start processing
12:58:01 T:6708  NOTICE: -->Python Interpreter Initialized<--
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): the source file to load is "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py"
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): setting the Python path to C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing;C:\Program Files (x86)\Kodi\system\python\DLLs;C:\Program Files (x86)\Kodi\system\python\Lib;C:\Program Files (x86)\Kodi\python27.zip;C:\Program Files (x86)\Kodi\system\python\lib\plat-win;C:\Program Files (x86)\Kodi\system\python\lib\lib-tk;C:\Program Files (x86)\Kodi;C:\Program Files (x86)\Kodi\system\python;C:\Program Files (x86)\Kodi\system\python\lib\site-packages
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): entering source directory C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing
12:58:01 T:6708   DEBUG: CPythonInvoker(3, C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py): instantiating addon using automatically obtained id of "plugin.video.gdrive-testing" dependent on version 2.1.0 of the xbmc.python api
12:58:01 T:6708   DEBUG: gdrive-testing: plugin url: plugin://plugin.video.gdrive-testing/
12:58:01 T:6708   DEBUG: gdrive-testing: plugin queries: {'mode': 'main', 'content_type': 'video'}
12:58:01 T:6708   DEBUG: gdrive-testing: plugin handle: 1
12:58:01 T:6708   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.NameError'>
                                            Error Contents: name 'max_count' is not defined
                                            Traceback (most recent call last):
                                              File "C:\Users\ashlar\AppData\Roaming\Kodi\addons\plugin.video.gdrive-testing\default.py", line 593, in <module>
                                                for count in range (1, max_count):
                                            NameError: name 'max_count' is not defined
                                            -->End of Python script error report<--
12:58:01 T:6708    INFO: Python script stopped
12:58:01 T:6708   DEBUG: Thread LanguageInvoker 6708 terminating
12:58:01 T:7792   DEBUG:  XFILE::CPluginDirectory::WaitOnScriptResult - plugin exited prematurely - terminating
12:58:01 T:7064   ERROR: XFILE::CDirectory::GetDirectory - Error getting plugin://plugin.video.gdrive-testing/?content_type=video
12:58:01 T:7064   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.gdrive-testing/?content_type=video) failed
12:58:01 T:7064   DEBUG: CGUIMediaWindow::GetDirectory (addons://sources/video/)
12:58:01 T:7064   DEBUG:   ParentPath = [addons://sources/]

Fixed:

http://dmdsoftware.net/repository.ddurdl...0.5.15.zip

I changed the auth url for "your own OAUTH2", and that seems to be testing better, so dr_cure should try as well the new release
Working now with 0.5.15 with "your own OAUTH2". Also, the always cache option looks to be working fine as well. If you need any help testing anything else, just let me know. Thanks.
(2015-04-18, 17:30)dr_cure Wrote: [ -> ]Working now with 0.5.15 with "your own OAUTH2". Also, the always cache option looks to be working fine as well. If you need any help testing anything else, just let me know. Thanks.

Whatever testing and issues you can find will help move this to 0.6.0 so I can then focus on new enhancements.

Right now I know streaming music isn't working, but that seems to be something that may be on the Google Drive side (XBMC can't decipher the music file, but works if you use the download or cache options).
Still having a few issues with the buffer/cache for HD video playback. A few questions about the settings.

1) I selected "always cache for playback" and "never transcode" in the Video settings and in the Cache settings set it as 25% (tried smaller & larger amounts), but when playing back video (just clicking on the file) it doesn't appear to be using the cache. I'm still getting buffer caching issues every 3-5 minutes and when looking at the playback bar, the buffer isn't very far (the 0.4 version paused longer at the beginning of playback and you could tell it was caching based on the size in the settings).

2) When clicking the menu on a video for playback options, which option would playback the original file using the cache buffer (without downloading the whole file)? Play original looks to be downloading the whole file (filename.original). Play from cache doesn't playback anything unless there is already something in the cache (from the play original or download).
(2015-04-18, 18:17)dr_cure Wrote: [ -> ]Still having a few issues with the buffer/cache for HD video playback. A few questions about the settings.

1) I selected "always cache for playback" and "never transcode" in the Video settings and in the Cache settings set it as 25% (tried smaller & larger amounts), but when playing back video (just clicking on the file) it doesn't appear to be using the cache. I'm still getting buffer caching issues every 3-5 minutes and when looking at the playback bar, the buffer isn't very far (the 0.4 version paused longer at the beginning of playback and you could tell it was caching based on the size in the settings).

2) When clicking the menu on a video for playback options, which option would playback the original file using the cache buffer (without downloading the whole file)? Play original looks to be downloading the whole file (filename.original). Play from cache doesn't playback anything unless there is already something in the cache (from the play original or download).

I'll have a look.

The "play from cache" is really "play from offline copy" -- naming is confusing with caching, so I'll change it. I want to get to the point where I can watch offline content within the plugin without actually going online

I'll double checking the caching. I think I'll go back with a popup when it is pre-caching and put it into the background progress only when it is downloading, so it is clearer to end user that playback is pending initial caching.