diff --git a/eclipse2.target b/eclipse2.target new file mode 100644 index 0000000..936fa8d --- /dev/null +++ b/eclipse2.target @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + me.mrletsplay + ShareLib + 1.0-SNAPSHOT + jar + + + org.java-websocket + Java-WebSocket + 1.5.6 + jar + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/me/mrletsplay/shareclient/ShareClient.java b/src/main/java/me/mrletsplay/shareclient/ShareClient.java index 7e34bf4..fac263a 100644 --- a/src/main/java/me/mrletsplay/shareclient/ShareClient.java +++ b/src/main/java/me/mrletsplay/shareclient/ShareClient.java @@ -173,7 +173,6 @@ public class ShareClient extends AbstractUIPlugin implements MessageListener, Di @Override public void onMessage(Message message) { Display.getDefault().asyncExec(() -> { - System.out.println("Got: " + message); if (message instanceof PeerJoinMessage join) { activeSession.getPeers().add(new Peer(join.peerName(), join.peerSiteID())); updateView(); diff --git a/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientDocumentListener.java b/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientDocumentListener.java index ab18f10..f8ddd56 100644 --- a/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientDocumentListener.java +++ b/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientDocumentListener.java @@ -39,10 +39,6 @@ public class ShareClientDocumentListener implements IDocumentListener { if(ignoreChanges) return; - System.out.println("UPDATE ON THREAD " + Thread.currentThread()); - - // FIXME: bug somewhere here, can cause discrepancies in local editor when editing while changes are coming in - ShareSession session = ShareClient.getDefault().getActiveSession(); if(session == null) return; diff --git a/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientPartListener.java b/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientPartListener.java index c77b4a1..ad47cb0 100644 --- a/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientPartListener.java +++ b/src/main/java/me/mrletsplay/shareclient/util/listeners/ShareClientPartListener.java @@ -8,7 +8,6 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; @@ -34,11 +33,9 @@ public class ShareClientPartListener implements IPartListener2 { public void addDocumentListener(IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); - if(!(part instanceof IEditorPart)) return; - IEditorPart editor = (IEditorPart) part; - if(!(editor instanceof ITextEditor)) return; - ITextEditor textEditor = (ITextEditor) editor; - IEditorInput editorInput = editor.getEditorInput(); + if(!(part instanceof ITextEditor)) return; + ITextEditor textEditor = (ITextEditor) part; + IEditorInput editorInput = textEditor.getEditorInput(); if(!(editorInput instanceof FileEditorInput)) return; FileEditorInput fileEditorInput = (FileEditorInput) editorInput; IDocument document = textEditor.getDocumentProvider().getDocument(editorInput); @@ -47,10 +44,31 @@ public class ShareClientPartListener implements IPartListener2 { IProject project = file.getProject(); Path filePath = project.getLocation().toPath().relativize(file.getLocation().toPath()); - // FIXME: this should probably just store an IProject with a relative path ProjectAndPath relPath = new ProjectAndPath(project, filePath.toString()); - System.out.println("Opened editor: " + relPath); document.addDocumentListener(createListener(relPath, document)); + System.out.println("Opened editor: " + relPath); + } + + private void removeDocumentListener(IWorkbenchPartReference partRef) { + IWorkbenchPart part = partRef.getPart(false); + if(!(part instanceof ITextEditor)) return; + ITextEditor textEditor = (ITextEditor) part; + IEditorInput editorInput = textEditor.getEditorInput(); + if(!(editorInput instanceof FileEditorInput)) return; + FileEditorInput fileEditorInput = (FileEditorInput) editorInput; + IDocument document = textEditor.getDocumentProvider().getDocument(editorInput); + + IFile file = fileEditorInput.getFile(); + IProject project = file.getProject(); + + Path filePath = project.getLocation().toPath().relativize(file.getLocation().toPath()); + ProjectAndPath relPath = new ProjectAndPath(project, filePath.toString()); + ShareClientDocumentListener listener = getListener(relPath); + if(listener == null) return; + + document.removeDocumentListener(listener); + listeners.remove(relPath); + System.out.println("Closed editor: " + relPath); } @Override @@ -63,10 +81,19 @@ public class ShareClientPartListener implements IPartListener2 { addDocumentListener(partRef); } + @Override + public void partClosed(IWorkbenchPartReference partRef) { + removeDocumentListener(partRef); + } + public Map getListeners() { return listeners; } + public ShareClientDocumentListener getListener(ProjectAndPath path) { + return listeners.get(path); + } + public ShareClientDocumentListener getListener(ProjectRelativePath path) { ShareSession session = ShareClient.getDefault().getActiveSession(); if(session == null) return null; diff --git a/src/main/java/me/mrletsplay/shareclient/views/ShareView.java b/src/main/java/me/mrletsplay/shareclient/views/ShareView.java index b4f346a..3d11161 100644 --- a/src/main/java/me/mrletsplay/shareclient/views/ShareView.java +++ b/src/main/java/me/mrletsplay/shareclient/views/ShareView.java @@ -66,7 +66,6 @@ public class ShareView extends ViewPart { @Override public void init(IViewSite site) throws PartInitException { super.init(site); - System.out.println(ShareClient.getDefault()); ShareClient.getDefault().setView(this); }