ltguillaume / droidshows

A Reboot of DroidSeries Offline TV Shows Tracker
https://codeberg.org/ltguillaume/droidshows
GNU General Public License v3.0
83 stars 20 forks source link

[FR] Wishlist, New Fork #108

Open warren-bank opened 2 years ago

warren-bank commented 2 years ago

I've only just recently found this app. I'm absolutely loving it. Great job!

Here are a few suggestions for improvements:

ltguillaume commented 2 years ago

Thx! I just installed the latest release and tried to restore a database from DroidShows v7.11.5.

  1. Does backing up before restoring a database really make sense?
  2. It certainly makes no sense to back up an empty database
  3. Also, versioning is used in this process even though it's disabled. You might call it good that it does so in this particular case, because otherwise the backup you want to restore would have been gone before it even tries to restore it, but as said, I think it shouldn't automatically create a backup before restoring at all.
  4. I think that due to this versioned backup beforehand, TV Tracker restores the empty database it just backed up, not the file you actually picked, because that got renamed to DroidShows.db0

Edit: I can't add any show manually either. No matter what the search terms are (even "the"), no shows are found. So (3) might also have been caused by this, but the toast states the restore operation was successful.

  1. The spinner doesn't show Active/Archived/Log, it's just black.
  2. The spinner's icon is (still) botched (too small, not sharp anymore). Not sure what caused your decision to resize it?

what's interesting is that the behavior of the app during DB update was better in this version than the previous version...

Not sure. Perhaps you've been testing with manually turning off the screen instead of the "screen-on" timing out by itself? There might be a difference between these two situations considering wake state? Just brainstorming here.

warren-bank commented 2 years ago

@Ibuprophen

using release tmdb/008.00.04-09API, migration of your DB took me almost exactly 30 minutes:

9:15 0% 9:20 20% 9:25 33% 9:30 43% 9:35 57% 9:40 87% 9:45 100%

here is the updated DB file.. DroidShows-Ibuprophen-v8.zip

warren-bank commented 2 years ago

@ltGuillaume

warren-bank commented 2 years ago

@ltGuillaume dumb question.. but which commit corresponds to: DroidShows v7.11.5

the most recent release is titled 7.11.4 but tagged 7.11.2 ..so I assume that this is in line with F-Droid v7.11.2

the reason I ask.. is that if you made any changes to your "current" database version number.. then our two builds would be in conflict

ltguillaume commented 2 years ago

I pretty much screwed up ages ago by committing https://github.com/ltGuillaume/DroidShows/commit/238f5f6998859963d4cecf98a684c1e036fe2b4a, because I never really committed those changes to any of the released APK's afterwards. 7.11.5 is just an internal version that has the commits I recently added (so still without that DVD Order commit, but with the Revert backups being triggered by OnStop() instead of onDestroy() (https://github.com/ltGuillaume/DroidShows/commit/e24885b3129766baab606d29353da011abc2c1a1) change). I believe you forked before that DVD Order commit, so there's no change in database version number (I just checked the exported database itself to be sure, it's 0.1.5-7G3, not 0.1.5-7G4).

warren-bank commented 2 years ago

ok, good.. so that's not it; all of my DB updates use 0.1.5-7G3 as the starting point for making various incremental changes.

so.. I have no idea why nothing in the app is working for you; I'm almost wondering whether my TMDB API key is only authorizing requests coming from my IP address. I can't imagine that could be the case.. but why else is everything working for me.. on every device I try.. and nothing working for either of you? I'll test the API through a VPN and see if I can make requests.

ltguillaume commented 2 years ago

I'll check the logs for clues later today.

warren-bank commented 2 years ago

nope.. IP whitelisting isn't the problem

ltguillaume commented 2 years ago

06-09 15:13:32.377 D/themoviedbapi(27127): Method: 'search', Sub-method: 'tv', Params: TmdbParameters[parameters={LANGUAGE=en, PAGE=1, QUERY=wire}] 06-09 15:13:32.378 D/themoviedbapi(27127): URL: http://api.themoviedb.org/3/search/tv?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&query=wire&language=en&page=1 06-09 15:13:32.385 W/Adreno-EGL(27127): : EGL_BAD_ATTRIBUTE 06-09 15:13:32.389 E/DroidShows(27127): ExceptionType=HTTP_503_ERROR, ResponseCode=503, URL=http://api.themoviedb.org/3/search/tv?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&query=wire&language=en&page=1

503 (Service unavailable). Strange stuff. While I am using a VPN, it's not that: I can open the URL above in a browser on the same device without any problems.

warren-bank commented 2 years ago

That's interesting..

Here are the relevent lines of code:

requestContent(...) must be throwing, causing the method to return _SC_SERVICEUNAVAILABLE.

The problem is, I can't reproduce an error that would allow me to debug.

Full disclosure, the library originally used Apache HttpClient to implement this class; I rewrite it and removed all external dependencies.

warren-bank commented 2 years ago

The connection timeout and read timeout are both set to 15 seconds.. do you think there's any chance that your requests could be timing out? ..maybe I should increase these 2x values.

warren-bank commented 2 years ago

If you could set a break point at line 191 ..in the catch block.. I'm really curious what that Exception is.

ltguillaume commented 2 years ago

No way it's a timeout, the result is instant.

ltguillaume commented 2 years ago

I don't even have Android Studio, so debugging this project is a bit too much work for me right now, sorry.

Ibuprophen commented 2 years ago

Just a quick FYI (in case @ltGuillaume & @warren-bank weren't aware of this)...

The following link is to the Github page for TheTVDB (Official) Repositories that may hopefully be of some help.

https://www.github.com/thetvdb

~Ibuprophen

warren-bank commented 2 years ago

no worries.. I figured that you already had it fired up :smile: ..didn't intend to ask you to go out of your way.

I just have no idea why I can't reproduce the problem.. you said that you were using a custom ROM.. is it LineageOS? ..I haven't tested that yet; only stock ROMs (on various devices) so far.

ltguillaume commented 2 years ago

Nah, I started out in Eclipse and never switched, because I'm stubborn and because I hate all the default dependency stuff of it. I thought I might switch as soon as I got involved in other Android projects, but I lost interest because of Google's inherent tendency of destroying everything good, especially when it comes to the Android ecosystem.

Yeah, LineageOS 18.1 (= Android 10) on a Samsung Galaxy S5.

warren-bank commented 2 years ago

oh perfect.. I have a Galaxy S5 with LineageOS around here somewhere. hopefully I can fix this issue by testing with that.

warren-bank commented 2 years ago

regarding Google/Android.. the way I feel is that so long as we continue to be able to side-load our own APKs.. I'm not going to be negative towards them.

As ridiculous as it is to say.. "so long as".. I'm allowed by my computer to install applications..

But this is the direction everything else has gone.. Firefox.. Chrome.. walled gardens everywhere; now that really pisses me off..

Indirectly related to this.. is the fact that Android developers have this tendency that makes absolutely no sense to me.. to intentionally increase the min SDK of apps for no good reason; that also really pisses me off.. but we can't blame Google for that.

ltguillaume commented 2 years ago

Well, do they increase the minSDK "because they can" or simply because they've got 1024 dependencies that would otherwise stop working?

warren-bank commented 2 years ago

very true..

although.. I'll use Google Voice as an example.. because it's a utilitarian app with requires almost no UI.. and lots of people have come to depend on it..

the whole situation is dumb..

ltguillaume commented 2 years ago

And I think being able to sideload apps isn't enough. Much of the core OS features, previously open-source, have been disappearing for years now into a closed-source abomination of a black hole called Google Play Services. Apps simply have to use it for specific device features, and no-one knows what data is sent through it. I think we can safely say by now: everything. And not just the stuff that actually needs a part of the Play Services is victim of this hoarding, even SMS message contents are sent directly to Google servers. Basically everything with a screen is a honeypot now, it's almost a crime we even have to pay for the hardware 😛

warren-bank commented 2 years ago

I'm definitely not disagreeing with you.. you're not wrong!

idk enough about building ROMs to really speak to this.. but it seems that projects like LineageOS are still able to take the good bit that are open sourced.. and build a pretty incredible OS that's free from Google's spying eye.

warren-bank commented 2 years ago

hashtag: #RichardStallmanWasRightAllAlong

too funny.. there's actually a Reddit thread specifically for that

ltguillaume commented 2 years ago

hashtag: #RichardStallmanWasRightAllAlong

too funny.. there's actually a Reddit thread specifically for that

Hah, no surprises there 😛

I'm looking into https://divestos.org, a soft fork of LineageOS that tries to remove as many proprietary blobs (e.g. binaries of hardware manufacturers), offers a more privacy-oriented System WebView by default, includes Mull (Firefox+arkenfox, which I already use) and some other interesting apps and features.

warren-bank commented 2 years ago

sir, I like the way you think :smiley:

Ibuprophen commented 2 years ago

I have a handful of other Android devices I use for testing purposes. They all have the TWRP custom recovery and various LineageOS Android Versions (I've been using those Custom Firmwares since CyanogenMOD).

I'm also one of the Developmental Team Members for the Classic Shell (Windows Start Menu) Software.

With those and the Ancestry/Genealogy things I love doing keeps me very busy while Retired.

LOL! 👍

~Ibuprophen

warren-bank commented 2 years ago

easy fix.. coming soon..

java.io.IOException: Cleartext HTTP traffic to api.themoviedb.org not permitted

update:

PS:

warren-bank commented 2 years ago

@Ibuprophen ..had to scroll up a ways to find the link ..don't forget that I've already prepared your DB for this version ..so you should be good to go

ltguillaume commented 2 years ago

Adding shows now works in the latest builds!

  1. Restoring a DroidShows database, however, returns the following:
    D/DroidShows(12742):  Database update routine
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    E/SQLiteLog(12742):  (1) no such column: archived
    D/DroidShows(12742):  Database update routine
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    D/DroidShows(12742):  Database needs update
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    D/DroidShows(12742):  UPDATING TO VERSION 0.1.5-7G6
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=110381}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/110381?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    I/Choreographer(12742):  Skipped 49 frames!  The application may be doing too much work on its main thread.
    I/ActivityTaskManager(844):  Displayed com.github.warren_bank.tiny_television_time_tracker/.DroidShows: +1s731ms
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=121361}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/121361?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    D/themoviedbapi(12742):  TVEpisodeBasic: Unknown property='production_code' value=''
    D/themoviedbapi(12742):  TVSeasonBasic: Unknown property='show_id' value='19239'
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=123581}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/123581?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    W/System  (12742):  A resource failed to call end. 
    W/System  (12742):  A resource failed to call close. 
    I/chatty  (12742):  uid=10137(com.github.warren_bank.tiny_television_time_tracker) identical 3 lines
    W/System  (12742):  A resource failed to call close. 
    D/themoviedbapi(12742):  TVEpisodeBasic: Unknown property='production_code' value=''
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=134241}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/134241?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    (...)
    E/WindowManager(844):  App trying to use insecure INPUT_FEATURE_NO_INPUT_CHANNEL flag. Ignoring
    D/themoviedbapi(12742):  TVEpisodeBasic: Unknown property='production_code' value=''
    D/themoviedbapi(12742):  TVSeasonBasic: Unknown property='show_id' value='60622'
    D/themoviedbapi(12742):  TVSeasonBasic: Unknown property='networks' value='[{id=88, logo={path=/aexGjtcs42DgRtZh7zOxayiry4J.png, aspect_ratio=1.677852348993289}, name=FX, origin_country=US}]'
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=269689}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/269689?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    (...)
    D/themoviedbapi(12742):  TVEpisodeBasic: Unknown property='production_code' value=''
    D/themoviedbapi(12742):  Method: 'find', Sub-method: '', Params: TmdbParameters[parameters={EXTERNAL_SOURCE=tvdb_id, ID=277964}]
    D/themoviedbapi(12742):  URL: http://api.themoviedb.org/3/find/277964?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id
    E/DroidShows(12742):  no results
    E/DroidShows(12742):  Error creating a backup of user metadata to temporary tables.
    E/DroidShows(12742):  java.lang.Exception: TMDB API failed to return the (internal) TMDB ID for a TV series that is identified by the (external) TVDB ID: 277964
    E/DroidShows(12742):    at com.github.warren_bank.tiny_television_time_tracker.database.Update.doTmdbApiMigration(Update.java:486)
    E/DroidShows(12742):    at com.github.warren_bank.tiny_television_time_tracker.database.Update.update_version_007(Update.java:301)
    E/DroidShows(12742):    at com.github.warren_bank.tiny_television_time_tracker.database.Update.updateDatabaseVersion(Update.java:203)
    E/DroidShows(12742):    at com.github.warren_bank.tiny_television_time_tracker.database.Update.access$500(Update.java:28)
    E/DroidShows(12742):    at com.github.warren_bank.tiny_television_time_tracker.database.Update$1.run(Update.java:84)
    E/DroidShows(12742):    at java.lang.Thread.run(Thread.java:919)
    D/DroidShows(12742):  Current database version: 0.1.5-7G5
    E/DroidShows(12742):  Attempt to update version of database schema has failed
  2. ... which makes me wonder what happens to shows that can't be found on TMDB? Seems like for now it just silently fails to add it?
  3. Every time you restart TV Tracker, it backs up the database before updating, eventually overwriting the backup(s) actually made by the user. I think it might be a good idea to have a separate filename pattern for backups before updating the database.
ltguillaume commented 2 years ago
  1. Some UI glitches:
TV Tracker DroidShows

Icon + text color | Odd unsharp shadows (also context menus) |

Language special characters

Ibuprophen commented 2 years ago

My apologies for the delay @warren-bank...

I downloaded the most recent app and the database file, but I hadn't tested it out yet (as I do plan to).

I was just curious about the successful ability to change the backup location to another internal directory.

For example...

@ltGuillaume uses the "/storage/emulated/0/DroidShows", as I was hoping to successfully add another directory manually like "/storage/emulated/0/DroidShows2" or similar.

This would only be during the time your app is in Alpha/Beta testing and I can test it without affecting the one from @ltGuillaume.

I'm actually thinking about installing a tracer like app for debugging purposes to provide you with the results file if necessary. I haven't used one in a little while since I haven't needed to.

Thanks a Bunch!

~Ibuprophen

ltguillaume commented 2 years ago

@Ibuprophen No need for @warren-bank to change anything, DroidShows already supports that if you create the folder with a file manager app first. You can then create a manual backup to that new folder, after which DS will ask which folder to use for daily backups from now on.

warren-bank commented 2 years ago

@ltGuillaume

great feedback! ..really appreciate it

ltguillaume commented 2 years ago

@warren-bank Your posts are difficult to reply to point-by-point. Perhaps it's easier to stick to numbered lists for this.

Skipping frames

I'm not sure if this is something problematic tbh. I see it all the time, this is an old device (2014), and it was during updating the database. If something like this would happen consistently e.g. during scrolling, then it would be something to look into.

Switching to TMDB

Ok, so basically the database update failed solely because there were shows that could not be found in TMDB? I personally think that for the switch to TMDB to be realistic, it is imperative that (1) no data (especially "seen progress") is lost and (2) the user is properly informed if problems arise.

Best action plan imho upon switching:

  1. Try using TheTVDB's ID to find the show
  2. Otherwise, if possible, try using IMDB's ID to find the show
  3. If none are found, offer the user a search panel, pre-filled with the show's title and allow them to select the proper show
  4. If it can't be found manually, keep the current show data and move it to the archived shows list

    I haven't looked through the code for this particular setting, but I assume the switch to TMDB is currently a one-time process? This last step (4) could then cause problems later on. I think this could best be tackled by a per-show check on every update whether the show has already been switched to TMDB. That way, the switch can be tried again by the user from the archived shows list (those shows can be added to TMDB later on).

Backups

  1. considering that the app has given the user every opportunity to create a backup of the old DB, there's very little chance of losing any data by allowing the migration to proceed with the subset of series that it can identify

    I don't think that's the way most users would look at it: they would lose the ability to track the show from this app and are stuck with a file holding their data that only some people know what to do with. Even if they were smart enough to make a copy of the database file, as far as they're concerned, they in fact lost that data. That's why I proposed to at least archive the show using the known data, as described in (4) above.

  2. I think appending preUpdate is a good idea.

warren-bank commented 2 years ago

I just ran a quick test.. I used the series that caused your migration to fail as a test case..

If its IMDb id was either unavailable or unhelpful, then I was tempted to be lazy..

If it got me somewhere, then I'd agree that it makes a lot of sense to do a 2nd find API request to try to lookup the TMDB id by this external id value.

In summary, you win.. the IMDb lookup was successful ```text http://api.themoviedb.org/3/find/277964?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=tvdb_id not found TheTVDB id: 277964 https://thetvdb.com/api/8AC675886350B3C3/series/277964/all/en.xml tt3487478 http://api.themoviedb.org/3/find/tt3487478?api_key=c9eb196aaf70baf91d4ce4f0fea6a360&external_source=imdb_id {"movie_results":[],"person_results":[],"tv_results":[{"original_name":"Smeris","first_air_date":"2014-03-17","overview":"","name":"Smeris","backdrop_path":"/vLA701CBif3SvTEp6CvNloajjEG.jpg","genre_ids":[80],"vote_count":7,"original_language":"nl","vote_average":7.7,"id":62637,"poster_path":"/2K2sLtMM5L8VBjSmZ5paQDO7Nkj.jpg","origin_country":["NL"],"popularity":8.229}],"tv_episode_results":[],"tv_season_results":[]} TMDB id: 62637 https://api.themoviedb.org/3/tv/62637?api_key=1553d2e4fa2912fc0953305d4d3e7c44&language=en-US&append_to_response=external_ids,credits,content_ratings { "adult": false, "backdrop_path": "/vLA701CBif3SvTEp6CvNloajjEG.jpg", "created_by": [], "episode_run_time": [45], "first_air_date": "2014-03-17", "genres": [{ "id": 80, "name": "Crime" }], "homepage": "", "id": 62637, "in_production": false, "languages": ["nl"], "last_air_date": "2020-02-02", "last_episode_to_air": { "air_date": "2020-02-02", "episode_number": 3, "id": 2046541, "name": "", "overview": "", "production_code": "", "runtime": 45, "season_number": 5, "still_path": "/alKhRaC4Aea6Gxy3de5TO6dMxd9.jpg", "vote_average": 0.0, "vote_count": 0 }, "name": "Smeris", "next_episode_to_air": null, "networks": [{ "name": "BNN", "id": 311, "logo_path": "/2RG1bG0viFfNR5K6IzacRgccKXf.png", "origin_country": "NL" }, { "name": "BNNVARA", "id": 2161, "logo_path": "/tiBiiquRvGhxXteossLAWQkaFA1.png", "origin_country": "NL" }], "number_of_episodes": 43, "number_of_seasons": 5, "origin_country": ["NL"], "original_language": "nl", "original_name": "Smeris", "overview": "", "popularity": 8.229, "poster_path": "/2K2sLtMM5L8VBjSmZ5paQDO7Nkj.jpg", "production_companies": [{ "id": 2198, "logo_path": null, "name": "Pupkin", "origin_country": "NL" }], "production_countries": [{ "iso_3166_1": "NL", "name": "Netherlands" }], "seasons": [{ "air_date": "2014-03-17", "episode_count": 10, "id": 66579, "name": "Season 1", "overview": "", "poster_path": "/mzMzBMeup0L7v2Ef1DHlLC46Sak.jpg", "season_number": 1 }, { "air_date": "2015-03-29", "episode_count": 10, "id": 66583, "name": "Season 2", "overview": "", "poster_path": "/vQpZJtr8TVCXPz0oacY3LiqiWjM.jpg", "season_number": 2 }, { "air_date": "2017-01-22", "episode_count": 10, "id": 97579, "name": "Season 3", "overview": "", "poster_path": "/eVu0JLqaieISKXR8u0ZUJuofelZ.jpg", "season_number": 3 }, { "air_date": "2018-01-14", "episode_count": 10, "id": 97820, "name": "Season 4", "overview": "", "poster_path": "/uOMlwp6lEGTtr4PForKfGcAda8w.jpg", "season_number": 4 }, { "air_date": "2020-01-19", "episode_count": 3, "id": 140705, "name": "Season 5", "overview": "", "poster_path": "/wPUPVvbW2tzT242NaxFFmWXmmx8.jpg", "season_number": 5 }], "spoken_languages": [{ "english_name": "Dutch", "iso_639_1": "nl", "name": "Nederlands" }], "status": "Ended", "tagline": "", "type": "Scripted", "vote_average": 7.7, "vote_count": 7, "external_ids": { "imdb_id": "tt3487478", "freebase_mid": null, "freebase_id": null, "tvdb_id": null, "tvrage_id": null, "facebook_id": null, "instagram_id": null, "twitter_id": null }, "credits": { "cast": [{ "adult": false, "gender": 2, "id": 1233325, "known_for_department": "Acting", "name": "Jeroen van Koningsbrugge", "original_name": "Jeroen van Koningsbrugge", "popularity": 2.377, "profile_path": "/atgQvtWOysAEIJHInCb7o0biZHx.jpg", "character": "Theo Kamp", "credit_id": "59b1736d925141078a08ce38", "order": 0 }, { "adult": false, "gender": 0, "id": 929018, "known_for_department": "Acting", "name": "Dennis van de Ven", "original_name": "Dennis van de Ven", "popularity": 2.283, "profile_path": "/2eVYUTbgezw27RIdRC7P6pSgy9J.jpg", "character": "Willem Niessen", "credit_id": "5a515c0ac3a368751f012e8f", "order": 1 }, { "adult": false, "gender": 1, "id": 1045527, "known_for_department": "Acting", "name": "Kiki van Deursen", "original_name": "Kiki van Deursen", "popularity": 2.143, "profile_path": "/pek00rKtJcvPYGiMQh2fCdbknmB.jpg", "character": "Maartje van Vught", "credit_id": "5a515c7dc3a368751c012723", "order": 2 }, { "adult": false, "gender": 0, "id": 1102355, "known_for_department": "Acting", "name": "Daan van Dijsseldonk", "original_name": "Daan van Dijsseldonk", "popularity": 2.267, "profile_path": "/kLpAl5LIAVfnwbMWKHplBMO4n8E.jpg", "character": "Harold Bergkamp", "credit_id": "5a515ca192514113300125da", "order": 3 }, { "adult": false, "gender": 0, "id": 34870, "known_for_department": "Acting", "name": "Susan Visser", "original_name": "Susan Visser", "popularity": 4.385, "profile_path": "/twOIgVIsieX8ttHoK8MoJ8UdBB4.jpg", "character": "Laura den Dooyer", "credit_id": "5a57c16c0e0a2669d4004228", "order": 5 }, { "adult": false, "gender": 1, "id": 1102349, "known_for_department": "Acting", "name": "Juliette van Ardenne", "original_name": "Juliette van Ardenne", "popularity": 2.908, "profile_path": "/3NrqkQC4utT2PJW3zpRt83JiIBi.jpg", "character": "Lotte van Hees", "credit_id": "5a5a74039251413f6e0118dc", "order": 6 }], "crew": [{ "adult": false, "gender": 0, "id": 1737870, "known_for_department": "Crew", "name": "Johan Knibbe", "original_name": "Johan Knibbe", "popularity": 0.6, "profile_path": null, "credit_id": "5e24c88f397df000129dda02", "department": "Art", "job": "Production Design" }, { "adult": false, "gender": 2, "id": 1077763, "known_for_department": "Production", "name": "Job Castelijn", "original_name": "Job Castelijn", "popularity": 0.982, "profile_path": null, "credit_id": "5e24c8611dcb770012ca2f62", "department": "Production", "job": "Casting Director" }, { "adult": false, "gender": 0, "id": 1412882, "known_for_department": "Production", "name": "Steven Berendsen", "original_name": "Steven Berendsen", "popularity": 0.6, "profile_path": null, "credit_id": "5e24c9651bf2660012fbb46d", "department": "Production", "job": "Executive Producer" }, { "adult": false, "gender": 0, "id": 2995518, "known_for_department": "Sound", "name": "Peter Strijbos", "original_name": "Peter Strijbos", "popularity": 0.6, "profile_path": null, "credit_id": "613c64fc9653f60043e7567a", "department": "Sound", "job": "Sound Designer" }, { "adult": false, "gender": 0, "id": 31087, "known_for_department": "Sound", "name": "Hein Verhoeven", "original_name": "Hein Verhoeven", "popularity": 0.6, "profile_path": null, "credit_id": "613c6509d4cc8e008755c1f1", "department": "Sound", "job": "Sound Designer" }, { "adult": false, "gender": 0, "id": 2895238, "known_for_department": "Production", "name": "Felix van Gisbergen", "original_name": "Felix van Gisbergen", "popularity": 0.6, "profile_path": null, "credit_id": "613c654e6af9dd0027b610e0", "department": "Writing", "job": "Creative Producer" }, { "adult": false, "gender": 0, "id": 1996716, "known_for_department": "Crew", "name": "Mirande de Jong", "original_name": "Mirande de Jong", "popularity": 0.6, "profile_path": null, "credit_id": "613c6561e27260002a975aa4", "department": "Writing", "job": "Script Editor" }, { "adult": false, "gender": 0, "id": 1338200, "known_for_department": "Directing", "name": "Joost Reijmers", "original_name": "Joost Reijmers", "popularity": 0.6, "profile_path": null, "credit_id": "5a9d92140e0a2671f2001d54", "department": "Writing", "job": "Scenario Writer" }, { "adult": false, "gender": 2, "id": 23579, "known_for_department": "Editing", "name": "Herman P. Koerts", "original_name": "Herman P. Koerts", "popularity": 1.094, "profile_path": null, "credit_id": "5b6da14c0e0a267eeb15cdc5", "department": "Editing", "job": "Editor" }, { "adult": false, "gender": 0, "id": 2514996, "known_for_department": "Sound", "name": "David van der Heijden", "original_name": "David van der Heijden", "popularity": 0.6, "profile_path": null, "credit_id": "5e24c8e98f26bc001179e572", "department": "Sound", "job": "Original Music Composer" }, { "adult": false, "gender": 0, "id": 2713401, "known_for_department": "Crew", "name": "Tjitte Jan Nieuwkoop", "original_name": "Tjitte Jan Nieuwkoop", "popularity": 0.6, "profile_path": null, "credit_id": "613c64cf60c7510062d9023f", "department": "Camera", "job": "Director of Photography" }, { "adult": false, "gender": 0, "id": 1108178, "known_for_department": "Writing", "name": "Michael Leendertse", "original_name": "Michael Leendertse", "popularity": 0.6, "profile_path": null, "credit_id": "5a9d92060e0a2672050020fc", "department": "Writing", "job": "Scenario Writer" }, { "adult": false, "gender": 2, "id": 1233325, "known_for_department": "Acting", "name": "Jeroen van Koningsbrugge", "original_name": "Jeroen van Koningsbrugge", "popularity": 2.377, "profile_path": "/atgQvtWOysAEIJHInCb7o0biZHx.jpg", "credit_id": "5a9d9261925141101f001dcb", "department": "Writing", "job": "Creative Producer" }, { "adult": false, "gender": 0, "id": 1645803, "known_for_department": "Production", "name": "Iris Otten", "original_name": "Iris Otten", "popularity": 0.732, "profile_path": null, "credit_id": "5a9d91ef925141102b001ce7", "department": "Production", "job": "Producer" }, { "adult": false, "gender": 2, "id": 52169, "known_for_department": "Directing", "name": "Pieter Kuijpers", "original_name": "Pieter Kuijpers", "popularity": 1.103, "profile_path": "/gf4kBCMZXAFsQQRiKYHfPcrprjR.jpg", "credit_id": "5a9d91d40e0a2671f9001ef1", "department": "Production", "job": "Producer" }, { "adult": false, "gender": 0, "id": 1126741, "known_for_department": "Production", "name": "Sander van Meurs", "original_name": "Sander van Meurs", "popularity": 0.98, "profile_path": null, "credit_id": "5a9d91e50e0a2672050020c4", "department": "Production", "job": "Producer" }, { "adult": false, "gender": 0, "id": 929018, "known_for_department": "Acting", "name": "Dennis van de Ven", "original_name": "Dennis van de Ven", "popularity": 2.283, "profile_path": "/2eVYUTbgezw27RIdRC7P6pSgy9J.jpg", "credit_id": "5a9d92459251411021001ca2", "department": "Writing", "job": "Creative Producer" }] }, "content_ratings": { "results": [{ "iso_3166_1": "BR", "rating": "16" }, { "iso_3166_1": "NL", "rating": "12" }] } } ```
ltguillaume commented 2 years ago

Wait what, I won something?? 😋 Haha, very cool 😁

warren-bank commented 2 years ago

regarding your suggestions:

  1. to perform an interactive search for each missing series
  2. to store missing series as 'archived'

my thoughts are that:

  1. to be perfectly honest..
    that's way more development work than I'm willing to devote to migration..
    to handle a few edge cases
    • I will add a secondary find by IMDb id
    • but if that were to fail.. I'm prepared to call the missing series a lost cause
      • as with all open-source projects..
        if somebody doesn't like that decision,
        then they're perfectly free to do it differently
  2. that's simply not possible.. because
    • the TMDB id is a primary key in the DB for all tables
    • all queries depend on it
ltguillaume commented 2 years ago
  1. Understood. I think in that case a dialog with the failed shows is the bare minimum. Evidently migration should still be possible, even if a show fails.
  2. I'd say there should be a way around that, but as you rightfully note, edge cases, potentially a lot of work.
ltguillaume commented 2 years ago

Just checked your new commits, real nice work, great description in the commit message! 😃

Ibuprophen commented 2 years ago

My apologies @ltGuillaume...

I just remembered that it was changing the backup directory to the External Storage that wasn't working. I just changed it to an alternative folder (within the same directory) without any issues. 👍

@warren-bank, I installed your latest version and copied the database file you provided.

It restored great and took abt a minute to restore and I experienced no problems.

Also, when I performed an update to the shows, it was really lightning fast (maybe because it was up to date already), but no issues experienced with that.

When I get a little more time, I'll be checking out the other features and report my feedback to you.

You've really gone above and beyond with your work and, I agree with @ltGuillaume, that your commits are very impressive. 👍 👍

~Ibuprophen

warren-bank commented 2 years ago

Thanks you two.. I appreciate the kind words.

I just really love the app.. and didn't want to see it become obsolete. Hopefully, we can all enjoy it for many years to come.

ltguillaume commented 2 years ago
  1. @Ibuprophen yes I completely agree. The source, when I started my fork, was messy at best. I started out wanting to make small changes, adding as little code as possible for every new feature, but in doing so, I only added to the spaghetti code state it was already in 😋 Nevertheless, things worked fine for the end user and the app stayed small. It's also because I never looked into how to properly structure code (I'm more of a scripting guy and I bet @warren-bank has recognized that already). But rewriting and restructuring the code like this is definitely cool, allows for easier reading and it makes it more inviting for outside contributions.

  2. I do have a question about the new line in the list, Last unseen. Personally I think there's no reason to include it.

    • You already see how many unseen aired episides there are
    • If you use it to "calculate" when the next episode will probably be aired, then that makes no sense, because (1) there's an option to just show the next airing, and (2) there might be a hiatus.

    So I guess I just don't understand why more text should be added (I've always found this a weak point of the shows list t.b.h., if I could have thought of another way to show the info, with less text, I would've done it, but more importantly, I fail to see the use of showing the info).

warren-bank commented 2 years ago

re: "last unseen"..

Ibuprophen commented 2 years ago

Personally, I love the app itself because it's simple and to the point. Much better than the alternatives that's full of images and such (not even referring to advertising as well).

Just curious @warren-bank, it there a reason why you had removed the Plex alternative option in menu?

Not a big deal with me, but just curious as I'm thinking that you couldn't utilize the new API with it.

I remember helping @ltGuillaume out with that Plex option a while ago too. 👍

~Ibuprophen

ltguillaume commented 2 years ago

I still don't understand tbh, help me out here. You said it would somehow help seeing when new episodes are available. But as I said, there might be a hiatus for the show, or the next episode has been moved a day, or a week, so showing the latest unseen episode doesn't in any way indicate when a new episode is out. It's an indirect way to determine that at best, and probably totally wrong a lot of times. The option to show the next airing, however, does exactly that what you seem to actually want to know.

@Ibuprophen That makes perfect sense, does it not? That was an alternative TheTVDB mirror. @warren-bank's fork doesn't use TheTVDB anymore.

warren-bank commented 2 years ago

@ltGuillaume let me illustrate by example..

warren-bank commented 2 years ago

off-hand, I believe this summarizes the various sort options..

DroidShows (upstream):

TV-Tracker:

common to both:

ltguillaume commented 2 years ago

@ltGuillaume let me illustrate by example..

* if the season finale of a series airs tonight, then:

  * last unseen episode = today
  * next unaired episode = 6 months from today

* if I want to be aware of this new episode, then:

  * which date is more helpful?

Aha! Well, my anwer would be that neither is more helpful, because (1) next airing episode would actually show today's episode, not the next, and (2) Last unseen episode doesn't give you the information that it's the last episode of the season, either.

As such, to remedy (2) I have been wanting to modify the "middot appendix", for lack of a better word. Right now, your show will get a middot appended to episodes aired if all episodes with an air date have been aired. I actually wanted it to give you the info that all episodes of the last season you've watched episodes of have now been aired. This would solve the issue where you're in, say, season 6 and some overachiever on TVDB/TMDB already added next season's new episodes with an air date in about a year 😛 In order to give you the info you want for today's episode, instead it could show the middot if the air date of the last episode of the last season you've watched episodes of is before or at the current date.

(I have edited this post 13 times, I really need to go to bed 🙈)

Ibuprophen commented 2 years ago

This was weird @warren-bank...

The following reflects the what your app looked like after I had successfully restored the database (as I had mentioned before)...

TV Tracker - Restored Database

... The following reflects what your app looked like after just updating it to the "TV-Tracker-008.00.08-09API-release" you just released.

TV Tracker - Post-Update (008 00 08-09API-release)

It did successfully restore again without any problems, but I didn't expect an update to wipe out the existing shows.

Just wanted to provide you with a heads up.

~Ibuprophen