summaryrefslogtreecommitdiff
path: root/apps/root_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/root_menu.c')
-rw-r--r--apps/root_menu.c59
1 files changed, 31 insertions, 28 deletions
diff --git a/apps/root_menu.c b/apps/root_menu.c
index fa00a06ed5..b9847dfd54 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -104,35 +104,17 @@ static int browser(void* param)
104 case GO_TO_DBBROWSER: 104 case GO_TO_DBBROWSER:
105 if (!tagcache_is_usable()) 105 if (!tagcache_is_usable())
106 { 106 {
107 /* Check if we're still initialising, so status is unknown */ 107 bool reinit_attempted = false;
108 struct tagcache_stat *stat = tagcache_get_stat();
109 if (!stat->initialized)
110 {
111 gui_syncsplash(HZ*2, true, str(LANG_TAGCACHE_BUSY));
112 return GO_TO_PREVIOUS;
113 }
114
115 /* Re-init if required */
116 if (!stat->ready && !stat->commit_delayed && stat->processed_entries == 0)
117 {
118 /* Prompt the user */
119 char *lines[]={str(LANG_TAGCACHE_BUSY), str(LANG_TAGCACHE_FORCE_UPDATE)};
120 struct text_message message={lines, 2};
121 if(gui_syncyesno_run(&message, NULL, NULL) == YESNO_NO)
122 return GO_TO_PREVIOUS;
123 int i;
124 FOR_NB_SCREENS(i)
125 screens[i].clear_display();
126
127 /* Start initialisation */
128 tagcache_rebuild();
129 }
130 108
131 /* Now display progress until it's ready or the user exits */ 109 /* Now display progress until it's ready or the user exits */
132 while(!tagcache_is_usable()) 110 while(!tagcache_is_usable())
133 { 111 {
134 gui_syncstatusbar_draw(&statusbars, false); 112 gui_syncstatusbar_draw(&statusbars, false);
135 stat = tagcache_get_stat(); 113 struct tagcache_stat *stat = tagcache_get_stat();
114
115 /* Allow user to exit */
116 if (action_userabort(HZ/2))
117 break;
136 118
137 /* Maybe just needs to reboot due to delayed commit */ 119 /* Maybe just needs to reboot due to delayed commit */
138 if (stat->commit_delayed) 120 if (stat->commit_delayed)
@@ -141,6 +123,31 @@ static int browser(void* param)
141 break; 123 break;
142 } 124 }
143 125
126 /* Check if ready status is known */
127 if (!stat->readyvalid)
128 {
129 gui_syncsplash(0, true, str(LANG_TAGCACHE_BUSY));
130 continue;
131 }
132
133 /* Re-init if required */
134 if (!reinit_attempted && !stat->ready &&
135 stat->processed_entries == 0 && stat->commit_step == 0)
136 {
137 /* Prompt the user */
138 reinit_attempted = true;
139 char *lines[]={str(LANG_TAGCACHE_BUSY), str(LANG_TAGCACHE_FORCE_UPDATE)};
140 struct text_message message={lines, 2};
141 if(gui_syncyesno_run(&message, NULL, NULL) == YESNO_NO)
142 break;
143 int i;
144 FOR_NB_SCREENS(i)
145 screens[i].clear_display();
146
147 /* Start initialisation */
148 tagcache_rebuild();
149 }
150
144 /* Display building progress */ 151 /* Display building progress */
145 if (stat->commit_step > 0) 152 if (stat->commit_step > 0)
146 { 153 {
@@ -153,10 +160,6 @@ static int browser(void* param)
153 gui_syncsplash(0, true, str(LANG_BUILDING_DATABASE), 160 gui_syncsplash(0, true, str(LANG_BUILDING_DATABASE),
154 stat->processed_entries); 161 stat->processed_entries);
155 } 162 }
156
157 /* Allow user to exit */
158 if (action_userabort(HZ/2))
159 break;
160 } 163 }
161 } 164 }
162 if (!tagcache_is_usable()) 165 if (!tagcache_is_usable())