Example #1
0
def main(argv):
    """Entrance to the program."""
    if __name__ != "__main__":
        Filter.filtered_list = [pok for pok in Filter.POKEMON_LIST]
    # TODO Lower main() complexity with factory functions or something
    options = parser.parse_args(argv)  # Parser is imported at top of file.
    try:
        options.id = int(options.id)
    except ValueError:
        options.name = options.id.lower()
        options.id = 0
        Filter.filtered_list = [
            x for x in Filter.filtered_list if options.name == x.get_name()
        ]

    size = len(Filter.filtered_list)
    if size == 0:
        print("No pokemon matches the specified filters")
        return

    if options.id <= 0:
        # TODO this doesn't account for the current set pokemon and might try
        # TODO to set the same pokemon again (essentially not doing anything)
        target = random.choice(Filter.filtered_list)
    else:
        options.id -= 1
        if len(Filter.POKEMON_LIST) > options.id:
            if len(sys.argv) > 2:
                print("ID has been specified, ignoring all filters.")
            size = 1
            target = Filter.POKEMON_LIST[options.id]
            Filter.filtered_list = [target]
        else:
            print("Invalid id specified")
            return

    if options.verbose or options.dry_run:
        if size == 1:
            print('A single pokemon matches the specified criteria: ')
        if size > Database.MAX_ID:
            print('No pokemon has been filtered...')
        else:
            # Print the list of filtered pokemon
            [
                print(f"#{pkmn.get_id()} - {pkmn.get_name().title()}")
                for pkmn in Filter.filtered_list
            ]
        print("Total of %d pokemon matched the filters. Chose %s" %
              (size, target.get_name().title()))

    if options.dry_run:
        print("Dry run, exiting.")
        return

    if options.clear:
        if PIPE_EXISTS:
            pipe_out = os.open(PIPE_PATH, os.O_WRONLY)
            os.write(pipe_out, b"quit\n")
            os.close(pipe_out)
        scripter.clear_terminal()
        return

    if is_slideshow and options.id <= 0 and size > 1:
        if PIPE_EXISTS:
            print("Slideshow already running in this instance!")
            sys.exit(0)
        if options.slideshow <= 0:
            print("Time has to be greater then 0. You can use decimal values.")
            return
        target_func = scripter.change_wallpaper if options.wallpaper else \
            scripter.change_terminal
        slideshow(Filter.filtered_list, options.slideshow, target_func)
        return

    if options.wallpaper:
        scripter.change_wallpaper(target.get_path())
    else:
        scripter.change_terminal(target.get_path(), title=target.get_name().title(), background_process=False)
Example #2
0
def main(argv=None):
    """Entrance to the program."""
    if __name__ != "__main__":
        Filter.filtered_list = [pok for pok in Filter.POKEMON_LIST]
    # TODO Lower main() complexity with factory functions or something
    options = parser.parse_args(argv)  # Parser is imported at top of file.
    try:
        options.id = int(options.id)
    except ValueError:
        options.name = options.id.lower()
        options.id = 0
        Filter.filtered_list = [
            x for x in Filter.filtered_list if options.name == x.get_name()
        ]

    size = len(Filter.filtered_list)
    if size == 0:
        print("No pokemon matches the specified filters")
        return

    if options.id <= 0:
        # TODO this doesn't account for the current set pokemon and might try
        # TODO to set the same pokemon again (essentially not doing anything)
        target = random.choice(Filter.filtered_list)
    else:
        options.id -= 1
        if len(Filter.POKEMON_LIST) > options.id:
            if len(sys.argv) > 2:
                print("ID has been specified, ignoring all filters.")
            size = 1
            target = Filter.POKEMON_LIST[options.id]
            Filter.filtered_list = [target]
        else:
            print("Invalid id specified")
            return

    if options.verbose or options.dry_run:
        if size == 1:
            print('A single pokemon matches the specified criteria: ')
        if size > Database.MAX_ID:
            print('No pokemon has been filtered...')
        else:
            # Print the list of filtered pokemon
            [
                print(f"#{pkmn.get_id()} - {pkmn.get_name().title()}")
                for pkmn in Filter.filtered_list
            ]
        print("Total of %d pokemon matched the filters. Chose %s" %
              (size, target.get_name().title()))

    if options.dry_run:
        print("Dry run, exiting.")
        return

    if options.filepath:
        print(target.get_path())
        return

    event_name = "Pokemon-Terminal_Wallpaper" if options.wallpaper else "Pokemon-Terminal_Terminal"
    event_exists = PlatformNamedEvent.exists(event_name)

    if options.clear:
        if event_exists:
            slideshow.stop(event_name)
        if not options.wallpaper:
            scripter.clear_terminal()
        return

    if is_slideshow and options.id <= 0 and size > 1:
        if options.slideshow <= 0:
            print("Time has to be greater than 0. You can use decimal values.")
            return
        if event_exists:
            print("One or more slideshows is already running.\n")
            while True:
                print("[S]top the previous slideshow(s) / ", end='')
                if not options.wallpaper:
                    print("[I]gnore and continue / ", end='')
                print("[A]bort")
                inp = input("Pick one: ").lower()
                if inp == 's':
                    slideshow.stop(event_name)
                    break
                elif inp == 'i' and not options.wallpaper:
                    break
                elif inp == 'a':
                    return
                else:
                    print("Not a valid option!\n")
        target_func = scripter.change_wallpaper if options.wallpaper else scripter.change_terminal
        print(
            f"Starting slideshow with {len(Filter.filtered_list)} Pokemons and a delay of {options.slideshow} minutes."
        )
        pid = slideshow.start(Filter.filtered_list, options.slideshow,
                              target_func, event_name)
        print(f"Forked process to background with PID {pid}.")
        print("You can stop it with 'pokemon {}'.".format(
            '-c -w' if options.wallpaper else '-c'))
        return

    if options.wallpaper:
        scripter.change_wallpaper(target.get_path())
    else:
        scripter.change_terminal(target.get_path())