Skip to content

Commit

Permalink
feat: new stable version
Browse files Browse the repository at this point in the history
Add capwords function for title of playlist.
Add checks for extension attribute in append mode.
Add warnings for extensions enabled.
Add checks for image file.
  • Loading branch information
MatteoGuadrini committed Nov 10, 2022
2 parents 5302087 + d61811a commit 0cc4869
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 20 deletions.
8 changes: 8 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Release notes

## 1.4.0
Nov 10, 2022

- Add _capwords_ function for title of playlist
- Add checks for extension attribute in append mode
- Add warnings for extensions enabled
- Add checks for image file

## 1.3.0
Oct 24, 2022

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.3.0'
__version__ = '1.4.0'
__author__ = 'Matteo Guadrini'
__email__ = '[email protected]'
__homepage__ = 'https://github.com/MatteoGuadrini/mkpl'
73 changes: 54 additions & 19 deletions mkpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@

# region imports
import argparse
from string import capwords
from re import findall, sub
from filecmp import cmp
from os.path import join
from os.path import join, exists
from pathlib import Path
from random import shuffle

Expand All @@ -35,7 +36,7 @@
# region globals
FILE_FORMAT = {'mp1', 'mp2', 'mp3', 'mp4', 'aac', 'ogg', 'wav', 'wma',
'avi', 'xvid', 'divx', 'mpeg', 'mpg', 'mov', 'wmv'}
__version__ = '1.3.0'
__version__ = '1.4.0'


# endregion
Expand Down Expand Up @@ -85,8 +86,32 @@ def get_args():
args.playlist += '.m3u'

# Open playlist file
mode = 'at' if args.append else 'wt'
mode = 'at+' if args.append else 'wt'
args.playlist = open(args.playlist, mode=mode)
args.enabled_extensions = False
args.enabled_title = False
args.enabled_encoding = False
# Verify extension attribute in append mode
if args.append:
args.playlist.seek(0)
first_three_lines = args.playlist.readlines(100)
for line in first_three_lines:
if '#EXTM3U' in line:
args.enabled_extensions = True
if '#PLAYLIST' in line:
args.enabled_title = True
if '#EXTENC' in line:
args.enabled_encoding = True
args.playlist.read()
# Check if extensions are disabled and image is specified
if not args.enabled_extensions and args.image:
args.image = None
print(f'warning: image {args.image} has not been set because the extensions are not present in the file')

# Check if image file exists
if args.image:
if not exists(args.image):
parser.error(f'image file {args.image} does not exist')

# Extend files format
if args.include:
Expand Down Expand Up @@ -116,7 +141,7 @@ def file_in_playlist(playlist, file, root=None):
def vprint(verbose, *messages):
"""Verbose print"""
if verbose:
print('DEBUG:', *messages)
print('debug:', *messages)


def main():
Expand Down Expand Up @@ -170,34 +195,44 @@ def main():

# 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()}')
if not args.enabled_extensions:
multimedia_files.insert(0, '#EXTM3U')
args.enabled_extensions = True
ext_part += 1
if args.max_tracks:
args.max_tracks += 1

# Set title
if args.title:
if not args.enabled_title:
multimedia_files.insert(1, f'#PLAYLIST: {capwords(args.title)}')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1
else:
print("warning: title is already configured")

# Set encoding
if args.encoding:
multimedia_files.insert(1, f'#EXTENC: {args.encoding}')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1
if not args.enabled_extensions:
multimedia_files.insert(1, f'#EXTENC: {args.encoding}')
ext_part += 1
if args.max_tracks:
args.max_tracks += 1
else:
print("warning: encoding is already configured")

with args.playlist as playlist:
joined_string = f'\n#EXTIMG: {args.image}\n' if args.image else '\n'
vprint(args.verbose, f"write playlist {playlist.name}")
joined_string = f'\n#EXTIMG: {args.image}\n' if args.image and args.enabled_extensions else '\n'
end_file_string = '\n'
# 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')
playlist.write(joined_string.join(multimedia_files[ext_part:args.max_tracks]) + end_file_string)
else:
print(f'WARNING: No multimedia files are found here: {",".join(args.directories)}')
print(f'warning: no multimedia files are found here: {",".join(args.directories)}')


# endregion
Expand Down

0 comments on commit 0cc4869

Please sign in to comment.