Tidal App discussion

One more androidlessapp!
Bravo!
Gonna test asap!

1 Like

Hmmm. I have a white screen when launching the app on XA2.
Installed with Chum testing.
When I try with python3 …/tidal.py, it complains not finding pyotherside although pyotherside-qml-plugin-python3-qt5 is marked “i” by Zypper (which is refreshed with Chum testing).

Try
/usr/bin/sailfish-qml harbour-tidalplayer
From the console and lets see what happens

Thank you contra, I should have found it…must have had a laziness crisis… :innocent:
Anyway, it works further this way.
The app starts but the wheel is spinning.
Here is the console output

Summary

[D] unknown:0 - Using Wayland-EGL
[D] unknown:0 - Got library name: “/usr/lib/qt5/qml/io/thp/pyotherside/libpyothersideplugin.so”
[W] unknown:90 - file:///usr/share/harbour-tidalplayer/qml/pages/FirstPage.qml:90:9: QML SlideshowView: Cannot anchor to an item that isn’t a parent or sibling.
[D] unknown:0 - “PyOtherSide error: No module named ‘playlistmanager’”
[W] unknown:0 - Unhandled PyOtherSide error: Cannot import module: playlistmanager (No module named ‘playlistmanager’)
[D] isTokenValid:53 - -1
[D] checkAndLogin:43 - old token invalid
[D] loginIn:426 -
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[D] :113 - Playlistmanager module imported successfully
[D] generateList:332 - Playlist changed from main.qml
[D] generateList:203 - Generate current database
[D] unknown:0 - “PyOtherSide error: Traceback (most recent call last):\n\n File “”, line 1, in \n\nNameError: name ‘playlistmanager’ is not defined\n”
[W] unknown:0 - Unhandled PyOtherSide error: Function not found: ‘playlistmanager.PL.size’ (Traceback (most recent call last):

File “”, line 1, in

NameError: name ‘playlistmanager’ is not defined
)
[W] unknown:140 - file:///usr/share/harbour-tidalplayer/qml/components/PlaylistManager.qml:140: Error: Cannot assign [undefined] to int
[D] :382 - Tidal module imported successfully
[D] :137 - tidalApi::printConsole Initialise tidal api
[D] :58 - playlistManager::printConsoleInitialise tidal api
[D] loadCurrentPlaylistState:164 - Loading current playlist [object Object]
[D] loadCurrentPlaylistState:165 - Loading current playlist undefined
[D] loadCurrentPlaylistState:166 - Loading current playlist undefined

But please don’t lose time: I thought it was ready to test from Chum but I might have misunderstood.
I rather can read the thread more deeply, instead of losing your time :slightly_smiling_face:

Thanks for the trace. It does look like an error in the PlaylistManager.

Most time I had this, a restart helped. However, this doesnt fix the source …

Have you got mpris-qt5-qml-plugin installed?

As i just did a fresh reinstall of SFOS and when i installed this via chum it wasn’t included and had to manually install the package and now works fine again

Ok, this has to be included. Thanks for the hint

Yes, It is installed.
Strangely, on my side (because it was yesterday, as the uploads to Chum were new?), I believe that I didn’t have to install mpris-qt5-qml-plugin.

@contra, Indeed, restarting the app helped. Much better. I could connect to my account.
But it still seems Tidalplayer is not yet 100% happy. (parts of cut text in the screen and no music play possible)

Here is the output. I deleted potentially private parts

[defaultuser@XperiaXA2-DualSIM ~]$ /usr/bin/sailfish-qml harbour-tidalplayer
[D] unknown:0 - Using Wayland-EGL
[D] unknown:0 - Got library name: “/usr/lib/qt5/qml/io/thp/pyotherside/libpyothersideplugin.so”
[W] unknown:90 - file:///usr/share/harbour-tidalplayer/qml/pages/FirstPage.qml:90:9: QML SlideshowView: Cannot anchor to an item that isn’t a parent or sibling.
[D] isTokenValid:53 - 0123456789
[Ric9k note: probably private thing here]
[D] checkAndLogin:35 - old token valid
[D] checkAndLogin:36 - Bearer
[Ric9k note: probably private thing here]
[D] loginIn:426 -
[Ric9k note: probably private thing here]
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[D] :113 - Playlistmanager module imported successfully
[D] generateList:332 - Playlist changed from main.qml
[D] generateList:203 - Generate current database
[D] getSize:141 - Playlist size: 0
[D] generateList:205 - current size 0
[D] expression for onListChanged:348 - update playlist
[D] expression for onListChanged:350 - update current playlist
[D] onTriggered:19 - 0
[D] :382 - Tidal module imported successfully
[D] :137 - tidalApi::printConsole Initialise tidal api
[D] :58 - playlistManager::printConsoleInitialise tidal api
[D] :137 - tidalApi::printConsole Login with old token
[D] :58 - playlistManager::printConsoleLogin with old token
[D] loadCurrentPlaylistState:164 - Loading current playlist [object Object]
[D] loadCurrentPlaylistState:165 - Loading current playlist undefined
[D] loadCurrentPlaylistState:166 - Loading current playlist undefined
[D] expression for onLoginSuccess:161 - Loading personal content
[D] :137 - tidalApi::printConsole Login success
[D] :58 - playlistManager::printConsoleLogin success
[D] addPlaylist:73 - [object Object]
[D] addPlaylist:78 - addPlaylist calm 67293e4f-d5d4-49eb-a3c8-0d26427ca30b
[D] addPlaylist:73 - [object Object]
[D] addPlaylist:78 - addPlaylist fastfly c5c15d80-cdf2-4cda-a1f9-d1229fa37863
[D] unknown:0 - “PyOtherSide error: Traceback (most recent call last):\n\n File “/usr/share/harbour-tidalplayer/qml/tidal.py”, line 490, in homepage\n self.home = self.session.home()\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/session.py”, line 562, in home\n return self.page.get(“pages/home”)\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 91, in get\n return self.parse(json_obj)\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 70, in parse\n page_item = self.page_category.parse(row[‘modules’][0])\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 150, in parse\n return category.parse(json_obj)\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 238, in parse\n self.items = self.request.map_json(json_obj[list_key], parse, session)\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/request.py”, line 137, in map_json\n lists.append(parse(item[‘item’]))\n\n File “/usr/share/harbour-tidalplayer/python/tidalapi/mix.py”, line 93, in parse\n self.mix_type = MixType(json_obj[‘mixType’])\n\n File “/usr/lib/python3.8/enum.py”, line 339, in call\n return cls.new(cls, value)\n\n File “/usr/lib/python3.8/enum.py”, line 663, in new\n raise ve_exc\n\nValueError: ‘WELCOME_MIX’ is not a valid MixType\n”
[W] unknown:0 - Unhandled PyOtherSide error: Return value of PyObject call is NULL: Traceback (most recent call last):

File “/usr/share/harbour-tidalplayer/qml/tidal.py”, line 490, in homepage
self.home = self.session.home()

File “/usr/share/harbour-tidalplayer/python/tidalapi/session.py”, line 562, in home
return self.page.get(“pages/home”)

File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 91, in get
return self.parse(json_obj)

File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 70, in parse
page_item = self.page_category.parse(row[‘modules’][0])

File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 150, in parse
return category.parse(json_obj)

File “/usr/share/harbour-tidalplayer/python/tidalapi/page.py”, line 238, in parse
self.items = self.request.map_json(json_obj[list_key], parse, session)

File “/usr/share/harbour-tidalplayer/python/tidalapi/request.py”, line 137, in map_json
lists.append(parse(item[‘item’]))

File “/usr/share/harbour-tidalplayer/python/tidalapi/mix.py”, line 93, in parse
self.mix_type = MixType(json_obj[‘mixType’])

File “/usr/lib/python3.8/enum.py”, line 339, in call
return cls.new(cls, value)

File “/usr/lib/python3.8/enum.py”, line 663, in new
raise ve_exc

ValueError: ‘WELCOME_MIX’ is not a valid MixType

Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
Error handling artist: ‘NoneType’ object has no attribute ‘replace’
[C] expression for onCacheArtist:46 - artist_info is undefined. skipping save
[C] expression for onFavArtists:117 - artist_info is undefined. skip append to model
[C] addArtist:56 - artist_info is undefined. skip append to model
[Etc…]

If I can help, let me know.

One thing i have noticed that’s changed since the last version i used, you use to be able to just tap a song and it would play, now you have to hold the song down and press the play button that appears below the song, not sure what has changed or if it is intended now?

It looks like there is a problem in the python api itself. You have something like a welcome mix, that is not a valid mix. Have to catch the error, it seems …

1 Like

Intended, to be same as play albun, artist, playlist

maybe you can get rid of the welcome mix in the tidal app in the meanwhile.
i am using the native app since 2 months, the android app since a year.
seems i do not get the welcome mix

TIDAL Offers Personalized Welcome Mix Enhanced Experience for New Users | audioXpress

This could be the point. We have to use an older tidalapi version, because sfos python version is a bit older. Maybe the mix is too new to be supported by the api …

[defaultuser@phone ~]$ /usr/bin/sailfish-qml harbour-tidalplayer
[D] unknown:0 - Using Wayland-EGL
library "libui_compat_layer.so" not found
library "libGLESv2_adreno.so" not found
library "eglSubDriverAndroid.so" not found
[W] unknown:0 - Image dir "/usr/share/themes/jolla/silica/" does not exist
[W] unknown:0 - Could not find any zN.M subdirs!
[W] unknown:0 - Theme dir "/usr/share/themes/jolla/silica/z1.75" does not exist
[W] unknown:0 - Theme dir "/usr/share/themes/jolla/silica/" does not exist
[D] unknown:0 - Got library name:  "/usr/lib64/qt5/qml/io/thp/pyotherside/libpyothersideplugin.so"
[W] unknown:238 - file:///usr/share/harbour-tidalplayer/qml/components/TidalCache.qml:238: Error: SQL: database version mismatch
[W] unknown:90 - file:///usr/share/harbour-tidalplayer/qml/pages/FirstPage.qml:90:9: QML SlideshowView: Cannot anchor to an item that isn't a parent or sibling.
[D] isTokenValid:53 - -1 
[D] checkAndLogin:43 - old token invalid
[D] loginIn:426 - 
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[W] unknown:0 - QQmlContext: Cannot set context object on invalid context.
[W] unknown:0 - QQmlComponent: Cannot create a component in an invalid context
[D] :113 - Playlistmanager module imported successfully
[D] unknown:0 - "PyOtherSide error: Traceback (most recent call last):\n\n  File \"/usr/share/harbour-tidalplayer/qml/tidal.py\", line 35, in initialize\n    selected_quality = tidalapi.Quality.high\n\n  File \"/usr/lib64/python3.8/enum.py\", line 384, in __getattr__\n    raise AttributeError(name) from None\n\nAttributeError: high\n"
[W] unknown:0 - Unhandled PyOtherSide error: Return value of PyObject call is NULL: Traceback (most recent call last):

  File "/usr/share/harbour-tidalplayer/qml/tidal.py", line 35, in initialize
    selected_quality = tidalapi.Quality.high

  File "/usr/lib64/python3.8/enum.py", line 384, in __getattr__
    raise AttributeError(name) from None

AttributeError: high

[D] generateList:332 - Playlist changed from main.qml
[D] generateList:203 - Generate current database
[D] getSize:141 - Playlist size: 0
[D] generateList:205 - current size 0
[D] expression for onListChanged:348 - update playlist
[D] expression for onListChanged:350 - update current playlist
[D] :382 - Tidal module imported successfully
[D] :137 - tidalApi::printConsole Initialise tidal api
[D] :58 - playlistManager::printConsoleInitialise tidal api
[D] onTriggered:19 - 0
[D] loadCurrentPlaylistState:164 - Loading current playlist  [object Object]
[D] loadCurrentPlaylistState:165 - Loading current playlist  undefined
[D] loadCurrentPlaylistState:166 - Loading current playlist  undefined
greHome from GRE_HOME:/usr/bin
libxul.so is not found, in /usr/bin/libxul.so
Created LOG for EmbedLiteTrace
[D] getOAuth:420 - Request new login
[D] unknown:0 - "PyOtherSide error: Traceback (most recent call last):\n\n  File \"/usr/share/harbour-tidalplayer/qml/tidal.py\", line 35, in initialize\n    selected_quality = tidalapi.Quality.high\n\n  File \"/usr/lib64/python3.8/enum.py\", line 384, in __getattr__\n    raise AttributeError(name) from None\n\nAttributeError: high\n"
[W] unknown:0 - Unhandled PyOtherSide error: Return value of PyObject call is NULL: Traceback (most recent call last):

  File "/usr/share/harbour-tidalplayer/qml/tidal.py", line 35, in initialize
    selected_quality = tidalapi.Quality.high

  File "/usr/lib64/python3.8/enum.py", line 384, in __getattr__
    raise AttributeError(name) from None

AttributeError: high

[D] unknown:0 - "PyOtherSide error: Traceback (most recent call last):\n\n  File \"/usr/share/harbour-tidalplayer/qml/tidal.py\", line 77, in request_oauth\n    self.login, self.future = self.session.login_oauth()\n\nAttributeError: 'NoneType' object has no attribute 'login_oauth'\n"
[W] unknown:0 - Unhandled PyOtherSide error: Return value of PyObject call is NULL: Traceback (most recent call last):

  File "/usr/share/harbour-tidalplayer/qml/tidal.py", line 77, in request_oauth
    self.login, self.future = self.session.login_oauth()

AttributeError: 'NoneType' object has no attribute 'login_oauth'

[D] :137 - tidalApi::printConsole Initialise tidal api
[D] :58 - playlistManager::printConsoleInitialise tidal api
[D] :137 - tidalApi::printConsole Start new session
[D] :58 - playlistManager::printConsoleStart new session
Created LOG for EmbedLite
Created LOG for EmbedPrefs
Created LOG for EmbedLiteLayerManager
=============== Preparing offscreen rendering context ===============
[D] onDestruction:187 - Save current playlist
Segmentation fault (core dumped)
Installed   	harbour-tidalplayer-0.1.2-1.2.1.bso.aarch64 (installed)
Installed   	python-dateutil-2.8.2-1.1.1.bso.noarch (installed)
Installed   	python3-python-dateutil-2.8.2-0.noarch (installed)

this looks like my change regarding the requested streaming quality.
try to switch to low. i am using low and it works.
however on my phone using high does work too. nevertheless it costs nothing. set to low and restart

Another option would be to disable mixes in settings then restart

There is no any settings in Settings but email field, Login with Tidal and Reset Cache buttons.

Edit:
I have just found out the culprit and what is going on. I’ve had tidalapi 0.7.6 installed in system via pip that I have been using for upmpdcli tidal access. After removing tidalapi from system, the “Login with Tidal” button redirects to Tidal login page.

Oh, yes, nice. Long press allows to play the song.
I deleted the welcome mix.

What is working here:
-Play songs (all qualities although I can’t hear differences (am no audiophile))
-Search tab
-Playlist tab
-Personal page tab:
-Top artists
-Top tracks
-Personal playlists, however, I have to play a playlist to be able to enter and browse it.

What is not yet working:
-Recently played
-“For you”

Cool WIP!
It is very nice to have tidal access here! Thank you for the work!
Just say if you need more logs.

When i do disable nixes in settings, it hides for you.
For you shows 2-3 entries only allways, not sure why but that might be related to errors on console .
Recently played works for me, it does not get updated during the sesion, but i can play whatever iten is listed: album artist or playlist.

I am not sure what cotra is planing as next, i think after packaging is done, an update to a more recent api would be next thing to do. Rather then to add features.