Exemplo n.º 1
0
 def __init__(self):
     self.image_data = ImageData()
     self.csv_lines = []
     self.data_collector = AppDataCollector()
     self.x_collector = XCassetCollector()
Exemplo n.º 2
0
class FileCompiler:
    def __init__(self):
        self.image_data = ImageData()
        self.csv_lines = []
        self.data_collector = AppDataCollector()
        self.x_collector = XCassetCollector()

    def load(self):
        json_file_path = os.path.join(FCS.media_path, FCS.data_file_name)
        with open(json_file_path) as json_file:
            self.image_data.load_from_json(json_file)

    def compile_files(self):
        """

        :type image_key: str
        """
        for deck_set in self.image_data.deck_sets:
            self.data_collector.add_set(deck_set)
            for deck in deck_set.decks:
                self.data_collector.add_deck(deck)

                for card in deck.cards:  # type: FlashCard
                    card_key = os.path.splitext(card.image)[0]

                    self.data_collector.add_card(card)
                    manager = CardFileManager(card_key, card.image)

                    for crop_set in card.crop_sets:  # type: CropSet
                        target_format_list = FCS.target_formats[crop_set.crop_format]

                        for target_format in target_format_list:
                            manager.add_format(target_format, crop_set)

                    src_path_root = os.path.join(FCS.original_root, deck_set.name, deck.name, card.image)
                    lines = manager.get_card_csv_lines(src_path_root, FCS.target_root)

                    for line in lines:
                        self.csv_lines.append(line)

                    x_items = manager.get_xcasset_items(FCS.target_root)
                    for item in x_items:
                        self.x_collector.add_xcasset_image(item)

                    d_images = manager.get_app_image_defs()
                    for key in d_images:
                        self.data_collector.add_image_def(d_images[key])

    def dump_csv_file(self):
        path = os.path.join(FCS.ps_path, FCS.csv_file_name)
        with open(path, 'w') as csv_file:
            for ln in self.csv_lines:
                csv_file.write(ln.to_string())
                csv_file.write('\n')

    def dump_xcasset_files(self):
        self.x_collector.dump_xcasset_files()

    def dump_app_data_json(self):
        self.data_collector.dump_app_json()

    def compile_files_for_card(self, image_key, target_device=None):
        """

        :type image_key: str
        :type target_device: str
        """
        for deck_set in self.image_data.deck_sets:  # type: DeckSet
            if deck_set.contains_card_with_key(image_key):
                self.data_collector.add_set(deck_set)
                for deck in deck_set.decks:  # type: Deck
                    if deck.contains_card_with_key(image_key):
                        self.data_collector.add_deck(deck)

                        for card in deck.cards:  # type: FlashCard
                            card_key = os.path.splitext(card.image)[0]
                            if card_key == image_key:

                                self.data_collector.add_card(card)
                                manager = CardFileManager(card_key, card.image)

                                for crop_set in card.crop_sets:  # type: CropSet
                                    target_format_list = FCS.target_formats[crop_set.crop_format]

                                    for target_format in target_format_list:  # type: TargetFormat
                                        if target_device is None or target_format.name == target_device:
                                            manager.add_format(target_format, crop_set)

                                src_path_root = os.path.join(FCS.original_root, deck_set.name, deck.name, card.image)
                                lines = manager.get_card_csv_lines(src_path_root, FCS.target_root)

                                for line in lines:
                                    self.csv_lines.append(line)

                                #if target_device is None:
                                x_items = manager.get_xcasset_items(FCS.target_root)
                                for item in x_items:
                                    self.x_collector.add_xcasset_image(item)

                                d_images = manager.get_app_image_defs()
                                for key in d_images:
                                    if d_images[key] is not None:
                                        self.data_collector.add_image_def(d_images[key])

    def get_crop_calc(self, image_key, target_device):
        """

        :type image_key: str
        :type target_device: str
        """

        if image_key.endswith(".jpg"):
            image_key = os.path.splitext(image_key)[0]

        self.load()
        self.compile_files_for_card(image_key, target_device)

        line = self.csv_lines[0]  # type:CsvRecord

        crop = {
            "long": line.target_width,
            "short": line.target_height,
            "x1": line.crop_start_x_pc,
            "x2": line.crop_end_x_pc,
            "y1": line.crop_start_y_pc,
            "y2": line.crop_end_y_pc,
        }

        data = self.data_collector.get_data_for_card(image_key, target_device)
        result = {"crop": crop, "def": data}

        return result



    def dump_image(self, image_key):

        """

        :type image_key: str
        """

        if image_key.endswith(".jpg"):
            image_key = os.path.splitext(image_key)[0]

        self.load()
        self.compile_files_for_card(image_key)
        self.data_collector.update_card(image_key)
        self.x_collector.dump_xcasset_files()

        for ln in self.csv_lines:
            nl = ln.to_string()
            as_script = self.get_ascript()
            res = self.as_run(as_script, nl)

    def get_ascript(self):

        ascript = '''
        on run argv
            tell application "Adobe Photoshop CC 2015"
              set js to "#include ~/Dev/Projects/baby-flashcard-app/photoshop/singleImage.jsx" & return
              set js to js & "main(arguments);" & return
              do javascript js with arguments argv

            end tell
        end run
        '''
        return ascript

    def as_run(self, ascript, line):
        "Run the given AppleScript and return the standard output and error."
        home = expanduser("~")
        scpt_path = os.path.join(home, "Dev/Projects/baby-flashcard-app/photoshop/resize_cmd.scpt")
        osa = subprocess.call(
            ['osascript', scpt_path, line])

        # .Popen(['osascript', line],
        #                    stdin=subprocess.PIPE,
        #                    stdout=subprocess.PIPE)
        # res = osa.communicate(ascript)[0]
        # print res, type(osa)
        return osa

    def as_quote(self, astr):
        "Return the AppleScript equivalent of the given string."

        astr = astr.replace('"', '" & quote & "')
        return '"{}"'.format(astr)