Merge pull request #1511 from mwhudson/spinner-no-loop

rewrite Spinner to not require a loop parameter
This commit is contained in:
Michael Hudson-Doyle 2022-12-07 14:41:21 +13:00 committed by GitHub
commit 09defa104b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 25 additions and 25 deletions

View File

@ -91,7 +91,7 @@ class DriversView(BaseView):
def make_waiting(self, install: bool) -> None:
""" Change the view into a spinner and start waiting for drivers
asynchronously. """
self.spinner = Spinner(self.controller.app.aio_loop, style='dots')
self.spinner = Spinner(style='dots')
self.spinner.start()
if self.local_only:

View File

@ -181,7 +181,7 @@ class ErrorReportStretchy(Stretchy):
for n, b in self.btns.items():
self.btns[n] = Padding(b, width=w, align='center')
self.spinner = Spinner(app.aio_loop, style='dots')
self.spinner = Spinner(style='dots')
self.pile = Pile([])
self.pile.contents[:] = [
(w, self.pile.options('pack')) for w in self._pile_elements()]

View File

@ -42,7 +42,7 @@ class SlowProbing(BaseView):
def __init__(self, controller):
self.controller = controller
self.spinner = Spinner(aio_loop=controller.app.aio_loop, style="dots")
self.spinner = Spinner(style="dots")
self.spinner.start()
super().__init__(screen(
[

View File

@ -100,7 +100,7 @@ class ProgressView(BaseView):
def event_start(self, context_id, context_parent_id, message):
self.event_finish(context_parent_id)
walker = self.event_listbox.base_widget.body
spinner = Spinner(self.controller.app.aio_loop)
spinner = Spinner()
spinner.start()
new_line = Columns([
('pack', Text(message)),

View File

@ -139,7 +139,7 @@ class RefreshView(BaseView):
def __init__(self, controller):
self.controller = controller
self.check_task = None
self.spinner = Spinner(self.controller.app.aio_loop, style="dots")
self.spinner = Spinner(style="dots")
if self.controller.status.availability == RefreshCheckState.UNKNOWN:
self.check_state_checking()

View File

@ -366,7 +366,7 @@ class SnapListView(BaseView):
self.loaded(data)
def wait_load(self):
spinner = Spinner(self.controller.app.aio_loop, style='dots')
spinner = Spinner(style='dots')
spinner.start()
self._w = screen(
[spinner], [ok_btn(label=_("Continue"), on_press=self.done)],

View File

@ -157,7 +157,7 @@ class SSHForm(Form):
class FetchingSSHKeys(WidgetWrap):
def __init__(self, parent):
self.parent = parent
spinner = Spinner(parent.controller.app.aio_loop, style='dots')
spinner = Spinner(style='dots')
spinner.start()
text = _("Fetching SSH keys...")
button = cancel_btn(label=_("Cancel"), on_press=self.cancel)

View File

@ -261,7 +261,7 @@ class CheckingContractToken(WidgetWrap):
def __init__(self, parent: BaseView):
""" Initializes the loading animation widget. """
self.parent = parent
spinner = Spinner(parent.controller.app.aio_loop, style="dots")
spinner = Spinner(style="dots")
spinner.start()
text = _("Checking Ubuntu Pro subscription...")
button = cancel_btn(label=_("Cancel"), on_press=self.cancel)

View File

@ -196,8 +196,7 @@ class TuiApplication(Application):
def show_load():
nonlocal ld
ld = LoadingDialog(
self.ui.body, self.aio_loop, message, task_to_cancel)
ld = LoadingDialog(self.ui.body, message, task_to_cancel)
self.ui.body.show_overlay(ld, width=ld.width)
def hide_load():

View File

@ -13,6 +13,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import asyncio
from urwid import (
Text,
)
@ -32,28 +34,28 @@ styles = {
class Spinner(Text):
def __init__(self, aio_loop=None, style='spin', align='center'):
self.aio_loop = aio_loop
def __init__(self, style='spin', align='center'):
self.spin_index = 0
self.spin_text = styles[style]['texts']
self.rate = styles[style]['rate']
super().__init__('', align=align)
self.handle = None
self._spin_task = None
def spin(self):
self.spin_index = (self.spin_index + 1) % len(self.spin_text)
self.set_text(self.spin_text[self.spin_index])
def _advance(self):
self.spin()
self.handle = self.aio_loop.call_later(self.rate, self._advance)
async def _spin(self):
while True:
self.spin()
await asyncio.sleep(self.rate)
def start(self):
self.stop()
self._advance()
self._spin_task = asyncio.create_task(self._spin())
def stop(self):
self.set_text('')
if self.handle is not None:
self.handle.cancel()
self.handle = None
if self._spin_task is not None:
self._spin_task.cancel()
self._spin_task = None

View File

@ -367,9 +367,9 @@ class SomethingFailed(Stretchy):
class LoadingDialog(WidgetWrap):
def __init__(self, parent, aio_loop, msg, task_to_cancel):
def __init__(self, parent, msg, task_to_cancel):
self.parent = parent
self.spinner = Spinner(aio_loop, style='dots')
self.spinner = Spinner(style='dots')
self.spinner.start()
self.closed = False
# | text |

View File

@ -168,8 +168,7 @@ class NetworkDeviceTable(WidgetWrap):
address_info.extend(
[(label, Text(addr)) for addr in addrs])
elif dhcp_status.state == DHCPState.PENDING:
s = Spinner(
self.parent.controller.app.aio_loop, align='left')
s = Spinner(align='left')
s.rate = 0.3
s.start()
address_info.append((label, s))
@ -339,7 +338,7 @@ class NetworkView(BaseView):
)
def show_apply_spinner(self):
s = Spinner(self.controller.app.aio_loop)
s = Spinner()
s.start()
c = TablePile([
TableRow([