Plugin API
日本語
日本語
  • 入門
    • 概要
    • あなたの最初のプラグイン
    • ファイル構造概要
    • プラグインタイプ
      • ウィンドウ
      • バックグラウンドサービス
      • フォーマット拡張
      • インスペクター
    • プラグインのデバッグ
  • 配布
    • プラグインの準備
    • プラグインパッケージ
    • プラグインを公開する
    • プラグインを更新する
    • 開発者ポリシー
    • Plugin Icon Teamplate
  • 開発ガイド
    • manifest.json 設定
    • データ取得
    • データ変更
    • ローカルファイルへのアクセス
    • ネットワークリクエストの送信
    • Node.js ネイティブ API の使用
    • サードパーティモジュールの使用
    • 多言語対応(i18n)
    • フレームレスウィンドウ
  • API 参照
    • event(イベント)
    • item(項目)
    • folder(フォルダー)
    • tag(タグ)
    • tagGroup(タグ グループ)
    • library(ライブラリ)
    • window(ウィンドウ)
    • app(アプリケーション)
    • os(オペレーティングシステム)
    • screen(スクリーン)
    • notification(通知)
    • contextMenu(コンテキストメニュー)
    • dialog(ダイアログ)
    • clipboard(クリップボード)
    • drag(ドラッグファイル)
    • shell(シェル)
    • log(ログ)
  • 追加モジュール
    • FFmpeg
GitBook提供
このページ内
  1. 入門
  2. プラグインタイプ

フォーマット拡張

この記事では、フォーマット拡張プラグインの基本的な概念を説明します。

フォーマット拡張プラグインの主な目的は、Eagle でまだサポートされていないファイル形式のプレビューを可能にすることです。他のタイプのプラグインと違って、フォーマット拡張プラグインは manifest.json の中で main 属性を定義する必要はありませんが、代わりに preview 属性を設定する必要があります。以下は例のコードです:

"preview": {}

preview の中で拡張したいファイルの拡張子を定義することができます。例えば、Eagle で icns アイコン形式をサポートさせたい場合、 "icns": {} と入力できます:

"preview" : {
    "icns": {}
}

また、複数の拡張子を設定する必要がある場合は、コンマ , を使用して異なる拡張子を区切って定義できます。例えば:

"preview" : {
    "icns,ico": {}
}

フォーマット拡張プラグインは2つの部分に分けられます:

  1. "thumbnail.path":拡張したいファイル形式のサムネイルを解析するための .js ファイルを提供します。

  2. "viewer.path":拡張したい形式のプレビュー用の .html ファイルを提供します。

"preview": {
    "icns": {
        "thumbnail": {
            "path": "thumbnail/icns.js",
            "size": 400,
            "allowZoom": false
        },
        "viewer": {
            "path": "viewer/icns.html"
        }
    }
}

他の metadata.json フィールドを設定した後、最終的なコードは以下のようになります:

{
    "id": "LARSKLB8OTOC2",
    "version": "1.0.0",
    "platform": "all",
    "arch": "all",
    "name": "Preview Plugin",
    "logo": "/logo.png",
    "keywords": [
        "icns"
    ],
    "devTools": false,
    "preview": {
        "icns": {
            "thumbnail": {
                "path": "thumbnail/icns.js",
                "size": 400,
                "allowZoom": false
            },
            "viewer": {
                "path": "viewer/icns.html"
            }
        }
    }
}
const fs = require('fs');
const icns = require('./../js/icns-util.js');
const imageSize = require('./../js/image-size.js');

module.exports = async ({ src, dest, item }) => {
    return new Promise(async (resolve, reject) => {
        try {
            // 1. 解析してサムネイルファイルをdestに生成
            await icns.icns2png(src, dest);
            let size = await imageSize(dest);

            // 2. 結果が正しいかチェック
            if (!fs.existsSync(dest) || size.width === 0) {
                return reject(new Error(`icnsファイルのサムネイル生成に失敗しました。`));
            }

            // 3. アイテムの寸法を更新
            item.height = size?.height || item.height;
            item.width = size?.width || item.width;

            // 4. 結果を返す
            return resolve(item);
        }
        catch (err) {
            return reject(err);
        }
    });
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ICNS Viewer</title>
    <style>
        html, body {
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
        #viewer {
            pointer-events: none;
            object-fit: contain;
            object-position: center;
            width: 100%;
            height: 100%;
            max-width: 100vw;
            max-height: 100vh;
        }
    </style>
</head>
<body>
    <img id="viewer"/>
    <script>
        const urlParams = new URLSearchParams(window.location.search);
        const id = urlParams.get('id');
        const filePath = urlParams.get('path');
        const width = urlParams.get('width');
        const height = urlParams.get('height');
        const theme = urlParams.get('theme');
        const lang = urlParams.get('lang');

        const viewer = document.querySelector('#viewer');

        // 1. Load the thumbnail image first
        // 👍 Avoid loading for too long, and UI has no content
        viewer.src = filePath.replace(".icns", "_thumbnail.png");

        // 2. Load the file and replace thumbnail
        (async function() {
            const icns = require('./../js/icns-util.js');
            let buffer = await icns.icns2buffer(filePath);
            let base64 = `data:image/png;base64,${buffer.toString('base64')}`;
            viewer.src = base64;
        })();
    </script>
</body>
</html>

注意:現在、フォーマット拡張プラグインは、Eagle Plugin API および DevTools のデバッグ機能をサポートしていません。

前へバックグラウンドサービス次へインスペクター

最終更新 1 年前

完全なサンプルコード:

https://github.com/eagle-app/eagle-plugin-examples/tree/main/Preview