Skip to content

Commit

Permalink
New stable release
Browse files Browse the repository at this point in the history
Add verbose argument. Add vprint function.
Fix epilog message. Fix new line in the append mode.
  • Loading branch information
MatteoGuadrini committed Oct 24, 2022
2 parents b0724f6 + 6855046 commit 5302087
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 25 deletions.
12 changes: 11 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
# Release notes

## 1.3.0
Oct 24, 2022

- Add _verbose_ argument
- Add _vprint_ function
- Fix shuffle and extension issue #1
- Fix new line in the append mode
- Fix epilog message
- Fix join with extension tags

## 1.2.0
Sep 19, 2022
Sep 28, 2022

- Add _windows_ argument
- Fix file extension with UNICODE encode
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ $ python setup.py install # for others
| -u | --unique | The same files are not placed in the playlist | |
| -c | --append | Continue playlist instead of override it | |
| -w | --windows | Windows style folder separator | |
| -v | --verbose | Enable verbosity (debug mode) | |

## Examples

Expand Down
2 changes: 1 addition & 1 deletion __info__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

"""Information variable used by modules on this package."""

__version__ = '1.2.0'
__version__ = '1.3.0'
__author__ = 'Matteo Guadrini'
__email__ = 'matteo.guadrini@hotmail.it'
__homepage__ = 'https://github.com/MatteoGuadrini/mkpl'
66 changes: 43 additions & 23 deletions mkpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
# region globals
FILE_FORMAT = {'mp1', 'mp2', 'mp3', 'mp4', 'aac', 'ogg', 'wav', 'wma',
'avi', 'xvid', 'divx', 'mpeg', 'mpg', 'mov', 'wmv'}
__version__ = '1.2.0'
__version__ = '1.3.0'


# endregion
Expand All @@ -49,11 +49,12 @@ def get_args():
parser = argparse.ArgumentParser(
description="Make music playlist",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
epilog='Playlist format is m3u'
epilog='Playlist file is M3U format'
)

parser.add_argument("playlist", help="Playlist file", type=str)
parser.add_argument("-v", "--version", help="Print version", action='version', version=__version__)
parser.add_argument("-v", "--verbose", help="Enable verbosity", action="store_true")
parser.add_argument("-V", "--version", help="Print version", action='version', version=__version__)
parser.add_argument("-d", "--directories", help="Directories that contains multimedia file",
nargs=argparse.ONE_OR_MORE, default=['.'])
parser.add_argument("-e", "--exclude-dirs", help="Exclude directory paths", nargs=argparse.ONE_OR_MORE, default=[])
Expand Down Expand Up @@ -112,38 +113,29 @@ def file_in_playlist(playlist, file, root=None):
return True


def vprint(verbose, *messages):
"""Verbose print"""
if verbose:
print('DEBUG:', *messages)


def main():
"""Make a playlist"""

args = get_args()
multimedia_files = list()

# Check if playlist is an extended M3U
if args.title or args.encoding or args.image:
multimedia_files.insert(0, '#EXTM3U')
if args.max_tracks:
args.max_tracks += 1

# Set encoding
if args.encoding:
multimedia_files.insert(1, f'#EXTENC: {args.encoding}')
if args.max_tracks:
args.max_tracks += 1

# Set title
if args.title:
multimedia_files.append(f'#PLAYLIST: {args.title.capitalize()}')
if args.max_tracks:
args.max_tracks += 1

# Add link
multimedia_files.extend(args.link)

vprint(args.verbose, f"formats={FILE_FORMAT}, recursive={args.recursive}, pattern={args.pattern}")

# Walk to directories
for directory in args.directories:
# Build a Path object
path = Path(directory)
root = path.parent
vprint(args.verbose, f"current directory={path}, root={root}")
for fmt in FILE_FORMAT:
# Check recursive
folder = '**/*' if args.recursive else '*'
Expand All @@ -164,20 +156,48 @@ def main():
if findall(args.pattern, file):
# Check file size
if size >= args.size:
vprint(args.verbose, f"add multimedia file {file}")
multimedia_files.append(
sub('/', r"\\", file) if args.windows else file
)

# Build a playlist
if multimedia_files:
ext_part = 0
# Check shuffle
if args.shuffle:
shuffle(multimedia_files)

# Check if playlist is an extended M3U
if args.title or args.encoding or args.image:
multimedia_files.insert(0, '#EXTM3U')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1

# Set title
if args.title:
multimedia_files.insert(1, f'#PLAYLIST: {args.title.capitalize()}')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1

# Set encoding
if args.encoding:
multimedia_files.insert(1, f'#EXTENC: {args.encoding}')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1

with args.playlist as playlist:
joined_string = f'\n#EXTIMG: {args.image}\n' if args.image else '\n'
playlist.writelines(f'{joined_string}'.join(multimedia_files[:args.max_tracks]))
# Write extensions if exists
if ext_part:
playlist.write('\n'.join(multimedia_files[:ext_part]) + joined_string)
# Write all multimedia files
playlist.write(joined_string.join(multimedia_files[ext_part:args.max_tracks]) + '\n')
else:
print(f'warning: No multimedia files found here: {",".join(args.directories)}')
print(f'WARNING: No multimedia files are found here: {",".join(args.directories)}')


# endregion
Expand Down

0 comments on commit 5302087

Please sign in to comment.