Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
66399e7
chore(cleanup): error handling
max-nextcloud Aug 18, 2026
6384469
chore(refactor): Introduce IContext and FileContext
max-nextcloud Aug 12, 2026
654ad7b
chore(refactor): simplify IContext API with helper classes
max-nextcloud Aug 15, 2026
e0d9f5f
chore(refactor): very basic registry for context factories
max-nextcloud Aug 15, 2026
e339417
chore(refactor): handle baseVersionEtag outside IContext
max-nextcloud Aug 15, 2026
da8026a
chore(refactor): introduce RegisterContextEvent
max-nextcloud Aug 16, 2026
f584081
chore(refactor): split open api functions
max-nextcloud Aug 16, 2026
7049964
enh(api): allow opening contexts of different types
max-nextcloud Aug 17, 2026
5b28b77
enh(db): add context to document
max-nextcloud Aug 18, 2026
afd0db0
chore(version): bump to run migration
max-nextcloud Aug 18, 2026
8c737dc
chore(refactor): store outside change in the DocumentSaveConflictExce…
max-nextcloud Aug 18, 2026
649a2de
enh(api): handle sync requests with context
max-nextcloud Aug 18, 2026
db2ed56
fix(attachments): get file via context
max-nextcloud Aug 18, 2026
eb23c42
fix(share): consider share token in ContextManager
max-nextcloud Aug 19, 2026
895f22f
fix(push): use context to check if file is readonly
max-nextcloud Aug 19, 2026
eefec87
enh(save): use context for saving
max-nextcloud Aug 19, 2026
719911b
chore(cleanup): redundant check for lock provider
max-nextcloud Aug 19, 2026
1badd4d
chore(tweak): return first editable file early
max-nextcloud Aug 19, 2026
f7e760d
fix(session): also consider `shareToken` parameter as used by Attachm…
max-nextcloud Aug 19, 2026
b38a574
fix(middleware): get fileId from context rather than documentId
max-nextcloud Aug 19, 2026
c61aa39
fix(share): get file from context for attachments
max-nextcloud Aug 19, 2026
0fb685c
fix(migration): migrate old document rows to new format
max-nextcloud Aug 19, 2026
c03a4f0
fix(db): migrations adding context type and id
max-nextcloud Aug 20, 2026
130cc4b
fix(api): Unlock the file via the context
max-nextcloud Aug 20, 2026
2ae16d6
fix(api): use context to load document
max-nextcloud Aug 20, 2026
368b9f0
chore(perf): add documents index for context
max-nextcloud Aug 20, 2026
f583eee
chore(refactor): migrate PublicFilesEditor to script setup and ts
max-nextcloud Aug 20, 2026
1940cb9
chore(refactor): ViewerComponent to script setup and ts
max-nextcloud Aug 20, 2026
909ca4c
chore(cleanup): unused PublicFilesEditor
max-nextcloud Aug 20, 2026
d0d5098
enh(OCA.text): accept context in CreateCollaborativeEditor
max-nextcloud Aug 20, 2026
add14a8
chore(tests): adjust some cypress tests to contexts
max-nextcloud Aug 21, 2026
eff44af
fix(hooks): resetDocument gets a fileId use it as such
max-nextcloud Aug 22, 2026
039f58a
chore(refactor): hand the user to the fileContextFactory
max-nextcloud Aug 23, 2026
c4dd42f
chore(refactor): register Context Factory instead of callable
max-nextcloud Aug 23, 2026
ff8b053
chore(types): introduce IContextFactory
max-nextcloud Aug 23, 2026
5d22073
chore(refactor): make FileContext lazy load file
max-nextcloud Aug 23, 2026
d2971f2
fix(document): get document via context in NodeWritten listener.
max-nextcloud Aug 24, 2026
f8b4ec0
fix(document): get document via context to update version info
max-nextcloud Aug 24, 2026
a505cd3
fix(attachment): use proper document id - not $textFile->getId
max-nextcloud Aug 24, 2026
7eddf7f
fix(props): use context instead of fileId
max-nextcloud Aug 25, 2026
7b1302b
fix(attachments): use User and Share from controller
max-nextcloud Aug 25, 2026
504398f
fix(api): Respond to missing file with 404
max-nextcloud Sep 1, 2026
70f74cd
chore(test): adjust cypress attachment spec
max-nextcloud Sep 1, 2026
426d6c7
fix(viewer): bring back autofocus by default
max-nextcloud Sep 2, 2026
07798e9
fix(types): declare strict types on new classes
max-nextcloud Sep 2, 2026
34e4dc2
chore(refactor): split classes in their own files
max-nextcloud Sep 2, 2026
d13da3d
fix(api): remove inactive sessions when creating new one
max-nextcloud Sep 2, 2026
33b7c2a
chore(refactor): update document without conflict exception in IContext
max-nextcloud Sep 2, 2026
da99621
enh(events): DocumentContentUpdated Event to clear editing session
max-nextcloud Sep 2, 2026
2680cab
chore(split): unlocking the file from resetDocument
max-nextcloud Sep 2, 2026
0b41671
fix(context): do not return document from updateDocument
max-nextcloud Sep 3, 2026
7c421a6
Avoid log spam on non-existing keys
max-nextcloud Sep 3, 2026
06237a0
fix(db): make text_documents_context_index unique
max-nextcloud Sep 3, 2026
0b2d41c
fix(document): load by context on unique constraint error
max-nextcloud Sep 3, 2026
13f5814
chore(cleanup): unused $shareToken
max-nextcloud Sep 3, 2026
13594e7
fix(api): use file id in public session api
max-nextcloud Sep 3, 2026
c5ab8d2
fix(attachments): Handle document DoesNotExistException
max-nextcloud Sep 3, 2026
f990c1c
fix(types): provide context to autofocus extension
max-nextcloud Sep 3, 2026
d10af87
fix(mention): use actual file id
max-nextcloud Sep 7, 2026
7b18156
fix(images): update image when src changes
max-nextcloud Sep 7, 2026
0e29eaa
chore(update): use addType with Types:: constants
max-nextcloud Sep 7, 2026
0274a69
chore(playwright): put synchronize content specs in one folder
max-nextcloud Sep 28, 2026
89da986
chore(tests): adjust create session url in playwright
max-nextcloud Sep 28, 2026
b239d10
fix(viewer): always autofocus
max-nextcloud Sep 28, 2026
1079f76
chore(test): adjust cypress routes to new create route
max-nextcloud Sep 29, 2026
f52c8e3
enh(document): use snowflake ids
max-nextcloud Sep 7, 2026
7ce7d87
fix(cron): cleanup attachments by file id not document id
max-nextcloud Sep 9, 2026
8fb0e17
fix(db): remove autoincrement from documents migration
max-nextcloud Sep 9, 2026
ee3a905
fix(occ): ResetDocument with file id from context
max-nextcloud Sep 9, 2026
6ede3d9
chore(refactor): move types used everywhere into types directory
max-nextcloud Sep 9, 2026
f6f001c
chore(types): document id is now a string
max-nextcloud Sep 9, 2026
6cdd001
fix(AttachmentResolver): always provide documentId as documentId, not…
blizzz Sep 9, 2026
c06ffe9
chore(attachments): get list for files without session
max-nextcloud Sep 10, 2026
296e6a2
chore(lint): remove duplicate empty lines
max-nextcloud Sep 10, 2026
416a75d
fix(attachments): handle missing document / invalid file id
max-nextcloud Sep 10, 2026
983cb76
fix(attachments): get context either from session or with fileId
max-nextcloud Sep 10, 2026
7c359e2
chore(test): attachments dir uses fileId not documentId
max-nextcloud Sep 30, 2026
f350649
chore(test): store file names grouped by dirname
max-nextcloud Sep 30, 2026
e81a8dd
fix(occ): use fileId, not in occ text:reset
max-nextcloud Sep 30, 2026
d50ef51
fix(occ): reset session for corner cases
max-nextcloud Sep 30, 2026
cd3c54e
fix(attachments): assertUserOrShareToken without documentId
max-nextcloud Sep 30, 2026
f5698b1
fix(upload): check for write permission on text file
max-nextcloud Sep 30, 2026
bcc71e5
chore: remove redundant `return` and fix indention of comment
mejo- Sep 30, 2026
405549c
refactor(backend): share one download-disabled check
mejo- Sep 30, 2026
22a4a79
fix(save): update document etag and timestamp
max-nextcloud Sep 30, 2026
2b37f4f
chore(rename): hasOwner -> canAttachFiles
max-nextcloud Sep 30, 2026
09a73fe
fix(api): cleanup and document IContext
max-nextcloud Sep 30, 2026
98d4dd5
chore(rename): openFile -> openContext
max-nextcloud Sep 30, 2026
11f7919
chore(migration): remove unused dependency injection
mejo- Sep 30, 2026
facdcda
chore(frontend): fix stale "fileId" wordings
mejo- Sep 30, 2026
a663541
fix(migration): drop UPDATE table alias unsupported by SQLite
mejo- Sep 30, 2026
63713ff
fix(listeners): catch errors DocumentContentUpdatedListener can hit
mejo- Sep 30, 2026
1fdf343
chore(listeners): stop listening to BeforeNodeWrittenEvent
mejo- Sep 30, 2026
edf2a07
chore(migration): declare context index as unique
mejo- Sep 30, 2026
34aa59b
fix(listeners): keep lock when version restore reset is refused
mejo- Sep 30, 2026
7342ecf
fix(cron): only clean up attachments for file contexts
mejo- Sep 30, 2026
a51d9d1
fix(context): refuse share access to non-file contexts
mejo- Sep 30, 2026
e97ed60
fix(viewer): find dirty editor by context before download
mejo- Sep 30, 2026
68380e4
fix(editor): pass context explicitly in EditorReloader
mejo- Sep 30, 2026
05aca47
chore(lint): use `vue-tsc` instead of pure `tsc`
mejo- Sep 30, 2026
5cfef56
fix(listeners): keep Text's lock on its own saves
mejo- Sep 30, 2026
70c0fb9
fix(session): answer 404/403 instead of 500 for lost access
mejo- Sep 30, 2026
7b09800
fix(autosave): do not overwrite outside changes that cannot be loaded
mejo- Sep 30, 2026
b46aff0
fix(viewer): make active and isEmbedded props optional
mejo- Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
- **💾 Open format:** Files are saved as [Markdown](https://en.wikipedia.org/wiki/Markdown), so you can edit them from any other text app too.
- **✊ Strong foundation:** We use [🐈 tiptap](https://tiptap.scrumpy.io) which is based on [🦉 ProseMirror](https://prosemirror.net) – huge thanks to them!
]]></description>
<version>10.0.0-dev.0</version>
<version>10.0.0-dev.1</version>
<licence>agpl</licence>
<author mail="jus@bitgrid.net">Julius Härtl</author>
<namespace>Text</namespace>
Expand Down
2 changes: 1 addition & 1 deletion appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
['name' => 'Attachment#getMediaFilePreview', 'url' => '/mediaPreview', 'verb' => 'GET'],

/** @see Controller\SessionController::create() */
['name' => 'Session#create', 'url' => '/session/{documentId}/create', 'verb' => 'PUT'],
['name' => 'Session#create', 'url' => '/session/{type}/{id}/create', 'verb' => 'PUT'],
/** @see Controller\SessionController::save() */
['name' => 'Session#save', 'url' => '/session/{documentId}/save', 'verb' => 'POST'],
/** @see Controller\SessionController::sync() */
Expand Down
16 changes: 16 additions & 0 deletions composer/composer/autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@
'OCA\\Text\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Text\\Command\\ResetDocument' => $baseDir . '/../lib/Command/ResetDocument.php',
'OCA\\Text\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
'OCA\\Text\\Context\\ContextManager' => $baseDir . '/../lib/Context/ContextManager.php',
'OCA\\Text\\Context\\DocumentData' => $baseDir . '/../lib/Context/DocumentData.php',
'OCA\\Text\\Context\\FileContext' => $baseDir . '/../lib/Context/FileContext.php',
'OCA\\Text\\Context\\FileContextFactory' => $baseDir . '/../lib/Context/FileContextFactory.php',
'OCA\\Text\\Context\\IContext' => $baseDir . '/../lib/Context/IContext.php',
'OCA\\Text\\Context\\IContextFactory' => $baseDir . '/../lib/Context/IContextFactory.php',
'OCA\\Text\\Context\\NewSessionData' => $baseDir . '/../lib/Context/NewSessionData.php',
'OCA\\Text\\Context\\SessionInfo' => $baseDir . '/../lib/Context/SessionInfo.php',
'OCA\\Text\\Context\\UnauthorizedFileContext' => $baseDir . '/../lib/Context/UnauthorizedFileContext.php',
'OCA\\Text\\Controller\\AiController' => $baseDir . '/../lib/Controller/AiController.php',
'OCA\\Text\\Controller\\AttachmentController' => $baseDir . '/../lib/Controller/AttachmentController.php',
'OCA\\Text\\Controller\\ISessionAwareController' => $baseDir . '/../lib/Controller/ISessionAwareController.php',
Expand All @@ -30,8 +39,10 @@
'OCA\\Text\\Db\\StepMapper' => $baseDir . '/../lib/Db/StepMapper.php',
'OCA\\Text\\DirectEditing\\TextDirectEditor' => $baseDir . '/../lib/DirectEditing/TextDirectEditor.php',
'OCA\\Text\\DirectEditing\\TextDocumentCreator' => $baseDir . '/../lib/DirectEditing/TextDocumentCreator.php',
'OCA\\Text\\Event\\DocumentContentUpdated' => $baseDir . '/../lib/Event/DocumentContentUpdated.php',
'OCA\\Text\\Event\\LoadEditor' => $baseDir . '/../lib/Event/LoadEditor.php',
'OCA\\Text\\Event\\MentionEvent' => $baseDir . '/../lib/Event/MentionEvent.php',
'OCA\\Text\\Event\\RegisterContextEvent' => $baseDir . '/../lib/Event/RegisterContextEvent.php',
'OCA\\Text\\Exception\\AccountDisabledException' => $baseDir . '/../lib/Exception/AccountDisabledException.php',
'OCA\\Text\\Exception\\DocumentHasUnsavedChangesException' => $baseDir . '/../lib/Exception/DocumentHasUnsavedChangesException.php',
'OCA\\Text\\Exception\\DocumentSaveConflictException' => $baseDir . '/../lib/Exception/DocumentSaveConflictException.php',
Expand All @@ -43,12 +54,14 @@
'OCA\\Text\\Listeners\\BeforeAssistantNotificationListener' => $baseDir . '/../lib/Listeners/BeforeAssistantNotificationListener.php',
'OCA\\Text\\Listeners\\BeforeNodeDeletedListener' => $baseDir . '/../lib/Listeners/BeforeNodeDeletedListener.php',
'OCA\\Text\\Listeners\\BeforeNodeRenamedListener' => $baseDir . '/../lib/Listeners/BeforeNodeRenamedListener.php',
'OCA\\Text\\Listeners\\DocumentContentUpdatedListener' => $baseDir . '/../lib/Listeners/DocumentContentUpdatedListener.php',
'OCA\\Text\\Listeners\\FilesLoadAdditionalScriptsListener' => $baseDir . '/../lib/Listeners/FilesLoadAdditionalScriptsListener.php',
'OCA\\Text\\Listeners\\FilesSharingLoadAdditionalScriptsListener' => $baseDir . '/../lib/Listeners/FilesSharingLoadAdditionalScriptsListener.php',
'OCA\\Text\\Listeners\\LoadEditorListener' => $baseDir . '/../lib/Listeners/LoadEditorListener.php',
'OCA\\Text\\Listeners\\LoadViewerListener' => $baseDir . '/../lib/Listeners/LoadViewerListener.php',
'OCA\\Text\\Listeners\\NodeCopiedListener' => $baseDir . '/../lib/Listeners/NodeCopiedListener.php',
'OCA\\Text\\Listeners\\NodeWrittenResetDocumentListener' => $baseDir . '/../lib/Listeners/NodeWrittenResetDocumentListener.php',
'OCA\\Text\\Listeners\\RegisterContextEventListener' => $baseDir . '/../lib/Listeners/RegisterContextEventListener.php',
'OCA\\Text\\Listeners\\RegisterDirectEditorEventListener' => $baseDir . '/../lib/Listeners/RegisterDirectEditorEventListener.php',
'OCA\\Text\\Listeners\\RegisterTemplateCreatorListener' => $baseDir . '/../lib/Listeners/RegisterTemplateCreatorListener.php',
'OCA\\Text\\Listeners\\VersionRestoredListener' => $baseDir . '/../lib/Listeners/VersionRestoredListener.php',
Expand All @@ -67,6 +80,9 @@
'OCA\\Text\\Migration\\Version040100Date20240611165300' => $baseDir . '/../lib/Migration/Version040100Date20240611165300.php',
'OCA\\Text\\Migration\\Version070000Date20250925110024' => $baseDir . '/../lib/Migration/Version070000Date20250925110024.php',
'OCA\\Text\\Migration\\Version080000Date20260331132113' => $baseDir . '/../lib/Migration/Version080000Date20260331132113.php',
'OCA\\Text\\Migration\\Version090000Date20260817110024' => $baseDir . '/../lib/Migration/Version090000Date20260817110024.php',
'OCA\\Text\\Migration\\Version090000Date20260819110024' => $baseDir . '/../lib/Migration/Version090000Date20260819110024.php',
'OCA\\Text\\Migration\\Version090000Date20260820132113' => $baseDir . '/../lib/Migration/Version090000Date20260820132113.php',
'OCA\\Text\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
'OCA\\Text\\Service\\AiTagService' => $baseDir . '/../lib/Service/AiTagService.php',
'OCA\\Text\\Service\\ApiService' => $baseDir . '/../lib/Service/ApiService.php',
Expand Down
16 changes: 16 additions & 0 deletions composer/composer/autoload_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ class ComposerStaticInitText
'OCA\\Text\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Text\\Command\\ResetDocument' => __DIR__ . '/..' . '/../lib/Command/ResetDocument.php',
'OCA\\Text\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
'OCA\\Text\\Context\\ContextManager' => __DIR__ . '/..' . '/../lib/Context/ContextManager.php',
'OCA\\Text\\Context\\DocumentData' => __DIR__ . '/..' . '/../lib/Context/DocumentData.php',
'OCA\\Text\\Context\\FileContext' => __DIR__ . '/..' . '/../lib/Context/FileContext.php',
'OCA\\Text\\Context\\FileContextFactory' => __DIR__ . '/..' . '/../lib/Context/FileContextFactory.php',
'OCA\\Text\\Context\\IContext' => __DIR__ . '/..' . '/../lib/Context/IContext.php',
'OCA\\Text\\Context\\IContextFactory' => __DIR__ . '/..' . '/../lib/Context/IContextFactory.php',
'OCA\\Text\\Context\\NewSessionData' => __DIR__ . '/..' . '/../lib/Context/NewSessionData.php',
'OCA\\Text\\Context\\SessionInfo' => __DIR__ . '/..' . '/../lib/Context/SessionInfo.php',
'OCA\\Text\\Context\\UnauthorizedFileContext' => __DIR__ . '/..' . '/../lib/Context/UnauthorizedFileContext.php',
'OCA\\Text\\Controller\\AiController' => __DIR__ . '/..' . '/../lib/Controller/AiController.php',
'OCA\\Text\\Controller\\AttachmentController' => __DIR__ . '/..' . '/../lib/Controller/AttachmentController.php',
'OCA\\Text\\Controller\\ISessionAwareController' => __DIR__ . '/..' . '/../lib/Controller/ISessionAwareController.php',
Expand All @@ -45,8 +54,10 @@ class ComposerStaticInitText
'OCA\\Text\\Db\\StepMapper' => __DIR__ . '/..' . '/../lib/Db/StepMapper.php',
'OCA\\Text\\DirectEditing\\TextDirectEditor' => __DIR__ . '/..' . '/../lib/DirectEditing/TextDirectEditor.php',
'OCA\\Text\\DirectEditing\\TextDocumentCreator' => __DIR__ . '/..' . '/../lib/DirectEditing/TextDocumentCreator.php',
'OCA\\Text\\Event\\DocumentContentUpdated' => __DIR__ . '/..' . '/../lib/Event/DocumentContentUpdated.php',
'OCA\\Text\\Event\\LoadEditor' => __DIR__ . '/..' . '/../lib/Event/LoadEditor.php',
'OCA\\Text\\Event\\MentionEvent' => __DIR__ . '/..' . '/../lib/Event/MentionEvent.php',
'OCA\\Text\\Event\\RegisterContextEvent' => __DIR__ . '/..' . '/../lib/Event/RegisterContextEvent.php',
'OCA\\Text\\Exception\\AccountDisabledException' => __DIR__ . '/..' . '/../lib/Exception/AccountDisabledException.php',
'OCA\\Text\\Exception\\DocumentHasUnsavedChangesException' => __DIR__ . '/..' . '/../lib/Exception/DocumentHasUnsavedChangesException.php',
'OCA\\Text\\Exception\\DocumentSaveConflictException' => __DIR__ . '/..' . '/../lib/Exception/DocumentSaveConflictException.php',
Expand All @@ -58,12 +69,14 @@ class ComposerStaticInitText
'OCA\\Text\\Listeners\\BeforeAssistantNotificationListener' => __DIR__ . '/..' . '/../lib/Listeners/BeforeAssistantNotificationListener.php',
'OCA\\Text\\Listeners\\BeforeNodeDeletedListener' => __DIR__ . '/..' . '/../lib/Listeners/BeforeNodeDeletedListener.php',
'OCA\\Text\\Listeners\\BeforeNodeRenamedListener' => __DIR__ . '/..' . '/../lib/Listeners/BeforeNodeRenamedListener.php',
'OCA\\Text\\Listeners\\DocumentContentUpdatedListener' => __DIR__ . '/..' . '/../lib/Listeners/DocumentContentUpdatedListener.php',
'OCA\\Text\\Listeners\\FilesLoadAdditionalScriptsListener' => __DIR__ . '/..' . '/../lib/Listeners/FilesLoadAdditionalScriptsListener.php',
'OCA\\Text\\Listeners\\FilesSharingLoadAdditionalScriptsListener' => __DIR__ . '/..' . '/../lib/Listeners/FilesSharingLoadAdditionalScriptsListener.php',
'OCA\\Text\\Listeners\\LoadEditorListener' => __DIR__ . '/..' . '/../lib/Listeners/LoadEditorListener.php',
'OCA\\Text\\Listeners\\LoadViewerListener' => __DIR__ . '/..' . '/../lib/Listeners/LoadViewerListener.php',
'OCA\\Text\\Listeners\\NodeCopiedListener' => __DIR__ . '/..' . '/../lib/Listeners/NodeCopiedListener.php',
'OCA\\Text\\Listeners\\NodeWrittenResetDocumentListener' => __DIR__ . '/..' . '/../lib/Listeners/NodeWrittenResetDocumentListener.php',
'OCA\\Text\\Listeners\\RegisterContextEventListener' => __DIR__ . '/..' . '/../lib/Listeners/RegisterContextEventListener.php',
'OCA\\Text\\Listeners\\RegisterDirectEditorEventListener' => __DIR__ . '/..' . '/../lib/Listeners/RegisterDirectEditorEventListener.php',
'OCA\\Text\\Listeners\\RegisterTemplateCreatorListener' => __DIR__ . '/..' . '/../lib/Listeners/RegisterTemplateCreatorListener.php',
'OCA\\Text\\Listeners\\VersionRestoredListener' => __DIR__ . '/..' . '/../lib/Listeners/VersionRestoredListener.php',
Expand All @@ -82,6 +95,9 @@ class ComposerStaticInitText
'OCA\\Text\\Migration\\Version040100Date20240611165300' => __DIR__ . '/..' . '/../lib/Migration/Version040100Date20240611165300.php',
'OCA\\Text\\Migration\\Version070000Date20250925110024' => __DIR__ . '/..' . '/../lib/Migration/Version070000Date20250925110024.php',
'OCA\\Text\\Migration\\Version080000Date20260331132113' => __DIR__ . '/..' . '/../lib/Migration/Version080000Date20260331132113.php',
'OCA\\Text\\Migration\\Version090000Date20260817110024' => __DIR__ . '/..' . '/../lib/Migration/Version090000Date20260817110024.php',
'OCA\\Text\\Migration\\Version090000Date20260819110024' => __DIR__ . '/..' . '/../lib/Migration/Version090000Date20260819110024.php',
'OCA\\Text\\Migration\\Version090000Date20260820132113' => __DIR__ . '/..' . '/../lib/Migration/Version090000Date20260820132113.php',
'OCA\\Text\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
'OCA\\Text\\Service\\AiTagService' => __DIR__ . '/..' . '/../lib/Service/AiTagService.php',
'OCA\\Text\\Service\\ApiService' => __DIR__ . '/..' . '/../lib/Service/ApiService.php',
Expand Down
34 changes: 18 additions & 16 deletions cypress/e2e/api/SessionApi.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,17 @@ describe('The session Api', function() {
})

it('returns connection', function() {
cy.openConnection({ fileId }).then(({ connection }) => {
cy.wrap(connection).its('documentId').should('equal', fileId)
cy.openFileConnection({ fileId }).then(({ connection }) => {
cy.wrap(connection)
.its('documentId')
.then((id) => Number.parseInt(id))
.should('be.greaterThan', 1_000_000) // snowflake ids have more than 20 bit.
cy.closeConnection(connection)
})
})

it('provides initial content', function() {
cy.openConnection({ fileId, filePath }).then(({ connection, data }) => {
cy.openFileConnection({ fileId, filePath }).then(({ connection, data }) => {
cy.wrap(data).its('content').should('eql', '## Hello world\n')
cy.closeConnection(connection)
})
Expand All @@ -54,7 +57,7 @@ describe('The session Api', function() {
})

it('handles missing file id', function() {
cy.failToCreateTextSession().its('status').should('equal', 412)
cy.failToCreateTextSession().its('status').should('equal', 404)
})
})

Expand All @@ -63,7 +66,7 @@ describe('The session Api', function() {

beforeEach(function() {
cy.uploadTestFile()
.then((fileId) => cy.openConnection({ fileId }))
.then((fileId) => cy.openFileConnection({ fileId }))
.then(({ connection: con }) => {
connection = con
})
Expand Down Expand Up @@ -116,7 +119,7 @@ describe('The session Api', function() {
cy.uploadTestFile()
.then((id) => {
fileId = id
return cy.openConnection({ fileId, filePath })
return cy.openFileConnection({ fileId, filePath })
})
.then(({ connection: con }) => {
connection = con
Expand Down Expand Up @@ -151,7 +154,7 @@ describe('The session Api', function() {
documentState,
manualSave: true,
})
cy.openConnection({ fileId, filePath })
cy.openFileConnection({ fileId, filePath })
.as('joining')
.its('data.documentState')
.should('eql', documentState)
Expand Down Expand Up @@ -183,7 +186,7 @@ describe('The session Api', function() {
.then(() => cy.clearCookies())
.then(() => {
return cy
.openConnection({ filePath: '', token: shareToken })
.openShareConnection({ filePath: '', token: shareToken })
.then(({ connection: con }) => {
connection = con
})
Expand Down Expand Up @@ -223,7 +226,7 @@ describe('The session Api', function() {
documentState,
manualSave: true,
})
cy.openConnection({ filePath: '', token: shareToken })
cy.openShareConnection({ filePath: '', token: shareToken })
.as('joining')
.its('data.documentState')
.should('eql', documentState)
Expand All @@ -247,15 +250,15 @@ describe('The session Api', function() {
cy.log(token)
shareToken = token
cy.clearCookies()
cy.openConnection({ filePath: '', token: shareToken }).then(({ connection: con }) => {
cy.openShareConnection({ filePath: '', token: shareToken }).then(({ connection: con }) => {
connection = con
})
})
})

it('does not send initial content if other session is alive but did not push any steps', function() {
let joining
cy.openConnection({ filePath: '', token: shareToken })
cy.openShareConnection({ filePath: '', token: shareToken })
.then(({ connection: con, data }) => {
joining = con
return data
Expand All @@ -271,7 +274,7 @@ describe('The session Api', function() {
cy.pushSteps({ connection, steps: [messages.update], version })
.its('version')
.should('eql', 0)
cy.openConnection({ filePath: '', token: shareToken })
cy.openShareConnection({ filePath: '', token: shareToken })
.then(({ connection: con, data }) => {
joining = con
return data
Expand All @@ -283,9 +286,8 @@ describe('The session Api', function() {
})

it('refuses create,push,sync,save with non-matching baseVersionEtag', function() {
cy.failToCreateTextSession(undefined, 'wrongBaseVersionEtag', {
cy.failToCreateTextShareSession(shareToken, 'wrongBaseVersionEtag', {
filePath: '',
token: shareToken,
})
.its('status')
.should('eql', 412)
Expand All @@ -312,7 +314,7 @@ describe('The session Api', function() {
.its('version')
.should('eql', 0)
cy.log('Other user creates session')
cy.openConnection({ filePath: '', token: shareToken }).then(({ connection: con }) => {
cy.openShareConnection({ filePath: '', token: shareToken }).then(({ connection: con }) => {
joining = con
})
cy.log('Initial user closes session')
Expand All @@ -330,7 +332,7 @@ describe('The session Api', function() {
// Skipped for now since the behaviour chanced by not cleaning up the state on close/create
it.skip('ignores steps stored after close cleaned up', function() {
cy.pushAndClose({ connection, steps: [messages.update], version })
cy.openConnection({ filePath: '', token: shareToken })
cy.openShareConnection({ filePath: '', token: shareToken })
.then(({ connection: con, data }) => {
connection = con
return data
Expand Down
8 changes: 3 additions & 5 deletions cypress/e2e/api/SyncServiceProvider.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ describe('Sync service provider', function() {
* @param {object} ydoc Yjs document
*/
function createProvider(ydoc) {
const context = { type: 'file', id: fileId }
const relativePath = '.'
let baseVersionEtag
const setBaseVersionEtag = (val) => {
Expand All @@ -50,21 +51,18 @@ describe('Sync service provider', function() {
const getBaseVersionEtag = () => baseVersionEtag
const { connection, openConnection } = provideConnection(
{
fileId,
context,
relativePath,
},
getBaseVersionEtag,
setBaseVersionEtag,
)
const { syncService } = provideSyncService(connection, openConnection)
const queue = []
syncService.bus.on('opened', () => syncService.startSync())
return createSyncServiceProvider({
ydoc,
syncService,
fileId,
initialSession: null,
queue,
context,
disableBc: true,
})
}
Expand Down
7 changes: 5 additions & 2 deletions cypress/e2e/api/UsersApi.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,16 @@ describe('The user mention API', function() {
cy.login(user)
cy.uploadTestFile('test.md')
.as('fileId')
.then((fileId) => cy.openConnection({ fileId }))
.then((fileId) => cy.openFileConnection({ fileId }))
.its('connection')
.as('connection')
})

it('has a valid connection', function() {
cy.get('@connection').its('documentId').should('equal', this.fileId)
cy.get('@connection')
.its('documentId')
.then((id) => Number.parseInt(id))
.should('be.greaterThan', 1_000_000) // snowflake ids have more than 20 bit.
cy.closeConnection(this.connection)
})

Expand Down
Loading
Loading