Skip to content

Latest commit

 

History

History
116 lines (97 loc) · 3.92 KB

ideas.md

File metadata and controls

116 lines (97 loc) · 3.92 KB

Make this a command line utility that helps in download and syncing files from SoundCloud to your local hard drive.

Milestone 1

There will be a few commands that are able to run from this jar:

  • download
  • sync
  • syncCheck
  • syncConfig

download

Downloads a specific songs or all songs from a particular artist. This command will have a few options of its own:

  • -s <songUrl>
  • -a <artistUrl>
  • -f <folder>

-s

Downloads an individual song (can be present multiple times).

-a

Downloads all songs from the specified artist (can be present multiple times).

-f

Specifies the output folder of where the downloaded songs go (defaults to current directory).

sync

Syncs all folders specified in the sync.config file (that resides in the current directory the jar is ran from) based upon what is in the local folders and what is on SoundCloud. The way syncing will work is by matching song titles on SoundCloud to local file names. Example: If an artist A has songs titled X, Y, and Z on their page and your sync config is pointing to a folder that has files X.mp3 and W.mp3, then songs Y and Z will be downloaded to Y.mp3 and Z.mp3.

syncCheck

Checks to see which songs from the various folders you have indicated to sync need to be downloaded to be fully synced with SoundCloud. This will use the same logic as the sync command, however, this will just print out for which songs you are missing for each folder:

Local sync folder: <folderA>
Songs not synced from SoundCloud:
    songA
    songB
    songG
Local sync folder: <folderB>
Songs not synced from Soundcloud:
Local sync folder: <folderC>
Songs not synced from SoundCloud:
    songA

syncConfig

Allows users to easily create the sync config by answering questions instead of writing the config by hand. The config will be in a json format similar to the following:

{
  "folderConfig": [
    {
      "artistUrl": "<SC artist url>",
      "localFolder": "<local folder path>",
      "downloadFolder": "<local folder path>",
      "syncOn": <true/false>
    },
    ...
  ]
}

artistUrl

This is a string property that points to the artists' SC page.

localFolder

This is a string property that points to the local folder to sync.

downloadFolder

This is a string property that points to the local folder where songs will be downloaded to (defaults to localFolder).

syncOn

This is a boolean property to indicate if this folder should sync.

This file will be generated by asking the user a few questions and dynamically build the config file based on their input. Current thoughts on the questions are:

  • Enter the artist's SoundCloud url:
  • Enter the local folder to sync:
  • Enter the local folder to download to (empty defaults to local sync folder):
  • Should this folder sync (y/n):

Milestone 2

Add the ability to "tag" songs as they're downloaded with various mp3 information. There is a java library that seems to be able to be able to do this already.

This ability to tag songs would be implemented by adding it to the sync.config file:

{
  "folderConfig": [
    {
      "artistUrl": "<SC artist url>",
      "localFolder": "<local folder path>",
      "downloadFolder": "<local folder path>",
      "syncOn": <true/false>,
      "metadata": {
        "album": "<album>",
        "artist": "<artist>",
        "title": "<title>",
        "duration": 19321344,
        "genre": "<genre>"
      }
    },
    ...
  ]
}

album

This is a string property that indicates the song's album.

artist

This is a string property that indicates the song's artist.

title

This is a string property that indicates the song's title.

duration

This is a number property that indicates the song's duration.

genre

This is a string property that indicates the song's genre.

Obviously adding this metadata changes would require changes both the syncConfig and sync commands.