==========================================================================
  eQSL ADIF アップローダー  Ver1.0
==========================================================================
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  [概要]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  複数の ADIF ファイルを eQSL.cc へ自動でアップロードするツールです。
  EXEファイルをダブルクリックするだけで動作します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  1. ファイル構成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  同じフォルダに以下のファイルを置いて使用します。

  任意のフォルダ/
  ├── eqsl_adif_uploader.exe   ← 本プログラム（実行ファイル）
  ├── config.ini               ← 設定ファイル（初回起動時に自動生成）
  ├── readme.txt               ← この説明書
  └── *.adi / *.adif           ← アップロードしたい ADIF ファイル
                                  （別フォルダに置く場合は config.ini で指定）


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  2. はじめての起動（初期設定）
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  【手順 1】eqsl_adif_uploader.exe をダブルクリックして起動します。

    config.ini が存在しない場合、自動的にサンプルの config.ini が
    生成されてプログラムが終了します。

      ============================================================
        config.ini を生成しました
      ============================================================
        場所: C:\Users\...\config.ini

        テキストエディタで開き、以下の項目を設定してください:
          [eQSL]  username  … eQSL のコールサイン
          [eQSL]  password  … eQSL のパスワード
          [files] directory … ADIF ファイルが入ったフォルダ

        設定後、もう一度このプログラムを起動してください。
      ============================================================

  【手順 2】生成された config.ini をメモ帳などで開いて編集します。

    最低限、以下の 2 項目を設定してください。

      [eQSL]
      username = JA1ABC        ← ご自身のコールサインに変更
      password = MyPassword123 ← eQSL のパスワードに変更

    ※ メモ帳で保存するとき、文字コードは「UTF-8」を選択してください。
       （「名前を付けて保存」→「文字コード」欄で選択できます）

  【手順 3】もう一度 eqsl_adif_uploader.exe をダブルクリックします。

    設定が正しければアップロードが開始されます。
    
    ※ 起動用ショートカットアイコンの作り方
       eqsl_adif_uploader.exeファイルを右クリックして「その他のオプション
       を確認」→「ショートカットの作成(S)」です。
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  3. config.ini の設定項目
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  config.ini は 3 つのセクション（[eQSL] / [files] / [options]）
  で構成されています。# で始まる行はコメントです。


  ─── [eQSL] セクション ── 認証情報 ────────────────

  username（必須）
    eQSL に登録したコールサイン（ユーザー名）を入力します。
    例）username = JA1QSO

  password（必須）
    eQSL のパスワードを入力します。大文字小文字を区別します。
    例）password = abcd1234

  qth_nickname（任意）
    eQSL で複数のロケーション（QTH）を登録している場合に、
    アップロード先の QTH ニックネームを指定します。
    1 つだけ登録している場合は空欄のままで構いません。
    例）qth_nickname = Home QTH


  ─── [files] セクション ── アップロード対象ファイルの指定 ─────

  directory（任意）
    ADIF ファイルが入っているフォルダを指定します。
    フォルダ内の *.adi および *.adif がすべてアップロードされます。

    ・空欄にすると、EXE と同じフォルダを自動的に検索します。
    ・相対パスは EXE からの相対パスとして扱われます。
    ・絶対パスも使用できます。

    例（空欄）  … EXE と同じフォルダを検索
      directory =

    例（相対パス）… EXE と同じフォルダの中にある "logs" フォルダ
      directory = logs

    例（絶対パス）
      directory = C:\Users\JA1ABC\Documents\ADIF

  files（任意）
    ファイルを個別に指定します。複数ある場合はカンマ（,）で区切ります。
    directory と files の両方を指定した場合は、両方が処理されます。

    例）files = mylog.adi, contest.adif
    例）files = C:\backup\old.adi, D:\logs\2024.adif


  ─── [options] セクション ── 動作オプション ────────────

  dry_run（デフォルト: false）
    true にすると、ファイルの内容を確認するだけで実際にはアップロード
    しません。初めて使うときの動作確認に便利です。
    例）dry_run = true

  split_records（デフォルト: true）
    true にすると、QSO レコードが多いファイルを自動的に分割して
    アップロードします。eQSL の推奨設定のため true のままをお勧めします。
    例）split_records = true

  max_records_per_upload（デフォルト: 1000）
    1 回のアップロードで送信する最大 QSO レコード数です。
    split_records = true のときに有効です。
    例）max_records_per_upload = 1000

  verbose（デフォルト: false）
    true にすると、通信の詳細なログを表示します。
    エラーの原因を調べるときに役立ちます。
    例）verbose = true

  max_retries（デフォルト: 3）
    通信エラーが発生した場合のリトライ（再試行）回数です。
    例）max_retries = 3

  retry_delay_seconds（デフォルト: 5）
    リトライするまでの待機時間（秒）です。
    例）retry_delay_seconds = 5


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  4. 通常の使い方
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  初期設定が完了したら、以降は以下の手順で使用できます。

  【毎回の手順】

    1. アップロードしたい ADIF ファイルを、config.ini で設定した
       フォルダ（directory）に入れます。

    2. eqsl_adif_uploader.exe をダブルクリックします。

    3. 処理結果がコンソール画面に表示されます。
       「Enter キーを押すと終了します...」と表示されたら
       内容を確認してから Enter キーを押してください。

  【初めて使う場合のお勧め手順】

    1. config.ini で dry_run = true に設定します。
    2. プログラムを起動して、ファイルが正しく検出されるか確認します。
    3. 問題がなければ dry_run = false に戻して本番アップロードします。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  5. 実行結果の見方
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  実行中は以下のような画面が表示されます。

  ============================================================
    eQSL ADIF アップローダー
  ============================================================
    ユーザー      : JA1QSO
    設定ファイル  : C:\...\config.ini
    対象ファイル数: 3
  ============================================================

  📂 2024_log.adi
     QSO レコード数: 523
     ✅ 成功: 523/523 レコードを追加

  📂 contest.adi
     QSO レコード数: 1250
     → 2 チャンクに分割（最大 1000 レコード/チャンク）
     ✅ 成功: 1000/1000 レコードを追加
     ✅ 成功: 250/250 レコードを追加

  📂 empty.adi
     QSO レコード数: 0
     ⚠️  QSO レコードが見つかりません（スキップ）

  ============================================================
    完了サマリー
  ============================================================
    処理ファイル数  : 2
    アップロード回数: 3
    成功            : 3
    失敗            : 0
  ============================================================


  各アイコンの意味:
    ✅  アップロード成功
    ❌  アップロード失敗またはエラー
    ⚠️  スキップ（QSO レコードなし、など）
    📂  処理中のファイル


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  6. よくある質問 / トラブルシューティング
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ■ 起動するとすぐ画面が閉じてしまう
    → config.ini が存在しない場合、生成後に自動終了します。
      同じフォルダに config.ini が生成されているので、内容を
      編集してから再度起動してください。

  ■ 「エラー: username と password を設定してください」と表示される
    → config.ini の [eQSL] セクションの username / password が
      空欄または初期値（JA1ABC / MyPassword123）のままです。
      メモ帳で config.ini を開いて、ご自身の情報に書き換えてください。

  ■ 「エラー: ADIF ファイルが見つかりませんでした」と表示される
    → config.ini の [files] セクションの directory または files の
      パスが正しいか確認してください。
      directory を空欄にすると EXE と同じフォルダを検索します。

  ■ 「エラー: eQSL API のレスポンスではありません」と表示される
    → 以下を確認してください。
      ・username / password が正しいか
      ・インターネットに接続できているか
      ・ファイアウォールや社内プロキシが通信をブロックしていないか
      詳細を確認したい場合は config.ini で verbose = true に設定して
      再度実行すると、サーバーからの応答内容が表示されます。

  ■ 「接続エラー」または「タイムアウト」が頻発する
    → インターネット回線の状態を確認してください。
      config.ini で max_retries や retry_delay_seconds を増やすことで
      改善する場合があります。

  ■ config.ini を保存したら文字化けした
    → メモ帳で保存するとき、「文字コード」を「UTF-8」に設定してください。
      「ANSI」や「UTF-16」では正しく読み込めない場合があります。

  ■ 同じ QSO が二重登録されないか心配
    → eQSL.cc 側が重複を自動的に検出・スキップします。
      同じファイルを複数回アップロードしても問題ありません。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  7. 注意事項
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ・config.ini にはパスワードが平文で保存されます。
    他の人が閲覧できる場所（共有フォルダ、クラウドストレージの
    公開フォルダなど）には置かないようにしてください。

  ・本ツールは eQSL.cc の公開 API（ImportADIF.cfm）を使用しています。
    eQSL.cc のサービス仕様変更により動作しなくなる場合があります。

  ・ADIF ファイルの文字コードは UTF-8 を推奨します。
    他の文字コードでも動作しますが、一部の文字が正しく送信されない
    場合があります。

==========================================================================

  ・このプログラムは生成AIで作成しました。
  ・プログラムの改変、配布は自由です。
  
  2026/6/14
  JA3WUI/Tonaru
  https://tonaru.net/details7.html#radio-38
  
==========================================================================