added licensing stuff and free trial timer
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
// --- Commands ---
|
||||
|
||||
use tauri::Manager;
|
||||
|
||||
mod paths;
|
||||
mod transcription;
|
||||
mod video_editor;
|
||||
@ -8,6 +10,7 @@ mod diarization;
|
||||
mod ai_provider;
|
||||
mod caption_generator;
|
||||
mod background_removal;
|
||||
mod licensing;
|
||||
|
||||
#[tauri::command]
|
||||
fn get_projects_directory() -> Result<String, String> {
|
||||
@ -204,6 +207,72 @@ async fn save_captions(content: String, output_path: String) -> Result<String, S
|
||||
.map_err(|e| format!("Task error: {:?}", e))?
|
||||
}
|
||||
|
||||
/// Get the combined app status: licensed, trial, or expired.
|
||||
#[tauri::command]
|
||||
fn get_app_status(app_handle: tauri::AppHandle) -> Result<licensing::AppStatus, String> {
|
||||
let data_dir = app_handle
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.map_err(|e| format!("No app data directory: {e}"))?;
|
||||
Ok(licensing::get_app_status(&data_dir))
|
||||
}
|
||||
|
||||
/// Verify and activate a license key.
|
||||
#[tauri::command]
|
||||
fn activate_license(app_handle: tauri::AppHandle, license_key: String) -> Result<licensing::LicensePayload, String> {
|
||||
let data_dir = app_handle
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.map_err(|e| format!("No app data directory: {e}"))?;
|
||||
|
||||
let payload = licensing::verify_license_key(&license_key)
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
licensing::cache_license(&data_dir, &license_key)
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
// Clear trial state since user has a valid license
|
||||
licensing::clear_trial(&data_dir);
|
||||
|
||||
Ok(payload)
|
||||
}
|
||||
|
||||
/// Remove the cached license (deactivate). Trial will resume if still valid.
|
||||
#[tauri::command]
|
||||
fn deactivate_license(app_handle: tauri::AppHandle) -> Result<(), String> {
|
||||
let data_dir = app_handle
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.map_err(|e| format!("No app data directory: {e}"))?;
|
||||
licensing::remove_license(&data_dir);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Start the free trial if not already started. Returns trial info.
|
||||
#[tauri::command]
|
||||
fn start_trial(app_handle: tauri::AppHandle) -> Result<licensing::TrialState, String> {
|
||||
let data_dir = app_handle
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.map_err(|e| format!("No app data directory: {e}"))?;
|
||||
let trial = licensing::get_or_start_trial(&data_dir);
|
||||
Ok(trial)
|
||||
}
|
||||
|
||||
/// Check if a specific feature is enabled (requires valid license).
|
||||
#[tauri::command]
|
||||
fn has_license_feature(app_handle: tauri::AppHandle, feature: String) -> Result<bool, String> {
|
||||
let data_dir = app_handle
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.map_err(|e| format!("No app data directory: {e}"))?;
|
||||
|
||||
match licensing::load_cached_license(&data_dir) {
|
||||
Ok(payload) => Ok(licensing::has_feature(&payload, &feature)),
|
||||
Err(_) => Ok(false),
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if background removal is available
|
||||
#[tauri::command]
|
||||
async fn is_background_removal_available() -> Result<bool, String> {
|
||||
@ -239,6 +308,27 @@ pub fn run() {
|
||||
.build(),
|
||||
)?;
|
||||
}
|
||||
|
||||
// Check for cached license or trial at startup
|
||||
if let Ok(data_dir) = app.path().app_data_dir() {
|
||||
match licensing::get_app_status(&data_dir) {
|
||||
licensing::AppStatus::Licensed { license: payload } => {
|
||||
log::info!(
|
||||
"License: {} ({}), expires {}",
|
||||
payload.customer_email,
|
||||
payload.tier,
|
||||
payload.expires_at,
|
||||
);
|
||||
}
|
||||
licensing::AppStatus::Trial { days_remaining, .. } => {
|
||||
log::info!("Trial active: {days_remaining} days remaining");
|
||||
}
|
||||
licensing::AppStatus::Expired => {
|
||||
log::info!("Trial expired — license activation required");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
@ -263,6 +353,11 @@ pub fn run() {
|
||||
save_captions,
|
||||
is_background_removal_available,
|
||||
remove_background_on_export,
|
||||
get_app_status,
|
||||
activate_license,
|
||||
deactivate_license,
|
||||
start_trial,
|
||||
has_license_feature,
|
||||
])
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
|
||||
Reference in New Issue
Block a user