diff --git a/src/App.ts b/src/App.ts index de174a13c..6abb6988b 100644 --- a/src/App.ts +++ b/src/App.ts @@ -77,6 +77,7 @@ export class App { 'availableProjectsFileChanged', 'beforeModifiedProject', 'modifiedProject', + 'comMojangProjectChanged', ]) public static readonly ready = new Signal() protected static _instance: Readonly @@ -128,8 +129,9 @@ export class App { get isNoProjectSelected() { return ( - this.projectManager.currentProject === null || - this.projectManager.currentProject.isVirtualProject + (this.projectManager.currentProject === null || + this.projectManager.currentProject.isVirtualProject) && + !this.viewComMojangProject.hasComMojangProjectLoaded ) } diff --git a/src/App.vue b/src/App.vue index 8cc228d2a..7ae4ee889 100644 --- a/src/App.vue +++ b/src/App.vue @@ -165,6 +165,13 @@ export default { () => (this.isNoProjectSelected = app.isNoProjectSelected) ) ) + + this.disposables.push( + App.eventSystem.on( + 'comMojangProjectChanged', + () => (this.isNoProjectSelected = app.isNoProjectSelected) + ) + ) }) setFullscreenElement(this.$refs.appContainer.$el) diff --git a/src/components/CommandBar/CommandBar.vue b/src/components/CommandBar/CommandBar.vue index fc43e2fbd..7371c6ecb 100644 --- a/src/components/CommandBar/CommandBar.vue +++ b/src/components/CommandBar/CommandBar.vue @@ -104,7 +104,7 @@ export default { this.actions = [ ...baseActions, - ...(app.isNoProjectSelected + ...(app.isNoProjectSelected || app.project.isVirtualProject ? [] : await this.loadFilesFromProject(app.project)), ...extensionActions, diff --git a/src/components/Greet/Greet.vue b/src/components/Greet/Greet.vue index c43a50e2b..3f9d7adad 100644 --- a/src/components/Greet/Greet.vue +++ b/src/components/Greet/Greet.vue @@ -98,14 +98,14 @@ >

- {{ project.displayName }} + {{ project.displayName ?? project.name }}

@@ -220,6 +220,8 @@ import { useTranslations } from '/@/components/Composables/useTranslations' import { isUsingFileSystemPolyfill } from '/@/components/FileSystem/Polyfill' import { NotificationStore } from '/@/components/Notifications/state' import { tasks } from '/@/components/TaskManager/TaskManager' +import { ComMojangProjectLoader } from '/@/components/OutputFolders/ComMojang/ProjectLoader' +import { virtualProjectName } from '../Projects/Project/Project' const tauri = import.meta.env.VITE_IS_TAURI_APP @@ -247,12 +249,15 @@ async function loadFolder() { const app = await App.getApp() await app.setupBridgeFolder(bridgeFolderSelected.value) + await app.comMojang.setupComMojang() } let disposables: any[] = [] let projects: Ref = ref([]) +let comMojangProjectLoader: null | ComMojangProjectLoader = null + async function loadProjects() { const app = await App.getApp() @@ -260,6 +265,15 @@ async function loadProjects() { .readJSON('~local/data/projects.json') .catch(() => []) + if (comMojangProjectLoader !== null) { + projects.value = projects.value.concat( + (await comMojangProjectLoader.loadProjects()).map((project) => ({ + ...project, + comMojang: true, + })) + ) + } + await sortProjects() } @@ -272,7 +286,7 @@ function sortProjects() { const revalence = (b.lastOpened ?? 0) - (a.lastOpened ?? 0) if (revalence !== 0) return revalence - return a.displayName.localeCompare(b.displayName) + return (a.displayName ?? a.name).localeCompare(b.displayName ?? b.name) }) } @@ -285,7 +299,14 @@ async function selectProject(project: any) { if (!wasSuccessful) return } - await app.projectManager.selectProject(project.name, true) + if (project.comMojang) { + await app.projectManager.selectProject(virtualProjectName) + app.viewComMojangProject.loadComMojangProject(project) + + return + } + + await app.projectManager.selectProject(project.name) } async function saveProjects() { @@ -323,6 +344,8 @@ onMounted(async () => { bridgeFolderSelected.value = true }, true) ) + + comMojangProjectLoader = new ComMojangProjectLoader(app) }) onUnmounted(() => { diff --git a/src/components/OutputFolders/ComMojang/Sidebar/ViewProject.ts b/src/components/OutputFolders/ComMojang/Sidebar/ViewProject.ts index 80f19bfcc..161d1fc55 100644 --- a/src/components/OutputFolders/ComMojang/Sidebar/ViewProject.ts +++ b/src/components/OutputFolders/ComMojang/Sidebar/ViewProject.ts @@ -97,6 +97,8 @@ export class ViewComMojangProject extends SidebarContent { this.headerSlot = ProjectHeaderComponent this.sidebarElement.select() + + App.eventSystem.dispatch('comMojangProjectChanged', project) } async clearComMojangProject() { const app = await App.getApp() @@ -112,6 +114,8 @@ export class ViewComMojangProject extends SidebarContent { this.disposables.forEach((d) => d.dispose()) this.disposables = [] + + App.eventSystem.dispatch('comMojangProjectChanged') } onContentRightClick(event: MouseEvent): void {