mirror of
https://github.com/yeongpin/cursor-free-vip.git
synced 2025-08-03 04:57:36 +08:00
feat: Enhance Configuration Management for Cursor Paths
- Add OS-specific path configurations for Cursor storage, SQLite, and machine ID files - Integrate configuration file management in `new_signup.py` and `reset_machine_manual.py` - Remove Workbench Cursor path and main.js modification steps - Improve cross-platform path detection and configuration handling - Update version to 1.7.02
This commit is contained in:
parent
66a67fce8b
commit
90e9a5b287
@ -1,5 +1,11 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## v1.7.02
|
||||||
|
1. Fix: Cursor Path | 修復Cursor路徑
|
||||||
|
2. Add: Config File | 增加配置文件
|
||||||
|
3. Remove: Workbench Cursor Path | 移除Workbench Cursor路徑
|
||||||
|
4. Remove: Cursor Main JS | 移除Cursor main.js
|
||||||
|
|
||||||
## v1.7.01
|
## v1.7.01
|
||||||
- Refactoring: Extract configuration-related code from the `setup_driver` function to an independent `setup_config` function
|
- Refactoring: Extract configuration-related code from the `setup_driver` function to an independent `setup_config` function
|
||||||
- Optimization: Improve code maintainability and make configuration management and browser settings more clear
|
- Optimization: Improve code maintainability and make configuration management and browser settings more clear
|
||||||
|
@ -170,6 +170,29 @@ def setup_config(translator=None):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add OS-specific path configurations
|
||||||
|
if sys.platform == "win32":
|
||||||
|
appdata = os.getenv("APPDATA")
|
||||||
|
default_config['WindowsPaths'] = {
|
||||||
|
'storage_path': os.path.join(appdata, "Cursor", "User", "globalStorage", "storage.json"),
|
||||||
|
'sqlite_path': os.path.join(appdata, "Cursor", "User", "globalStorage", "state.vscdb"),
|
||||||
|
'machine_id_path': os.path.join(os.getenv("APPDATA"), "Cursor", "machineId")
|
||||||
|
}
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
default_config['MacPaths'] = {
|
||||||
|
'storage_path': os.path.abspath(os.path.expanduser("~/Library/Application Support/Cursor/User/globalStorage/storage.json")),
|
||||||
|
'sqlite_path': os.path.abspath(os.path.expanduser("~/Library/Application Support/Cursor/User/globalStorage/state.vscdb")),
|
||||||
|
'machine_id_path': os.path.expanduser("~/Library/Application Support/Cursor/machineId")
|
||||||
|
}
|
||||||
|
elif sys.platform == "linux":
|
||||||
|
sudo_user = os.environ.get('SUDO_USER')
|
||||||
|
actual_home = f"/home/{sudo_user}" if sudo_user else os.path.expanduser("~")
|
||||||
|
default_config['LinuxPaths'] = {
|
||||||
|
'storage_path': os.path.abspath(os.path.join(actual_home, ".config/Cursor/User/globalStorage/storage.json")),
|
||||||
|
'sqlite_path': os.path.abspath(os.path.join(actual_home, ".config/Cursor/User/globalStorage/state.vscdb")),
|
||||||
|
'machine_id_path': os.path.expanduser("~/.config/Cursor/machineId")
|
||||||
|
}
|
||||||
|
|
||||||
if os.path.exists(config_file):
|
if os.path.exists(config_file):
|
||||||
config.read(config_file)
|
config.read(config_file)
|
||||||
config_modified = False
|
config_modified = False
|
||||||
|
@ -10,6 +10,8 @@ import re
|
|||||||
import tempfile
|
import tempfile
|
||||||
from colorama import Fore, Style, init
|
from colorama import Fore, Style, init
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
import configparser
|
||||||
|
from new_signup import get_user_documents_path
|
||||||
|
|
||||||
# Initialize colorama
|
# Initialize colorama
|
||||||
init()
|
init()
|
||||||
@ -70,15 +72,42 @@ def get_cursor_machine_id_path(translator=None) -> str:
|
|||||||
Returns:
|
Returns:
|
||||||
str: Path to machineId file
|
str: Path to machineId file
|
||||||
"""
|
"""
|
||||||
|
# Read configuration
|
||||||
|
config_dir = os.path.join(get_user_documents_path(), ".cursor-free-vip")
|
||||||
|
config_file = os.path.join(config_dir, "config.ini")
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
|
||||||
|
if os.path.exists(config_file):
|
||||||
|
config.read(config_file)
|
||||||
|
|
||||||
if sys.platform == "win32": # Windows
|
if sys.platform == "win32": # Windows
|
||||||
return os.path.join(os.getenv("APPDATA"), "Cursor", "machineId")
|
if not config.has_section('WindowsPaths'):
|
||||||
|
config.add_section('WindowsPaths')
|
||||||
|
config.set('WindowsPaths', 'machine_id_path',
|
||||||
|
os.path.join(os.getenv("APPDATA"), "Cursor", "machineId"))
|
||||||
|
return config.get('WindowsPaths', 'machine_id_path')
|
||||||
|
|
||||||
elif sys.platform == "linux": # Linux
|
elif sys.platform == "linux": # Linux
|
||||||
return os.path.expanduser("~/.config/Cursor/machineId")
|
if not config.has_section('LinuxPaths'):
|
||||||
|
config.add_section('LinuxPaths')
|
||||||
|
config.set('LinuxPaths', 'machine_id_path',
|
||||||
|
os.path.expanduser("~/.config/Cursor/machineId"))
|
||||||
|
return config.get('LinuxPaths', 'machine_id_path')
|
||||||
|
|
||||||
elif sys.platform == "darwin": # macOS
|
elif sys.platform == "darwin": # macOS
|
||||||
return os.path.expanduser("~/Library/Application Support/Cursor/machineId")
|
if not config.has_section('MacPaths'):
|
||||||
|
config.add_section('MacPaths')
|
||||||
|
config.set('MacPaths', 'machine_id_path',
|
||||||
|
os.path.expanduser("~/Library/Application Support/Cursor/machineId"))
|
||||||
|
return config.get('MacPaths', 'machine_id_path')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise OSError(f"Unsupported operating system: {sys.platform}")
|
raise OSError(f"Unsupported operating system: {sys.platform}")
|
||||||
|
|
||||||
|
# Save any changes to config file
|
||||||
|
with open(config_file, 'w', encoding='utf-8') as f:
|
||||||
|
config.write(f)
|
||||||
|
|
||||||
def get_workbench_cursor_path(translator=None) -> str:
|
def get_workbench_cursor_path(translator=None) -> str:
|
||||||
"""Get Cursor workbench.desktop.main.js path"""
|
"""Get Cursor workbench.desktop.main.js path"""
|
||||||
system = platform.system()
|
system = platform.system()
|
||||||
@ -318,43 +347,73 @@ class MachineIDResetter:
|
|||||||
def __init__(self, translator=None):
|
def __init__(self, translator=None):
|
||||||
self.translator = translator
|
self.translator = translator
|
||||||
|
|
||||||
|
# Read configuration
|
||||||
|
config_dir = os.path.join(get_user_documents_path(), ".cursor-free-vip")
|
||||||
|
config_file = os.path.join(config_dir, "config.ini")
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
|
||||||
|
if not os.path.exists(config_file):
|
||||||
|
raise FileNotFoundError(f"Config file not found: {config_file}")
|
||||||
|
|
||||||
|
config.read(config_file)
|
||||||
|
|
||||||
# Check operating system
|
# Check operating system
|
||||||
if sys.platform == "win32": # Windows
|
if sys.platform == "win32": # Windows
|
||||||
appdata = os.getenv("APPDATA")
|
appdata = os.getenv("APPDATA")
|
||||||
if appdata is None:
|
if appdata is None:
|
||||||
raise EnvironmentError("APPDATA Environment Variable Not Set")
|
raise EnvironmentError("APPDATA Environment Variable Not Set")
|
||||||
self.db_path = os.path.join(
|
|
||||||
|
if not config.has_section('WindowsPaths'):
|
||||||
|
config.add_section('WindowsPaths')
|
||||||
|
config.set('WindowsPaths', 'storage_path', os.path.join(
|
||||||
appdata, "Cursor", "User", "globalStorage", "storage.json"
|
appdata, "Cursor", "User", "globalStorage", "storage.json"
|
||||||
)
|
))
|
||||||
self.sqlite_path = os.path.join(
|
config.set('WindowsPaths', 'sqlite_path', os.path.join(
|
||||||
appdata, "Cursor", "User", "globalStorage", "state.vscdb"
|
appdata, "Cursor", "User", "globalStorage", "state.vscdb"
|
||||||
)
|
))
|
||||||
|
|
||||||
|
self.db_path = config.get('WindowsPaths', 'storage_path')
|
||||||
|
self.sqlite_path = config.get('WindowsPaths', 'sqlite_path')
|
||||||
|
|
||||||
elif sys.platform == "darwin": # macOS
|
elif sys.platform == "darwin": # macOS
|
||||||
self.db_path = os.path.abspath(os.path.expanduser(
|
if not config.has_section('MacPaths'):
|
||||||
|
config.add_section('MacPaths')
|
||||||
|
config.set('MacPaths', 'storage_path', os.path.abspath(os.path.expanduser(
|
||||||
"~/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
"~/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
||||||
))
|
)))
|
||||||
self.sqlite_path = os.path.abspath(os.path.expanduser(
|
config.set('MacPaths', 'sqlite_path', os.path.abspath(os.path.expanduser(
|
||||||
"~/Library/Application Support/Cursor/User/globalStorage/state.vscdb"
|
"~/Library/Application Support/Cursor/User/globalStorage/state.vscdb"
|
||||||
))
|
)))
|
||||||
|
|
||||||
|
self.db_path = config.get('MacPaths', 'storage_path')
|
||||||
|
self.sqlite_path = config.get('MacPaths', 'sqlite_path')
|
||||||
|
|
||||||
elif sys.platform == "linux": # Linux
|
elif sys.platform == "linux": # Linux
|
||||||
|
if not config.has_section('LinuxPaths'):
|
||||||
|
config.add_section('LinuxPaths')
|
||||||
# 获取实际用户的主目录
|
# 获取实际用户的主目录
|
||||||
sudo_user = os.environ.get('SUDO_USER')
|
sudo_user = os.environ.get('SUDO_USER')
|
||||||
if sudo_user:
|
actual_home = f"/home/{sudo_user}" if sudo_user else os.path.expanduser("~")
|
||||||
actual_home = f"/home/{sudo_user}"
|
|
||||||
else:
|
|
||||||
actual_home = os.path.expanduser("~")
|
|
||||||
|
|
||||||
self.db_path = os.path.abspath(os.path.join(
|
config.set('LinuxPaths', 'storage_path', os.path.abspath(os.path.join(
|
||||||
actual_home,
|
actual_home,
|
||||||
".config/Cursor/User/globalStorage/storage.json"
|
".config/Cursor/User/globalStorage/storage.json"
|
||||||
))
|
)))
|
||||||
self.sqlite_path = os.path.abspath(os.path.join(
|
config.set('LinuxPaths', 'sqlite_path', os.path.abspath(os.path.join(
|
||||||
actual_home,
|
actual_home,
|
||||||
".config/Cursor/User/globalStorage/state.vscdb"
|
".config/Cursor/User/globalStorage/state.vscdb"
|
||||||
))
|
)))
|
||||||
|
|
||||||
|
self.db_path = config.get('LinuxPaths', 'storage_path')
|
||||||
|
self.sqlite_path = config.get('LinuxPaths', 'sqlite_path')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError(f"Not Supported OS: {sys.platform}")
|
raise NotImplementedError(f"Not Supported OS: {sys.platform}")
|
||||||
|
|
||||||
|
# Save any changes to config file
|
||||||
|
with open(config_file, 'w', encoding='utf-8') as f:
|
||||||
|
config.write(f)
|
||||||
|
|
||||||
def generate_new_ids(self):
|
def generate_new_ids(self):
|
||||||
"""Generate new machine ID"""
|
"""Generate new machine ID"""
|
||||||
# Generate new UUID
|
# Generate new UUID
|
||||||
@ -507,17 +566,22 @@ class MachineIDResetter:
|
|||||||
# Update system IDs
|
# Update system IDs
|
||||||
self.update_system_ids(new_ids)
|
self.update_system_ids(new_ids)
|
||||||
|
|
||||||
# Modify workbench.desktop.main.js
|
|
||||||
workbench_path = get_workbench_cursor_path(self.translator)
|
|
||||||
modify_workbench_js(workbench_path, self.translator)
|
|
||||||
|
|
||||||
|
### Remove In v1.7.02
|
||||||
|
# Modify workbench.desktop.main.js
|
||||||
|
|
||||||
|
# workbench_path = get_workbench_cursor_path(self.translator)
|
||||||
|
# modify_workbench_js(workbench_path, self.translator)
|
||||||
|
|
||||||
|
### Remove In v1.7.02
|
||||||
# Check Cursor version and perform corresponding actions
|
# Check Cursor version and perform corresponding actions
|
||||||
greater_than_0_45 = check_cursor_version(self.translator)
|
|
||||||
if greater_than_0_45:
|
# greater_than_0_45 = check_cursor_version(self.translator)
|
||||||
print(f"{Fore.CYAN}{EMOJI['INFO']} {self.translator.get('reset.detecting_version')} >= 0.45.0,{self.translator.get('reset.patching_getmachineid')}{Style.RESET_ALL}")
|
# if greater_than_0_45:
|
||||||
patch_cursor_get_machine_id(self.translator)
|
# print(f"{Fore.CYAN}{EMOJI['INFO']} {self.translator.get('reset.detecting_version')} >= 0.45.0,{self.translator.get('reset.patching_getmachineid')}{Style.RESET_ALL}")
|
||||||
else:
|
# patch_cursor_get_machine_id(self.translator)
|
||||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {self.translator.get('reset.version_less_than_0_45')}{Style.RESET_ALL}")
|
# else:
|
||||||
|
# print(f"{Fore.YELLOW}{EMOJI['INFO']} {self.translator.get('reset.version_less_than_0_45')}{Style.RESET_ALL}")
|
||||||
|
|
||||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {self.translator.get('reset.success')}{Style.RESET_ALL}")
|
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {self.translator.get('reset.success')}{Style.RESET_ALL}")
|
||||||
print(f"\n{Fore.CYAN}{self.translator.get('reset.new_id')}:{Style.RESET_ALL}")
|
print(f"\n{Fore.CYAN}{self.translator.get('reset.new_id')}:{Style.RESET_ALL}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user