Я пытаюсь использовать FSEvents для обнаружения, когда файлы были добавлены/удалены из определенной папки. На данный момент я реализовал простую оболочку вокруг FSEvents, и она отлично работает: я получаю все события.
НО проблема, которую я имею сейчас, заключается в том, что когда я переименовываю файл в Finder, я улавлю 2 разных события: первый тип типа "переименован" со старым именем файла, а другой с "переименованным" и новым имя файла. Идентификаторы событий различаются между двумя вызовами.
Итак, как я должен знать, какое "переименованное" событие содержит старое имя, а какое событие содержит старое? Я попробовал посмотреть в документации, но, к сожалению, kFSEventStreamEventFlagItemRenamed не задокументирован... он кажется новым в Lion.
PS: единственный способ, о котором я мог думать, был: при переименованном событии я проверяю свой интерфейс, чтобы узнать, есть ли у меня элемент, соответствующий пути события. Если это так, я отмечаю его для переименования. Если нет, я проверяю, был ли элемент отмечен для переименования, и если да, то я переименую его в новый путь к событию. Но мне действительно не нравится эта идея...
Edit: Хорошо, я нарисовал что-то вдоль линии моего "PS": я заметил, что при переименовании чего-либо идентификаторы из двух событий являются последовательными, так что с идентификатором события, содержащего новое имя, я могу получите событие, содержащее старое имя. Я просто использую немного dictionnary в моем интерфейсе для хранения идентификаторов и связанных с ними путей в случае "переименованного" события.
В любом случае, я могу теперь перехватывать события переименования и даже перемещать события: когда вы перемещаете файл, это "переименованное" событие, которое поймано FSEventStream...
Но у меня все еще есть одна последняя проблема: удаление. Когда я что-то удаляю, он переместился в корзину: я получил "переименованное" событие. Но проблема в том, что я не получаю второе событие переименования. Только "измененное" событие в файле .DS_Store. Я думаю, что этот файл используется Finder, чтобы узнать, какие файлы находятся в корзине и т.д. Поэтому я могу проверить модификацию этого файла и получить последнее "переименованное" событие, чтобы обнаружить, что файл был отправлен в корзину. Но я использую TotalFinder, который использует Asepsis, который изменяет способ хранения файлов Finder.DS_Store: я больше не получаю "измененный" на этом. Чтобы суммировать: я не могу обнаружить, когда файл отправлен в корзину...
Любая идея, как я могу это сделать? Может быть, использовать что-то еще, кроме FSEvents, чтобы поймать только это событие?