File size: 4,190 Bytes
80bf15d
 
 
6071696
 
 
 
 
 
80bf15d
 
 
 
 
 
 
 
 
 
 
 
 
 
027903a
 
80bf15d
 
 
 
 
 
 
7d19b1b
80bf15d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96f3bb9
80bf15d
 
 
 
 
 
 
 
 
7d19b1b
 
80bf15d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d19b1b
 
a0d5e3e
 
7d19b1b
 
 
 
 
 
a0d5e3e
b1df556
 
 
 
 
 
 
 
80bf15d
 
 
 
 
 
 
96f3bb9
80bf15d
 
 
 
 
 
afceed2
 
80bf15d
 
 
 
 
 
 
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
# todo:

金笛箫箫
MS4wLjABAAAAguL867lJ2ZsFKCepjVt7EOoGhWxPU4U3qQ-KiQtbOh7KZXV_lGJjchp5r8PoeyiU
88862603087

docker build -t video_platform:v20250819_2052 .
docker stop video_platform_7871 && docker rm video_platform_7871
docker run -itd \
--name video_platform_7871 \
--restart=always \
--network host \
-e server_port=7870 \
video_platform:v20250819_2052 /bin/bash

docker run -itd \
--name video_platform_7871 \
--restart=always \
--network host \
-e server_port=7871 \
-v /Users/honey/PycharmProjects/video_platform:/data/tianxing/PycharmProjects/video_platform \
-v /Users/honey/Downloads/xianyu/customers:/data/tianxing/PycharmProjects/video_platform/temp/xianyu/customers \
python:3.12 /bin/bash

nohup python3 main.py --server_port 7871 &
"""
import argparse
import asyncio
import logging
from pathlib import Path
import platform
import time
import threading

import gradio as gr

import log
from project_settings import environment, project_path, log_directory, time_zone_info

log.setup_size_rotating(log_directory=log_directory, tz_info=time_zone_info)

from toolbox.os.command import Command
from toolbox.porter.manager import PorterManager
from tabs.fs_tab import get_fs_tab
from tabs.shell_tab import get_shell_tab
from tabs.video_download import get_video_download_tab
from tabs.youtube_player_tab import get_youtube_player_tab


logger = logging.getLogger("main")


def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--porter_tasks_file_dir",
        default=(project_path / "data/porter_tasks").as_posix(),
        type=str
    )
    parser.add_argument(
        "--live_recorder_tasks_file",
        default=(project_path / "data/live_recorder_tasks.json").as_posix(),
        type=str
    )
    parser.add_argument(
        "--video_download_tasks_file",
        default=(project_path / "data/video_download_tasks.json").as_posix(),
        type=str
    )
    parser.add_argument(
        "--youtube_video_upload_tasks_file",
        default=(project_path / "data/youtube_video_upload_tasks.json").as_posix(),
        type=str
    )
    parser.add_argument(
        "--bilibili_video_upload_tasks_file",
        default=(project_path / "data/bilibili_video_upload_tasks.json").as_posix(),
        type=str
    )
    parser.add_argument(
        "--live_records_dir",
        default=(project_path / "data/live_records").as_posix(),
        type=str
    )
    parser.add_argument(
        "--server_port",
        default=environment.get("server_port", 7860),
        type=int
    )

    args = parser.parse_args()
    return args


def shell(cmd: str):
    return Command.popen(cmd)


def async_thread_wrapper(coro_task):
    logger.info("background_task start")

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(coro_task)
    return


def main():
    args = get_args()

    porter_tasks_file_dir = Path(args.porter_tasks_file_dir)

    # porter manager
    task_manager = PorterManager()
    for porter_task_file in porter_tasks_file_dir.glob("porter_task_*.json"):
        key = porter_task_file.stem
        value = environment.get(key=key, default=False, dtype=bool)
        logger.info(f"{key}: {value}")

        if value is True:
            task_manager.add_tasks_by_task_file(tasks_file=porter_task_file.as_posix())

    task_thread = threading.Thread(
        target=async_thread_wrapper,
        args=(task_manager.run(),),
        daemon=True
    )
    task_thread.start()
    time.sleep(5)

    # ui
    with gr.Blocks() as blocks:
        gr.Markdown(value="live recording.")
        with gr.Tabs():
            _ = get_fs_tab()
            _ = get_shell_tab()
            _ = get_video_download_tab()
            _ = get_youtube_player_tab()

    # http://127.0.0.1:7870/
    # http://10.75.27.247:7870/
    blocks.queue().launch(
        # share=True,
        share=False if platform.system() in ("Windows", "Darwin") else False,
        server_name="127.0.0.1" if platform.system() in ("Windows", "Darwin") else "0.0.0.0",
        server_port=args.server_port
    )
    return


if __name__ == "__main__":
    main()