SASGIS - SAS.Планета
View Issue Details
0002685SAS.Планета[All Projects] Багpublic16-04-2015 10:2516-04-2015 13:25
Garl 
zed 
normalminorhave not tried
resolvedfixed 
Windows7Professional
141212 
150915150915 
0002685: Пункт меню "Открыть папку, содержащую тайл основной карты" для отсутствующего тайла
При выборе пункта меню "Открыть папку, содержащую тайл основной карты" на пустом тайле открывается папка текущего пользователя
в идеале должна открываться папка где должен находиться тайл или каталог выше вплоть до %caсhe_dir%
No tags attached.
Issue History
16-04-2015 10:25GarlNew Issue
16-04-2015 10:30vdemidovStatusnew => confirmed
16-04-2015 10:30vdemidovProduct Version => 141212
16-04-2015 10:30vdemidovTarget Version => 150915
16-04-2015 11:04zedNote Added: 0015592
16-04-2015 11:19vasketsovNote Added: 0015593
16-04-2015 11:19GarlNote Added: 0015594
16-04-2015 11:21vasketsovNote Edited: 0015593bug_revision_view_page.php?bugnote_id=15593#r6523
16-04-2015 11:25zedNote Added: 0015595
16-04-2015 11:49vdemidovNote Added: 0015596
16-04-2015 11:50vdemidovNote Added: 0015597
16-04-2015 11:51vasketsovNote Added: 0015598
16-04-2015 11:52zedNote Added: 0015599
16-04-2015 11:53zedNote Edited: 0015599bug_revision_view_page.php?bugnote_id=15599#r6525
16-04-2015 11:54zedNote Added: 0015600
16-04-2015 11:54GarlNote Added: 0015601
16-04-2015 11:56zedNote Added: 0015602
16-04-2015 11:58zedNote Edited: 0015600bug_revision_view_page.php?bugnote_id=15600#r6527
16-04-2015 12:01vasketsovNote Added: 0015603
16-04-2015 12:06zedNote Added: 0015604
16-04-2015 12:24vasketsovNote Added: 0015605
16-04-2015 13:04zedNote Added: 0015606
16-04-2015 13:25zedStatusconfirmed => resolved
16-04-2015 13:25zedFixed in Version => 150915
16-04-2015 13:25zedResolutionopen => fixed
16-04-2015 13:25zedAssigned To => zed

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% (которой тоже может не быть), не лучшая идея.
(0015596)
vdemidov   
16-04-2015 11:49   
Ну, я за то что бы пытаться получить наиболее подробный существующий путь к месту где тайл должен находится.
(0015597)
vdemidov   
16-04-2015 11:50   
Но на первое время, хватит и проверки существования такой папки и сообщения, что ее нет вместо открытия експлорера.
(0015598)
vasketsov   
16-04-2015 11:51   
>самовольничать
Можно просто спросить, чего открыть, если финишной папки нет.
Чтобы юзер знал, что открылось не то, что он возможно хотел.

Ведь доподлинно неизвестно, что именно хочет юзер, когда видит отсутствие тайла и выполняет данную операцию. Он может не знать, есть 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   
> ай не факт
Поэтому и написано слово может. Может не быть, а может и быть.
(0015603)
vasketsov   
16-04-2015 12:01   
>зачем юзеру не то, что он вероятнее всего хотел получить
А что может хотеть получить юзер, вызывая эту операцию на том месте, где он видит, что НЕТ тайла?
(0015604)
zed   
16-04-2015 12:06   
Ничего хорошего, поэтому и нужна простая защита от дурака или случайного нажатия.

Либо, нужно делать полную обработку всех возможных ситуаций с отсутствием папки/тайла и на каждом этапе спрашивать и предупреждать юзера, что он дурак и делает не то. Но это, имхо, усложнение на ровном месте.
(0015605)
vasketsov   
16-04-2015 12:24   
>простая защита
Ок. Минимум - это проверка наличия желаемой папки и сообщение, что открывать нечего.

Модификация:
а) вместо сообщения о факте отсутствия папки - дополнить его вопросом, а не возжелает ли господин открыть вместо неё родительскую папку;
б) при согласии - пооткусывать в цикле хвост, пока папка не появится или строка не кончится, и если что-то есть - это открыть.

Где усложнение? Цикл? Да его написать быстрее, чем это обсуждать.
Для пользователя, если он хочет именно желаемую папку, ровным счётом ничего не меняется, просто он жмакает "Нет". Ровно то же одно сообщение, которое тоже надо как минимум закрыть.

Зато появляются бонусы:
а) за то же одно сообщение юзер понимает, есть ли тайл, и может перейти к корню или к промежуточной папке - просто как минимум выигрыш в скорости;
б) для кэшей типа 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 и использовать её тут.

Таким образом решается баг, который тут есть. А хотелка по поводу "открой мне то да сё, если вот этого нет" и стоит ли ей заниматься (по-моему не стоит) это уже другой вопрос. Там ещё нужно и про СУБД вспомнить и тоже что-то ответить пользователю, т.е. нюансов тьма.