first commit
This commit is contained in:
commit
4890793ce5
1029 files changed
+5992
No files matched your search
@@ -0,0 +1,223 @@
|
||||
import os
|
||||
import shutil
|
||||
import logging
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from typing import List, Dict, Optional, Any
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BrowserProfileManager:
|
||||
"""浏览器用户配置文件管理器."""
|
||||
|
||||
def __init__(self, settings: Dict[str, Any]):
|
||||
"""
|
||||
初始化浏览器配置文件管理器.
|
||||
|
||||
Args:
|
||||
settings: 应用程序设置字典
|
||||
"""
|
||||
self.settings = settings
|
||||
self.base_cache_dir = settings.get("profiles_dir", "")
|
||||
|
||||
# 确保基础缓存目录存在
|
||||
if self.base_cache_dir and not os.path.exists(self.base_cache_dir):
|
||||
os.makedirs(self.base_cache_dir, exist_ok=True)
|
||||
|
||||
def get_all_profiles(self) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
获取所有浏览器配置文件.
|
||||
|
||||
Returns:
|
||||
List[Dict]: 配置文件列表
|
||||
"""
|
||||
return self.settings.get("browser_profiles", [])
|
||||
|
||||
def get_profile_by_id(self, profile_id: str) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
通过ID获取浏览器配置文件.
|
||||
|
||||
Args:
|
||||
profile_id: 配置文件ID
|
||||
|
||||
Returns:
|
||||
Dict or None: 找到的配置文件或None
|
||||
"""
|
||||
profiles = self.get_all_profiles()
|
||||
for profile in profiles:
|
||||
if profile.get("profile_id") == profile_id:
|
||||
return profile
|
||||
return None
|
||||
|
||||
def create_profile(
|
||||
self, profile_name: str, douyin_account: Optional[str] = None
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
创建新的浏览器配置文件.
|
||||
|
||||
Args:
|
||||
profile_name: 配置文件名称
|
||||
douyin_account: 关联的抖音账号(可选)
|
||||
|
||||
Returns:
|
||||
Dict: 新创建的配置文件
|
||||
"""
|
||||
if not self.base_cache_dir:
|
||||
raise ValueError("未设置浏览器缓存目录")
|
||||
|
||||
profile_id = str(uuid.uuid4())
|
||||
profile_dir = os.path.join(self.base_cache_dir, f"Profile_{profile_id}")
|
||||
|
||||
# 创建配置文件目录
|
||||
os.makedirs(profile_dir, exist_ok=True)
|
||||
|
||||
new_profile = {
|
||||
"profile_id": profile_id,
|
||||
"profile_name": profile_name,
|
||||
"profile_dir": profile_dir,
|
||||
"enabled": True,
|
||||
"douyin_account": douyin_account,
|
||||
"auto_reply_enabled": True,
|
||||
"creation_time": datetime.now().isoformat(),
|
||||
"last_used_time": None,
|
||||
}
|
||||
|
||||
# 添加到配置文件列表
|
||||
profiles = self.get_all_profiles()
|
||||
profiles.append(new_profile)
|
||||
self.settings["browser_profiles"] = profiles
|
||||
|
||||
# 保存设置
|
||||
from douyin_imbot.config.settings import save_settings
|
||||
|
||||
save_settings(self.settings)
|
||||
|
||||
logger.info(f"已创建新的浏览器配置文件: {profile_name}")
|
||||
return new_profile
|
||||
|
||||
def update_profile(self, profile_id: str, **kwargs) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
更新浏览器配置文件.
|
||||
|
||||
Args:
|
||||
profile_id: 配置文件ID
|
||||
**kwargs: 要更新的字段
|
||||
|
||||
Returns:
|
||||
Dict or None: 更新后的配置文件或None
|
||||
"""
|
||||
profiles = self.get_all_profiles()
|
||||
for i, profile in enumerate(profiles):
|
||||
if profile.get("profile_id") == profile_id:
|
||||
# 更新字段
|
||||
for key, value in kwargs.items():
|
||||
if key in profile and key != "profile_id": # 不允许更新profile_id
|
||||
profile[key] = value
|
||||
|
||||
# 如果更新了名称,可能需要更新目录
|
||||
if "profile_name" in kwargs:
|
||||
logger.info(f"已更新配置文件名称: {kwargs['profile_name']}")
|
||||
|
||||
# 保存更新后的列表
|
||||
self.settings["browser_profiles"] = profiles
|
||||
from douyin_imbot.config.settings import save_settings
|
||||
|
||||
save_settings(self.settings)
|
||||
|
||||
return profile
|
||||
|
||||
logger.warning(f"未找到ID为{profile_id}的配置文件")
|
||||
return None
|
||||
|
||||
def delete_profile(self, profile_id: str, delete_files: bool = False) -> bool:
|
||||
"""
|
||||
删除浏览器配置文件.
|
||||
|
||||
Args:
|
||||
profile_id: 配置文件ID
|
||||
delete_files: 是否同时删除配置文件目录
|
||||
|
||||
Returns:
|
||||
bool: 删除成功返回True,否则返回False
|
||||
"""
|
||||
profiles = self.get_all_profiles()
|
||||
for i, profile in enumerate(profiles):
|
||||
if profile.get("profile_id") == profile_id:
|
||||
# 如果需要,删除配置文件目录
|
||||
if delete_files and "profile_dir" in profile:
|
||||
profile_dir = profile["profile_dir"]
|
||||
if os.path.exists(profile_dir):
|
||||
try:
|
||||
shutil.rmtree(profile_dir)
|
||||
logger.info(f"已删除配置文件目录: {profile_dir}")
|
||||
except Exception as e:
|
||||
logger.error(f"删除配置文件目录时出错: {str(e)}")
|
||||
|
||||
# 从列表中删除
|
||||
removed_profile = profiles.pop(i)
|
||||
self.settings["browser_profiles"] = profiles
|
||||
|
||||
# 保存设置
|
||||
from douyin_imbot.config.settings import save_settings
|
||||
|
||||
save_settings(self.settings)
|
||||
|
||||
logger.info(f"已删除配置文件: {removed_profile.get('profile_name')}")
|
||||
return True
|
||||
|
||||
logger.warning(f"未找到ID为{profile_id}的配置文件")
|
||||
return False
|
||||
|
||||
def set_base_cache_dir(self, directory: str) -> bool:
|
||||
"""
|
||||
设置浏览器缓存基础目录.
|
||||
|
||||
Args:
|
||||
directory: 新的缓存目录路径
|
||||
|
||||
Returns:
|
||||
bool: 设置成功返回True,否则返回False
|
||||
"""
|
||||
if not directory:
|
||||
logger.error("缓存目录不能为空")
|
||||
return False
|
||||
|
||||
# 确保目录存在
|
||||
try:
|
||||
os.makedirs(directory, exist_ok=True)
|
||||
self.base_cache_dir = directory
|
||||
self.settings["browser_cache_dir"] = directory
|
||||
|
||||
# 保存设置
|
||||
from douyin_imbot.config.settings import save_settings
|
||||
|
||||
save_settings(self.settings)
|
||||
|
||||
logger.info(f"已设置浏览器缓存目录: {directory}")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"设置缓存目录时出错: {str(e)}")
|
||||
return False
|
||||
|
||||
def update_last_used_time(self, profile_id: str) -> None:
|
||||
"""
|
||||
更新配置文件的最后使用时间.
|
||||
|
||||
Args:
|
||||
profile_id: 配置文件ID
|
||||
"""
|
||||
self.update_profile(profile_id, last_used_time=datetime.now().isoformat())
|
||||
|
||||
def clear_cache(self):
|
||||
"""清除配置文件缓存"""
|
||||
try:
|
||||
# 清除所有缓存的配置文件信息
|
||||
self._cached_profiles = None
|
||||
# 强制下次请求重新从磁盘读取
|
||||
self._last_refresh_time = 0
|
||||
logger.debug("配置文件管理器缓存已清除")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"清除配置文件管理器缓存失败: {str(e)}")
|
||||
return False
|
||||
Reference in new issue
Block a user