Notes |
|
(0015592)
|
zed
|
16-04-2015 11:04
|
|
А по-моему вообще ничего открываться не должно. Надо выдавать сообщение, что тайла не существует, и не мудрить. |
|
|
(0015593)
|
vasketsov
|
16-04-2015 11:19
(edited on: 16-04-2015 11:21) |
|
Хм. Вообще-то папка, содержащая тайл основной карты, есть даже в беркли и sqlite. Это папка с БД. Вот её и надо открывать.
Кроме того, концепция tne в части отображения тайла не различает случаи, когда ничего нет в кэше, или есть tne. Сохранять tne или нет - дело исключительно пользователя. К открыванию папки, где хранится тайл, это никакого отношения не имеет, и вообще сохранение признака отсутствия тайла даже на файловом кэше может быть в принципе сделано и без tne. Поэтому должна пытаться открываться именно та папка, где должен быть тайл, независимо от того, есть он, есть tne или вообще ничего нет.
>тайла не существует
Эта логика понятна, что раз нет тайла, то нет и папки, его содержащей. Но разумнее изменить описание на что-то типа "Открыть папку хранения тайла", и открывать папку даже при отсутствии тайла.
|
|
|
(0015594)
|
Garl
|
16-04-2015 11:19
|
|
имхо если написано "открыть папку" - значит надо открыть папку |
|
|
(0015595)
|
zed
|
16-04-2015 11:25
|
|
Если тайла нет, то и папки может не быть. И нельзя открыть то, чего нет. А самовольничать и перескакивать на верхнюю папку вплоть до %caсhe_dir% (которой тоже может не быть), не лучшая идея. |
|
|
|
Ну, я за то что бы пытаться получить наиболее подробный существующий путь к месту где тайл должен находится. |
|
|
|
Но на первое время, хватит и проверки существования такой папки и сообщения, что ее нет вместо открытия експлорера. |
|
|
|
>самовольничать
Можно просто спросить, чего открыть, если финишной папки нет.
Чтобы юзер знал, что открылось не то, что он возможно хотел.
Ведь доподлинно неизвестно, что именно хочет юзер, когда видит отсутствие тайла и выполняет данную операцию. Он может не знать, есть tne или нет. А нужно прогнозируемое поведение. Во всяком случае, желательно, чтобы при отсутствующем тайле поведение не зависело от наличия или отсутствия tne. От наличия или отсутствия папки - возможно.
>Если тайла нет, то и папки может не быть
Я тебе даже больше скажу, файл может быть, но папки уже может не быть )))
А в SACS так вообще файловый кэш версионный, а показываться может не запрошенная версия,... и ничего страшного, открывается. Причём в общем версионном случае логика открытия папки может отличаться от логики показа тайла при его отсутствии в нужной версии.
А вообще в ситуации z1\x2\y3\tile.jpg формально папка x2 тоже содержит тайл tile.jpg. Так что формально ничего страшного не произойдёт, если открыть её, если юзер подтвердит, что она его устроит. |
|
|
(0015599)
|
zed
|
16-04-2015 11:52
(edited on: 16-04-2015 11:53) |
|
>Ну, я за то что бы пытаться получить наиболее подробный существующий путь
Вплоть до %caсhe_dir%? Не согласен. Пользователь может ошибочно решить, что открылась именно та папка, которае ему нужна, а по факту будет совсем не то.
|
|
|
(0015600)
|
zed
|
16-04-2015 11:54
(edited on: 16-04-2015 11:58) |
|
> Можно просто спросить, чего открыть, если финишной папки нет.
Не понимаю, зачем такая морока. И зачем юзеру не то, что он вероятнее всего хотел получить.
|
|
|
(0015601)
|
Garl
|
16-04-2015 11:54
|
|
>Если тайла нет, то и папки может не быть.
ай не факт, из всего кэша удалили 1 тайл и как раз на нём клацаем, чтобы открыть ... понимаю что это частный случай, но вот так у меня и вышло... |
|
|
(0015602)
|
zed
|
16-04-2015 11:56
|
|
> ай не факт
Поэтому и написано слово может. Может не быть, а может и быть. |
|
|
|
>зачем юзеру не то, что он вероятнее всего хотел получить
А что может хотеть получить юзер, вызывая эту операцию на том месте, где он видит, что НЕТ тайла? |
|
|
(0015604)
|
zed
|
16-04-2015 12:06
|
|
Ничего хорошего, поэтому и нужна простая защита от дурака или случайного нажатия.
Либо, нужно делать полную обработку всех возможных ситуаций с отсутствием папки/тайла и на каждом этапе спрашивать и предупреждать юзера, что он дурак и делает не то. Но это, имхо, усложнение на ровном месте. |
|
|
|
>простая защита
Ок. Минимум - это проверка наличия желаемой папки и сообщение, что открывать нечего.
Модификация:
а) вместо сообщения о факте отсутствия папки - дополнить его вопросом, а не возжелает ли господин открыть вместо неё родительскую папку;
б) при согласии - пооткусывать в цикле хвост, пока папка не появится или строка не кончится, и если что-то есть - это открыть.
Где усложнение? Цикл? Да его написать быстрее, чем это обсуждать.
Для пользователя, если он хочет именно желаемую папку, ровным счётом ничего не меняется, просто он жмакает "Нет". Ровно то же одно сообщение, которое тоже надо как минимум закрыть.
Зато появляются бонусы:
а) за то же одно сообщение юзер понимает, есть ли тайл, и может перейти к корню или к промежуточной папке - просто как минимум выигрыш в скорости;
б) для кэшей типа SQlite или беркли получается переход к самой базе, независимо от опционального генератора тайловых координат внутри базы, который по сути становится просто точкой вторичного разбора в пространстве имён тайлов. |
|
|
(0015606)
|
zed
|
16-04-2015 13:04
|
|
Вообще, самая простая защита там уже присутствует:
if DirectoryExists(ExtractFilePath(VTileFileName)) then begin
SelectFileInExplorer(VTileFileName);
end else begin
ShowMessageFmt(SAS_ERR_DirectoryNotExistFmt, [VTileFileName]);
end;
Так что если папки нету, то ничего и не откроется. Правда в SelectFileInExplorer может передаваться несуществующее имя тайла. Вот отсюда и надо плясать - написать функцию SelectFolderInExplorer и использовать её тут.
Таким образом решается баг, который тут есть. А хотелка по поводу "открой мне то да сё, если вот этого нет" и стоит ли ей заниматься (по-моему не стоит) это уже другой вопрос. Там ещё нужно и про СУБД вспомнить и тоже что-то ответить пользователю, т.е. нюансов тьма. |
|