mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 22:42:25 -04:00
handle mtime/usn bump in backend, and tweak integer sizes
This commit is contained in:
parent
7a56d18539
commit
7f16f436c3
5 changed files with 33 additions and 32 deletions
|
@ -385,14 +385,14 @@ message Card {
|
|||
sint32 usn = 6;
|
||||
uint32 ctype = 7;
|
||||
sint32 queue = 8;
|
||||
int64 due = 9;
|
||||
int64 ivl = 10;
|
||||
sint32 due = 9;
|
||||
uint32 ivl = 10;
|
||||
uint32 factor = 11;
|
||||
int64 reps = 12;
|
||||
int64 lapses = 13;
|
||||
int64 left = 14;
|
||||
int64 odue = 15;
|
||||
uint32 reps = 12;
|
||||
uint32 lapses = 13;
|
||||
uint32 left = 14;
|
||||
sint32 odue = 15;
|
||||
int64 odid = 16;
|
||||
int64 flags = 17;
|
||||
uint32 flags = 17;
|
||||
string data = 18;
|
||||
}
|
||||
|
|
|
@ -82,28 +82,23 @@ class Card:
|
|||
self.flags = c.flags
|
||||
self.data = c.data
|
||||
|
||||
def _preFlush(self) -> None:
|
||||
hooks.card_will_flush(self)
|
||||
self.mod = intTime()
|
||||
self.usn = self.col.usn()
|
||||
# bug check
|
||||
def _bugcheck(self) -> None:
|
||||
if (
|
||||
self.queue == QUEUE_TYPE_REV
|
||||
and self.odue
|
||||
and not self.col.decks.isDyn(self.did)
|
||||
):
|
||||
hooks.card_odue_was_invalid()
|
||||
assert self.due < 4294967296
|
||||
|
||||
def flush(self) -> None:
|
||||
self._preFlush()
|
||||
self._bugcheck()
|
||||
hooks.card_will_flush(self)
|
||||
# mtime & usn are set by backend
|
||||
card = BackendCard(
|
||||
id=self.id,
|
||||
nid=self.nid,
|
||||
did=self.did,
|
||||
ord=self.ord,
|
||||
mtime=self.mod,
|
||||
usn=self.usn,
|
||||
ctype=self.type,
|
||||
queue=self.queue,
|
||||
due=self.due,
|
||||
|
|
|
@ -637,8 +637,8 @@ impl Backend {
|
|||
}
|
||||
|
||||
fn update_card(&self, pbcard: pb::Card) -> Result<()> {
|
||||
let card = pbcard_to_native(pbcard)?;
|
||||
self.with_col(|col| col.with_ctx(|ctx| ctx.storage.update_card(&card)))
|
||||
let mut card = pbcard_to_native(pbcard)?;
|
||||
self.with_col(|col| col.with_ctx(|ctx| ctx.update_card(&mut card)))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -751,7 +751,7 @@ fn card_to_pb(c: Card) -> pb::Card {
|
|||
left: c.left,
|
||||
odue: c.odue,
|
||||
odid: c.odid.0,
|
||||
flags: c.flags,
|
||||
flags: c.flags as u32,
|
||||
data: c.data,
|
||||
}
|
||||
}
|
||||
|
@ -778,7 +778,7 @@ fn pbcard_to_native(c: pb::Card) -> Result<Card> {
|
|||
left: c.left,
|
||||
odue: c.odue,
|
||||
odid: DeckID(c.odid),
|
||||
flags: c.flags,
|
||||
flags: c.flags as u8,
|
||||
data: c.data,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
|
||||
use crate::decks::DeckID;
|
||||
use crate::define_newtype;
|
||||
use crate::err::Result;
|
||||
use crate::notes::NoteID;
|
||||
use crate::{timestamp::TimestampSecs, types::Usn};
|
||||
use crate::{collection::RequestContext, timestamp::TimestampSecs, types::Usn};
|
||||
use num_enum::TryFromPrimitive;
|
||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||
|
||||
|
@ -48,15 +49,15 @@ pub struct Card {
|
|||
pub(crate) usn: Usn,
|
||||
pub(crate) ctype: CardType,
|
||||
pub(crate) queue: CardQueue,
|
||||
pub(crate) due: i64,
|
||||
pub(crate) ivl: i64,
|
||||
pub(crate) due: i32,
|
||||
pub(crate) ivl: u32,
|
||||
pub(crate) factor: u16,
|
||||
pub(crate) reps: i64,
|
||||
pub(crate) lapses: i64,
|
||||
pub(crate) left: i64,
|
||||
pub(crate) odue: i64,
|
||||
pub(crate) reps: u32,
|
||||
pub(crate) lapses: u32,
|
||||
pub(crate) left: u32,
|
||||
pub(crate) odue: i32,
|
||||
pub(crate) odid: DeckID,
|
||||
pub(crate) flags: i64,
|
||||
pub(crate) flags: u8,
|
||||
pub(crate) data: String,
|
||||
}
|
||||
|
||||
|
@ -84,3 +85,11 @@ impl Default for Card {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl RequestContext<'_> {
|
||||
pub fn update_card(&mut self, card: &mut Card) -> Result<()> {
|
||||
card.mtime = TimestampSecs::now();
|
||||
card.usn = self.storage.usn()?;
|
||||
self.storage.update_card(card)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -215,9 +215,7 @@ impl SqliteStorage {
|
|||
|
||||
pub(crate) struct StorageContext<'a> {
|
||||
pub(crate) db: &'a Connection,
|
||||
#[allow(dead_code)]
|
||||
server: bool,
|
||||
#[allow(dead_code)]
|
||||
usn: Option<Usn>,
|
||||
|
||||
timing_today: Option<SchedTimingToday>,
|
||||
|
@ -303,7 +301,6 @@ impl StorageContext<'_> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn usn(&mut self) -> Result<Usn> {
|
||||
if self.server {
|
||||
if self.usn.is_none() {
|
||||
|
@ -313,7 +310,7 @@ impl StorageContext<'_> {
|
|||
.query_row(NO_PARAMS, |row| row.get(0))?,
|
||||
);
|
||||
}
|
||||
Ok(*self.usn.as_ref().unwrap())
|
||||
Ok(self.usn.clone().unwrap())
|
||||
} else {
|
||||
Ok(Usn(-1))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue