Forráskód Böngészése

Finalize organize functionality

Cammy 6 éve
szülő
commit
994f5e4108
2 módosított fájl, 69 hozzáadás és 44 törlés
  1. 65 39
      pyinstalive/organize.py
  2. 4 5
      pyinstalive/startup.py

+ 65 - 39
pyinstalive/organize.py

@@ -1,48 +1,74 @@
 import os
 import shutil
 try:
+    import pil
     import logger
 except ImportError:
+    from . import pil
     from . import logger
 
 def organize_videos():
 
-    # Make a variable equal to the names of the files in the current directory.
-    current_dir_files = os.listdir()
-
-    # The downloaded livestream(s) are in MP4 format.
-    video_format = ['mp4']
-
-    # Find the MP4 files and save them in a variable called 'filenames'.
-    filenames = [filename for filename in current_dir_files
-        if filename.split('.')[-1] in video_format]
-
-    if len(filenames) == 0:
-        logger.error("No MP4 files in the current directory.")
-        return
-
-    # We want a dictionary where the filenames are the keys
-    # and the usernames are the values.
-    filenames_to_usernames = {}
-
-    # Populate the dictionary by going through each filename and removing the
-    # undesired characters, leaving just the usernames.
-    for filename in filenames:
-        filename_parts = filename.split('_')[1:-3]
-        usernames = '_'.join(filename_parts)
-        filenames_to_usernames[filename] = usernames
-        
-    # The usernames are the values of the filenames_to_usernames dictionary.
-    usernames = set(filenames_to_usernames.values())
-
-    # Make a folder for each username.
-    for username in usernames:
-        if not os.path.isdir(username):
-            os.mkdir(username)
-
-    # Move the videos into the folders
-    for filename, username in filenames_to_usernames.items():
-        shutil.move(filename, username)
-
-    num_videos_moved = len(filenames_to_usernames.keys())
-    logger.info("{} videos moved successfully.".format(num_videos_moved))
+    try:
+        # Make a variable equal to the names of the files in the current directory.
+        current_dir_files = os.listdir(pil.dl_path)
+
+        # Count the amount of files moved and not moved because they already exist etc.
+        not_moved = 0
+        has_moved = 0
+
+        # The downloaded livestream(s) are in MP4 format.
+        video_format = ['mp4']
+
+        # Find the MP4 files and save them in a variable called 'filenames'.
+        filenames = [os.path.join(pil.dl_path, filename) for filename in current_dir_files
+            if filename.split('.')[-1] in video_format]
+
+        if len(filenames) == 0:
+            logger.binfo("No files were found to organize.")
+            logger.separator()
+            return
+
+        # We want a dictionary where the filenames are the keys
+        # and the usernames are the values.
+        filenames_to_usernames = {}
+
+        # Populate the dictionary by going through each filename and removing the
+        # undesired characters, leaving just the usernames.
+        for filename in filenames:
+            filename_parts = filename.split('_')[1:-3]
+            usernames = '_'.join(filename_parts)
+            filenames_to_usernames[filename] = usernames
+            
+        # The usernames are the values of the filenames_to_usernames dictionary.
+        usernames = set(filenames_to_usernames.values())
+
+        # Make a folder for each username.
+        for username in usernames:
+            username_path = os.path.join(pil.dl_path, username)
+            if not os.path.isdir(username_path):
+                os.mkdir(username_path)
+
+        # Move the videos into the folders
+        for filename, username in filenames_to_usernames.items():
+            filename_base = os.path.basename(filename)
+            destination_path = os.path.join(pil.dl_path, username, filename_base)
+            if not os.path.isfile(destination_path):
+                try:
+                    shutil.move(filename, destination_path)
+                    logger.info("Moved '{:s}' successfully.".format(filename_base))
+                    has_moved += 1
+                except OSError as oe:
+                    logger.warn("Could not move {:s}: {:s}".format(filename_base, str(oe)))
+                    not_moved += 1
+            else:
+                logger.binfo("Did not move '{:s}' because it already exists.".format(filename_base))
+                not_moved += 1
+
+        logger.separator()
+        logger.info("{} {} moved.".format(has_moved, "file was" if has_moved == 1 else "files were"))
+        if not_moved:
+            logger.binfo("{} {} not moved.".format(not_moved, "file was" if not_moved == 1 else "files were"))
+        logger.separator()
+    except Exception as e:
+        logger.error("Could not organize files: {:s}".format(str(e)))

+ 4 - 5
pyinstalive/startup.py

@@ -33,10 +33,6 @@ def validate_inputs(config, args, unknown_args):
     try:
         config.read(pil.config_path)
 
-        if args.organize:
-            organize.organize_videos()
-            return False
-
         if args.download:
             pil.dl_user = args.download
             if args.downloadfollowing or args.batchfile:
@@ -44,7 +40,7 @@ def validate_inputs(config, args, unknown_args):
                 logger.warn("Please use only one download method. Use -h for more information.")
                 logger.separator()
                 return False
-        elif not args.clean and not args.info and not args.assemble and not args.downloadfollowing and not args.batchfile:
+        elif not args.clean and not args.info and not args.assemble and not args.downloadfollowing and not args.batchfile and not args.organize:
             logger.banner()
             logger.error("Please use a download method. Use -h for more information.")
             logger.separator()
@@ -230,6 +226,9 @@ def validate_inputs(config, args, unknown_args):
             pil.assemble_arg = args.assemble
             assembler.assemble()
             return False
+        elif args.organize:
+            organize.organize_videos()
+            return False
 
         return True
     except Exception as e: