Skip to content

xcarol/moviescout

Repository files navigation

Movie Scout

Codacy Badge

Movie Scout is a movie and series tracker based on TMDB. It focuses on What I want to watch now instead of Look what I have for you to watch apps.

Key Features:

  • Stream Availability: Easily find out which streaming platforms host your favorite movies and series.
  • Search and Organize: Quickly search, add, or remove titles from your list.
  • Detailed Information: View essential details like posters, titles, brief descriptions, and more.
  • User-Friendly Design: Enjoy a clean and intuitive interface designed for movie and TV enthusiasts.

Whether you’re keeping track of what to watch next or exploring new favorites, Movie Scout ensures you’re always in the know.

Discover. Track. Watch.
Download Movie Scout now and streamline your streaming experience!

IDMB Import Export

To import titles from IMDB go to your Imdb account > Watchlist > Export
and Imdb account > Ratings > Export.

Download the CSV files from Exports and import them with the menu option Import From IMDB.

Development environment

Flutter installation

  • Install Android Studio using snap: sudo snap install android-studio --classic
  • Install flutter following this guide: Start building Flutter Android apps on Linux
  • Add flutter path to .zshrc: export PATH=$PATH:$HOME/workspace/devtools/flutter/bin
  • Run flutter doctor --android-licenses to review and accept andriod licenses.

Firebase & Crashlytics

Got configuration steps from https://firebase.google.com/docs/crashlytics/get-started?platform=flutter

Project configuration at Firebase Movie Scout

Install Flutter Fire

dart pub global activate flutterfire_cli

Add its path to .zshrc

export PATH=$PATH":"$HOME/.pub-cache/bin

Login to Firebase

firebase login

Configure project

flutterfire configure

Select

✔ Select a Firebase project to configure your Flutter application with

  • movie-scout-a6608 (MovieScout)

✔ Which platforms should your configuration support (use arrow keys & space to select)?

  • android
  • web

This process will generate the files:

google-services.json
firebase_options.dart

VSCODE

Useful .vscode/launch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [

    {
      "name": "MovieScout Web",
      "request": "launch",
      "type": "dart",
      "program": "lib/main.dart",
      "args": ["--web-port", "8080", "--device-id", "chrome"],
    },
    {
      "name": "MovieScout Android",
      "request": "launch",
      "type": "dart",
      "program": "lib/main.dart",
      "args": ["--device-id", "RMX2001"]
    }
  ]
}

Add "flutterMode": "profile" parameter for profiling.

On MovieScout Web parameter --web-port is important to set it as the one defined at the Authorized JavaScript origins

On MovieScout Android parameter --device-id set the desired device name.

Internationalization

Followed this guide: i18n|Flutter

Run flutter gen-l10n to update the i18n generated files.

Shared Preferences (deprecated)

The shared preferences are located at: ~/.local/share/com.xicra.moviescout folder.

Isar

Shared Preferences are not intended for huge data and a list of 1000 titles may reach 70MB which is even to much to hold in memory.

Isar was adopted beacuse its easy to use and has power enough for the kind of queries needed by the app.

NOTE: Each time TmdbTitle class changes its "Schema" i.e. the public attributes, the command dart run build_runner build has to be executed. It is also available running the script flutter_tool.sh with -i parameter

Icons

The flutter_launcher_icons tool is used to generate the icons for different platforms

The file used as the app logo is ./assets/logo-icon.png defined in the pubspec.yaml file under the flutter_launcher_icons section.

After updating the logo run: $ dart run flutter_launcher_icons

Tmdb integration

Get the API Read Access Token from The Movie DB API Settings
Create a file called .env in the root directory and add the key:

TMDB_API_RAT=apiReadAccessTokenGotFromTmdb

NOTICE! As stated in the TMDB API Documentation about Providers, the data source is JustWatch.

Assets

Images like tvshow_poster.png are created with Cool Text tool using FUN text style.

Flutter tool box

Use the shell script ./flutter_tool.sh to execute most used commands in the project.
Run ./flutter_tool.sh --help to view the tool options.

Application signing and publishing

Setup this file in the path ./android:

  • key.properties

    storePassword=(Stored in BitWarden with the name Android signing)
    keyPassword=(Stored in BitWarden with the name Android signing)
    keyAlias=upload
    storeFile=/home/xcarol/workspace/moviescout/upload-keystore.jks (Stored in BitWarden with the name Android signing)

Check app > build.gradle

This attribute shuld be like this

    buildTypes {
        release {
            signingConfig = signingConfigs.release
        }
    }

it is worth comparing it with the same Overmaps file to imitate it as much as possible.

Publishing a new version for internal test

  • Create a new branch with the version number (e.g. git checkout -b release/1.6.3)
  • In the pubspec.yaml file modify the last (build) number in version: 1.6.3+X by adding 1 to it.
  • Commit changes, publish and merge the new branch to GitHub
  • Got to GitHub Releases and create a new release:
    • Click on Draft a new release
    • Click on Tag button and copy the version number (e.g. 1.6.3+20) from the pubspec.yaml file and click on Create new tag
    • Click on Generate release notes and then click on Publish release
  • Build the bundle ./flutter_tool.sh -d.
  • Go to: Create an internal test version crate a new version and upload the bundle (./build/app/outputs/bundle/release/app-release.aab).

Troubleshooting

adb cannot start a debug session with error: Access Denied

With the mobile connected and developer option Enable USB install ON

  • Run lsusb to see the Android device.
  • It will output something like Bus 001 Device 005: ID 18d1:4ee2 Google Inc. we need the ID, usually the 18d1.
  • Create or open the file /etc/udev/rules.d/51-android.rules and add
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

Check the ATTR{idVendor} corresponds with the ouput of lsusb.

  • Give read permissions if the file didn't exist sudo chmod a+r /etc/udev/rules.d/51-android.rules
  • Restart udev
sudo udevadm control --reload-rules
sudo udevadm trigger

Now the device should appear in the output of adb devices and debugger should be able to connect.

About

Where to watch from my watchlist

Resources

Stars

Watchers

Forks

Packages

No packages published