remove denote files
This commit is contained in:
parent
e5652dfd90
commit
2dad540135
|
|
@ -513,6 +513,10 @@ func EventListener() {
|
|||
if err := handleNewEvent(identifier); err != nil {
|
||||
log.Printf("error handling new for %s: %v", identifier, err)
|
||||
}
|
||||
case "d":
|
||||
if err := handleDeleteEvent(identifier); err != nil {
|
||||
log.Printf("error handling delete for %s: %v", identifier, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -652,3 +656,31 @@ func handleNewEvent(identifier string) error {
|
|||
log.Printf("created new note: %s at %s", identifier, path)
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleDeleteEvent(identifier string) error {
|
||||
// Get denote directory
|
||||
denoteDir := GetDir()
|
||||
|
||||
// Find file matching pattern: <identifier>--*
|
||||
pattern := filepath.Join(denoteDir, identifier+"--*")
|
||||
matches, err := filepath.Glob(pattern)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to find file: %w", err)
|
||||
}
|
||||
|
||||
if len(matches) == 0 {
|
||||
return fmt.Errorf("no file found matching identifier: %s", identifier)
|
||||
}
|
||||
|
||||
if len(matches) > 1 {
|
||||
log.Printf("warning: multiple files match identifier %s, deleting first: %s", identifier, matches[0])
|
||||
}
|
||||
|
||||
// Delete the file
|
||||
if err := os.Remove(matches[0]); err != nil {
|
||||
return fmt.Errorf("failed to delete file: %w", err)
|
||||
}
|
||||
|
||||
log.Printf("deleted note: %s", matches[0])
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1006,7 +1006,20 @@ func (s *server) write(cs *connState, fc *plan9.Fcall) *plan9.Fcall {
|
|||
default:
|
||||
}
|
||||
case "event":
|
||||
// Emit custom event (e.g., "r" for rename)
|
||||
// Handle delete event specially
|
||||
if value == "d" {
|
||||
// Remove from in-memory state
|
||||
s.mu.Lock()
|
||||
for i, n := range s.notes {
|
||||
if n.Identifier == noteID {
|
||||
s.notes = append(s.notes[:i], s.notes[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
// Emit custom event (e.g., "r" for rename, "d" for delete)
|
||||
event := noteID + " " + value
|
||||
select {
|
||||
case s.eventChan <- event:
|
||||
|
|
|
|||
35
main.go
35
main.go
|
|
@ -9,6 +9,7 @@ import (
|
|||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
|
@ -61,7 +62,7 @@ func main() {
|
|||
}
|
||||
defer w.CloseFiles()
|
||||
|
||||
if err = ui.TagSet(w, "New Reset Sync Put"); err != nil {
|
||||
if err = ui.TagSet(w, "New Put Remove Reset Sync"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
|
@ -97,15 +98,17 @@ func main() {
|
|||
|
||||
event := strings.TrimSpace(string(buf[:n]))
|
||||
parts := strings.Fields(event)
|
||||
if len(parts) >= 2 && parts[1] == "n" {
|
||||
// Refresh window with new results
|
||||
rs, err := denote.Search(fs.Filters{})
|
||||
if err != nil {
|
||||
log.Printf("error refreshing after new file: %v", err)
|
||||
continue
|
||||
if len(parts) >= 2 {
|
||||
if parts[1] == "n" || parts[1] == "d" {
|
||||
// Refresh window with new results
|
||||
rs, err := denote.Search(fs.Filters{})
|
||||
if err != nil {
|
||||
log.Printf("error refreshing after new file: %v", err)
|
||||
continue
|
||||
}
|
||||
fs.Sort(rs, fs.SortById, fs.SortOrderDesc)
|
||||
refreshWindow(w, rs)
|
||||
}
|
||||
fs.Sort(rs, fs.SortById, fs.SortOrderDesc)
|
||||
refreshWindow(w, rs)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -138,6 +141,20 @@ func main() {
|
|||
}); err != nil {
|
||||
log.Printf("failed to create new file: %v", err)
|
||||
}
|
||||
case "Remove":
|
||||
// Read chorded argument
|
||||
input := strings.TrimSpace(string(e.Arg))
|
||||
if input == "" {
|
||||
log.Printf("New: no input provided")
|
||||
break
|
||||
}
|
||||
|
||||
// Write to denote/<identifier>/event via 9P
|
||||
if err := fs.With9P(func(f *client.Fsys) error {
|
||||
return fs.WriteFile(f, filepath.Join(input, "event"), "d")
|
||||
}); err != nil {
|
||||
log.Printf("failed to delete file: %v", err)
|
||||
}
|
||||
case "Reset":
|
||||
rs, err := denote.Search(fs.Filters{})
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in New Issue