@@ -144,44 +144,49 @@ defmodule DiffWeb.DiffLiveView do
144144 def handle_info ( { :generate_diff , package , from , to } , socket ) do
145145 hex_impl = Application . get_env ( :diff , :hex_impl , Diff.Hex )
146146
147- try do
148- case hex_impl . diff ( package , from , to ) do
149- { :ok , stream } ->
150- case process_stream_to_diffs ( package , from , to , stream ) do
151- { :ok , metadata , diff_ids } ->
152- initial_batch_size = 5
153- { initial_diffs , _remaining } = Enum . split ( diff_ids , initial_batch_size )
154-
155- socket =
156- socket
157- |> assign (
158- metadata: metadata ,
159- all_diff_ids: diff_ids ,
160- loaded_diffs: [ ] ,
161- loaded_diff_content: % { } ,
162- remaining_diffs: diff_ids ,
163- generating: false ,
164- has_more_diffs: length ( diff_ids ) > 0
165- )
166-
167- send ( self ( ) , { :load_diffs , initial_diffs } )
168-
169- { :noreply , socket }
170-
171- { :error , reason } ->
172- Logger . error ( "Failed to generate diff: #{ inspect ( reason ) } " )
173- { :noreply , assign ( socket , error: "Failed to generate diff" , generating: false ) }
174- end
175-
176- :error ->
177- { :noreply , assign ( socket , error: "Failed to generate diff" , generating: false ) }
178- end
179- catch
180- :throw , { :diff , :invalid_diff } ->
181- { :noreply , assign ( socket , error: "Invalid diff" , generating: false ) }
182- after
183- Diff.TmpDir . cleanup ( )
147+ result =
148+ Task.Supervisor . async ( Diff.Tasks , fn ->
149+ case hex_impl . diff ( package , from , to ) do
150+ { :ok , stream } ->
151+ process_stream_to_diffs ( package , from , to , stream )
152+
153+ :error ->
154+ :error
155+ end
156+ end )
157+ |> Task . await ( :infinity )
158+
159+ case result do
160+ { :ok , metadata , diff_ids } ->
161+ initial_batch_size = 5
162+ { initial_diffs , _remaining } = Enum . split ( diff_ids , initial_batch_size )
163+
164+ socket =
165+ socket
166+ |> assign (
167+ metadata: metadata ,
168+ all_diff_ids: diff_ids ,
169+ loaded_diffs: [ ] ,
170+ loaded_diff_content: % { } ,
171+ remaining_diffs: diff_ids ,
172+ generating: false ,
173+ has_more_diffs: length ( diff_ids ) > 0
174+ )
175+
176+ send ( self ( ) , { :load_diffs , initial_diffs } )
177+
178+ { :noreply , socket }
179+
180+ { :error , reason } ->
181+ Logger . error ( "Failed to generate diff: #{ inspect ( reason ) } " )
182+ { :noreply , assign ( socket , error: "Failed to generate diff" , generating: false ) }
183+
184+ :error ->
185+ { :noreply , assign ( socket , error: "Failed to generate diff" , generating: false ) }
184186 end
187+ catch
188+ :throw , { :diff , :invalid_diff } ->
189+ { :noreply , assign ( socket , error: "Invalid diff" , generating: false ) }
185190 end
186191
187192 def handle_info ( { :load_diffs_and_update , diff_ids } , socket ) do
0 commit comments