You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: main.rs
    path of file: ./repos/spyglass/crates/tauri/src
    
    the code of the file until where you have to start completion: #![cfg_attr(
    all(not(debug_assertions), target_os = "windows"),
    windows_subsystem = "windows"
)]
use std::collections::HashMap;
use std::io;
use std::path::PathBuf;
use std::str::FromStr;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;

use auto_launch::AutoLaunchBuilder;
use rpc::RpcMutex;
use tauri::api::process::current_binary;
use tauri::{
    AppHandle, Env, GlobalShortcutManager, Manager, PackageInfo, PathResolver, RunEvent,
    SystemTray, SystemTrayEvent, Window,
};
use tokio::sync::broadcast;
use tokio::time::Duration;
use tracing_log::LogTracer;
use tracing_subscriber::{fmt, layer::SubscriberExt, EnvFilter};

use diff::Diff;
use platform::os_open;
use shared::config::{Config, UserSettings};
use shared::metrics::{Event, Metrics};
use spyglass_rpc::RpcClient;

mod cmd;
mod constants;
mod menu;
use menu::MenuID;
mod platform;
mod plugins;
mod rpc;
mod window;
use window::{navigate_to_tab, show_search_bar, show_update_window, show_wizard_window};

use crate::window::get_searchbar;

const LOG_LEVEL: tracing::Level = tracing::
    
async fn check_version_interval(current_version: String, app_handle: AppHandle) {
    let mut interval =
        tokio::time::interval(Duration::from_secs(constants::VERSION_CHECK_INTERVAL_S));

    let shutdown_tx = app_handle.state::<broadcast::Sender<AppEvent>>();
    let mut shutdown = shutdown_tx.subscribe();
    let metrics = app_handle.try_state::<Metrics>();

    loop {
        tokio::select! {
            _ = shutdown.recv() => {
                log::info!("ðŸ›‘ Shutting down version checker");
                return;
            },
            _ = interval.tick() => {
                log::info!("checking for update...");
                if let Some(ref metrics) = metrics {
                    metrics.track(Event::UpdateCheck { current_version: current_version.clone() }).await;
                }

                if let Ok(response) = app_handle.updater().check().await {
                    if response.is_update_available() {
                        // show update dialog
                        show_update_window(&app_handle);
                    }
                }
            }
        }
    }
}