PageSourceSearch

https://snich.ai/assets/RecordingsPage-af4b87f0.js

js snich.ai collected 2026-10-05 15:07:40 UTC 14,834 bytes, 1 lines download raw bytes

1import{r as i,j as s,b as gs,a as ts,L as Y}from"./vendor-react-72e4a099.js";import{u as js,b as rs,B as S,I as fs,M as is,d as ys}from"./Toast-43ee7788.js";import{b as Ns,C as $,E as q,a as E,T as I}from"./Display-48adcc24.js";import{C as bs}from"./Controls-5a18fd37.js";import{e as V}from"./api-d8a57490.js";import{b as os,j as Z,a as vs}from"./format-5039f022.js";import{u as Ss}from"./CabinetContext-31fc5321.js";import{r as k}from"./buildLifecycle-a44b0e05.js";import{m as ss,r as F,b as ws,s as Cs}from"./api-9e8c3e2c.js";import{R as ls}from"./radio-dc3b7f8c.js";import{V as cs}from"./video-a08888e9.js";import{S as Is,R as $s}from"./RenameModal-60dde6d5.js";/* empty css                   */import{S as P}from"./sparkles-e0558c3e.js";import{S as es}from"./search-01fb0df0.js";import{A as ks}from"./arrow-down-5480e148.js";import{C as Bs}from"./chevron-down-888c3b30.js";import{F as _}from"./film-0ba9e353.js";import{X as Ms}from"./x-b9f3d093.js";import{T as ms}from"./trash-2-7a739e24.js";import{T as ns}from"./type-c9e8ec6d.js";import{L as Ts}from"./link-2-36909ef8.js";import{D as Rs}from"./download-3e69fd6b.js";import{R as Ls}from"./refresh-cw-98362cea.js";import{E as zs}from"./ellipsis-bbf71637.js";import{P as Es}
1from"./pen-line-729408c9.js";import"./createLucideIcon-581cd729.js";import"./eye-5711d0dd.js";import"./circle-check-63b159d4.js";import"./circle-alert-67975319.js";import"./check-083433f7.js";import"./copy-34f4069e.js";import"./users-a990a1e8.js";import"./building-2-4f0d39c1.js";import"./globe-e09c7f1b.js";function Fs({src:e,faces:l=[],kind:d,alt:h=""}){const[y,N]=i.useState(!1),j=ss(e);if(j&&!y)return s.jsx("img",{className:"sn-rec-poster-img",src:j,alt:h,loading:"lazy",onError:()=>N(!0)});const c=l.slice(0,3);return c.length?s.jsx("span",{className:"sn-rec-gen",style:{gridTemplateColumns:`repeat(${c.length}, minmax(0, 1fr))`},"aria-hidden":"true",children:c.map((r,f)=>s.jsxs("span",{className:"sn-rec-gen-tile",children:[s.jsx(Ns,{name:r.name,src:ss(r.avatarUrl),size:c.length===1?72:52}),s.jsx("span",{className:"sn-rec-gen-name",children:r.name})]},`${r.name}-${f}`))}):s.jsx("span",{className:"sn-rec-gen",style:{gridTemplateColumns:"1fr"},"aria-hidden":"true",children:s.jsx("span",{className:"sn-rec-gen-tile",children:s.jsxs("span",{className:"sn-rec-gen-kind",children:[d==="broadcast"?s.jsx(ls,{className:"sn-i sn-i-24"}):s.jsx(cs,{className:"sn-i sn-i-24"}),d==="broadcast"?"Трансляция":"Встреча"]})})})}const O={new:"Сначала новые",old:"Сначала старые",duration:"По длительности"};function Ps(e){const l=Math.max(0,Math.round(e)),d=Math.floor(l/3600),h=Math.floor(l%3600/60),y=l%60;return d?`${d}:${String(h).padStart(2,"0")}:${String(y).padStart(2,"0")}`:`${String(h).padStart(2,"0")}:${String(y).padStart(2,"0")}`}function as(e){const l=e/1073741824;return l===0?"0":l<.1?"0,1":l<10?l.toFixed(1).replace(".",","):String(Math.round(l))}function Ne(){const{workspace:e,workspaceLoading:l}=Ss(),[d,h]=gs(),y=ts(),N=js(),j=["all","broadcast","meeting","summary"].includes(d.get("type")||"")?d.get("type"):"all",c=["new","old","duration"].includes(d.get("sort")||"")?d.get("sort"):"new",r=d.get("q")||"",[f,B]=i.useState(r),[m,p]=i.useState(null),[o,M]=i.useState(null),[x,H]=i.useState(!0),[A,W]=i.useState(null),[g,X]=i.useState(null),[T,G]=i.useState(null),[b,D]=i.useState(null),[ds,J]=i.useState(null),w=rs(),R=i.useRef(0),L=i.useCallback((n,a)=>{h(t=>{const C=new URLSearchParams(t);return a&&!(n==="type"&&a==="all")&&!(n==="sort"&&a==="new")?C.set(n,a):C.delete(n),C},{replace:!0})},[h]);i.useEffect(()=>{const n=window.setTimeout(()=>{f.trim()!==r&&L("q",f.trim()||null)},300);return()=>window.clearTimeout(n)},[f,r,L]);const v=i.useCallback(async()=>{if(l)return;const n=++R.current;H(!0),W(null);try{const a=await F.list({workspaceId:e==null?void 0:e.id,type:j,sort:c,q:r||void 0});n===R.current&&p(a)}catch(a){n===R.current&&W(V(a,"Не удалось загрузить записи"))}finally{n===R.current&&H(!1)}},[e==null?void 0:e.id,l,j,c,r]);i.useEffect(()=>{v()},[v]);const U=i.useCallback(()=>{e!=null&&e.id&&F.storage(e.id).then(M).catch(()=>M(null))},[e==null?void 0:e.id]);i.useEffect(()=>{U()},[U]);const K=!!(m!=null&&m.items.some(n=>n.processing));i.useEffect(()=>{if(!K)return;const n=window.setInterval(()=>{v()},2e4);return()=>window.clearInterval(n)},[K,v]);const us=async n=>{J(n.roomId);try{await F.regenerate(n.roomId),N.success("Итоги готовы",{action:{label:"Открыть",onClick:()=>y(k.recording(n.roomId))}}),await v()}catch(a){N.error(V(a,"Не удалось сделать итоги"))}finally{J(null)}},hs=async n=>{try{const a=await F.remove(n.roomId);p(t=>t&&{...t,items:t.items.filter(C=>C.roomId!==n.roomId),total:t.total-1,counts:{all:t.counts.all-1,broadcast:t.counts.broadcast-(n.kind==="broadcast"?1:0),meeting:t.counts.meeting-(n.kind==="meeting"?1:0),summary:t.counts.summary-(n.summary.status==="ready"?1:0)}}),N.success(a.freedBytes>0?`Запись удалена · освободили ${Z(a.freedBytes)}`:"Запись удалена"),U(),D(null)}catch(a){N.error(V(a,"Не удалось удалить запись"))}},u=m==null?void 0:m.counts,ps=[{value:"all",label:"Все",count:u==null?void 0:u.all},{value:"broadcast",label:"Трансляции",count:u==null?void 0:u.broadcast},{value:"meeting",label:"Встречи",count:u==null?void 0:u.meeting},{value:"summary",label:"С итогами",icon:s.jsx(P,{className:"sn-i sn-i-16",style:{color:"var(--sn-blue)"}}),count:u==null?void 0:u.summary}],z=o!=null&&o.limitBytes?Math.min(100,o.usedBytes/o.limitBytes*100):0,Q=(m==null?void 0:m.items)||[],xs=!x&&!A&&m&&m.counts.all===0&&!r;return s.jsxs("div",{className:"sn-rec-page sn-rec-scope",children:[s.jsxs("div",{className:"sn-rec-head",children:[s.jsx("h1",{className:"sn-display",children:"Записи и итоги"}),o&&s.jsxs("div",{className:"sn-rec-storage",children:[s.jsxs("div",{className:"sn-rec-storage-meter",children:[s.jsxs("div",{children:[s.jsx("span",{style:{fontWeight:600},children:"Хранилище"}),s.jsxs("span",{children:[s.jsx("span",{className:"sn-mono",children:as(o.usedBytes)}),o.limitBytes?s.jsxs(s.Fragment,{children:[" из ",s.jsx("span",{className:"sn-mono",children:as(o.limitBytes)})," ГБ"]}):" ГБ · без ограничений"]})]}),o.limitBytes?s.jsx("span",{className:`sn-rec-bar${z>=95?" is-full":z>=80?" is-warn":""}`,role:"progressbar","aria-label":"Занято в хранилище","aria-valuenow":Math.round(z),"aria-valuemin":0,"aria-valuemax":100,children:s.jsx("span",{style:{width:`${Math.max(z,o.usedBytes?1.5:0)}%`}})}):null]}),o.limitBytes?s.jsx(S,{variant:"quiet",size:"sm",to:k.settingsBilling(),children:"Увеличить"}):null]})]}),s.jsxs("div",{className:"sn-rec-toolbar",children:[s.jsx("div",{className:"sn-rec-filters",role:"group","aria-label":"Тип записи",children:ps.map(n=>s.jsxs("button",{type:"button",className:"sn-rec-filter","aria-pressed":j===n.value,onClick:()=>
1L("type",n.value),children:[n.icon,n.label,n.count!==void 0&&s.jsx("span",{className:"sn-mono",children:n.count})]},n.value))}),s.jsx("div",{className:"sn-rec-spacer"}),s.jsx("div",{className:"sn-rec-search",children:s.jsx(fs,{inputSize:"sm",type:"search","aria-label":"Поиск по записям и расшифровкам",placeholder:"Найти в записях и расшифровках",icon:s.jsx(es,{className:"sn-i sn-i-16"}),value:f,onChange:n=>B(n.target.value)})}),s.jsx(S,{variant:"text",size:"sm",icon:s.jsx(ks,{className:"sn-i sn-i-16"}),iconRight:s.jsx(Bs,{className:"sn-i sn-i-16"}),onClick:w.toggle,"aria-haspopup":"menu","aria-expanded":w.open,children:O[c]}),s.jsx(is,{open:w.open,onClose:w.close,anchor:w.anchor,width:220,items:Object.keys(O).map(n=>({label:O[n],checked:n===c,onSelect:()=>L("sort",n)}))})]}),A?s.jsx($,{pad:!0,children:s.jsx(q,{icon:s.jsx(_,{className:"sn-i sn-i-24"}),title:"Не удалось загрузить записи",action:s.jsx(S,{variant:"quiet",onClick:()=>v(),children:"Повторить"}),children:A})}):x&&!m?s.jsx("div",{className:"sn-rec-grid","aria-busy":"true",children:Array.from({length:6}).map((n,a)=>s.jsxs($,{className:"sn-rec-card",children:[s.jsx(E,{height:0,style:{aspectRatio:"16 / 9",height:"auto"},radius:0}),s.jsxs("div",{className:"sn-rec-card-body",children:[s.jsx(E,{width:"70%",height:18}),s.jsx(E,{width:"85%",height:14,style:{marginTop:6}}),s.jsx(E,{width:140,height:24,radius:12,style:{marginTop:10}})]})]},a))}):xs?s.jsx($,{pad:!0,children:s.jsx(q,{icon:s.jsx(_,{className:"sn-i sn-i-24"}),title:"Здесь появятся записи и итоги",action:s.jsx(S,{variant:"primary",to:k.events(),children:"К эфирам и встречам"}),children:"Включите запись во встрече или эфире. После завершения здесь будут видео, расшифровка, AI-итоги и задачи для участников."})}):Q.length===0?s.jsx($,{pad:!0,children:s.jsx(q,{icon:s.jsx(es,{className:"sn-i sn-i-24"}),title:r?`По запросу «${r}» ничего не нашлось`:"В этом разделе пока пусто",action:s.jsx(S,{variant:"quiet",icon:s.jsx(Ms,{className:"sn-i sn-i-16"}),onClick:()=>{B(""),h(new URLSearchParams,{replace:!0})},children:"Сбросить фильтры"}
1),children:r?"Ищем по названиям, расшифровкам и итогам. Попробуйте другое слово.":"Выберите другой фильтр."})}):s.jsx("div",{className:"sn-rec-grid","aria-busy":x||void 0,children:Q.map(n=>s.jsx(As,{card:n,summarizing:ds===n.roomId,onShare:()=>X(n),onRename:()=>G(n),onDelete:()=>D(n),onSummarize:()=>us(n)},n.roomId))}),g&&s.jsx(Is,{open:!0,onClose:()=>X(null),roomId:g.roomId,title:g.title,subtitle:`${g.title} · ${os(g.date).toLowerCase()}${g.durationSeconds?`, ${Math.max(1,Math.round(g.durationSeconds/60))} мин`:""}`,participantsCount:g.audience.unit==="participants"?g.audience.count:void 0,workspaceName:e==null?void 0:e.name,onSaved:n=>p(a=>a&&{...a,items:a.items.map(t=>t.roomId===g.roomId?{...t,shareMode:n.mode}:t)})}),T&&s.jsx($s,{open:!0,onClose:()=>G(null),roomId:T.roomId,title:T.title,onRenamed:n=>p(a=>a&&{...a,items:a.items.map(t=>t.roomId===T.roomId?{...t,title:n}:t)})}),s.jsx(bs,{open:!!b,onClose:()=>D(null),onConfirm:()=>b?hs(b):void 0,title:"Удалить запись?",icon:s.jsx(ms,{className:"sn-i"}),description:b?`«${b.title}»: удалим видео, расшифровку, AI-итоги, задачи и загруженные файлы${b.recording.sizeBytes?` (${Z(b.recording.sizeBytes)})`:""}. Событие останется в «Эфирах и встречах». Отменить нельзя.`:void 0,confirmLabel:"Удалить запись"})]})}function As({card:e,summarizing:l,onShare:d,onRename:h,onDelete:y,onSummarize:N}){const j=ts(),c=rs(),r=k.recording(e.roomId),f=`${os(e.date)}, ${vs(e.date)}`,B=ws(e),m=e.kind==="broadcast"?"Трансляция":"Встреча",p=e.processing,o=[{label:"Открыть итоги",icon:s.jsx(P,{className:"sn-i"}),onSelect:()=>j(r)},{label:"Расшифровка",icon:s.jsx(ns,{className:"sn-i"}),disabled:!e.hasTranscript,description:e.hasTranscript?void 0:"Расшифровки нет",onSelect:()=>j(k.recordingTranscript(e.roomId))},{label:"Поделиться",icon:s.jsx(Ts,{className:"sn-i"}),onSelect:d},{label:"Скачать",icon:s.jsx(Rs,{className:"sn-i"}),disabled:!e.recording.downloadUrl,description:e.recording.downloadUrl?void 0:e.recording.status==="ready"?"Организатор не разрешил скачивание":"Файл записи ещё не готов",onSelect:()=>e.recording.downloadUrl&&Cs(e.recording.downloadUrl)}];e.canManage&&o.push({label:"Переименовать",icon:s.jsx(Es,{className:"sn-i"}),onSelect:h}),e.canDelete&&(o.push({type:"separator"}),o.push({label:"Удалить запись",icon:s.jsx(ms,{className:"sn-i"}),danger:!0,onSelect:y}));const M=s.jsxs(s.Fragment,{children:[s.jsx(Fs,{src:e.posterUrl,faces:e.faces,kind:e.kind}),p&&s.jsxs("span",{className:"sn-rec-overlay",children:[s.jsx("span",{className:"sn-rec-overlay-title",children:p.status==="recording"?"Идёт запись":"Готовим запись"}),s.jsx("span",{className:"sn-rec-indeterminate","aria-hidden":"true",children:s.jsx("span",{})}),s.jsx("span",{className:"sn-rec-overlay-hint",children:p.status==="recording"?"Файл появится после завершения":"Обычно это занимает пару минут"})]}),e.durationSeconds>0&&s.jsx("span",{className:"sn-rec-duration sn-mono",children:Ps(e.durationSeconds)})]});let x;return e.summary.status==="ready"?x=s.jsxs(I,{tone:"blue",icon:s.jsx(P,{className:"sn-i sn-i-14"}),children:["Итоги готовы",e.summary.tasks?` · ${e.summary.tasks} ${e.summary.tasks===1?"задача":e.summary.tasks<5?"задачи":"задач"}`:""]}):p?x=s.jsx(I,{tone:"amber",icon:s.jsx(Ls,{className:"sn-i sn-i-14"}),children:p.status==="recording"?"Идёт запись":"Обрабатывается"}):e.recording.status==="ready"||e.recording.status==="missing"?x=s.jsxs(s.Fragment,{children:[s.jsx(I,{tone:"gray",icon:s.jsx(_,{className:"sn-i sn-i-14"}),children:e.recording.status==="missing"?"Файл недоступен":"Только запись"}),e.hasTranscript&&e.canManage&&s.jsx(S,{variant:"text",size:"xs",icon:s.jsx(P,{className:"sn-i sn-i-16",style:{color:"var(--sn-blue)"}}),loading:l,onClick:N,style:{color:"var(--sn-blue)"},children:"Сделать итоги"})]}):e.hasTranscript?x=s.jsx(I,{tone:"gray",icon:s.jsx(ns,{className:"sn-i sn-i-14"}),children:"Только расшифровка"}):x=s.jsx(I,{tone:"gray",children:"Нет файлов"}),s.jsxs($,{as:"article",className:"sn-rec-card","aria-label":`${e.title}, ${f}`,children:[s.jsx(Y,{to:r,className:"sn-rec-card-thumb","aria-label":`Открыть «${e.title}»`,children:M}),s.jsxs("div",{className:"sn-rec-card-body",children:[s.jsx(Y,{to:r,className:"sn-rec-card-title",title:e.title,children:e.title}),s.jsxs("span",{className:"sn-rec-card-meta",children:[e.kind==="broadcast"?s.jsx(ls,{className:"sn-i sn-i-14"}):s.jsx(cs,{className:"sn-i sn-i-14"}
1),s.jsx("span",{children:[m,f,B].filter(Boolean).join(" · ")})]}),s.jsxs("div",{className:"sn-rec-card-foot",children:[x,s.jsx("div",{className:"sn-rec-spacer"}),s.jsx(ys,{label:`Действия с записью «${e.title}»`,size:"sm",onClick:c.toggle,"aria-haspopup":"menu","aria-expanded":c.open,style:{color:"var(--sn-ink-3)"},children:s.jsx(zs,{className:"sn-i"})}),s.jsx(is,{open:c.open,onClose:c.close,anchor:c.anchor,items:o,width:260})]})]})]})}export{Ne as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.