File size: 3,223 Bytes
d772d81
 
 
 
 
 
550cc96
b43f3e0
7c5e2c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d772d81
7c5e2c8
b43f3e0
 
 
d772d81
7c5e2c8
d772d81
7c5e2c8
 
d772d81
7c5e2c8
d772d81
 
7c5e2c8
 
 
 
 
d772d81
 
 
 
63b83fd
 
 
 
 
 
 
 
 
 
d772d81
7c5e2c8
550cc96
 
 
 
 
b43f3e0
550cc96
 
d772d81
7c5e2c8
b43f3e0
7c5e2c8
d772d81
3632a28
7c5e2c8
 
 
 
 
 
d772d81
7c5e2c8
d772d81
 
 
 
7c5e2c8
d772d81
35f72da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from flask import Flask, render_template, send_from_directory
import schedule
import threading
import time
import subprocess
import os
import shutil
import stat
import logging

# ロギング設定
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")

# 定数
REPO_URL = "https://github.com/SharkPool-SP/SharkPools-Extensions.git"
REPO_DIR = "SharkPools-Extensions"
TARGET_FILE = os.path.join(REPO_DIR, "pages", "startup.js")

# Flask アプリケーション設定
app = Flask(__name__, template_folder="templates", static_folder="static")

@app.route("/")
def index():
    return render_template("index.html")

@app.route('/static/<path:filename>')
def serve_static(filename):
    return send_from_directory(app.static_folder, filename)

# 読み取り専用ファイルを削除できるようにする
def remove_readonly(func, path, excinfo):
    os.chmod(path, stat.S_IWRITE)
    func(path)

# リポジトリをクローンまたは更新し、ファイルを修正・コピーする関数
def clone_or_update_repo():
    logging.info("リポジトリの更新を開始します。")
    
    if not os.path.exists(REPO_DIR):
        logging.info("リポジトリをクローン中...")
        subprocess.run(["git", "clone", REPO_URL])
    else:
        logging.info("リポジトリをプル中...")
        result = subprocess.run(["git", "-C", REPO_DIR, "pull"], capture_output=True, text=True)
        logging.info(result.stdout)
        if result.stderr:
            logging.error(result.stderr)

    if os.path.exists(TARGET_FILE):
        with open(TARGET_FILE, "r", encoding="utf-8") as f:
            content = f.read()
        new_content = content.replace(
            '}, "https://studio.penguinmod.com");',
            '}, "*");'
        )
        if content == new_content:
            logging.warning("置換対象の文字列が見つかりませんでした。")
        else:
            with open(TARGET_FILE, "w", encoding="utf-8") as f:
                f.write(new_content)
            logging.info("置換が完了しました。")

    logging.info("テンプレートと静的ファイルをコピー中...")
    os.makedirs("templates", exist_ok=True)
    shutil.copy(os.path.join(REPO_DIR, "index.html"), "templates/index.html")

    dest_pages = os.path.join("static", "pages")
    if os.path.exists(dest_pages):
        shutil.rmtree(dest_pages, onerror=remove_readonly)
    os.makedirs("static", exist_ok=True)
    shutil.copytree(os.path.join(REPO_DIR, "pages"), dest_pages)

    logging.info("リポジトリの更新が完了しました。")

# スケジューラを実行する関数(1分ごと)
def run_scheduler():
    schedule.every(60).minutes.do(clone_or_update_repo)
    try:
        while True:
            schedule.run_pending()
            time.sleep(1)
    except Exception as e:
        logging.error(f"スケジューラでエラーが発生しました: {e}")

# 初回実行およびスケジューラ起動
clone_or_update_repo()
scheduler_thread = threading.Thread(target=run_scheduler, daemon=True)
scheduler_thread.start()

# アプリ起動
if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=7860)