@@ -149,7 +149,51 @@ export class TimeTracker implements vscode.Disposable {
149149
150150 private getCurrentProject ( ) : string {
151151 const workspaceFolders = vscode . workspace . workspaceFolders ;
152- return workspaceFolders ? workspaceFolders [ 0 ] . name : 'Unknown Project' ;
152+ if ( ! workspaceFolders ) {
153+ return 'Unknown Project' ;
154+ }
155+
156+ // Get the active text editor
157+ const activeEditor = vscode . window . activeTextEditor ;
158+ if ( ! activeEditor ) {
159+ return 'No Active File' ;
160+ }
161+
162+ // Get workspace information
163+ const workspaceName = vscode . workspace . name || 'Default Workspace' ;
164+ const workspaceFolder = vscode . workspace . getWorkspaceFolder ( activeEditor . document . uri ) ;
165+
166+ if ( ! workspaceFolder ) {
167+ // File is outside any workspace folder
168+ return `External/${ this . getExternalProjectName ( activeEditor . document . uri ) } ` ;
169+ }
170+
171+ // If we're in a multi-root workspace, prefix with workspace name
172+ if ( workspaceFolders . length > 1 ) {
173+ return `${ workspaceName } /${ workspaceFolder . name } ` ;
174+ }
175+
176+ return workspaceFolder . name ;
177+ }
178+
179+ private getExternalProjectName ( uri : vscode . Uri ) : string {
180+ // Handle different scenarios for external files
181+ if ( uri . scheme !== 'file' ) {
182+ return 'Virtual Files' ;
183+ }
184+
185+ // Get the parent folder name for external files
186+ const path = uri . fsPath ;
187+ const parentFolder = path . split ( / [ \\ / ] / ) ;
188+
189+ // Remove empty segments and file name
190+ const folders = parentFolder . filter ( Boolean ) ;
191+ if ( folders . length >= 2 ) {
192+ // Return "ParentFolder/CurrentFolder"
193+ return `${ folders [ folders . length - 2 ] } /${ folders [ folders . length - 1 ] } ` ;
194+ }
195+
196+ return 'Other' ;
153197 }
154198
155199 getTodayTotal ( ) : number {
0 commit comments