Skip to content
Draft
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
d3c5716
chore(cleanup): error handling
max-nextcloud Aug 18, 2026
671046b
chore(refactor): Introduce IContext and FileContext
max-nextcloud Aug 12, 2026
2bcac0c
chore(refactor): simplify IContext API with helper classes
max-nextcloud Aug 15, 2026
cc7f010
chore(refactor): very basic registry for context factories
max-nextcloud Aug 15, 2026
7d6a49f
chore(refactor): handle baseVersionEtag outside IContext
max-nextcloud Aug 15, 2026
0a05c85
chore(refactor): introduce RegisterContextEvent
max-nextcloud Aug 16, 2026
6c57fba
chore(refactor): split open api functions
max-nextcloud Aug 16, 2026
f088a48
enh(api): allow opening contexts of different types
max-nextcloud Aug 17, 2026
4b410eb
enh(db): add context to document
max-nextcloud Aug 18, 2026
a1d60e6
chore(version): bump to run migration
max-nextcloud Aug 18, 2026
7796868
chore(refactor): store outside change in the DocumentSaveConflictExce…
max-nextcloud Aug 18, 2026
6596f73
enh(api): handle sync requests with context
max-nextcloud Aug 18, 2026
bae5196
fix(attachments): get file via context
max-nextcloud Aug 18, 2026
d083887
fix(share): consider share token in ContextManager
max-nextcloud Aug 19, 2026
00ab5db
fix(push): use context to check if file is readonly
max-nextcloud Aug 19, 2026
3053e0e
enh(save): use context for saving
max-nextcloud Aug 19, 2026
44a72d6
chore(cleanup): redundant check for lock provider
max-nextcloud Aug 19, 2026
69a4b35
chore(tweak): return first editable file early
max-nextcloud Aug 19, 2026
f01109f
fix(session): also consider `shareToken` parameter as used by Attachm…
max-nextcloud Aug 19, 2026
8237c79
fix(middleware): get fileId from context rather than documentId
max-nextcloud Aug 19, 2026
1f18270
fix(share): get file from context for attachments
max-nextcloud Aug 19, 2026
26cba06
fix(migration): migrate old document rows to new format
max-nextcloud Aug 19, 2026
daf197b
fix(db): migrations adding context type and id
max-nextcloud Aug 20, 2026
04e7f0a
fix(api): Unlock the file via the context
max-nextcloud Aug 20, 2026
6069125
fix(api): use context to load document
max-nextcloud Aug 20, 2026
8f78b75
chore(perf): add documents index for context
max-nextcloud Aug 20, 2026
eb2712d
chore(refactor): migrate PublicFilesEditor to script setup and ts
max-nextcloud Aug 20, 2026
b405e1a
chore(refactor): ViewerComponent to script setup and ts
max-nextcloud Aug 20, 2026
fbb7a0a
chore(cleanup): unused PublicFilesEditor
max-nextcloud Aug 20, 2026
28c958d
enh(OCA.text): accept context in CreateCollaborativeEditor
max-nextcloud Aug 20, 2026
33026bd
chore(tests): adjust some cypress tests to contexts
max-nextcloud Aug 21, 2026
373317c
fix(hooks): resetDocument gets a fileId use it as such
max-nextcloud Aug 22, 2026
3200279
chore(refactor): hand the user to the fileContextFactory
max-nextcloud Aug 23, 2026
ca72bf0
chore(refactor): register Context Factory instead of callable
max-nextcloud Aug 23, 2026
9e6de1f
chore(types): introduce IContextFactory
max-nextcloud Aug 23, 2026
5308a43
chore(refactor): make FileContext lazy load file
max-nextcloud Aug 23, 2026
2fed6bc
fix(document): get document via context in NodeWritten listener.
max-nextcloud Aug 24, 2026
4cd1e82
fix(document): get document via context to update version info
max-nextcloud Aug 24, 2026
e7b493f
fix(attachment): use proper document id - not $textFile->getId
max-nextcloud Aug 24, 2026
2152202
fix(props): use context instead of fileId
max-nextcloud Aug 25, 2026
58489e8
fix(attachments): use User and Share from controller
max-nextcloud Aug 25, 2026
756c8a4
fix(api): Respond to missing file with 404
max-nextcloud Sep 1, 2026
22b19ae
chore(test): adjust cypress attachment spec
max-nextcloud Sep 1, 2026
f5bd323
fix(viewer): bring back autofocus by default
max-nextcloud Sep 2, 2026
fb93618
fix(types): declare strict types on new classes
max-nextcloud Sep 2, 2026
607ccb3
chore(refactor): split classes in their own files
max-nextcloud Sep 2, 2026
a50acdc
fix(api): remove inactive sessions when creating new one
max-nextcloud Sep 2, 2026
7e6c453
chore(refactor): update document without conflict exception in IContext
max-nextcloud Sep 2, 2026
4b85b75
enh(events): DocumentContentUpdated Event to clear editing session
max-nextcloud Sep 2, 2026
32a0618
chore(split): unlocking the file from resetDocument
max-nextcloud Sep 2, 2026
e2a6d60
fix(context): do not return document from updateDocument
max-nextcloud Sep 3, 2026
cc512da
Avoid log spam on non-existing keys
max-nextcloud Sep 3, 2026
c71e5d3
fix(db): make text_documents_context_index unique
max-nextcloud Sep 3, 2026
0a8be4c
fix(document): load by context on unique constraint error
max-nextcloud Sep 3, 2026
4bdd294
chore(cleanup): unused $shareToken
max-nextcloud Sep 3, 2026
b099066
fix(api): use file id in public session api
max-nextcloud Sep 3, 2026
25ed114
fix(attachments): Handle document DoesNotExistException
max-nextcloud Sep 3, 2026
7c495b3
fix(types): provide context to autofocus extension
max-nextcloud Sep 3, 2026
f43e838
fix(mention): use actual file id
max-nextcloud Sep 7, 2026
05e1f7c
fix(images): update image when src changes
max-nextcloud Sep 7, 2026
6c81c0f
chore(update): use addType with Types:: constants
max-nextcloud Sep 7, 2026
acc7338
chore(playwright): put synchronize content specs in one folder
max-nextcloud Sep 28, 2026
4ba39ff
chore(tests): adjust create session url in playwright
max-nextcloud Sep 28, 2026
4f5eec8
fix(viewer): always autofocus
max-nextcloud Sep 28, 2026
9eb44c1
chore(test): adjust cypress routes to new create route
max-nextcloud Sep 29, 2026
e1e2934
enh(document): use snowflake ids
max-nextcloud Sep 7, 2026
9414b75
fix(cron): cleanup attachments by file id not document id
max-nextcloud Sep 9, 2026
169433a
fix(db): remove autoincrement from documents migration
max-nextcloud Sep 9, 2026
142398e
fix(occ): ResetDocument with file id from context
max-nextcloud Sep 9, 2026
3fe9e2b
chore(refactor): move types used everywhere into types directory
max-nextcloud Sep 9, 2026
65d421b
chore(types): document id is now a string
max-nextcloud Sep 9, 2026
1c149fe
fix(AttachmentResolver): always provide documentId as documentId, not…
blizzz Sep 9, 2026
b6ff108
chore(attachments): get list for files without session
max-nextcloud Sep 10, 2026
25ffd39
chore(lint): remove duplicate empty lines
max-nextcloud Sep 10, 2026
bb4a4b3
fix(attachments): handle missing document / invalid file id
max-nextcloud Sep 10, 2026
f3cf3f5
fix(attachments): get context either from session or with fileId
max-nextcloud Sep 10, 2026
ae2f166
chore(test): attachments dir uses fileId not documentId
max-nextcloud Sep 30, 2026
89dab3d
chore(test): store file names grouped by dirname
max-nextcloud Sep 30, 2026
28c8b63
fix(occ): use fileId, not in occ text:reset
max-nextcloud Sep 30, 2026
8c4d1d9
fix(occ): reset session for corner cases
max-nextcloud Sep 30, 2026
d5e2973
fix(attachments): assertUserOrShareToken without documentId
max-nextcloud Sep 30, 2026
0f066c8
fix(upload): check for write permission on text file
max-nextcloud Sep 30, 2026
c644536
chore: remove redundant `return` and fix indention of comment
mejo- Sep 30, 2026
ad36776
refactor(backend): share one download-disabled check
mejo- Sep 30, 2026
89566ef
fix(save): update document etag and timestamp
max-nextcloud Sep 30, 2026
3695ab5
chore(rename): hasOwner -> canAttachFiles
max-nextcloud Sep 30, 2026
1917c93
fix(api): cleanup and document IContext
max-nextcloud Sep 30, 2026
218a3c2
chore(rename): openFile -> openContext
max-nextcloud Sep 30, 2026
be9907b
chore(migration): remove unused dependency injection
mejo- Sep 30, 2026
8b11be4
chore(frontend): fix stale "fileId" wordings
mejo- Sep 30, 2026
9f1476c
fix(migration): drop UPDATE table alias unsupported by SQLite
mejo- Sep 30, 2026
a370502
fix(listeners): catch errors DocumentContentUpdatedListener can hit
mejo- Sep 30, 2026
6f022cb
chore(listeners): stop listening to BeforeNodeWrittenEvent
mejo- Sep 30, 2026
222b0cc
chore(migration): declare context index as unique
mejo- Sep 30, 2026
2ee9266
fix(listeners): keep lock when version restore reset is refused
mejo- Sep 30, 2026
ad5e37d
fix(cron): only clean up attachments for file contexts
mejo- Sep 30, 2026
8ad0cd5
fix(context): refuse share access to non-file contexts
mejo- Sep 30, 2026
a5a13ae
fix(viewer): find dirty editor by context before download
mejo- Sep 30, 2026
a8c83c9
fix(editor): pass context explicitly in EditorReloader
mejo- Sep 30, 2026
bed3169
chore(lint): use `vue-tsc` instead of pure `tsc`
mejo- Sep 30, 2026
e99744f
fix(listeners): keep Text's lock on its own saves
mejo- Sep 30, 2026
c556026
fix(session): answer 404/403 instead of 500 for lost access
mejo- Sep 30, 2026
552e00e
fix(autosave): do not overwrite outside changes that cannot be loaded
mejo- Sep 30, 2026
509968c
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>9.0.0</version>
<version>9.0.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