prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  [qt-journalist-updater] Add a time estimate to the update progress bar
  ## Description
  
  [See epic #3076 for primary feature, PRs for this ticket should go into `qt-journalist-updater`]
  
  We should add a reasonable time estimate to the update progress bar as the upgrade progresses
  
  ## User Stories
  
  As a journalist user, I want an estimate of how long it will take until updates are finished so that I can plan. 
  
  </issue>
  <code>
  [start of journalist_gui/journalist_gui/strings.py]
  1 window_title = 'SecureDrop Updater'
  2 update_in_progress = ("SecureDrop workstation updates are available! "
  3                       "You should install them now. If you don\'t want to, "
  4                       "you can install them the next time you reboot.")
  5 fetching_update = 'Fetching and verifying latest update...'
  6 updating_tails_env = 'Configuring local Tails environment...'
  7 finished = 'Update successfully completed!'
  8 finished_dialog_message = 'Updates completed successfully. Click OK to close.'
  9 finished_dialog_title = 'SecureDrop Workstation is up to date!'
  10 update_failed_dialog_title = 'Error Updating SecureDrop Workstation'
  11 update_failed_generic_reason = ("Update failed. "
  12                                 "Please contact your SecureDrop "
  13                                 "administrator.")
  14 update_failed_sig_failure = ("WARNING: Signature verification failed. "
  15                              "Contact your SecureDrop administrator "
  16                              "immediately.")
  17 tailsconfig_failed_sudo_password = 'Sudo password incorrect'
  18 tailsconfig_failed_generic_reason = ("Tails workstation configuration failed. "
  19                                      "Contact your administrator.")
  20 install_update_button = 'Install Now'
  21 install_later_button = 'Install Later'
  22
  [end of journalist_gui/journalist_gui/strings.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/journalist_gui/journalist_gui/strings.py b/journalist_gui/journalist_gui/strings.py
  --- a/journalist_gui/journalist_gui/strings.py
  +++ b/journalist_gui/journalist_gui/strings.py
  @@ -2,8 +2,10 @@
   update_in_progress = ("SecureDrop workstation updates are available! "
                         "You should install them now. If you don\'t want to, "
                         "you can install them the next time you reboot.")
  -fetching_update = 'Fetching and verifying latest update...'
  -updating_tails_env = 'Configuring local Tails environment...'
  +fetching_update = ('Fetching and verifying latest update...'
  +                   ' (4 mins remaining)')
  +updating_tails_env = ('Configuring local Tails environment...'
  +                      ' (1 min remaining)')
   finished = 'Update successfully completed!'
   finished_dialog_message = 'Updates completed successfully. Click OK to close.'
   finished_dialog_title = 'SecureDrop Workstation is up to date!'
  
verification_info: {"golden_diff": "diff --git a/journalist_gui/journalist_gui/strings.py b/journalist_gui/journalist_gui/strings.py\n--- a/journalist_gui/journalist_gui/strings.py\n+++ b/journalist_gui/journalist_gui/strings.py\n@@ -2,8 +2,10 @@\n update_in_progress = (\"SecureDrop workstation updates are available! \"\n                       \"You should install them now. If you don\\'t want to, \"\n                       \"you can install them the next time you reboot.\")\n-fetching_update = 'Fetching and verifying latest update...'\n-updating_tails_env = 'Configuring local Tails environment...'\n+fetching_update = ('Fetching and verifying latest update...'\n+                   ' (4 mins remaining)')\n+updating_tails_env = ('Configuring local Tails environment...'\n+                      ' (1 min remaining)')\n finished = 'Update successfully completed!'\n finished_dialog_message = 'Updates completed successfully. Click OK to close.'\n finished_dialog_title = 'SecureDrop Workstation is up to date!'\n", "issue": "[qt-journalist-updater] Add a time estimate to the update progress bar\n## Description\r\n\r\n[See epic #3076 for primary feature, PRs for this ticket should go into `qt-journalist-updater`]\r\n\r\nWe should add a reasonable time estimate to the update progress bar as the upgrade progresses\r\n\r\n## User Stories\r\n\r\nAs a journalist user, I want an estimate of how long it will take until updates are finished so that I can plan. \n", "before_files": [{"content": "window_title = 'SecureDrop Updater'\nupdate_in_progress = (\"SecureDrop workstation updates are available! \"\n                      \"You should install them now. If you don\\'t want to, \"\n                      \"you can install them the next time you reboot.\")\nfetching_update = 'Fetching and verifying latest update...'\nupdating_tails_env = 'Configuring local Tails environment...'\nfinished = 'Update successfully completed!'\nfinished_dialog_message = 'Updates completed successfully. Click OK to close.'\nfinished_dialog_title = 'SecureDrop Workstation is up to date!'\nupdate_failed_dialog_title = 'Error Updating SecureDrop Workstation'\nupdate_failed_generic_reason = (\"Update failed. \"\n                                \"Please contact your SecureDrop \"\n                                \"administrator.\")\nupdate_failed_sig_failure = (\"WARNING: Signature verification failed. \"\n                             \"Contact your SecureDrop administrator \"\n                             \"immediately.\")\ntailsconfig_failed_sudo_password = 'Sudo password incorrect'\ntailsconfig_failed_generic_reason = (\"Tails workstation configuration failed. \"\n                                     \"Contact your administrator.\")\ninstall_update_button = 'Install Now'\ninstall_later_button = 'Install Later'\n", "path": "journalist_gui/journalist_gui/strings.py"}]}