summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2021-05-04 23:37:53 +0300
committerEvgeny Zinoviev <me@ch1p.io>2021-05-04 23:37:53 +0300
commit795e4d5d1adb8802cc65583f85a73054b3b3f21d (patch)
tree76f75d13493ecac67e8e8705fc072021dd5af000
initial
-rw-r--r--.gitignore3
-rw-r--r--LICENSE25
-rw-r--r--README.md7
-rwxr-xr-xdbpl-util35
4 files changed, 70 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..75b0912
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+venv
+__pycache__
+.idea \ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3d4446b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+BSD 2-Clause License
+
+Copyright (c) 2021, Evgeny Zinoviev
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0f78629
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+# dbpl-util
+
+Utility to dump and manipulate DeaDBeeF playlists in DBPL format.
+
+## License
+
+BSD-2c \ No newline at end of file
diff --git a/dbpl-util b/dbpl-util
new file mode 100755
index 0000000..0fe0118
--- /dev/null
+++ b/dbpl-util
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+from dbpl import Playlist
+from argparse import ArgumentParser
+from pprint import pprint
+
+
+if __name__ == '__main__':
+ parser = ArgumentParser()
+ parser.add_argument('--input', required=True,
+ help='input file')
+ parser.add_argument('--output',
+ help='output file')
+ parser.add_argument('--dump', action='store_true',
+ help='dump track info')
+ parser.add_argument('--replace-path', nargs=2, type=str, metavar=('SEARCH', 'REPLACE'),
+ help='change path to files (merely performs str.replace(SEARCH, REPLACE) on each track)')
+ args = parser.parse_args()
+
+ # read playlist
+ pl = Playlist(args.input)
+
+ # loop through tracks
+ for t in pl.tracks:
+ if args.dump:
+ pprint(t.__dict__)
+ print()
+
+ if args.replace_path:
+ uri = t.get_uri()
+ uri = uri.replace(args.replace_path[0], args.replace_path[1])
+ t.set_uri(uri)
+
+ # save playlist
+ if args.output:
+ pl.save(args.output) \ No newline at end of file