Beispiel #1
0
    def convert_chapter(self, compressed_file):
        # Check if the conversion flag is set
        if self.options.conversion_FLAG:
            if not is_image_lib_available():
                print("PIL (Python Image Library) not available.")
            else:
                from convert.convert_file import ConvertFile

                if self.options.verbose_FLAG:
                    print ("Compressed File " + str(compressed_file))

                if compressed_file is not None and self.options.outputDir is not None:
                    ConvertFile.convert(self.options.outputMgr, compressed_file, self.options.outputDir,
                                        self.options.device, self.options.verbose_FLAG)
Beispiel #2
0
def main():
    # Initialize Colorama
    init()

    #Load available plugins
    i = 1
    for plugin_name in SiteParserFactory.Instance().plugins:
        siteDict[str(i)] = plugin_name
        i += 1

    print_license_info()

    # for easier parsing, adds free --help and --version
    # optparse (v2.3-v2.7) was chosen over argparse (v2.7+) for compatibility (and relative similarity) reasons
    # and over getopt(v?) for additional functionality
    parser = optparse.OptionParser(usage='usage: %prog [options] <manga name>',
                                   version=('Manga Downloader %s' % VERSION))

    parser.set_defaults(
        all_chapters_FLAG=False,
        auto=False,
        conversion_FLAG=False,
        convert_Directory=False,
        device='Kindle 3',
        downloadFormat='.cbz',
        downloadPath='DEFAULT_VALUE',
        inputDir=None,
        outputDir='DEFAULT_VALUE',
        overwrite_FLAG=False,
        verbose_FLAG=False,
        timeLogging_FLAG=False,
        maxChapterThreads=3,
        useShortName=False,
        spaceToken='.',
        proxy=None,
        check_every_minutes=-1,
        no_progress_bars=False
    )

    parser.add_option('--all',
                      action='store_true',
                      dest='all_chapters_FLAG',
                      help='Download all available chapters.')

    parser.add_option('-d', '--directory',
                      dest='downloadPath',
                      help='The destination download directory.  Defaults to the directory of the script.')

    parser.add_option('--overwrite',
                      action='store_true',
                      dest='overwrite_FLAG',
                      help='Overwrites previous copies of downloaded chapters.')

    parser.add_option('--verbose',
                      action='store_true',
                      dest='verbose_FLAG',
                      help='Verbose Output.')

    parser.add_option('-j', '--json',
                      dest='json_file_path',
                      help='Parses the .json file and downloads all chapters newer than the last chapter downloaded for'
                           ' the listed mangas.')

    parser.add_option('-c', '--convertFiles',
                      action='store_true',
                      dest='conversion_FLAG',
                      help='Converts downloaded files to a Format/Size acceptable to the device specified by the '
                           '--device parameter.')

    parser.add_option('--device',
                      dest='device',
                      help='Specifies the conversion device. Omitting this option default to %default.')

    parser.add_option('--convertDirectory',
                      action='store_true',
                      dest='convert_Directory',
                      help='Converts the image files stored in the directory specified by --inputDirectory. Stores the '
                           'converted images in the directory specified by --outputDirectory')

    parser.add_option('--inputDirectory',
                      dest='inputDir',
                      help='The directory containing the images to convert when --convertDirectory is specified.')

    parser.add_option('--outputDirectory',
                      dest='outputDir',
                      help='The directory to store the images when --convertDirectory is specified.')

    parser.add_option('-z', '--zip',
                      action='store_const',
                      dest='downloadFormat',
                      const='.zip',
                      help='Downloads using .zip compression.  Omitting this option defaults to %default.')

    parser.add_option('-t', '--threads',
                      dest='maxChapterThreads',
                      help='Limits the number of chapter threads to the value specified.')

    parser.add_option('--timeLogging',
                      action='store_true',
                      dest='timeLogging_FLAG',
                      help='Output time logging.')

    parser.add_option('--useShortName',
                      action='store_true',
                      dest='useShortName_FLAG',
                      help='To support devices that limit the size of the filename, this parameter uses a short name')

    parser.add_option('--spaceToken',
                      dest='spaceToken',
                      help='Specifies the character used to replace spaces in the manga name.')

    parser.add_option('--proxy',
                      dest='proxy',
                      help='Specifies the proxy.')

    parser.add_option('--checkEveryMinutes',
                      dest='check_every_minutes',
                      help='When used with -x sets the time in minutes between checks for your bookmarked manga.',
                      type="int")

    parser.add_option('--noProgressBars',
                      action='store_true',
                      dest='no_progress_bars',
                      help='Disable progress bars.')

    (options, args) = parser.parse_args()

    try:
        options.maxChapterThreads = int(options.maxChapterThreads)
    except:
        options.maxChapterThreads = 2

    if options.maxChapterThreads <= 0:
        options.maxChapterThreads = 2

    if len(args) == 0 and (not (options.convert_Directory or options.json_file_path is not None)):
        parser.error('Manga not specified.')

    set_download_path_to_name_flag = False
    set_output_path_to_default_flag = False
    if len(args) > 0:

        # Default Directory is the ./MangaName
        if options.downloadPath == 'DEFAULT_VALUE':
            set_download_path_to_name_flag = True

        # Default outputDir is the ./MangaName
        if options.outputDir == 'DEFAULT_VALUE':
            set_output_path_to_default_flag = True

    pil_available = is_image_lib_available()
    # Check if PIL Library is available if either of convert Flags are set
    if (not pil_available) and (options.convert_Directory or options.conversion_FLAG):
        print ("\nConversion Functionality Not available.\nMust install the PIL (Python Image Library)")
        sys.exit()
    elif pil_available:
        from convert.convert_file import ConvertFile

    if options.convert_Directory:
        options.inputDir = os.path.abspath(options.inputDir)

    # Changes the working directory to the script location
    if os.path.dirname(sys.argv[0]) != "":
        os.chdir(os.path.dirname(sys.argv[0]))

    options.notificator = None
    options.outputMgr = ProgressBarManager()
    if not options.no_progress_bars:
        options.outputMgr.start()

    try:
        if options.convert_Directory:
            if options.outputDir == 'DEFAULT_VALUE':
                options.outputDir = '.'
            print("Converting Files: %s" % options.inputDir)
            ConvertFile.convert(options.outputMgr, options.inputDir, options.outputDir, options.device,
                                options.verbose_FLAG)

        elif options.json_file_path is not None:
            json_parser = MangaJsonParser(options)
            json_parser.download_manga()
        else:
            for manga in args:
                series_options = copy.copy(options)
                print(manga)
                series_options.manga = manga

                if set_download_path_to_name_flag:
                    series_options.downloadPath = (
                        './' + fix_formatting(series_options.manga, series_options.spaceToken))

                if set_output_path_to_default_flag:
                    series_options.outputDir = series_options.downloadPath

                series_options.downloadPath = os.path.realpath(series_options.downloadPath) + os.sep

                # site selection
                print('\nWhich site?')
                for index in siteDict:
                    print('(%s) %s' % (index, siteDict[index]))

                # Python3 fix - removal of raw_input()
                try:
                    site = raw_input()
                except NameError:
                    site = input()

                try:
                    series_options.site = siteDict[site]
                except KeyError:
                    raise InvalidSite('Site selection invalid.')

                serie = MangaDownloader(series_options)
                serie.download_new_chapters()

    except KeyboardInterrupt:
        sys.exit(0)

    finally:
        # Must always stop the manager
        if not options.no_progress_bars:
            options.outputMgr.stop()