Просмотр исходного кода

Fix filepicker manual input (#146)

* fix: allows to type i while manual inputting filepath

* fix: file selection in filepicker focus mode

* remove duplicate code
Nicholas Hamilton 9 месяцев назад
Родитель
Сommit
4bb350a09b
1 измененных файлов с 27 добавлено и 30 удалено
  1. 27 30
      internal/tui/components/dialog/filepicker.go

+ 27 - 30
internal/tui/components/dialog/filepicker.go

@@ -128,6 +128,9 @@ func (f *filepickerCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		f.cursor = 0
 		f.getCurrentFileBelowCursor()
 	case tea.KeyMsg:
+		if f.cwd.Focused() {
+			f.cwd, cmd = f.cwd.Update(msg)
+		}
 		switch {
 		case key.Matches(msg, filePickerKeyMap.InsertCWD):
 			f.cwd.Focus()
@@ -166,7 +169,6 @@ func (f *filepickerCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 				isPathDir = f.dirs[f.cursor].IsDir()
 			}
 			if isPathDir {
-				path := filepath.Join(f.cwdDetails.directory, "/", f.dirs[f.cursor].Name())
 				newWorkingDir := DirNode{parent: f.cwdDetails, directory: path}
 				f.cwdDetails.child = &newWorkingDir
 				f.cwdDetails = f.cwdDetails.child
@@ -217,9 +219,6 @@ func (f *filepickerCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			f.getCurrentFileBelowCursor()
 		}
 	}
-	if f.cwd.Focused() {
-		f.cwd, cmd = f.cwd.Update(msg)
-	}
 	return f, cmd
 }
 
@@ -229,37 +228,35 @@ func (f *filepickerCmp) addAttachmentToMessage() (tea.Model, tea.Cmd) {
 		status.Error(fmt.Sprintf("Model %s doesn't support attachments", modeInfo.Name))
 		return f, nil
 	}
-	if isExtSupported(f.dirs[f.cursor].Name()) {
-		f.selectedFile = f.dirs[f.cursor].Name()
-		selectedFilePath := filepath.Join(f.cwdDetails.directory, "/", f.selectedFile)
-		isFileLarge, err := image.ValidateFileSize(selectedFilePath, maxAttachmentSize)
-		if err != nil {
-			status.Error("unable to read the image")
-			return f, nil
-		}
-		if isFileLarge {
-			status.Error("file too large, max 5MB")
-			return f, nil
-		}
 
-		content, err := os.ReadFile(selectedFilePath)
-		if err != nil {
-			status.Error("Unable read selected file")
-			return f, nil
-		}
+	selectedFilePath := f.selectedFile
+	if !isExtSupported(selectedFilePath) {
+		status.Error("Unsupported file")
+		return f, nil
+	}
 
-		mimeBufferSize := min(512, len(content))
-		mimeType := http.DetectContentType(content[:mimeBufferSize])
-		fileName := f.selectedFile
-		attachment := message.Attachment{FilePath: selectedFilePath, FileName: fileName, MimeType: mimeType, Content: content}
-		f.selectedFile = ""
-		return f, util.CmdHandler(AttachmentAddedMsg{attachment})
+	isFileLarge, err := image.ValidateFileSize(selectedFilePath, maxAttachmentSize)
+	if err != nil {
+		status.Error("unable to read the image")
+		return f, nil
 	}
-	if !isExtSupported(f.selectedFile) {
-		status.Error("Unsupported file")
+	if isFileLarge {
+		status.Error("file too large, max 5MB")
 		return f, nil
 	}
-	return f, nil
+
+	content, err := os.ReadFile(selectedFilePath)
+	if err != nil {
+		status.Error("Unable read selected file")
+		return f, nil
+	}
+
+	mimeBufferSize := min(512, len(content))
+	mimeType := http.DetectContentType(content[:mimeBufferSize])
+	fileName := filepath.Base(selectedFilePath)
+	attachment := message.Attachment{FilePath: selectedFilePath, FileName: fileName, MimeType: mimeType, Content: content}
+	f.selectedFile = ""
+	return f, util.CmdHandler(AttachmentAddedMsg{attachment})
 }
 
 func (f *filepickerCmp) View() string {