diff --git a/.envrc b/.envrc deleted file mode 100644 index 3550a30f2..000000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/.github/workflows/cli-build.yml b/.github/workflows/cli-build.yml new file mode 100644 index 000000000..03bfb53c4 --- /dev/null +++ b/.github/workflows/cli-build.yml @@ -0,0 +1,28 @@ +name: Rust building + +on: + push: + branches: [ master ] + pull_request: +env: + CARGO_TERM_COLOR: always +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Get build cache + id: cache-build + uses: actions/cache@v2 + with: + path: target/** + key: ${{ runner.os }}-build-cache + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: actions-rs/cargo@v1 + name: Build program + working-directory: ./theseus_cli + with: + command: build \ No newline at end of file diff --git a/.github/workflows/gui-build.yml b/.github/workflows/gui-build.yml new file mode 100644 index 000000000..8985e9865 --- /dev/null +++ b/.github/workflows/gui-build.yml @@ -0,0 +1,34 @@ +name: Build + Lint + +on: + push: + branches: [master] + pull_request: +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./theseus_gui + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.x + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + - uses: actions/cache@v3 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + - name: Install dependencies + run: yarn install --immutable --immutable-cache --check-cache + - name: Run Lint + run: npm run lint + - name: Build + run: npm run build diff --git a/.github/workflows/lib-build.yml b/.github/workflows/lib-build.yml new file mode 100644 index 000000000..497b5860f --- /dev/null +++ b/.github/workflows/lib-build.yml @@ -0,0 +1,28 @@ +name: Rust building + +on: + push: + branches: [ master ] + pull_request: +env: + CARGO_TERM_COLOR: always +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Get build cache + id: cache-build + uses: actions/cache@v2 + with: + path: target/** + key: ${{ runner.os }}-build-cache + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: actions-rs/cargo@v1 + name: Build program + working-directory: ./theseus + with: + command: build \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 70cd4ce8f..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "theseus_gui/locales"] - path = theseus_gui/locales - url = git@github.com:modrinth/translations.git diff --git a/theseus/src/state/mod.rs b/theseus/src/state/mod.rs index 7c82d5a0f..4b1bd9570 100644 --- a/theseus/src/state/mod.rs +++ b/theseus/src/state/mod.rs @@ -65,7 +65,7 @@ impl State { // Launcher data let (metadata, profiles) = tokio::try_join! { Metadata::init(&database), - Profiles::init(&database), + Profiles::init(&database, &directories), }?; let users = Users::init(&database)?; diff --git a/theseus/src/state/profiles.rs b/theseus/src/state/profiles.rs index 6810cb624..9f6fd7d17 100644 --- a/theseus/src/state/profiles.rs +++ b/theseus/src/state/profiles.rs @@ -234,14 +234,38 @@ impl Profiles { .collect::>>() .await; - // { - // for (path, profile_opt) in profiles.iter_mut() { - // if let Some(profile) = profile_opt { - // - // } - // } - // } - // dirs.caches_dir() + // project path, parent profile path + let mut files: HashMap = HashMap::new(); + { + for (profile_path, _profile_optZA) in profiles.iter() { + let mut read_paths = |path: &str| { + for path in std::fs::read_dir(profile_path.join(path))? { + files.insert(path?.path(), profile_path.clone()); + } + + Ok::<(), crate::Error>(()) + }; + read_paths("mods")?; + read_paths("shaders")?; + read_paths("resourcepacks")?; + read_paths("datapacks")?; + } + } + let inferred = super::projects::infer_data_from_files( + files.keys().into_iter().cloned().collect(), + dirs.caches_dir(), + ) + .await?; + + for (key, value) in inferred { + if let Some(profile_path) = files.get(&key) { + if let Some(profile) = profiles.get_mut(profile_path) { + if let Some(profile) = profile { + profile.projects.insert(key, value); + } + } + } + } Ok(Self(profiles)) } diff --git a/theseus/src/state/projects.rs b/theseus/src/state/projects.rs index f50944d99..daa649032 100644 --- a/theseus/src/state/projects.rs +++ b/theseus/src/state/projects.rs @@ -200,29 +200,36 @@ pub async fn infer_data_from_files( let mut file_str = String::new(); if file.read_to_string(&mut file_str).is_ok() { - if let Ok(pack) = serde_json::from_str::(&file_str) { - let icon = read_icon_from_file(pack.logo_file)?; + if let Ok(pack) = + serde_json::from_str::(&file_str) + { + if let Some(pack) = pack.mods.first() { + let icon = read_icon_from_file(pack.logo_file.clone())?; - return_projects.insert( - path.clone(), - Project { - sha512: hash, - disabled: false, - metadata: ProjectMetadata::Inferred { - title: Some( - pack.display_name.unwrap_or(pack.mod_id), - ), - description: pack.description, - authors: pack - .authors - .map(|x| vec![x]) - .unwrap_or_default(), - version: pack.version, - icon, + return_projects.insert( + path.clone(), + Project { + sha512: hash, + disabled: false, + metadata: ProjectMetadata::Inferred { + title: Some( + pack.display_name + .clone() + .unwrap_or(pack.mod_id.clone()), + ), + description: pack.description.clone(), + authors: pack + .authors + .clone() + .map(|x| vec![x]) + .unwrap_or_default(), + version: pack.version.clone(), + icon, + }, }, - }, - ); - continue; + ); + continue; + } } } } diff --git a/theseus_gui/package.json b/theseus_gui/package.json index 1f12b40b2..749a3aa81 100644 --- a/theseus_gui/package.json +++ b/theseus_gui/package.json @@ -7,7 +7,10 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "tauri": "tauri" + "tauri": "tauri", + "lint:js": "eslint --ext .js,.vue,.ts,.jsx,.tsx,.html,.vue .", + "lint": "npm run lint:js && prettier --check .", + "fix": "eslint --fix --ext .js,.vue,.ts,.jsx,.tsx,.html,.vue ." }, "dependencies": { "@tauri-apps/api": "^1.2.0",