diff --git a/Mylar.py b/Mylar.py index f2cdbdcd..b4b86877 100755 --- a/Mylar.py +++ b/Mylar.py @@ -89,12 +89,13 @@ def main(): parser_maintenance.add_argument('-ij', '--importjson', action='store', help='Import a specified json file containing just {"ComicID": "XXXXX"} into current db') parser_maintenance.add_argument('-st', '--importstatus', action='store_true', help='Provide current maintenance status') parser_maintenance.add_argument('-u', '--update', action='store_true', help='force mylar to perform an update as if in GUI') + parser_maintenance.add_argument('-fs', '--fixslashes', action='store_true', help='remove double-slashes from within paths in db') #parser_maintenance.add_argument('-it', '--importtext', action='store', help='Import a specified text file into current db') args = parser.parse_args() if args.maintenance: - if all([args.exportjson is None, args.importdatabase is None, args.importjson is None, args.importstatus is False, args.update is False]): + if all([args.exportjson is None, args.importdatabase is None, args.importjson is None, args.importstatus is False, args.update is False, args.fixslashes is False]): print 'Expecting subcommand with the maintenance positional argumeent' sys.exit() mylar.MAINTENANCE = True @@ -221,7 +222,7 @@ def main(): if mylar.DAEMON: mylar.daemonize() - if mylar.MAINTENANCE is True and any([args.exportjson, args.importjson, args.update is True, args.importstatus is True]): + if mylar.MAINTENANCE is True and any([args.exportjson, args.importjson, args.update is True, args.importstatus is True, args.fixslashes is True]): loggermode = '[MAINTENANCE-MODE]' if args.importstatus: #mylar.MAINTENANCE is True: cs = maintenance.Maintenance('status') @@ -260,6 +261,11 @@ def main(): logger.info('%s file indicated as being written to json format - destination accepted as %s' % (loggermode, maintenance_path)) ej = maintenance.Maintenance('json-export', output=maintenance_path) j = ej.json_export() + elif args.fixslashes: + #for running the fix slashes on the db manually + logger.info('%s method indicated as fix slashes' % loggermode) + fs = maintenance.Maintenance('fixslashes') + j = fs.fix_slashes() else: logger.info('%s Not a valid command: %s' % (loggermode, maintenance_info)) sys.exit() diff --git a/mylar/maintenance.py b/mylar/maintenance.py index 49b31699..7444caa9 100644 --- a/mylar/maintenance.py +++ b/mylar/maintenance.py @@ -84,6 +84,33 @@ class Maintenance(object): logger.info('[MAINTENANCE-MODE][%s] Successfully exported %s ComicID\'s to json file: %s' % (self.mode.upper(), len(self.comiclist), self.outputfile)) + def fix_slashes(self): + self.sql_attachmylar() + + for ct in self.dbmylar.execute("SELECT ComicID, ComicLocation FROM comics WHERE ComicLocation like ?", ['%' + os.sep.encode('unicode-escape') + os.sep.encode('unicode-escape') + '%']): + st = ct[1].find(os.sep.encode('unicode-escape')+os.sep.encode('unicode-escape')) + if st != -1: + clocation = ct[1][st+2:] + if clocation[0] != os.sep.encode('unicode-escape'): + new_path = os.path.join(mylar.CONFIG.DESTINATION_DIR, clocation) + logger.info('[Incorrect slashes in path detected for OS] %s' % os.path.join(mylar.CONFIG.DESTINATION_DIR, ct[1])) + logger.info('[PATH CORRECTION] %s' % new_path) + self.comiclist.append({'ComicLocation': new_path, + 'ComicID': ct[0]}) + + for cm in self.comiclist: + try: + self.dbmylar.execute("UPDATE comics SET ComicLocation=? WHERE ComicID=?", (cm['ComicLocation'], cm['ComicID'])) + except Exception as e: + logger.warn('Unable to correct entry: [ComicID:%s] %s [%e]' % (cm['ComicLocation'], cm['ComicID'],e)) + + self.sql_closemylar() + + if len(self.comiclist) >0: + logger.info('[MAINTENANCE-MODE][%s] Successfully fixed the path slashes for %s series' % (self.mode.upper(), len(self.comiclist))) + else: + logger.info('[MAINTENANCE-MODE][%s] No series found with incorrect slashes in the path' % self.mode.upper()) + def check_status(self): try: found = False