66import org .cryptomator .integrations .common .Priority ;
77import org .cryptomator .integrations .update .Progress ;
88import org .cryptomator .integrations .update .ProgressListener ;
9+ import org .cryptomator .integrations .update .SpawnExitedListener ;
10+ import org .cryptomator .integrations .update .SpawnStartedListener ;
911import org .cryptomator .integrations .update .UpdateAvailable ;
1012import org .cryptomator .integrations .update .UpdateAvailableListener ;
1113import org .cryptomator .integrations .update .UpdateFailedException ;
@@ -38,6 +40,8 @@ public class FlatpakUpdater implements UpdateService, AutoCloseable {
3840
3941 private final List <UpdateAvailableListener > updateAvailableListeners = new CopyOnWriteArrayList <>();
4042 private final List <ProgressListener > progressListeners = new CopyOnWriteArrayList <>();
43+ private final List <SpawnStartedListener > spawnStartedListeners = new CopyOnWriteArrayList <>();
44+ private final List <SpawnExitedListener > spawnExitedListeners = new CopyOnWriteArrayList <>();
4145
4246 private final UpdatePortal portal ;
4347 private Flatpak .UpdateMonitor updateMonitor ;
@@ -136,13 +140,6 @@ public void removeUpdateAvailableListener(UpdateAvailableListener listener) {
136140 updateAvailableListeners .remove (listener );
137141 }
138142
139- private void notifyOnUpdateAvailable (Flatpak .UpdateMonitor .UpdateAvailable signal ) {
140- UpdateAvailable updateAvailable = new UpdateAvailable ((String ) signal .update_info .get ("remote-commit" ).getValue ());
141- for (UpdateAvailableListener listener : updateAvailableListeners ) {
142- listener .onUpdateAvailable (updateAvailable );
143- }
144- }
145-
146143 @ Override
147144 public void addProgressListener (ProgressListener listener ) {
148145 progressListeners .add (listener );
@@ -153,14 +150,76 @@ public void removeProgressListener(ProgressListener listener) {
153150 progressListeners .remove (listener );
154151 }
155152
153+ @ Override
154+ public void addSpawnStartedListener (SpawnStartedListener listener ) {
155+ spawnStartedListeners .add (listener );
156+ }
157+
158+ @ Override
159+ public void removeSpawnStartedListener (SpawnStartedListener listener ) {
160+ spawnStartedListeners .remove (listener );
161+ }
162+
163+ @ Override
164+ public void addSpawnExitedListener (SpawnExitedListener listener ) {
165+ spawnExitedListeners .add (listener );
166+ }
167+
168+ @ Override
169+ public void removeSpawnExitedListener (SpawnExitedListener listener ) {
170+ spawnExitedListeners .remove (listener );
171+ }
172+
173+ private void notifyOnUpdateAvailable (Flatpak .UpdateMonitor .UpdateAvailable signal ) {
174+ String remoteCommit = "" ;
175+ Variant <?> remoteCommitVariant = signal .update_info .get ("remote-commit" );
176+ if (null != remoteCommitVariant ) {
177+ remoteCommit = (String ) remoteCommitVariant .getValue ();
178+ }
179+ String runningCommit = "" ;
180+ Variant <?> runningCommitVariant = signal .update_info .get ("running-commit" );
181+ if (null != runningCommitVariant ) {
182+ runningCommit = (String ) runningCommitVariant .getValue ();
183+ }
184+ String localCommit = "" ;
185+ Variant <?> localCommitVariant = signal .update_info .get ("local-commit" );
186+ if (null != localCommitVariant ) {
187+ localCommit = (String ) localCommitVariant .getValue ();
188+ }
189+ UpdateAvailable updateAvailable = new UpdateAvailable (runningCommit , localCommit , remoteCommit );
190+ for (UpdateAvailableListener listener : updateAvailableListeners ) {
191+ listener .onUpdateAvailable (updateAvailable );
192+ }
193+ }
194+
156195 private void notifyOnUpdateProceeds (Flatpak .UpdateMonitor .Progress signal ) {
157196 long status = ((UInt32 ) signal .info .get ("status" ).getValue ()).longValue ();
158197 long progress = 0 ;
159198 Variant <?> progressVariant = signal .info .get ("progress" );
160199 if (null != progressVariant ) {
161200 progress = ((UInt32 ) progressVariant .getValue ()).longValue ();
162201 }
163- Progress p = new Progress (status , progress );
202+ long nOps = -1 ;
203+ Variant <?> nOpsVariant = signal .info .get ("n_ops" );
204+ if (null != nOpsVariant ) {
205+ nOps = ((UInt32 ) nOpsVariant .getValue ()).longValue ();
206+ }
207+ long oP = -1 ;
208+ Variant <?> oPVariant = signal .info .get ("op" );
209+ if (null != oPVariant ) {
210+ oP = ((UInt32 ) oPVariant .getValue ()).longValue ();
211+ }
212+ String error = "" ;
213+ Variant <?> errorVariant = signal .info .get ("error" );
214+ if (null != errorVariant ) {
215+ error = (String ) errorVariant .getValue ();
216+ }
217+ String errorMessage = "" ;
218+ Variant <?> errorMessageVariant = signal .info .get ("error_message" );
219+ if (null != errorMessageVariant ) {
220+ errorMessage = (String ) errorMessageVariant .getValue ();
221+ }
222+ Progress p = new Progress (nOps , oP , status , progress , error , errorMessage );
164223 for (ProgressListener listener : progressListeners ) {
165224 listener .onProgress (p );
166225 }
0 commit comments