[Release] Submarine: Open Source App companion for Sonarr


#1

I am glad to finally announce the release of Submarine, the first Open Source Android client for Sonarr.

Source Code
Google Play Store
Video
Screenshots

FAQ

Why should I use Submarine? There are multiple reasons why Submarine is the best Sonarr client available as of today.

  • Open Source - Even tho the license hasn’t been picked yet, all the code is public so that you know what we are and we aren’t doing. But is not only about transparency, you can potentially collaborate by sending Merge Requests, or participate by requesting features, reporting bugs, etc
  • Amazing UX: Following most of the guidelines of Material Design, Submarine offers a nice, interactive, clear UI. Using the App, even the first time, will feel natural and seamless. All the colors and icons where selected carefully to convey and allow clear understanding of what they do. And if you don’t know what an icon does, try long-pressing it, chances are that you are going to see a tooltip with more information
  • Single job: Mobile Apps aren’t meant to be an umbrella so that you use one App for everything. Do you browse the internet, explore the files of your device, and do mathematical operations in the same App? Why would you do all your usenet/torrenting activity in one single App? With Submarine you have one app with one job, done the right way

You say it looks great, let me see!
There is a video and multiple screenshots in the Gitlab Repo. Believe me, is even better in your hands.

What can I do with Submarine?
For the first release, most of the common features that you use are supported, including:

  • Add/Edit/Delete series
  • Search for episodes manually
  • Trigger automatic search
  • Monitor seasons/episodes
  • See the upcoming episodes
  • Check the queue of the server, displaying the quality of the download, remaining time, etc
  • See the history of grabs, imports, deletions, etc
  • Delete downloaded files
  • See the wanted/missing episodes and trigger search or manual download easily
  • Use SSL even with self-signed certificates
  • Others

What can’t I do with Submarine?
There’s a lot of features coming down the pipe, and will be released in upcoming versions of the App:

  • Delete all the files of a season at once
  • Renaming files
  • Tag support
  • Server configuration (indexers, download, notifications, etc)
  • See and install Sonarr updates
  • Blacklist
  • Others

I see iOS/Andromeda references in the repo, are those supported?
As a matter of fact both of them are supported (and the App works great!), but the App can’t be released in the App Store due to the nature of Sonarr.

Please feel free to ask any questions related to this, and I hope you guys enjoy the App.


Submarine for Sonarr, Upcoming Material App
#2

Awesome! Love the UI.


#3

Looks great, and I’d love to try it, but unfortunately it simply wouldn’t connect to Sonarr. Other apps, e.g. Sonarrlink and nzb360, work fine. Looking at the Play Store reviews I see 3 out of the 4 reviewers had the same problem, so clearly it needs looking into.


#4

I’m trying to build this for my iOS devices. I’ve never had any experience with Flutter. What are the requirements for the iOS build environment? When I build for iOS or try to deploy to my device it gives me the following errors:

Failed to build iOS app
Error output from Xcode build:
↳
    2018-08-12 13:25:05.565 xcodebuild[1934:22416]  DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-14098/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/BuildSystem/Runtime/PBXTargetBuildContext.mm:757
    Details:  unexpected successful exit code from cancelled command <C0008:'CpResource flutter_assets':P12>
    Object:   <PBXTargetBuildContext: 0x7fb8f67af550>
    Method:   -createCommandInvocationRecordFromInvocation:
    Thread:   <NSThread: 0x7fb8f6454f10>{number = 7, name = (null)}
    Please file a bug at http://bugreport.apple.com with this warning message and any useful information you can provide.
    ** BUILD FAILED **

Xcode's output:
↳
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
    Building AOT snapshot in release mode (ios-release)...
    compiler message: lib/src/db/dbmanager.dart:48:29: Error: The method 'findStoreRecords' isn't defined for the class '#lib1::Database'.
    compiler message: Try correcting the name to the name of an existing method, or defining a method named 'findStoreRecords'.
    compiler message:     var records = await _db.findStoreRecords(_serverStore, new Finder());
    compiler message:                             ^
    compiler message: lib/src/db/dbmanager.dart:62:33: Error: The method 'findStoreRecords' isn't defined for the class '#lib1::Database'.
    compiler message: Try correcting the name to the name of an existing method, or defining a method named 'findStoreRecords'.
    compiler message:     var jsonServer = (await _db.findStoreRecords(_serverStore, new Finder()))
    compiler message:                                 ^
    compiler message: lib/src/db/dbmanager.dart:77:29: Error: The method 'findStoreRecords' isn't defined for the class '#lib1::Database'.
    compiler message: Try correcting the name to the name of an existing method, or defining a method named 'findStoreRecords'.
    compiler message:     var records = await _db.findStoreRecords(_serverStore, new Finder());
    compiler message:                             ^
    Compiler terminated unexpectedly.
    cp: build/aot/App.framework: No such file or directory
    cp: /Users/jasonbean/Projects/Submarine2/ios/Flutter/AppFrameworkInfo.plist: No such file or directory
    Project /Users/jasonbean/Projects/Submarine2 built and packaged successfully.
    Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
    error: /Users/jasonbean/Projects/Submarine2/ios/Flutter/app.flx: No such file or directory
Encountered error while building for device.

What am I doing wrong?