chore: import R0nY3n/LTE_manager main snapshot
This commit is contained in:
+195
@@ -0,0 +1,195 @@
|
||||
import sqlite3
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
class LTEDatabase:
|
||||
def __init__(self, db_path=None):
|
||||
"""初始化数据库连接
|
||||
|
||||
Args:
|
||||
db_path: 数据库文件路径,如未指定则使用用户目录下的.LTE/lte_data.db
|
||||
"""
|
||||
if db_path is None:
|
||||
# 默认使用用户主目录下的.LTE文件夹
|
||||
user_home = os.path.expanduser('~')
|
||||
lte_dir = os.path.join(user_home, '.LTE')
|
||||
if not os.path.exists(lte_dir):
|
||||
os.makedirs(lte_dir)
|
||||
self.db_path = os.path.join(lte_dir, 'lte_data.db')
|
||||
else:
|
||||
self.db_path = db_path
|
||||
|
||||
print(f"使用数据库: {self.db_path}")
|
||||
self.conn = None
|
||||
self.cursor = None
|
||||
self.connect()
|
||||
self.create_tables()
|
||||
|
||||
def connect(self):
|
||||
"""Connect to the database"""
|
||||
try:
|
||||
# Create database directory if it doesn't exist
|
||||
db_dir = os.path.dirname(self.db_path)
|
||||
if db_dir and not os.path.exists(db_dir):
|
||||
os.makedirs(db_dir)
|
||||
|
||||
# Connect to database
|
||||
self.conn = sqlite3.connect(self.db_path)
|
||||
self.cursor = self.conn.cursor()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Database connection error: {str(e)}")
|
||||
return False
|
||||
|
||||
def close(self):
|
||||
"""Close database connection"""
|
||||
if self.conn:
|
||||
self.conn.close()
|
||||
|
||||
def create_tables(self):
|
||||
"""Create necessary tables if they don't exist"""
|
||||
try:
|
||||
# Call history table
|
||||
self.cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS call_history (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
phone_number TEXT NOT NULL,
|
||||
call_type TEXT NOT NULL,
|
||||
duration INTEGER DEFAULT 0,
|
||||
timestamp TEXT NOT NULL,
|
||||
notes TEXT
|
||||
)
|
||||
''')
|
||||
|
||||
# SMS history table
|
||||
self.cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS sms_history (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
phone_number TEXT NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
sms_type TEXT NOT NULL,
|
||||
timestamp TEXT NOT NULL,
|
||||
status TEXT DEFAULT 'sent'
|
||||
)
|
||||
''')
|
||||
|
||||
self.conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Table creation error: {str(e)}")
|
||||
return False
|
||||
|
||||
def add_call(self, phone_number, call_type, duration=0, notes=None):
|
||||
"""Add call record to database
|
||||
|
||||
call_type: 'incoming', 'outgoing', 'missed'
|
||||
"""
|
||||
try:
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
print(f"添加通话记录: {phone_number}, 类型: {call_type}, 持续时间: {duration}秒, 备注: {notes}")
|
||||
self.cursor.execute(
|
||||
"INSERT INTO call_history (phone_number, call_type, duration, timestamp, notes) VALUES (?, ?, ?, ?, ?)",
|
||||
(phone_number, call_type, duration, timestamp, notes)
|
||||
)
|
||||
self.conn.commit()
|
||||
return self.cursor.lastrowid
|
||||
except Exception as e:
|
||||
print(f"添加通话记录出错: {str(e)}")
|
||||
return None
|
||||
|
||||
def add_sms(self, phone_number, message, sms_type, status='sent'):
|
||||
"""Add SMS record to database
|
||||
|
||||
sms_type: 'incoming', 'outgoing'
|
||||
status: 'sent', 'failed', 'received', 'read'
|
||||
"""
|
||||
try:
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.cursor.execute(
|
||||
"INSERT INTO sms_history (phone_number, message, sms_type, timestamp, status) VALUES (?, ?, ?, ?, ?)",
|
||||
(phone_number, message, sms_type, timestamp, status)
|
||||
)
|
||||
self.conn.commit()
|
||||
return self.cursor.lastrowid
|
||||
except Exception as e:
|
||||
print(f"Add SMS error: {str(e)}")
|
||||
return None
|
||||
|
||||
def get_call_history(self, limit=50, offset=0, phone_number=None):
|
||||
"""Get call history from database"""
|
||||
try:
|
||||
query = "SELECT * FROM call_history"
|
||||
params = []
|
||||
|
||||
if phone_number:
|
||||
query += " WHERE phone_number = ?"
|
||||
params.append(phone_number)
|
||||
|
||||
query += " ORDER BY timestamp DESC LIMIT ? OFFSET ?"
|
||||
params.extend([limit, offset])
|
||||
|
||||
self.cursor.execute(query, params)
|
||||
return self.cursor.fetchall()
|
||||
except Exception as e:
|
||||
print(f"Get call history error: {str(e)}")
|
||||
return []
|
||||
|
||||
def get_sms_history(self, limit=50, offset=0, phone_number=None, sms_type=None):
|
||||
"""Get SMS history from database"""
|
||||
try:
|
||||
query = "SELECT * FROM sms_history"
|
||||
params = []
|
||||
|
||||
conditions = []
|
||||
if phone_number:
|
||||
conditions.append("phone_number = ?")
|
||||
params.append(phone_number)
|
||||
|
||||
if sms_type:
|
||||
conditions.append("sms_type = ?")
|
||||
params.append(sms_type)
|
||||
|
||||
if conditions:
|
||||
query += " WHERE " + " AND ".join(conditions)
|
||||
|
||||
query += " ORDER BY timestamp DESC LIMIT ? OFFSET ?"
|
||||
params.extend([limit, offset])
|
||||
|
||||
self.cursor.execute(query, params)
|
||||
return self.cursor.fetchall()
|
||||
except Exception as e:
|
||||
print(f"Get SMS history error: {str(e)}")
|
||||
return []
|
||||
|
||||
def update_sms_status(self, sms_id, status):
|
||||
"""Update SMS status"""
|
||||
try:
|
||||
self.cursor.execute(
|
||||
"UPDATE sms_history SET status = ? WHERE id = ?",
|
||||
(status, sms_id)
|
||||
)
|
||||
self.conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Update SMS status error: {str(e)}")
|
||||
return False
|
||||
|
||||
def delete_call(self, call_id):
|
||||
"""Delete call record"""
|
||||
try:
|
||||
self.cursor.execute("DELETE FROM call_history WHERE id = ?", (call_id,))
|
||||
self.conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Delete call error: {str(e)}")
|
||||
return False
|
||||
|
||||
def delete_sms(self, sms_id):
|
||||
"""Delete SMS record"""
|
||||
try:
|
||||
self.cursor.execute("DELETE FROM sms_history WHERE id = ?", (sms_id,))
|
||||
self.conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Delete SMS error: {str(e)}")
|
||||
return False
|
||||
Reference in New Issue
Block a user