Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
281aec2
build: remove spotiflac dependency
Superredstone Feb 15, 2026
10cc422
build: remove old tooling
Superredstone Feb 15, 2026
30c8675
build: fix missing pname and version
Superredstone Feb 15, 2026
fc4b29b
fix: remove spotiflac libraries
Superredstone Feb 15, 2026
af20e29
fix: change package names
Superredstone Feb 15, 2026
9cdaf98
style: move services into separated file
Superredstone Feb 15, 2026
1ce9feb
fix: first compilable version
Superredstone Feb 15, 2026
5b557f1
feat: add first metadata implementation
Superredstone Feb 15, 2026
1504e29
feat: improve metadata implementation for track
Superredstone Feb 17, 2026
e5a6db7
feat: add song link conversion
Superredstone Feb 17, 2026
4cb04ca
build: fix build hash
Superredstone Feb 17, 2026
22fe398
fix: add edge case to id parsing in url
Superredstone Feb 17, 2026
f79836b
feat: add tidal download url finder
Superredstone Feb 17, 2026
1026868
feat: download implementation
Superredstone Feb 19, 2026
80e2d86
feat: add filename extension and verbose flag
Superredstone Feb 19, 2026
ecc4564
feat: add file exists check
Superredstone Feb 19, 2026
41e2484
feat: add metadata embedding
Superredstone Feb 19, 2026
a85812a
refactor: move track download to a different function
Superredstone Feb 19, 2026
1944db8
fix: go modules
Superredstone Feb 19, 2026
129695f
build: fix build hash
Superredstone Feb 19, 2026
6d27cc4
feat: fix metadata embedding
Superredstone Feb 19, 2026
777fab8
fix: go modules
Superredstone Feb 19, 2026
e4083c6
feat: add playlist download
Superredstone Feb 20, 2026
33668ca
fix: output file/dir for track download
Superredstone Feb 20, 2026
c87f198
docs: update readme
Superredstone Feb 20, 2026
36030f9
feat: implement metadata fetch command
Superredstone Feb 20, 2026
e666e1b
feat: add download fallback
Superredstone Feb 20, 2026
7a080cd
feat: add logging to know which source is going to fallback to the do…
Superredstone Feb 25, 2026
8b00b0e
fix: wrong string for service parameter
Superredstone Feb 25, 2026
d479ba0
fix: for now download only from tidal
Superredstone Feb 25, 2026
a0d76a6
fix: add default empty string
Superredstone Feb 25, 2026
2fea9a7
feat: add --interval flag
Superredstone Feb 28, 2026
fcae487
fix: various bugs and general code improvements
Superredstone Feb 28, 2026
4204291
feat: add --stop-on-fail flag
Superredstone Feb 28, 2026
9d8a953
feat: add --override flag
Superredstone Feb 28, 2026
a21832d
build: fix nix build
Superredstone Feb 28, 2026
195d783
docs: add disclaimer to readme
Superredstone Feb 28, 2026
aef6e80
docs: fix incorrect usage description for --stop-on-fail flag
Superredstone Feb 28, 2026
3d3f57d
fix: check file existance before fetching metadata
Superredstone Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
lib/
app/
build/
downloads/
Unknown/
Expand Down
18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,29 @@
<img src="./assets/logo.png" width=300 height=300/>
</p>

> [!IMPORTANT]
> This project was originally based on [SpotiFLAC](github.com/afkarxyz/SpotiFLAC) which did not integrate a CLI and [the developer is not willing to add support for it](https://github.com/afkarxyz/SpotiFLAC/pull/381#issuecomment-3888433673).
>
> The code was a mess and not modular at all, which made adding new features painful. It was full of bad design choices. One of those bad design choices was not informing users how songs were actually downloaded. Tracks from Amazon were downloaded using what I later discovered to be closed-source APIs as M4A files, and then converted to FLAC with FFmpeg, which significantly reduced the quality. Qobuz as a source never existed in the first place, everything was downloaded either from Tidal or Amazon.
>
> For these reasons, I'm not going to support Amazon and Qobuz downloads until someone finds a better way to handle this.

Spotify downloader with playlist sync in mind.

## Usage
```bash
spotiflac-cli download [URL]
spotiflac-cli download [URL] -v -o ~/Music/song.flac
```

## How to install
## How to build
1) Clone the repo
```bash
git clone https://github.com/Superredstone/spotiflac-cli
git clone https://github.com/Superredstone/spotiflac-cli && cd spotiflac-cli/
```
2) Download the required libraries
2) Build
```bash
./tools/fetch_spotiflac_backend.sh
go build .
```
3) Go get all the dependencies

## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
33 changes: 4 additions & 29 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
{ self, ... }@inputs:

let
pname = "spotiflac-cli";
version = "7.0.9";
goVersion = 24; # Change this to update the whole stack

supportedSystems = [
Expand All @@ -28,18 +26,6 @@
};
}
);

pkgs = import inputs.nixpkgs {
system = "x86_64-linux";
overlays = [ inputs.self.overlays.default ];
};

spotiflac = pkgs.fetchFromGitHub {
owner = "afkarxyz";
repo = "SpotiFLAC";
tag = "v${version}";
hash = "sha256-VHYof17C+eRoZfssXRQpbB8GXlcfPhyRiWltM6yDqe0=";
};
in
{
overlays.default = final: prev: {
Expand All @@ -55,25 +41,21 @@
go
# Required for .deb build
dpkg

ffmpeg_7
];
};
}
);
packages = forEachSupportedSystem (
{
pkgs,
# Set this to true to ship with FFmpeg which is required to download songs from amazon and qobuz
withAdditionalServices ? false,
}:
{
default = pkgs.buildGoModule (finalAttrs: {
inherit pname version;
src = ./.;
vendorHash = "sha256-EpGgfiCqJjHEOphV2x8FmXeIFls7eq2NVxb/or4NLUo=";
pname = "spotiflac-cli";
version = "2.0.0";

dependencies = if withAdditionalServices then [ pkgs.ffmpeg_7 ] else [ ];
src = ./.;
vendorHash = "sha256-o7NSSe1PGuASh3Whi+VrdPtLluiU5DaG5EtmLkEGJRw=";

nativeBuildInputs = with pkgs; [
installShellFiles
Expand All @@ -83,13 +65,6 @@
"."
];

postPatch = ''
cp -r ${spotiflac} ./SpotiFLAC/
sed -i "s/git clone https:\/\/github.com\/afkarxyz\/SpotiFLAC.git//g" ./tools/fetch_spotiflac_backend.sh
sed -i "s/rm -rf SpotiFLAC//g" ./tools/fetch_spotiflac_backend.sh
./tools/fetch_spotiflac_backend.sh
'';

postInstall = ''
installShellCompletion --cmd spotiflac-cli \
--bash <($out/bin/spotiflac-cli completion bash) \
Expand Down
30 changes: 8 additions & 22 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,14 @@ module github.com/Superredstone/spotiflac-cli

go 1.24.4

replace github.com/Superredstone/spotiflac-cli/app => ./app
replace github.com/Superredstone/spotiflac-cli/lib => ./lib

require (
github.com/bogem/id3v2/v2 v2.1.4 // indirect
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
github.com/go-flac/flacpicture v0.3.0 // indirect
github.com/go-flac/flacvorbis v0.2.0 // indirect
github.com/go-flac/go-flac v1.0.0 // indirect
github.com/icza/bitio v1.1.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/leaanthony/slicer v1.6.0 // indirect
github.com/leaanthony/u v1.1.1 // indirect
github.com/mewkiz/flac v1.0.13 // indirect
github.com/mewkiz/pkg v0.0.0-20250417130911-3f050ff8c56d // indirect
github.com/mewpkg/term v0.0.0-20241026122259-37a80af23985 // indirect
github.com/pquerna/otp v1.5.0 // indirect
github.com/spf13/cobra v1.10.2 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/ulikunitz/xz v0.5.15 // indirect
github.com/urfave/cli/v3 v3.6.2 // indirect
github.com/wailsapp/wails/v2 v2.11.0 // indirect
go.etcd.io/bbolt v1.4.3 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/text v0.22.0 // indirect
github.com/go-flac/flacpicture/v2 v2.0.2
github.com/go-flac/flacvorbis/v2 v2.0.2
github.com/go-flac/go-flac/v2 v2.0.4
github.com/pquerna/otp v1.5.0
github.com/urfave/cli/v3 v3.6.2
)

require github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
83 changes: 13 additions & 70 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,80 +1,23 @@
github.com/bogem/id3v2/v2 v2.1.4 h1:CEwe+lS2p6dd9UZRlPc1zbFNIha2mb2qzT1cCEoNWoI=
github.com/bogem/id3v2/v2 v2.1.4/go.mod h1:l+gR8MZ6rc9ryPTPkX77smS5Me/36gxkMgDayZ9G1vY=
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-flac/flacpicture v0.3.0 h1:LkmTxzFLIynwfhHiZsX0s8xcr3/u33MzvV89u+zOT8I=
github.com/go-flac/flacpicture v0.3.0/go.mod h1:DPbrzVYQ3fJcvSgLFp9HXIrEQEdfdk/+m0nQCzwodZI=
github.com/go-flac/flacvorbis v0.2.0 h1:KH0xjpkNTXFER4cszH4zeJxYcrHbUobz/RticWGOESs=
github.com/go-flac/flacvorbis v0.2.0/go.mod h1:uIysHOtuU7OLGoCRG92bvnkg7QEqHx19qKRV6K1pBrI=
github.com/go-flac/go-flac v1.0.0 h1:6qI9XOVLcO50xpzm3nXvO31BgDgHhnr/p/rER/K/doY=
github.com/go-flac/go-flac v1.0.0/go.mod h1:WnZhcpmq4u1UdZMNn9LYSoASpWOCMOoxXxcWEHSzkW8=
github.com/icza/bitio v1.1.0 h1:ysX4vtldjdi3Ygai5m1cWy4oLkhWTAi+SyO6HC8L9T0=
github.com/icza/bitio v1.1.0/go.mod h1:0jGnlLAx8MKMr9VGnn/4YrvZiprkvBelsVIbA9Jjr9A=
github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js=
github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8=
github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M=
github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI=
github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
github.com/mewkiz/flac v1.0.13 h1:6wF8rRQKBFW159Daqx6Ro7K5ZnlVhHUKfS5aTsC4oXs=
github.com/mewkiz/flac v1.0.13/go.mod h1:HfPYDA+oxjyuqMu2V+cyKcxF51KM6incpw5eZXmfA6k=
github.com/mewkiz/pkg v0.0.0-20250417130911-3f050ff8c56d h1:IL2tii4jXLdhCeQN69HNzYYW1kl0meSG0wt5+sLwszU=
github.com/mewkiz/pkg v0.0.0-20250417130911-3f050ff8c56d/go.mod h1:SIpumAnUWSy0q9RzKD3pyH3g1t5vdawUAPcW5tQrUtI=
github.com/mewpkg/term v0.0.0-20241026122259-37a80af23985 h1:h8O1byDZ1uk6RUXMhj1QJU3VXFKXHDZxr4TXRPGeBa8=
github.com/mewpkg/term v0.0.0-20241026122259-37a80af23985/go.mod h1:uiPmbdUbdt1NkGApKl7htQjZ8S7XaGUAVulJUJ9v6q4=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-flac/flacpicture/v2 v2.0.2 h1:HCaJIVZpxnpdWs6G3ECEVRelzqS5xOi1Ba1AGmtXbzE=
github.com/go-flac/flacpicture/v2 v2.0.2/go.mod h1:DMZBPWPAmdLqNhqFSy5ZBs9wyBzOekXutGfP7/TFCuo=
github.com/go-flac/flacvorbis/v2 v2.0.2 h1:xCL3OhxrxWkHrbWUBvGNe+6FQ03yLmBbz0v5z4V2PoQ=
github.com/go-flac/flacvorbis/v2 v2.0.2/go.mod h1:SwTB5gs13VaM/N7rstwPoUsPibiMKklgwybYP9dYo2g=
github.com/go-flac/go-flac/v2 v2.0.4 h1:atf/kFa8U9idtkA//NO22XGr+MzQLeXZecnmP9sYBf0=
github.com/go-flac/go-flac/v2 v2.0.4/go.mod h1:sYOlTKxutMW0RDYF+KlD6Zn+VOCZlIFQG/r/usPveCs=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pquerna/otp v1.5.0 h1:NMMR+WrmaqXU4EzdGJEE1aUUI0AMRzsp96fFFWNPwxs=
github.com/pquerna/otp v1.5.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/urfave/cli/v3 v3.6.2 h1:lQuqiPrZ1cIz8hz+HcrG0TNZFxU70dPZ3Yl+pSrH9A8=
github.com/urfave/cli/v3 v3.6.2/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
github.com/wailsapp/wails/v2 v2.11.0 h1:seLacV8pqupq32IjS4Y7V8ucab0WZwtK6VvUVxSBtqQ=
github.com/wailsapp/wails/v2 v2.11.0/go.mod h1:jrf0ZaM6+GBc1wRmXsM8cIvzlg0karYin3erahI4+0k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo=
go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
34 changes: 34 additions & 0 deletions lib/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package lib

type App struct {
SelectedTidalApiUrl string
Verbose bool
SpotifyClient *SpotifyClient
ApiInterval int // How many ms to wait between one call to apis and the other
NoFallback bool
StopOnFail bool
OverrideDownload bool
}

func NewApp() App {
return App{
Verbose: false,
ApiInterval: 800,
NoFallback: false,
}
}

func (app *App) Init() error {
app.log("Initializing Tidal")
err := app.LoadTidalApis()
if err != nil {
return err
}

app.log("Initializing Spotify")
if err := app.InitSpotifyClient(); err != nil {
return err
}

return nil
}
Loading
Loading