GithubHelp home page GithubHelp logo

digitalec / deemon Goto Github PK

View Code? Open in Web Editor NEW
154.0 8.0 12.0 1.45 MB

Monitor specified artists for new releases

License: GNU General Public License v3.0

Python 97.84% HTML 1.97% Dockerfile 0.18%
deemix deezer

deemon's Introduction

deemon

About | Installation | Docker | Documentation | Support

PyPI Downloads GitHub last release

GitHub last commit Docker

Discord

About

deemon is a command line tool written in Python that monitors artists for new releases, provides email notifications and can also integrate with the deemix library to automatically download new releases.

Support

Open an Issue | Discord

Installation

Using pip

$ pip install deemon

From source

$ pip install -r requirements.txt
$ python3 -m deemon

Docker

Docker support has been added for amd64, arm64 and armv7 architectures. It is recommended to save your docker run command as a script to execute via cron/Task Scheduler.

Note: Inside deemon's config.json, download_location must be set to /downloads until I can integrate this myself.

Example: Refreshing an existing database

docker run --name deemon \
       --rm \
       -v /path/to/deemon/config:/config \
       -v /path/to/music:/downloads \
       -v /path/to/deemix/config:/deemix  \
       ghcr.io/digitalec/deemon:latest \
       python3 -m deemon refresh

Installation in a Python Virtual Environment (venv)

If you wish to install deemon and it's dependencies in a sandbox-style environment, I would recommend using venv.

Create a venv and install deemon (you may need to use python3 and pip3 depending on your system):

$ python -m venv venv
$ source ./venv/bin/activate
$ pip install deemon

When you are finished, close the terminal or exit our venv:

$ deactivate

Next time you want to run deemon, activate the venv first:

$ source ./venv/bin/activate
$ deemon refresh

If you are moving to venv from the Docker container, be sure to update your cron/Task Scheduler scripts.

Default Configuration

If you need to generate a new default configuration, please rename or delete your current config.json. The configuration will be generated the next time you run deemon.

deemon's People

Contributors

digitalec avatar hypercookie avatar mathiasfoster avatar theod02 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deemon's Issues

int() argument must be a string, a bytes-like object or a number, not 'NoneType', when downloading in version 2.0.5

When downloading with deemon download, the download fails with the error: int() argument must be a string, a bytes-like object or a number, not 'NoneType'.

Commands/command output/logs have been edited slightly for clarity.

> deemon -V
deemon 2.0.5
> deemon download
# Navigate to download a specific item
Sending 1 release(s) to deemix for download:
[1/1] The Vaccines - Back In Love City...

In errors.txt:

1341331652 | The Vaccines - Back In Love City | int() argument must be a string, a bytes-like object or a number, not 'NoneType'

In the logs:

2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: Initializing deemix library
2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: deemix 3.5.1
2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: deemix Config Path: /home/mathias/.config/deemix
2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: deemix Download Path: /home/mathias/Music/
2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: Looking for ARL...
2021-10-13 08:49:39 [DEBUG] deemon.core.dmi: ARL found in deemix config
2021-10-13 08:49:40 [DEBUG] deemon.core.dmi: ARL is valid
2021-10-13 08:49:40 [INFO] deemon.cmd.download: Sending 1 release(s) to deemix for download:
2021-10-13 08:49:40 [DEBUG] deemon.cmd.download: Writing queue to CSV file - 1 items in queue
2021-10-13 08:49:40 [DEBUG] deemon.cmd.download: Queue exported to /home/mathias/.config/deemon/queue.csv
2021-10-13 08:49:40 [DEBUG] deemon.cmd.download: deemix bitrate set to None (3)
2021-10-13 08:49:40 [INFO] deemon.cmd.download: [1/1] The Vaccines - Back In Love City...
2021-10-13 08:49:44 [ERROR] deemix: The Vaccines - Back In Love City int() argument must be a string, a bytes-like obje>Traceback (most recent call last):
  File "/home/mathias/.local/lib/python3.8/site-packages/deemix/downloader.py", line 467, in downloadWrapper
    result = self.download(extraData, track)
  File "/home/mathias/.local/lib/python3.8/site-packages/deemix/downloader.py", line 286, in download
    selectedFormat = getPreferredBitrate(
  File "/home/mathias/.local/lib/python3.8/site-packages/deemix/downloader.py", line 88, in getPreferredBitrate
    preferredBitrate = int(preferredBitrate)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

UnicodeEncodeError on Windows while reading from directory with special characters

After the new update, seems some characters are not being reading correctly:

Message: 'Now monitoring ⣎⡇ꉺლ༽இ•̛)ྀ◞ ༎ຶ ༽ৣৢ؞ৢ؞ؖ ꉺლ'
Arguments: ()
--- Logging error ---
Traceback (most recent call last):
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\logging\__init__.py", line 1028, in emit
    stream.write(msg + self.terminator)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 63-66: character maps to <undefined>
Call stack:
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\valbe\AppData\Local\Programs\Python\Python37\Scripts\deemon.exe\__main__.py", line 7, in <module>
    sys.exit(main())
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\__main__.py", line 4, in main
    cli.run()
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\cli.py", line 145, in import_cmd
    batch.import_artists(path)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\app\batch.py", line 40, in import_artists
    ma.start_monitoring(silent=True)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\app\monitor.py", line 58, in start_monitoring
    logger.debug("Now monitoring " + self.artist)
Message: 'Now monitoring 2814'
Arguments: ()

Documentation: config.json formatting note for Windows users

Just a note for windows users: within config.json, file and folder path names may use either forward slashes (/) or escape with double back slashes (\) - Single backs () are read as regex escapes and cause exceptions

[OK] "C:/folder/file.ext"
[OK] "C:\folder\file.ext"
[NO] "C:\folder\file.ext"

DataException error on refresh

Running version 1.2, Windows 10, getting this error every time I run deemon refresh

Refreshing artists...  12/1462 [                                        ]   1%
Traceback (most recent call last):
  File "c:\users\main\appdata\local\programs\python\python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\users\main\appdata\local\programs\python\python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\main\AppData\Local\Programs\Python\Python39\Scripts\deemon.exe\__main__.py", line 7, in <module>
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\deemon\__main__.py", line 4, in main
    cli.run()
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\click\core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\click\core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\click\core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\click\core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\deemon\cli.py", line 169, in refresh_command
    refresh.refresh()
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\deemon\app\refresh.py", line 118, in refresh
    albums = self.dz.api.get_artist_albums(artist["id"])
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\deezer\api.py", line 78, in get_artist_albums
    return self.api_call(f'artist/{str(artist_id)}/albums', {'index': index, 'limit': limit})
  File "c:\users\main\appdata\local\programs\python\python39\lib\site-packages\deezer\api.py", line 51, in api_call
    if result_json['error']['code'] == 800: raise DataException(f"DataException: {method} {result_json['error']['message'] if 'message' in result_json['error'] else ''}")
deezer.api.DataException: DataException: artist/A-GON/albums no data

I've tried removing A-GON from the monitoring list but I still get the same error

Duplicate column name: explicit – in version 2.4.3

As below!

> deemon -V
deemon 2.4.3

> deemon download -u "https://www.deezer.com/en/playlist/6682665064"                                                  ~
Initializing deemon 2.4.3

Traceback (most recent call last):
  File "/home/mathias/.local/bin/deemon", line 8, in <module>
    sys.exit(main())
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/__main__.py", line 5, in main
    cli.run()
  File "/home/mathias/.local/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/home/mathias/.local/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/home/mathias/.local/lib/python3.8/site-packages/click/core.py", line 1665, in invoke
    super().invoke(ctx)
  File "/home/mathias/.local/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/mathias/.local/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/cli.py", line 62, in run
    db.do_upgrade()
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/core/db.py", line 268, in do_upgrade
    self.query("ALTER TABLE releases ADD COLUMN explicit INTEGER")
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/core/db.py", line 276, in query
    return self.cursor.execute(query, values)
sqlite3.OperationalError: duplicate column name: explicit

> nano .config/deemon/logs/deemon.log
2021-10-22 10:47:46 [DEBUG] deemon.cli: deemon 2.4.3
2021-10-22 10:47:46 [DEBUG] deemon.cli: command: "download -u https://www.deezer.com/en/playlist/6682665064"
2021-10-22 10:47:46 [DEBUG] deemon.cli: Python 3.8.10
2021-10-22 10:47:46 [DEBUG] deemon.cli: Linux-5.10.60.1-microsoft-standard-WSL2-x86_64-with-glibc2.29
2021-10-22 10:47:46 [DEBUG] deemon.cli: deemon appdata is located at /home/mathias/.config/deemon
2021-10-22 10:47:46 [DEBUG] deemon.core.config: Loading configuration, please wait...
2021-10-22 10:47:46 [DEBUG] deemon.core.config: Attempting to locate deemix's .arl file
2021-10-22 10:47:46 [DEBUG] deemon.core.config: Successfully loaded ARL
2021-10-22 10:47:46 [DEBUG] deemon.core.db: Database version 3.2
2021-10-22 10:47:46 [DEBUG] deemon.core.db: DATABASE UPGRADE IN PROGRESS!

Prompt user when similar artist names appear from API results

When monitoring an artist, sometimes similar names are chosen over the intended name.

Example:

$ deemon monitor Medicine
Now monitoring Simple Medicine

A way to prompt the user when the names do not match exactly, providing options of similar results to choose from.

Automatic stop monitoring an artist

I had this situation:

I have a Music folder that is monitored by Deemon, in a moment I just stopped following some artists, but Deemon is keeping monitoring and downloading from them.

In my case:
I removed my Hans Zimmer folder, I just have an album from him and I don't want more, but Deemon continues downloading new releases, and I don't want to. I was wondering if have some way to auto-remove an artist who no longer has a folder.

Unable to remove artist

deemon monitor --remove "Cast of "Folk Og Røvere I Kardemomme By""
Artist 'Naughty by Nature' not found
WARNING: Artist 'Cast of "Folk Og Røvere I Kardemomme By"' setup for monitoring but no releases were found.

The artist I originally intended to monitor was Folk & Røvere (1226392)

What mail providers can we use for notification mails ?

Hi, I configure the config.json as below for the smtp settings :
"smtp_settings": {
"server": "smtp.office365.com",
"port": 587,
"username": "[email protected]",
"password": "xxx",
"from_addr": "[email protected]"
},

When I try to receive a notification test, it results to a failure.

This is the log with verbose :
`C:\WINDOWS\system32>deemon -v test
2021-10-17 14:22:43 [DEBUG] deemon.cli: deemon 2.4
2021-10-17 14:22:43 [DEBUG] deemon.cli: command: "-v test"
2021-10-17 14:22:43 [DEBUG] deemon.cli: Python 3.8.5
2021-10-17 14:22:43 [DEBUG] deemon.cli: Windows-10-xxx
2021-10-17 14:22:43 [DEBUG] deemon.cli: deemon appdata is located at C:\Users\xxx\AppData\Roaming\deemon
Initializing deemon 2.4

2021-10-17 14:22:43 [DEBUG] deemon.core.config: Loading configuration, please wait...
2021-10-17 14:22:43 [DEBUG] deemon.core.db: Database version 3.2
2021-10-17 14:22:43 [DEBUG] deemon.core.config: Loaded config for profile 1 (default)
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > check_update: 7
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > debug_mode: False
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > release_channel: stable
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > query_limit: 10
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > rollback_view_limit: 10
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > prompt_duplicates: True
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > prompt_no_matches: True
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > new_releases/by_release_date: False
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > new_releases/release_max_age: 365
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > global/bitrate: FLAC
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > global/alerts: True
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > global/record_type: all
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > global/download_path: D:\Audio\deemon
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > global/email: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > deemix/path:
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > deemix/arl: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > smtp_settings/server: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > smtp_settings/port: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > smtp_settings/username: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > smtp_settings/password: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > smtp_settings/from_addr: ********
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > plex/base_url:
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > plex/token:
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > plex/library:
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > profile_id: 1
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > tid: 0
2021-10-17 14:22:44 [DEBUG] deemon.core.config: > profile_name: default
2021-10-17 14:22:44 [DEBUG] deemon.core.notifier: notify initialized
2021-10-17 14:22:44 [DEBUG] deemon.core.notifier: releases to notify on: None
2021-10-17 14:22:44 [DEBUG] deemon.core.notifier: Sending notification email
2021-10-17 14:22:44 [DEBUG] deemon.core.notifier: Using server: smtp.office365.com:587
Traceback (most recent call last):
File "c:\program files\python38\lib\runpy.py", line 194, in _run_module_as_main
return run_code(code, main_globals, None,
File "c:\program files\python38\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "C:\Program Files\Python38\Scripts\deemon.exe_main
.py", line 7, in
File "c:\program files\python38\lib\site-packages\deemon_main
.py", line 5, in main
cli.run()
File "c:\program files\python38\lib\site-packages\click\core.py", line 1128, in call
return self.main(*args, **kwargs)
File "c:\program files\python38\lib\site-packages\click\core.py", line 1053, in main
rv = self.invoke(ctx)
File "c:\program files\python38\lib\site-packages\click\core.py", line 1659, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\program files\python38\lib\site-packages\click\core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\program files\python38\lib\site-packages\click\core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "c:\program files\python38\lib\site-packages\deemon\cli.py", line 115, in test
notification.test()
File "c:\program files\python38\lib\site-packages\deemon\core\notifier.py", line 84, in test
self.send(msg, test=True)
File "c:\program files\python38\lib\site-packages\deemon\core\notifier.py", line 47, in send
with smtplib.SMTP_SSL(config.smtp_server(), config.smtp_port(), context=context) as server:
File "c:\program files\python38\lib\smtplib.py", line 1034, in init
SMTP.init(self, host, port, local_hostname, timeout,
File "c:\program files\python38\lib\smtplib.py", line 253, in init
(code, msg) = self.connect(host, port)
File "c:\program files\python38\lib\smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\program files\python38\lib\smtplib.py", line 1042, in _get_socket
new_socket = self.context.wrap_socket(new_socket,
File "c:\program files\python38\lib\ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "c:\program files\python38\lib\ssl.py", line 1040, in _create
self.do_handshake()
File "c:\program files\python38\lib\ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ConnectionResetError: [WinError 10054] Une connexion existante a dû être fermée par l’hôte distant`

Do I have a solution about this issue ?

Regards

Add option to refresh in the past

By default, refresh command checks for releases using the current date.

An additional option to override this value with a custom date in MM-DD-YYYY format can allow initial database to be built and a subsequent refresh without this override will grab all remaining releases as "new".

Example:
deemon monitor /Music --skip-refresh
deemon refresh --date 01-01-2021

How do we restore from backup?

I have a .tar file that is a backup of my Deemon settings (prior to resetting my computer).
How do I restore from backup?

I looked through any documentation I could find, but couldn't see it anywhere!

Multi-user/library support

Add support for multiple library setups in the case of different users or keeping two libraries separate.

Running refresh should refresh the entire database but specific users can be refreshed as well with something like refresh --library Classic.

When a playlist has any new songs, entire playlist is downloaded again

As the title describes. Expected behaviour is for only the new songs to download, not the entire playlist.

I download to /Music/, and then move files to another storage device once downloading has finished.
At the start of every execution of deemon refresh, the /Music/ directory is entirely empty.

Commands/command output/logs have been edited slightly for clarity.

> deemon -V
deemon 1.3.1

> deemon refresh
Playlist 'Hot New Rock' has 1 new track(s)
----------------------------
Sending 1 release(s) to deemix for download:
+ Hot New Rock (playlist)...

> cd /Music/Hot\ New\ Rock && ls
... entire playlist displays, 65 songs...

In the logs:

2021-09-22 08:37:04 [DEBUG] deemon.app.db: Database version 2.2
2021-09-22 08:37:04 [DEBUG] deemon.app.db: Database version 2.2
2021-09-22 08:37:04 [DEBUG] deemon.app.refresh: Starting refresh...
2021-09-22 08:37:04 [DEBUG] deemon.app.refresh: Refreshing all monitored playlists...
2021-09-22 08:37:04 [DEBUG] deemon.app.refresh: No new tracks have been added to playlist 'New Country'
2021-09-22 08:37:05 [DEBUG] deemon.app.refresh: New track 1486909902 detected on playlist 1306978785
2021-09-22 08:37:05 [INFO] deemon.app.refresh: Playlist 'Hot New Rock' has 1 new track(s)
2021-09-22 08:37:05 [DEBUG] deemon.app.refresh: Refreshing all monitored artists...
...
2021-09-22 08:39:29 [DEBUG] deemon.app.db: Database version 2.2
2021-09-22 08:39:29 [DEBUG] deemon.app.dmi: Initializing deemix library
2021-09-22 08:39:29 [DEBUG] deemon.app.dmi: deemix Config Path: /home/userName/.config/deemix
2021-09-22 08:39:29 [DEBUG] deemon.app.dmi: deemix Download Path: /home/userName/Music/
2021-09-22 08:39:29 [DEBUG] deemon.app.db: Database version 2.2
2021-09-22 08:39:29 [DEBUG] deemon.app.dmi: Looking for ARL...
2021-09-22 08:39:29 [DEBUG] deemon.app.dmi: ARL found in deemix config
2021-09-22 08:39:30 [DEBUG] deemon.app.dmi: ARL is valid
2021-09-22 08:39:30 [INFO] deemon.app.download: Sending 1 release(s) to deemix for download:
2021-09-22 08:39:30 [INFO] deemon.app.download: + Hot New Rock (playlist)...
2021-09-22 08:39:37 [INFO] deemix: [Hot New Rock track #1] Fallback to lower bitrate
2021-09-22 08:39:38 [INFO] deemix: [Hot New Rock track #2] Fallback to lower bitrate
...
2021-09-22 08:42:24 [INFO] deemon.app.download: Downloads complete!

Playlist refresh doesn't commit if no artists are monitored

deemon does not commit any database changes until just before exiting in case of failure during run. If no artists are being monitored, refresh function returns without getting to commit() call.

Workaround:

Have at least one artist monitored for successful refresh of playlists until this is patched

request for monitoring labels

I hope there is a chance for it. You can list releases from a label with the search option label:"labelname" like label:"Motown Records"

Handle new config settings on existing installs

If user upgrades to new version that introduces new configuration options, tell user about these changes and proceed with default settings (should be as close to current functionality to avoid unexpected changes).

Artist treated as new artist until at least one release has been seen

Some artists appear without releases and if a new release is released, it will not be downloaded/alerted on because of the way deemon determines what a new artist is (no releases = new artist).

Need to set a flag of sorts in the database so that an artist is only treated as new for one refresh to build a baseline.

UnicodeDecodeError on Windows (download --file)

Reading from file /srv/8ff25b7d-55d3-4cc7-bef9-a07257edfe47/data/artists.txt
Traceback (most recent call last):
  File "/usr/local/bin/deemon", line 10, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/dist-packages/deemon/__main__.py", line 4, in main
    cli.run()
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/deemon/cli.py", line 74, in download_command
    dl.download(params)
  File "/usr/local/lib/python3.7/dist-packages/deemon/app/download.py", line 109, in download
    make_csv = f.read().replace('\n', ',')
  File "/usr/lib/python3.7/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x99 in position 1325: invalid start byte

Download not working

Hey probably a dumb question, but if i added by_release_date=false in my config and then monitor a new artist shouldn't it download everything from this artist?
Because i am not getting any downloads.

Crash when attempting to use time-machine via monitor

Hi, I am attempting to run a monitor import to set up the initial artists and want to start them off at the start of last year
I do something like(I'm using docker so cut that out) deemon monitor --import /downloads/artists.txt --download -T 2021-01-01

I get the error

:: Fetching artist data for 16 artist(s), please wait... 100%
:: Examining results for best match... 100%
:: Setting up artists for monitoring... 100%
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/app/deemon/__main__.py", line 9, in <module>
    main()
  File "/app/deemon/__main__.py", line 5, in main
    cli.run()
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/app/deemon/cli.py", line 240, in monitor_command
    monitor.importer(im)
  File "/app/deemon/cmd/monitor.py", line 204, in importer
    self.artists(artist_list)
  File "/app/deemon/cmd/monitor.py", line 173, in artists
    self.call_refresh()
  File "/app/deemon/cmd/monitor.py", line 145, in call_refresh
    refresh = Refresh(self.time_machine, ignore_filters=self.dl)
  File "/app/deemon/cmd/refresh.py", line 32, in __init__
    logger.info(f":: Time Machine active: {datetime.strftime(self.time_machine, '%b %d, %Y')}!")
TypeError: descriptor 'strftime' for 'datetime.date' objects doesn't apply to a 'list' object


ImportError on Docker Image Build from Scratch

I'm trying to build the docker image from scratch using the Dockerfile provide. The build goes fine but when I try to run deemon in the docker I get the following error. It looks like something my have broken in one of the dependencies.

The prebuilt docker image though works.

Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/app/deemon/__main__.py", line 1, in <module>
    from deemon import cli
  File "/app/deemon/cli.py", line 11, in <module>
    from deemon.cmd import download, rollback, backup, extra
  File "/app/deemon/cmd/download.py", line 12, in <module>
    from deemon.core import dmi, db
  File "/app/deemon/core/dmi.py", line 12, in <module>
    from deezer.gw import GWAPIError, LyricsStatus
ImportError: cannot import name 'LyricsStatus' from 'deezer.gw' (/usr/local/lib/python3.8/dist-packages/deezer/gw.py)

cant download using Artists.txt file

Hello,

I created an Artists.txt file contains all of my following artists.
But i can not download by that file
It gives me following error.

"deemon download --artist ArtistName" command works sucessfully by the way

deemon download --file /music/Artists.txt
Verifying ARL is valid, please wait...
Reading from file /music/Artists.txt
Traceback (most recent call last):
File "/usr/bin/deemon", line 8, in
sys.exit(main())
File "/usr/lib/python3.8/site-packages/deemon/main.py", line 4, in main
cli.run()
File "/usr/lib/python3.8/site-packages/click/core.py", line 1137, in call
return self.main(*args, **kwargs)
File "/usr/lib/python3.8/site-packages/click/core.py", line 1062, in main
rv = self.invoke(ctx)
File "/usr/lib/python3.8/site-packages/click/core.py", line 1668, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3.8/site-packages/click/core.py", line 763, in invoke
return __callback(*args, **kwargs)
File "/usr/lib/python3.8/site-packages/deemon/cli.py", line 73, in download_command
dl.download(params)
File "/usr/lib/python3.8/site-packages/deemon/app/download.py", line 103, in download
artist = self.dz.api.search_artist(name, limit=1)['data'][0]
IndexError: list index out of range

refresh only refreshes 1 artist, despite having more monitored

> deemon refresh
Initializing deemon 2.4.4

Starting database refresh
:: Fetching artist release data for 1 artist(s), please wait... 100%
:: Checking for new releases... 100%

+ Artists monitored: 276
+ Playlists monitored: 10
+ Releases seen: 9,828
+ Pending future releases: 5

Operation completed in 00:00:02
Database is up-to-date. No new releases were found.

In the logs:

2021-10-29 07:38:17 [DEBUG] deemon.cli: deemon 2.4.4
2021-10-29 07:38:17 [DEBUG] deemon.cli: command: "refresh"
2021-10-29 07:38:17 [DEBUG] deemon.cli: Python 3.8.10
2021-10-29 07:38:17 [DEBUG] deemon.cli: Linux-5.10.60.1-microsoft-standard-WSL2-x86_64-with-glibc2.29
2021-10-29 07:38:17 [DEBUG] deemon.cli: deemon appdata is located at /home/mathias/.config/deemon
2021-10-29 07:38:17 [DEBUG] deemon.core.config: Loading configuration, please wait...
2021-10-29 07:38:17 [DEBUG] deemon.core.config: Attempting to locate deemix's .arl file
2021-10-29 07:38:17 [DEBUG] deemon.core.config: Successfully loaded ARL
2021-10-29 07:38:17 [DEBUG] deemon.core.db: Database version 3.5
2021-10-29 07:38:17 [DEBUG] deemon.core.db: DATABASE UPGRADE IN PROGRESS!
2021-10-29 07:38:17 [DEBUG] deemon.core.config: Loaded config for profile 1 (default)
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > check_update: 1
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > debug_mode: False
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > release_channel: stable
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > query_limit: 5
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > rollback_view_limit: 10
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > prompt_duplicates: False
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > prompt_no_matches: True
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > new_releases/by_release_date: 1
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > new_releases/release_max_age: 90
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > global/bitrate: 320
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > global/alerts: False
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > global/record_type: all
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > global/download_path:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > global/email:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > deemix/path:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > deemix/arl: ********
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > smtp_settings/server:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > smtp_settings/port: ********
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > smtp_settings/username:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > smtp_settings/password:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > smtp_settings/from_addr:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > plex/base_url:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > plex/token:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > plex/library:
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > profile_id: 1
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > tid: 30
2021-10-29 07:38:17 [DEBUG] deemon.core.config: > profile_name: default
2021-10-29 07:38:17 [INFO] deemon.cli: Starting database refresh
2021-10-29 07:38:18 [DEBUG] deemon.core.api: Login OK, max_threads set to 50
2021-10-29 07:38:18 [DEBUG] deemon.core.api: API in use: deezer-gw, thread count set to: 50
2021-10-29 07:38:18 [DEBUG] deemon.cmd.refresh: There are 0 playlist(s) and 1 artist(s) waiting to be refreshed.
2021-10-29 07:38:18 [DEBUG] deemon.cmd.refresh: Standby, starting refresh...
2021-10-29 07:38:18 [DEBUG] deemon.cmd.refresh: Fetching artist release data...
2021-10-29 07:38:19 [INFO] deemon.utils.performance: Operation completed in 00:00:02
2021-10-29 07:38:19 [INFO] deemon.cmd.refresh: Database is up-to-date. No new releases were found.

I'm not sure what additional troubleshooting/information-gathering I can do, happy to try anything you suggest!

Add per artist monitoring options

Specify (optional) custom options per artist such as downloading only albums or downloading their back catalog as well as future new releases.

Artists with lower case name are skipped

Hi, I just notice that artists with lower cases are not recognized by Deemon. I have in a folder, names like eRa, black midi, which is this way they are written and the program just ignores them when will search for new releases, I mean, it's just skipped even for register in the database. For example, I have these sequence folders:

Artist X
Artist Y
black midi
Artist Z

And when will check for new releases, show me this way:

Checking for new releases...

Artist X
Artist Y
Artist Z

Edit. I've closed because I thought that was not a problem but seems it is.

After it checked all the artists, and skipped the artists with lower case, at the end has this message:

a-ha: 0 release(s)
ana roxanne: 0 release(s)
black midi: 0 release(s)
eRa: 0 release(s)
exael: 0 release(s)
juneunit: 0 release(s)
rRoxymore: 0 release(s)
sphontik: 0 release(s)
t e l e p a t h テレパシー能力者: 0 release(s)
the Maccabees: 0 release(s)
uon: 2 release(s)
virginia aveline: 0 release(s)
тпсб: 0 release(s)
⣎⡇ꉺლ༽இ•̛)ྀ◞ ༎ຶ ༽ৣৢ؞ৢ؞ؖ ꉺლ: 0 release(s)
2814: 0 release(s)

Purged 12 artist(s) from database

I believe it just ignoring these artists for some reason but is that the way the artists are named, including in the Deezer itself.

ModuleNotFoundError: No module named 'deezer.errors' — after updating to version 1.3.

After upgrading to 1.3 (with pip), I get the following error when running any deemon commands:

Traceback (most recent call last):
  File "/usr/local/bin/deemon", line 5, in <module>
    from deemon.__main__ import main
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/__main__.py", line 1, in <module>
    from deemon import cli
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/cli.py", line 1, in <module>
    from deemon.app import settings, monitor, download, notify, utils
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/app/download.py", line 5, in <module>
    from deemon.app import dmi, Deemon, utils
  File "/home/mathias/.local/lib/python3.8/site-packages/deemon/app/dmi.py", line 2, in <module>
    import deemix
  File "/home/mathias/.local/lib/python3.8/site-packages/deemix/__init__.py", line 5, in <module>
    from deemix.itemgen import generateTrackItem, \
  File "/home/mathias/.local/lib/python3.8/site-packages/deemix/itemgen.py", line 4, in <module>
    from deezer.errors import GWAPIError, APIError
ModuleNotFoundError: No module named 'deezer.errors'

notify() is called when notifications are not configured

I just updated recently and now not working anymore, show me this message.

Error while sending mail: please run connect() first
Traceback (most recent call last):
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\valbe\AppData\Local\Programs\Python\Python37\Scripts\deemon.exe\__main__.py", line 7, in <module>
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\__main__.py", line 5, in main
    Deemon().main()
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\app\main.py", line 187, in main
    self.download_queue(self.queue_list)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\app\main.py", line 136, in download_queue
    self.notify.notify(notify_releases)
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\site-packages\deemon\app\notify.py", line 40, in notify
    self.logger.error("Error while sending mail: " + str(e))
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\smtplib.py", line 284, in __exit__
    self.close()
  File "c:\users\valbe\appdata\local\programs\python\python37\lib\smtplib.py", line 977, in close
    sock = self.sock
AttributeError: 'SMTP_SSL' object has no attribute 'sock'

I've checked the logs, seems it keep trying to send an email and needs to be configurated, but I don't wanna send any email, just download

E-mail notifications failing | ValueError: Invalid format string

deemon -v refresh
2021-07-10 02:37:02 [DEBUG] deemon.app.refresh: Refreshing artists
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Brookes Brothers - So Many Times / Now I'm Found (Remixes) (Club Masters) to the queue
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Brookes Brothers - Flashing Lights (Kilian & Jo Mix) to the queue
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Brookes Brothers - Movin' On (Extended DJ Edit) to the queue
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Brookes Brothers - Acts of Mad Men (Part 4) to the queue
2021-07-10 02:37:07 [INFO] deemon.app.refresh: Brookes Brothers: 4 new release(s)
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Camo & Krooked - Acts of Mad Men (Part 1) to the queue
2021-07-10 02:37:07 [DEBUG] deemon.app.refresh: queue: added Camo & Krooked - Get Funky to the queue
2021-07-10 02:37:07 [INFO] deemon.app.refresh: Camo & Krooked: 2 new release(s)
2021-07-10 02:37:26 [DEBUG] deemon.app.refresh: queue: added Nero - Acts of Mad Men (Part 2) to the queue
2021-07-10 02:37:26 [INFO] deemon.app.refresh: Nero: 1 new release(s)
Refreshing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 301/301 (00:40)
2021-07-10 02:37:43 [DEBUG] deemon.app.refresh: Refresh complete

2021-07-10 02:37:43 [DEBUG] deemon.app.dmi: Initializing deemix library
2021-07-10 02:37:43 [INFO] deemon.app.dmi: Verifying ARL is valid, please wait...
2021-07-10 02:37:43 [DEBUG] deemon.app.dmi: ARL found: XX
XX
2021-07-10 02:37:43 [INFO] deemon.app.download: ----------------------------
2021-07-10 02:37:43 [INFO] deemon.app.download: Sending 7 release(s) to deemix for download:
2021-07-10 02:37:43 [INFO] deemon.app.download: + Brookes Brothers - So Many Times / Now I'm Found (Remixes) (Club Masters)...
2021-07-10 02:39:30 [INFO] deemon.app.download: + Brookes Brothers - Flashing Lights (Kilian & Jo Mix)...
2021-07-10 02:39:48 [INFO] deemon.app.download: + Brookes Brothers - Movin' On (Extended DJ Edit)...
2021-07-10 02:39:51 [INFO] deemon.app.download: + Brookes Brothers - Acts of Mad Men (Part 4)...
2021-07-10 02:39:59 [INFO] deemon.app.download: + Camo & Krooked - Acts of Mad Men (Part 1)...
2021-07-10 02:40:06 [INFO] deemon.app.download: + Camo & Krooked - Get Funky...
2021-07-10 02:40:13 [INFO] deemon.app.download: + Nero - Acts of Mad Men (Part 2)...

2021-07-10 02:40:24 [INFO] deemon.app.download: Downloads complete!
2021-07-10 02:40:24 [DEBUG] deemon.app.notify: notify initialized
2021-07-10 02:40:24 [DEBUG] deemon.app.notify: releases to notify on: [{'release_date': '2018-03-23', 'releases': [{'artist': 'Brookes Brothers', 'album': "S
o Many Times / Now I'm Found (Remixes) (Club Masters)"}]}, {'release_date': '2018-02-02', 'releases': [{'artist': 'Brookes Brothers', 'album': 'Flashing Ligh
ts (Kilian & Jo Mix)'}]}, {'release_date': '2017-09-08', 'releases': [{'artist': 'Brookes Brothers', 'album': "Movin' On (Extended DJ Edit)"}]}, {'release_da
te': '2009-10-26', 'releases': [{'artist': 'Brookes Brothers', 'album': 'Acts of Mad Men (Part 4)'}]}, {'release_date': '2009-09-14', 'releases': [{'artist':
 'Camo & Krooked', 'album': 'Acts of Mad Men (Part 1)'}]}, {'release_date': '2009-03-31', 'releases': [{'artist': 'Camo & Krooked', 'album': 'Get Funky'}]},
{'release_date': '2009-09-28', 'releases': [{'artist': 'Nero', 'album': 'Acts of Mad Men (Part 2)'}]}]
Traceback (most recent call last):
  File "c:\python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Python38\Scripts\deemon.exe\__main__.py", line 7, in <module>
  File "c:\python38\lib\site-packages\deemon\__main__.py", line 4, in main
    cli.run()
  File "c:\python38\lib\site-packages\click\core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "c:\python38\lib\site-packages\click\core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "c:\python38\lib\site-packages\click\core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\python38\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\python38\lib\site-packages\click\core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "c:\python38\lib\site-packages\deemon\cli.py", line 120, in refresh_command
    refresh.refresh()
  File "c:\python38\lib\site-packages\deemon\app\refresh.py", line 139, in refresh
    notification.send()
  File "c:\python38\lib\site-packages\deemon\app\notify.py", line 47, in send
    body = self.build_message()
  File "c:\python38\lib\site-packages\deemon\app\notify.py", line 74, in build_message
    part2 = MIMEText(self.html(), 'html')
  File "c:\python38\lib\site-packages\deemon\app\notify.py", line 150, in html
    release_date_str = datetime.strftime(release_date_ts, "%A, %B %-d")
ValueError: Invalid format string

Windows, Python 3.8.6

Artist Directory / Templates

I currently have the following directory structure:

[Artists] /
├─ Artist_1 /
│  ├─ [YYYY-MM-DD] Release_1 /

However, when I use the deemon download --artist "Artist_1" the resulting structure is then:

[Artists]/
├─ Artist_1/ 
│  ├─ [YYYY-MM-DD] Release_1/
├─ Artist_1 - Release_1/

Meaning it won't take sub-folders into considerations and re-downloads releases.
Maybe something similar to deemix's templating system can be used?

Templates

The fields used can be found in the config.json:

"tracknameTemplate": "%artist% - %title%",
"albumTracknameTemplate": "%tracknumber% - %title%",
"albumNameTemplate": "[%date%] %album%",

Receiving ARL error

Receiving "ARL verification failed" Checked ARL in Deemix software and it works fine... / Am I suppose to input ARL into Deemon files somehow??
Screenshot_20210602-183845

Artists with lower case name are skippeds

Hi, I just notice that artists with lower cases are not recognized by Deemon. I have in a folder, names like eRa, black midi, which is this way they are written and the program just ignores them when will search for new releases, I mean, it's just skipped even for register in the database. For example, I have these sequence folders:

Artist X
Artist Y
black midi
Artist Z

And when will check for new releases, show me this way:

----------------------------
Checking for new releases...
----------------------------
Artist X
Artist Y
Artist Z

I'm on the last release, btw
Thanks anyway

Monitor with time machine argument clears all releases instead of just new artists

Hi, I am running
deemon monitor --import /downloads/artists.txt -T 2021-01-01
to get new artists up to speed before using refresh on a cron.
Deemon appears to wipe out all the releases after this date for all artists, instead of just the newly added ones. I'm not sure if this was the intention as in the usage examples it has
-T, --time-machine YYYY-MM-DD Refresh newly added artists on this date

All my artists are in this file and I append new ones to the end

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.