Пример #1
0
    def _refresh_my_replays(self) -> None:
        assert self._columnwidget is not None
        for child in self._columnwidget.get_children():
            child.delete()
        t_scale = 1.6
        try:
            names = os.listdir(_ba.get_replays_dir())
            # ignore random other files in there..
            names = [n for n in names if n.endswith('.brp')]
            names.sort(key=lambda x: x.lower())
        except Exception:
            ba.print_exception('Error listing replays dir.')
            names = []

        assert self._my_replays_scroll_width is not None
        assert self._my_replays_watch_replay_button is not None
        for i, name in enumerate(names):
            txt = ba.textwidget(
                parent=self._columnwidget,
                size=(self._my_replays_scroll_width / t_scale, 30),
                selectable=True,
                color=(1.0, 1, 0.4) if name == '__lastReplay.brp' else
                (1, 1, 1),
                always_highlight=True,
                on_select_call=ba.Call(self._on_my_replay_select, name),
                on_activate_call=self._my_replays_watch_replay_button.activate,
                text=self._get_replay_display_name(name),
                h_align='left',
                v_align='center',
                corner_scale=t_scale,
                maxwidth=(self._my_replays_scroll_width / t_scale) * 0.93)
            if i == 0:
                ba.widget(edit=txt, up_widget=self._tab_buttons['my_replays'])
Пример #2
0
 def _export_my_replay(self) -> None:
     if self._my_replay_selected is None:
         self._no_replay_selected_error()
         return
     replay = self._my_replay_selected
     user_dir = _ba.app.python_directory_user
     try:
         if replay != '__lastReplay.brp':
             export_dir = (user_dir + '/replays')
             if not os.path.exists(export_dir):
                 os.mkdir(export_dir)
             old_name_full = (_ba.get_replays_dir() + '/' + replay)
             new_name_full = (export_dir + '/' + replay)
             if os.path.exists(new_name_full):
                 ba.playsound(ba.getsound('error'))
                 ba.screenmessage((f"A replay with '{replay[:-4]}' name "
                                   'already exists in folder'),
                                  color=(1, 0, 0))
             else:
                 copyfile(old_name_full, new_name_full)
                 self._refresh_my_replays()
                 ba.playsound(ba.getsound('gunCocking'))
                 ba.screenmessage(f"Successfully Exported '{replay[:-4]}'",
                                  color=(0, 1, 0))
         else:
             ba.playsound(ba.getsound('error'))
             ba.screenmessage(
                 "Cannot Export 'Last Game Replay'. Please rename it",
                 color=(1, 0, 0))
     except Exception as _:
         ba.screenmessage(f'{_}', color=(1, 0, 0))
         ba.playsound(ba.getsound('error'))
Пример #3
0
 def _import_my_replay(self, replay_path: str = None) -> None:
     try:
         # Handling corner-case if user presses
         # cancel button in the file selector
         if not isinstance(replay_path, str):
             return
         old_name_full = replay_path
         i = replay_path.rfind('/')
         replay_name = (replay_path[i + 1:-4] + '.brp')
         new_name_full = (_ba.get_replays_dir() + '/' + replay_name)
         if os.path.exists(new_name_full):
             ba.playsound(ba.getsound('error'))
             ba.screenmessage(
                 f"A replay with '{replay_name[:-4]}' name already exists",
                 color=(1, 0, 0))
         else:
             copyfile(old_name_full, new_name_full)
             self._refresh_my_replays()
             ba.playsound(ba.getsound('gunCocking'))
             ba.screenmessage(f"Successfully Imported '{replay_name[:-4]}'",
                              color=(0, 1, 0))
     except Exception as _:
         ba.screenmessage(f'{_}', color=(1, 0, 0))
         ba.playsound(ba.getsound('error'))
     return
Пример #4
0
    def _rename_my_replay(self, replay: str) -> None:
        new_name = None
        try:
            if not self._my_replay_rename_text:
                return
            new_name_raw = cast(
                str, ba.textwidget(query=self._my_replay_rename_text))
            new_name = new_name_raw + '.brp'

            # Ignore attempts to change it to what it already is
            # (or what it looks like to the user).
            if (replay != new_name
                    and self._get_replay_display_name(replay) != new_name_raw):
                old_name_full = (_ba.get_replays_dir() + '/' +
                                 replay).encode('utf-8')
                new_name_full = (_ba.get_replays_dir() + '/' +
                                 new_name).encode('utf-8')
                # False alarm; ba.textwidget can return non-None val.
                # pylint: disable=unsupported-membership-test
                if os.path.exists(new_name_full):
                    ba.playsound(ba.getsound('error'))
                    ba.screenmessage(
                        ba.Lstr(resource=self._r +
                                '.replayRenameErrorAlreadyExistsText'),
                        color=(1, 0, 0))
                elif any(char in new_name_raw for char in ['/', '\\', ':']):
                    ba.playsound(ba.getsound('error'))
                    ba.screenmessage(ba.Lstr(resource=self._r +
                                             '.replayRenameErrorInvalidName'),
                                     color=(1, 0, 0))
                else:
                    _ba.increment_analytics_count('Replay rename')
                    os.rename(old_name_full, new_name_full)
                    self._refresh_my_replays()
                    ba.playsound(ba.getsound('gunCocking'))
        except Exception:
            ba.print_exception(
                f"Error renaming replay '{replay}' to '{new_name}'.")
            ba.playsound(ba.getsound('error'))
            ba.screenmessage(
                ba.Lstr(resource=self._r + '.replayRenameErrorText'),
                color=(1, 0, 0),
            )

        ba.containerwidget(edit=self._my_replays_rename_window,
                           transition='out_scale')
Пример #5
0
 def _delete_replay(self, replay: str) -> None:
     try:
         _ba.increment_analytics_count('Replay delete')
         os.remove((_ba.get_replays_dir() + '/' + replay).encode('utf-8'))
         self._refresh_my_replays()
         ba.playsound(ba.getsound('shieldDown'))
         if replay == self._my_replay_selected:
             self._my_replay_selected = None
     except Exception:
         ba.print_exception("exception deleting replay '" + replay + "'")
         ba.playsound(ba.getsound('error'))
         ba.screenmessage(ba.Lstr(resource=self._r +
                                  '.replayDeleteErrorText'),
                          color=(1, 0, 0))
Пример #6
0
 def do_it() -> None:
     try:
         # reset to normal speed
         _ba.set_replay_speed_exponent(0)
         _ba.fade_screen(True)
         assert self._my_replay_selected is not None
         _ba.new_replay_session(_ba.get_replays_dir() + '/' +
                                self._my_replay_selected)
     except Exception:
         ba.print_exception('exception running replay session')
         # drop back into a fresh main menu session
         # in case we half-launched or something..
         from bastd import mainmenu
         _ba.new_host_session(mainmenu.MainMenuSession)
Пример #7
0
def get_upload_path() -> str:
    from _ba import get_replays_dir
    return get_replays_dir()
Пример #8
0
def get_upload_path() -> str:
    return get_replays_dir()