fix speech view

This commit is contained in:
micialware committed 2026-07-03 13:06:14 +03:00
1 parent 731951ca75
commit e00e524b7a
19 files changed
+462 -15

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
(function(){let e=9223372036854775807n,t=-9223372036854775808n;var n=class extends Error{constructor(e,t){super(e),this.code=t}};function r(r){let a={},o=r._getSqliteFree(),s=r._malloc(8),c=[s,s+4];function l(e){if(typeof e!=`string`)return 0;let t=r.lengthBytesUTF8(e),n=r._sqlite3_malloc(t+1);return r.stringToUTF8(e,n,t+1),n}function u(e,t){return BigInt(t)<<32n|BigInt(e)&4294967295n}let d=(function(){let e=BigInt(2**53-1)>>32n,t=BigInt(-(2**53-1))>>32n;return function(n,r){return r>e||r<t?u(n,r):r*4294967296+(n&2147483647)-(n&2147483648)}})(),f=new Set;function p(e){if(!f.has(e))throw new n(`not a database`,21)}let m=new Map;function h(e){if(!m.has(e))throw new n(`not a statement`,21)}a.bind_collection=function(e,t){h(e);let n=Array.isArray(t),r=a.bind_parameter_count(e);for(let i=1;i<=r;++i){let r=t[n?i-1:a.bind_parameter_name(e,i)];r!==void 0&&a.bind(e,i,r)}return 0},a.bind=function(e,t,n){switch(h(e),typeof n){case`number`:return n===(n|0)?a.bind_int(e,t,n):a.bind_double(e,t,n);case`string`:return a.bind_text(e,t,n);default:return n instanceof Uint8Array||Array.isArray(n)?a.bind_blob(e,t,n):n===null?a.bind_null(e,t):typeof n==`bigint`?a.bind_int64(e,t,n):n===void 0?27:(console.warn(`unknown binding converted to null`,n),a.bind_null(e,t))}},a.bind_blob=(function(){let e=`sqlite3_bind_blob`,t=r.cwrap(e,...i(`nnnnn:n`));return function(n,i,a){h(n);let s=a.byteLength??a.length,c=r._sqlite3_malloc(s);return r.HEAPU8.subarray(c).set(a),v(e,t(n,i,c,s,o),m.get(n))}})(),a.bind_parameter_count=(function(){let e=r.cwrap(`sqlite3_bind_parameter_count`,...i(`n:n`));return function(t){return h(t),e(t)}})(),a.bind_double=(function(){let e=`sqlite3_bind_double`,t=r.cwrap(e,...i(`nnn:n`));return function(n,r,i){return h(n),v(e,t(n,r,i),m.get(n))}})(),a.bind_int=(function(){let e=`sqlite3_bind_int`,t=r.cwrap(e,...i(`nnn:n`));return function(n,r,i){return h(n),i>2147483647||i<-2147483648?25:v(e,t(n,r,i),m.get(n))}})(),a.bind_int64=(function(){let n=`sqlite3_bind_int64`,a=r.cwrap(n,...i(`nnnn:n`));return function(r,i,o){if(h(r),o>e||o<t)return 25;let s=o&4294967295n,c=o>>32n;return v(n,a(r,i,Number(s),Number(c)),m.get(r))}})(),a.bind_null=(function(){let e=`sqlite3_bind_null`,t=r.cwrap(e,...i(`nn:n`));return function(n,r){return h(n),v(e,t(n,r),m.get(n))}})(),a.bind_parameter_name=(function(){let e=r.cwrap(`sqlite3_bind_parameter_name`,...i(`n:s`));return function(t,n){return h(t),e(t,n)}})(),a.bind_text=(function(){let e=`sqlite3_bind_text`,t=r.cwrap(e,...i(`nnnnn:n`));return function(n,r,i){return h(n),v(e,t(n,r,l(i),-1,o),m.get(n))}})(),a.changes=(function(){let e=r.cwrap(`sqlite3_changes`,...i(`n:n`));return function(t){return p(t),e(t)}})(),a.close=(function(){let e=`sqlite3_close`,t=r.cwrap(e,...i(`n:n`),{async:!0});return async function(n){p(n);let r=await t(n);return f.delete(n),v(e,r,n)}})(),a.column=function(e,t){h(e);let i=a.column_type(e,t);switch(i){case 4:return a.column_blob(e,t);case 2:return a.column_double(e,t);case 1:return d(a.column_int(e,t),r.getTempRet0());case 5:return null;case 3:return a.column_text(e,t);default:throw new n(`unknown type`,i)}},a.column_blob=(function(){let e=r.cwrap(`sqlite3_column_blob`,...i(`nn:n`));return function(t,n){h(t);let i=a.column_bytes(t,n),o=e(t,n);return r.HEAPU8.subarray(o,o+i)}})(),a.column_bytes=(function(){let e=r.cwrap(`sqlite3_column_bytes`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_count=(function(){let e=r.cwrap(`sqlite3_column_count`,...i(`n:n`));return function(t){return h(t),e(t)}})(),a.column_double=(function(){let e=r.cwrap(`sqlite3_column_double`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_int=(function(){let e=r.cwrap(`sqlite3_column_int64`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.column_int64=(function(){let e=r.cwrap(`sqlite3_column_int64`,...i(`nn:n`));return function(t,n){return h(t),u(e(t,n),r.getTempRet0())}})(),a.column_name=(function(){let e=r.cwrap(`sqlite3_column_name`,...i(`nn:s`));return function(t,n){return h(t),e(t,n)}})(),a.column_names=function(e){let t=[],n=a.column_count(e);for(let r=0;r<n;++r)t.push(a.column_name(e,r));return t},a.column_text=(function(){let e=r.cwrap(`sqlite3_column_text`,...i(`nn:s`));return function(t,n){return h(t),e(t,n)}})(),a.column_type=(function(){let e=r.cwrap(`sqlite3_column_type`,...i(`nn:n`));return function(t,n){return h(t),e(t,n)}})(),a.create_function=function(e,t,i,a,o,s,c,l){if(p(e),s&&!c&&!l)return v(`sqlite3_create_function`,r.createFunction(e,t,i,a,o,s),e);if(!s&&c&&l)return v(`sqlite3_create_function`,r.createAggregate(e,t,i,a,o,c,l),e);throw new n(`invalid function combination`,21)},a.create_module=function(e,t,n,i){return p(e),v(`sqlite3_create_module`,r.createModule(e,t,n,i),e)},a.data_count=(function(){let e=r.cwrap(`sqlite3_data_count`,...i(`n:n`));return function(t){return h(t),e(t)}})(),a.declare_vtab=(function(){let e=r.cwrap(`sqlite3_declare_vtab`,...i(`ns:n`));return function(t,n){return v(`sqlite3_declare_vtab`,e(tLine truncated
`)):typeof readline==`function`&&(e=readline(),e!==null&&(e+=`
`)),!e){var t=null;break a}t=Array(N(e)+1),e=P(e,t,0,t.length),t.length=e,Ee=t}t=Ee.shift()}return t},tc(e,t){t===null||t===10?(f(j(e.Tb,0)),e.Tb=[]):t!=0&&e.Tb.push(t)},kc(e){e.Tb&&0<e.Tb.length&&(f(j(e.Tb,0)),e.Tb=[])},$c(){return{Wc:25856,Yc:5,Vc:191,Xc:35387,Uc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ad(){return 0},bd(){return[24,80]}},je={tc(e,t){t===null||t===10?(p(j(e.Tb,0)),e.Tb=[]):t!=0&&e.Tb.push(t)},kc(e){e.Tb&&0<e.Tb.length&&(p(j(e.Tb,0)),e.Tb=[])}};function Me(e,t){var n=e.Pb?e.Pb.length:0;n>=t||(t=Math.max(t,n*(1048576>n?2:1.125)>>>0),n!=0&&(t=Math.max(t,256)),n=e.Pb,e.Pb=new Uint8Array(t),0<e.Rb&&e.Pb.set(n.subarray(0,e.Rb),0))}var F={Xb:null,Wb(){return F.createNode(null,`/`,16895,0)},createNode(e,t,n,r){if((n&61440)==24576||(n&61440)==4096)throw new R(63);return F.Xb||={dir:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb,ec:F.Eb.ec,lc:F.Eb.lc,Dc:F.Eb.Dc,qc:F.Eb.qc,oc:F.Eb.oc,Cc:F.Eb.Cc,pc:F.Eb.pc},stream:{ac:F.Ob.ac}},file:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb},stream:{ac:F.Ob.ac,read:F.Ob.read,write:F.Ob.write,wc:F.Ob.wc,mc:F.Ob.mc,nc:F.Ob.nc}},link:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb,ic:F.Eb.ic},stream:{}},xc:{node:{Vb:F.Eb.Vb,Sb:F.Eb.Sb},stream:Je}},n=He(e,t,n,r),V(n.mode)?(n.Eb=F.Xb.dir.node,n.Ob=F.Xb.dir.stream,n.Pb={}):(n.mode&61440)==32768?(n.Eb=F.Xb.file.node,n.Ob=F.Xb.file.stream,n.Rb=0,n.Pb=null):(n.mode&61440)==40960?(n.Eb=F.Xb.link.node,n.Ob=F.Xb.link.stream):(n.mode&61440)==8192&&(n.Eb=F.Xb.xc.node,n.Ob=F.Xb.xc.stream),n.timestamp=Date.now(),e&&(e.Pb[t]=n,e.timestamp=n.timestamp),n},Zc(e){return e.Pb?e.Pb.subarray?e.Pb.subarray(0,e.Rb):new Uint8Array(e.Pb):new Uint8Array},Eb:{Vb(e){var t={};return t.Jc=(e.mode&61440)==8192?e.id:1,t.Ac=e.id,t.mode=e.mode,t.Pc=1,t.uid=0,t.Mc=0,t.hc=e.hc,V(e.mode)?t.size=4096:(e.mode&61440)==32768?t.size=e.Rb:(e.mode&61440)==40960?t.size=e.link.length:t.size=0,t.Fc=new Date(e.timestamp),t.Oc=new Date(e.timestamp),t.Ic=new Date(e.timestamp),t.Gc=4096,t.Hc=Math.ceil(t.size/t.Gc),t},Sb(e,t){if(t.mode!==void 0&&(e.mode=t.mode),t.timestamp!==void 0&&(e.timestamp=t.timestamp),t.size!==void 0&&(t=t.size,e.Rb!=t))if(t==0)e.Pb=null,e.Rb=0;else{var n=e.Pb;e.Pb=new Uint8Array(t),n&&e.Pb.set(n.subarray(0,Math.min(t,e.Rb))),e.Rb=t}},ec(){throw Re[44]},lc(e,t,n,r){return F.createNode(e,t,n,r)},Dc(e,t,n){if(V(e.mode)){try{var r=B(t,n)}catch{}if(r)for(var i in r.Pb)throw new R(55)}delete e.parent.Pb[e.name],e.parent.timestamp=Date.now(),e.name=n,t.Pb[n]=e,t.timestamp=e.parent.timestamp,e.parent=t},qc(e,t){delete e.Pb[t],e.timestamp=Date.now()},oc(e,t){var n=B(e,t),r;for(r in n.Pb)throw new R(55);delete e.Pb[t],e.timestamp=Date.now()},Cc(e){var t=[`.`,`..`],n;for(n in e.Pb)e.Pb.hasOwnProperty(n)&&t.push(n);return t},pc(e,t,n){return e=F.createNode(e,t,41471,0),e.link=n,e},ic(e){if((e.mode&61440)!=40960)throw new R(28);return e.link}},Ob:{read(e,t,n,r,i){var a=e.node.Pb;if(i>=e.node.Rb)return 0;if(e=Math.min(e.node.Rb-i,r),8<e&&a.subarray)t.set(a.subarray(i,i+e),n);else for(r=0;r<e;r++)t[n+r]=a[i+r];return e},write(e,t,n,r,i,a){if(t.buffer===y.buffer&&(a=!1),!r)return 0;if(e=e.node,e.timestamp=Date.now(),t.subarray&&(!e.Pb||e.Pb.subarray)){if(a)return e.Pb=t.subarray(n,n+r),e.Rb=r;if(e.Rb===0&&i===0)return e.Pb=t.slice(n,n+r),e.Rb=r;if(i+r<=e.Rb)return e.Pb.set(t.subarray(n,n+r),i),r}if(Me(e,i+r),e.Pb.subarray&&t.subarray)e.Pb.set(t.subarray(n,n+r),i);else for(a=0;a<r;a++)e.Pb[i+a]=t[n+a];return e.Rb=Math.max(e.Rb,i+r),r},ac(e,t,n){if(n===1?t+=e.position:n===2&&(e.node.mode&61440)==32768&&(t+=e.node.Rb),0>t)throw new R(28);return t},wc(e,t,n){Me(e.node,t+n),e.node.Rb=Math.max(e.node.Rb,t+n)},mc(e,t,n,r,i){if((e.node.mode&61440)!=32768)throw new R(43);if(e=e.node.Pb,i&2||e.buffer!==y.buffer){if((0<n||n+t<e.length)&&(e=e.subarray?e.subarray(n,n+t):Array.prototype.slice.call(e,n,n+t)),n=!0,t=65536*Math.ceil(t/65536),(i=An(65536,t))?(b.fill(0,i,i+t),t=i):t=0,!t)throw new R(48);y.set(e,t)}else n=!1,t=e.byteOffset;return{Qc:t,Ec:n}},nc(e,t,n,r){return F.Ob.write(e,t,0,r,n,!1),0}}},Ne=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},Pe=null,Fe={},I=[],Ie=1,L=null,Le=!0,R=null,Re={};function z(e,t={}){if(e=Te(e),!e)return{path:``,node:null};if(t=Object.assign({yc:!0,uc:0},t),8<t.uc)throw new R(32);e=e.split(`/`).filter(e=>!!e);for(var n=Pe,r=`/`,i=0;i<e.length;i++){var a=i===e.length-1;if(a&&t.parent)break;if(n=B(n,e[i]),r=M(r+`/`+e[i]),n.bc&&(!a||a&&t.yc)&&(n=n.bc.root),!a||t.$b){for(a=0;(n.mode&61440)==40960;)if(n=tt(r),r=Te(xe(r),n),n=z(r,{uc:t.uc+1}).node,40<a++)throw new R(32)}}return{path:r,node:n}}function ze(e){for(var t;;){if(e===e.parent)return e=e.Wb.Bc,t?e[e.length-1]===`/`?e+t:`${e}/${t}`:e;t=t?`${e.name}/${t}`:e.name,e=e.parent}}function Be(e,t){for(var n=0,r=0;r<t.length;r++)n=(n<<5)-n+t.charCodeAt(r)|0;return(e+n>>>0)%L.length}function Ve(e){var t=Be(e.parent.id,e.name);if(L[t]===e)L[t]=e.cc;else for(t=L[t];t;){if(t.cc===e){t.cc=e.cc;break}t=t.cc}}function B(e,t){var n;if(n=(n=H(e,`x`))?n:e.Eb.ec?0:2)throw new R(n,e);for(n=L[Be(e.id,t)];n;n=n.cc){var Line truncated
create table if not exists card_set
(
id INTEGER primary key autoincrement,
name TEXT not null,
forward TEXT not null,
backward TEXT not null,
filter TEXT not null
);
create table if not exists settings
(
id text primary key,
value text
);
create table if not exists word_group
(
id INTEGER primary key autoincrement,
name TEXT not null
);
create table if not exists words
(
id INTEGER primary key autoincrement,
key TEXT not null,
value TEXT not null,
tags TEXT not null,
more TEXT,
group_id integer default 1 not null
constraint words_word_group_id_fk references word_group on update cascade on delete cascade
);
create table if not exists card_stats
(
id INTEGER primary key autoincrement,
word_id INTEGER not null references words on delete cascade,
set_id TEXT not null references card_set on delete cascade,
score INTEGER default 1 not null,
last_opened integer not null
);
`.split(`;`).map(e=>e.trim()).filter(e=>e.length>0);for(let t of e)await d.exec(f,t+`;`)}self.onmessage=async e=>{let{type:t,id:n,sql:r,params:i}=e.data;try{switch(t){case`init`:await h(),await g(),self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`execute`:{if(!d||f===null)throw Error(`БД не инициализирована`);let e=await d.execWithParams(f,r,i);self.postMessage({type:`result`,id:n,ok:!0,data:e.rows});break}case`executeVoid`:if(!d||f===null)throw Error(`БД не инициализирована`);await d.run(f,r,i),self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`closeDb`:d&&f!==null&&(await d.close(f),f=null),p&&=(await p.close(),null),m=!1,self.postMessage({type:`result`,id:n,ok:!0,data:null});break;case`getFile`:{let e=await(await(await(await navigator.storage.getDirectory()).getFileHandle(`japanese_app.db`)).getFile()).arrayBuffer();self.postMessage({type:`result`,id:n,ok:!0,data:e},{transfer:[e]});break}case`replaceFile`:{d&&f!==null&&(await d.close(f),f=null),p&&=(await p.close(),null),m=!1;let e=await(await(await navigator.storage.getDirectory()).getFileHandle(`japanese_app.db`,{create:!0})).createSyncAccessHandle();try{let t=new Uint8Array(i);e.truncate(0),e.write(t,{at:0}),e.flush()}finally{e.close()}await h(),self.postMessage({type:`result`,id:n,ok:!0,data:null});break}default:throw Error(`Неизвестный тип сообщения: ${t}`)}}catch(e){self.postMessage({type:`result`,id:n,ok:!1,error:e.message})}}})();