Hello guys,

I investigated "save_index" and confused by several things. General questions:

1) Which the reason create save_index file?
If I right understood, only two purposes:
 a) decrease time of open "Load" dialog
 b) decrease time of render clicked save - show preview, game
description, company name, etc.

Perfomance reason, other words. Please approve/disapprove my understanding.

2) Unfortunatelly, right now "save_index" does not used by anywhere in game.

I see just single call of save_index: write_save_index() (I skipped
definition of class and definition of methods):

src/savegame.hpp:       /** Update the save_index */
src/dialogs.cpp:                config& cfg = 
savegame::save_index::save_summary(i->name);
src/dialogs.cpp:        savegame::save_index::write_save_index();

You can check this by "find ./src -exec grep save_index". From this
point of view, right now save_index nobody used.
I also checked it by stacktraces *(see end of letter)

In typical game usage nowhere is used :(

3) I supposed - save_index used before, but right now code with usage
removed. I investigated revision history by git bisect and can't
confirm this -

commit fd497d4601f40acb0bc16c5c2ec3353767b94e92
Author: Sirp <Sirp@75b3775d-3801-0410-9e12-e2e43121521d>
Date:   Thu Jun 10 00:35:45 2004 +0000

    added new 'load' dialog. changed behavior of pressing 'space' to
end a unit's turn

    git-svn-id: svn+ssh://svn.gna.org/svn/wesnoth/trunk@2265
75b3775d-3801-0410-9e12-e2e43121521d

4) Current code directly read the dir with saves and parse every file
separatelly. You can see this in src/gui/dialogs/game_load.cpp:
tgame_load::display_savegame

So, I want to change this situation, and full support of the
"save_index" in soure code.
I need this at least for:
http://forums.wesnoth.org/viewtopic.php?f=10&t=36034&p=519985#p519985
- for group the saves by game I should parse all saves.
This is required a lot of time.

Suppose we avoid directly read the directory, and use "save_index"
instead of direct read.
Which problem we will meet?

1) SHORT: missed save_index
PROBLEM: User doesn't have "save_index" file, but have saves (for
example, he move saves from another folder). As result "save_index"
will no loaded, and user didn't see any saves.
SOLUTION: rebuild save_index by directly read saves files while game is starting

2) SHORT: save_index file too old
PROBLEM: User add some new save files, not listed in save_index
SOLUTION: as in (1) - rebuild save_index directly from saves files
(probably read & parse just new files, not listed in save_index).

3) SHORT: user added save file while play to game and wants open it.
PROBLEM: added saves will not listed in "open" dialog without game restart.

SOLUTION (simple): on open "Load"  dialog read the filename and
modify_time from directory (this is right now happendessin tgame_load)
and compare their with information from save_index.

SOLUTION (hard): use inotify/similar things for get updates about new
files. Unreasonably complex solution.

So, right now I wants to do SOLUTION(3)(simple). I would like again
repeat what I will change:
1) replay direct file read in tgame_load by information from save_index
2) implement function "update" for save_index - function list all
files from save_directory, and update information in save_index file
3) call "update" function on every open of game load dialog.

How this plan for you?

Best regards, Oleg

savegame::save_index::load
savegame::save_index::save_summary
dialogs::load_game_dialog
savegame::loadgame::show_dialog
savegame::loadgame::load_game
game_controller::load_game
do_gameloop
main

savegame::save_index::load
savegame::save_index::write_save_index
dialogs::load_game_dialog
savegame::loadgame::show_dialog
savegame::loadgame::load_game
game_controller::load_game
do_gameloop
main

_______________________________________________
Wesnoth-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-dev

Reply via email to