handle mtime/usn bump in backend, and tweak integer sizes

This commit is contained in:
Damien Elmes 2020-03-26 20:55:04 +10:00
parent 7a56d18539
commit 7f16f436c3
5 changed files with 33 additions and 32 deletions

View file

@ -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;
}

View file

@ -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,

View file

@ -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,
})
}

View file

@ -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)
}
}

View file

@ -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))
}