Beispiel #1
0
 def _entry_to_text(self, entry: LogEntryWithTime):
     if isinstance(entry.entry, str):
         txt = entry.entry
     elif isinstance(entry.entry, MediaSyncProgress):
         txt = self._logentry_to_text(entry.entry)
     else:
         assert_exhaustive(entry.entry)
     return self._time_and_text(entry.time, txt)
Beispiel #2
0
 def _interval_for_state(self, state: scheduler_pb2.SchedulingState) -> int:
     kind = state.WhichOneof("value")
     if kind == "normal":
         return self._interval_for_normal_state(state.normal)
     elif kind == "filtered":
         return self._interval_for_filtered_state(state.filtered)
     else:
         assert_exhaustive(kind)
         return 0  # unreachable
Beispiel #3
0
 def _start_recording(self) -> None:
     driver = self.mw.pm.recording_driver()
     if driver is RecordingDriver.PyAudio:
         self._recorder = PyAudioRecorder(self.mw, namedtmp("rec.wav"))
     elif driver is RecordingDriver.QtAudioInput:
         self._recorder = QtAudioInputRecorder(namedtmp("rec.wav"), self.mw,
                                               self._parent)
     else:
         assert_exhaustive(driver)
     self._recorder.start(self._start_timer)
Beispiel #4
0
 def _interval_for_filtered_state(
         self, filtered: scheduler_pb2.SchedulingState.Filtered) -> int:
     kind = filtered.WhichOneof("value")
     if kind == "preview":
         return filtered.preview.scheduled_secs
     elif kind == "rescheduling":
         return self._interval_for_normal_state(
             filtered.rescheduling.original_state)
     else:
         assert_exhaustive(kind)
         return 0  # unreachable
Beispiel #5
0
Datei: v3.py Projekt: v-limc/anki
 def _interval_for_normal_state(self, normal: _pb.SchedulingState.Normal) -> int:
     kind = normal.WhichOneof("value")
     if kind == "new":
         return 0
     elif kind == "review":
         return normal.review.scheduled_days * 86400
     elif kind == "learning":
         return normal.learning.scheduled_secs
     elif kind == "relearning":
         return normal.relearning.learning.scheduled_secs
     else:
         assert_exhaustive(kind)
         return 0  # unreachable
Beispiel #6
0
def _legacy_undo(*, parent: QWidget) -> None:
    from aqt import mw

    assert mw
    assert mw.col

    reviewing = mw.state == "review"
    just_refresh_reviewer = False

    result = mw.col.undo_legacy()

    if result is None:
        # should not happen
        showInfo("nothing to undo", parent=parent)
        mw.update_undo_actions()
        return

    elif isinstance(result, LegacyReviewUndo):
        name = tr.scheduling_review()

        if reviewing:
            # push the undone card to the top of the queue
            cid = result.card.id
            card = mw.col.get_card(cid)
            mw.reviewer.cardQueue.append(card)

            gui_hooks.review_did_undo(cid)

            just_refresh_reviewer = True

    elif isinstance(result, LegacyCheckpoint):
        name = result.name

    else:
        assert_exhaustive(result)
        assert False

    if just_refresh_reviewer:
        mw.reviewer.nextCard()
    else:
        # full queue+gui reset required
        mw.reset()

    tooltip(tr.undo_action_undone(action=name), parent=parent)
    gui_hooks.state_did_revert(name)
    mw.update_undo_actions()
Beispiel #7
0
 def get_queued_cards(
     self,
     *,
     fetch_limit: int = 1,
     intraday_learning_only: bool = False,
 ) -> Union[QueuedCards, CongratsInfo]:
     info = self.col._backend.get_queued_cards(
         fetch_limit=fetch_limit,
         intraday_learning_only=intraday_learning_only)
     kind = info.WhichOneof("value")
     if kind == "queued_cards":
         return info.queued_cards
     elif kind == "congrats_info":
         return info.congrats_info
     else:
         assert_exhaustive(kind)
         assert False
Beispiel #8
0
 def refresh_if_needed(self) -> None:
     if self._refresh_needed is RefreshNeeded.QUEUES:
         self.mw.col.reset()
         self.nextCard()
         self.mw.fade_in_webview()
         self._refresh_needed = None
     elif self._refresh_needed is RefreshNeeded.NOTE_TEXT:
         self._redraw_current_card()
         self.mw.fade_in_webview()
         self._refresh_needed = None
     elif self._refresh_needed is RefreshNeeded.FLAG:
         self.card.load()
         self._update_flag_icon()
         # for when modified in browser
         self.mw.fade_in_webview()
         self._refresh_needed = None
     elif self._refresh_needed:
         assert_exhaustive(self._refresh_needed)
Beispiel #9
0
 def _build_stage(self, root: SidebarItem, stage: SidebarStage) -> None:
     if stage is SidebarStage.SAVED_SEARCHES:
         self._saved_searches_tree(root)
     elif stage is SidebarStage.CARD_STATE:
         self._card_state_tree(root)
     elif stage is SidebarStage.TODAY:
         self._today_tree(root)
     elif stage is SidebarStage.FLAGS:
         self._flags_tree(root)
     elif stage is SidebarStage.DECKS:
         self._deck_tree(root)
     elif stage is SidebarStage.NOTETYPES:
         self._notetype_tree(root)
     elif stage is SidebarStage.TAGS:
         self._tag_tree(root)
     elif stage is SidebarStage.ROOT:
         pass
     else:
         assert_exhaustive(stage)