Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed swing from default file dir detection #9222

Merged
merged 23 commits into from
Oct 17, 2022
Merged

Conversation

tobiasdiez
Copy link
Member

@tobiasdiez tobiasdiez commented Oct 7, 2022

We revert parts of #9113 and remove the default main file dir again since this loads the full awt toolkit which has a large memory and cpu overhead:

        at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:105)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:692)
        at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(X11GraphicsEnvironment.java:64)
        at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:36)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84)
        at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106)
        at java.desktop/sun.awt.X11.XToolkit.<clinit>(XToolkit.java:224)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:40)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:599)
        at java.desktop/sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2198)
        at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1100)
        at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:445)
        at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:153)
        at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1565)
        at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:593)
        at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:635)
        at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1412)
        at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1525)
        at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1491)
        at java.desktop/javax.swing.UIManager.getDefaults(UIManager.java:716)
        at java.desktop/javax.swing.UIManager.getString(UIManager.java:845)
        at java.desktop/javax.swing.filechooser.UnixFileSystemView.<clinit>(FileSystemView.java:777)
        at java.desktop/javax.swing.filechooser.FileSystemView.getFileSystemView(FileSystemView.java:93)
        at org.jabref@100.0.0/org.jabref.gui.desktop.JabRefDesktop.getDefaultFileChooserDirectory(JabRefDesktop.java:307)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.determineMainFileDirectory(JabRefPreferences.java:2193)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getFilePreferences(JabRefPreferences.java:2204)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getFileLinkPreferences(JabRefPreferences.java:1112)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getLayoutFormatterPreferences(JabRefPreferences.java:1125)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getCustomExportFormats(JabRefPreferences.java:2308)
        at org.jabref@100.0.0/org.jabref.cli.Launcher.applyPreferences(Launcher.java:158)
        at org.jabref@100.0.0/org.jabref.cli.Launcher.main(Launcher.java:65)
  • Change in CHANGELOG.md described in a way that is understandable for the average user (if applicable)
  • Tests created for changes (if applicable)
  • Manually tested changed features in running JabRef (always required)
  • Screenshots added in PR description (for UI changes)
  • Checked developer's documentation: Is the information available and up to date? If not, I outlined it in this pull request.
  • Checked documentation: Is the information available and up to date? If not, I created an issue at https://github.com/JabRef/user-documentation/issues or, even better, I submitted a pull request to the documentation repository.

@tobiasdiez tobiasdiez added the status: ready-for-review Pull Requests that are ready to be reviewed by the maintainers label Oct 7, 2022
@Siedlerchr
Copy link
Member

AS per @koppor said, the average user does look in his documents for files and not where the bib file is located (that might be the downloads files).
And user.home is not reliable. That's why we decided to use the awt method. Unfortunately there is no other non awt swing version available

@Siedlerchr Siedlerchr removed the status: ready-for-review Pull Requests that are ready to be reviewed by the maintainers label Oct 7, 2022
@koppor
Copy link
Member

koppor commented Oct 7, 2022

Is there a test for:

  • File directory defined in .bib file
  • File directory not accessible from the user
  • JabRef stores the PDF NOT next to the .bib file, but in the home-directory, sub directory "JabRef" ("My Documents" -> "JabRef")

This is important for shared .bib files where users use Mac OS X and the path is configured for Windows.

Moreover, storing relative to the bib file is default, so I don't get why there is a change needed in the logic here

grafik

private final List<Path> fileDirForDatabase;

public FileLinkPreferences(String mainFileDirectory, List<Path> fileDirForDatabase) {
public FileLinkPreferences(Optional<Path> mainFileDirectory, List<Path> fileDirForDatabase) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really don't like the optional as a method argument here. Does not seem to provide any advantage of just returning Optional.offNullable in getMainFileDirecty but bad readability, and construction of a superfluous optional object...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is mostly to support new FileLinkPreferences(getFilePreferences().getFileDirectory(),...); where getFileDirectory returns an optional.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just thinking loud:

  • Should mainFileDirectory ever be empty? Do we have a default value for this -> .orElse()? Reason: Have guaranteed non-null objects to avoid later checking for nulls or empty.
  • Maybe overload the constructor to avoid "Optional.empty()"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olly's idea was to add a default for mainFileDirectory. But in case we don't find a nice solution for getting the user doc folder, the idea of this PR is to make it clear that the main file directory might not be present.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

next quick thought without deeper thinking 😅 : why is the mainFileDirectory not just the first Value of fileDirForDatabase?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olly's idea was to add a default for mainFileDirectory.

Yes!

But in case we don't find a nice solution for getting the user doc folder,

AWT is the currently best solution - AWT is still bundled with Java.

@calixtus
Copy link
Member

calixtus commented Oct 7, 2022

I can totally relate on one hand to @tobiasdiez idea of getting rid of swing to reduce overhead and I remember we had this conversation before. On the other hand we still use swing for all the undo/redo stuff, so sadly there is no short term advantage here and as i understand the default behaviour if jabref is already in favor of tobias intuition.
I believe there is currently no better solution but to relate on swing to determine the 'My Documents' directory. Maybe we can discuss this in the next dev call and write a quick and simple ADR on this to find a joint consensus decision on that?

@tobiasdiez
Copy link
Member Author

As far as I remember, the Undo/Redo stuff doesn't start and require the awt toolkit. It's essentially a data holder. This is similar to the JavaFX collections that also can be used without the JavaFX toolkit.

I don't think this special case is so important that we pull in the awt toolkit, nor go down the JNI rabbit hole. But I'm happy to use another easy workaround...

@koppor
Copy link
Member

koppor commented Oct 10, 2022

Current behavior:

See org.jabref.model.database.BibDatabaseContext#getFileDirectories

        // 1. Metadata user-specific directory
        metaData.getUserFileDirectory(preferences.getUser())
                .ifPresent(userFileDirectory -> fileDirs.add(getFileDirectoryPath(userFileDirectory)));

        // 2. Metadata general directory
        metaData.getDefaultFileDirectory()
                .ifPresent(metaDataDirectory -> fileDirs.add(getFileDirectoryPath(metaDataDirectory)));

        // 3. BIB file directory or Main file directory
        // fileDirs.isEmpty in the case, 1) no user-specific file directory and 2) no general file directory is set
        // (in the metadata of the bib file)
        if (fileDirs.isEmpty() && preferences.shouldStoreFilesRelativeToBibFile()) {
...
        } else {
            // Main file directory
            preferences.getFileDirectory().ifPresent(fileDirs::add);
        }

Thus, the behavior @tobiasdiez encounters happens in the follwing

  1. org.jabref.gui.externalfiles.DownloadFullTextAction#downloadFullTexts is called
  2. This calls org.jabref.model.database.BibDatabaseContext#getFirstExistingFileDir
  3. This gathers all available directories (org.jabref.model.database.BibDatabaseContext#getFileDirectories)
  4. Filters available directories based on Files.exists

Special case in step 3:

In case no meta data directory is set AND files should NOT be stored related to bib file, then the main file directory is used.

That means, the encountered behavior can only occur, if a meta directory is set AND none of these directories exist (because of step 4).

This was the intended "hack" of #9113.

@tobias, please explain how the following issue arises at your side:

save files again relative to the bib folder if no other folder has been selected (i.e no file directory on the bib file level nor on the user level).

The current implementation seems to follow this behavior (see above).

@koppor
Copy link
Member

koppor commented Oct 10, 2022

We created ADR-0026 at #9235. We close this PR until we find the root cause of the issue at @tobiasdiez's machine.

In parallel, we are thinking of contributing to AppDirs.

@koppor koppor closed this Oct 10, 2022
@tobiasdiez tobiasdiez reopened this Oct 10, 2022
@tobiasdiez
Copy link
Member Author

Just try to start the JabRef cli from #9217 in a terminal (without any window server running) and you get:

Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':1' as the value of the DISPLAY variable.
        at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:105)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:692)
        at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(X11GraphicsEnvironment.java:64)
        at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:36)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84)
        at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106)
        at java.desktop/sun.awt.X11.XToolkit.<clinit>(XToolkit.java:224)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:40)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:599)
        at java.desktop/sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2198)
        at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1100)
        at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:445)
        at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:153)
        at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1565)
        at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:593)
        at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:635)
        at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1412)
        at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1525)
        at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1491)
        at java.desktop/javax.swing.UIManager.getDefaults(UIManager.java:716)
        at java.desktop/javax.swing.UIManager.getString(UIManager.java:845)
        at java.desktop/javax.swing.filechooser.UnixFileSystemView.<clinit>(FileSystemView.java:777)
        at java.desktop/javax.swing.filechooser.FileSystemView.getFileSystemView(FileSystemView.java:93)
        at org.jabref@100.0.0/org.jabref.gui.desktop.JabRefDesktop.getDefaultFileChooserDirectory(JabRefDesktop.java:307)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.determineMainFileDirectory(JabRefPreferences.java:2193)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getFilePreferences(JabRefPreferences.java:2204)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getFileLinkPreferences(JabRefPreferences.java:1112)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getLayoutFormatterPreferences(JabRefPreferences.java:1125)
        at org.jabref@100.0.0/org.jabref.preferences.JabRefPreferences.getCustomExportFormats(JabRefPreferences.java:2308)
        at org.jabref@100.0.0/org.jabref.cli.Launcher.applyPreferences(Launcher.java:158)
        at org.jabref@100.0.0/org.jabref.cli.Launcher.main(Launcher.java:65)

While we might want to argue that this use case (running JabRef without a window server) is not the most relevant, the error log shows however that the full awt toolkit is initialized by the call to the default file chooser: java.awt.Toolkit.getDefaultToolkit(Toolkit.java:599). In my opinion, this memory and cpu overhead is unacceptable just to provide a slightly better default preference value.

@tobiasdiez tobiasdiez added the status: ready-for-review Pull Requests that are ready to be reviewed by the maintainers label Oct 10, 2022
@tobiasdiez tobiasdiez changed the title Save files again relative to bib file Remove setting a default main file dir Oct 10, 2022
@calixtus
Copy link
Member

I experimented a bit. How about this bad boy:

import com.sun.jna.platform.win32.KnownFolders;
import com.sun.jna.platform.win32.Shell32Util;

Shell32Util.getKnownFolderPath(KnownFolders.FOLDERID_Documents);

It seems there is no additional dependency needed, at least my ide is not complaining.
Needs to be made os dependent differently for mac and unix though and can should maybe have a failsafe for older win versions, see https://github.com/harawata/appdirs/blob/2ade924b09b06d2f0b80e10f00ea01c191d5ff6a/src/main/java/net/harawata/appdirs/impl/ShellFolderResolver.java#L28-L44

@Siedlerchr
Copy link
Member

@calixtus I am not sure about the access to the internal of com sun modules. Maybe needs some flags in for modules

@calixtus
Copy link
Member

JNA is not an internal api, but publicly well documented and widely used.
https://java-native-access.github.io/jna/5.12.1/javadoc/
https://github.com/java-native-access/jna

@calixtus
Copy link
Member

grafik

@calixtus
Copy link
Member

This would have to be added to the module-info.java: requires com.sun.jna.platform;

@Siedlerchr
Copy link
Member

Try if this doesn't break jpackage

@tobiasdiez
Copy link
Member Author

Nice suggestion @calixtus. I think its best to submit this addition as a PR to AppDirs, which already takes care of the special handling of the different OS's.

Since this is a blocker for a 5.8 release in my opinion, should we first merge this PR here and once AppDirs provides the necessary functionality we can re-introduce the default file dir?

@calixtus
Copy link
Member

I will suggest it to AppDirs, but I think it may be a bit out of focus for them, since the name if the package and it's whole architecture seems to me clearly designed to hide every other KnownFolder from public access in this package. I'd rather opt for implementing a similar approach in our OS or sthg like package.

* upstream/main:
  Make autosave tick in shared database opening dialog active (#9258)
  Bump controlsfx from 11.1.1 to 11.1.2 (#9261)
  Bump actions/configure-pages from 1 to 2 (#9262)
  Bump hmarr/auto-approve-action from 2.4.0 to 3.0.0 (#9259)
  Bump gittools/actions from 0.9.13 to 0.9.14 (#9260)
  Fix for resizing cleanup entries dialog (#9240)
  Refresh example styles
  Squashed 'buildres/csl/csl-locales/' changes from cb98d36691..e243665390
  Squashed 'buildres/csl/csl-styles/' changes from 7bde3e4..4eee79a
  Fix casing
  Update contributing.md
  Remove obsolete Jekyll howto
  Updates Just-the-Docs from 0.3.3 to 0.4.0.rc3 (#9249)
  Place subgroups w.r.t. alphabetical ordering (#9228)
  DOAB Fetcher now fetches ISBN and imprint fields where possible (#9229)
  ISSUE-9145: implement isbn fetcher (#9205)
  Remove explicit javafx jmod stuff (#9245)
  New Crowdin updates (#9239)
This reverts commit 3e640f5.

# Conflicts:
#	CHANGELOG.md
#	src/main/java/org/jabref/preferences/FilePreferences.java
#	src/main/java/org/jabref/preferences/JabRefPreferences.java
#	src/test/java/org/jabref/model/database/BibDatabaseContextTest.java
…_file_dir

* upstream/default_file_dir:
  Update src/main/java/org/jabref/gui/desktop/os/Windows.java
@Siedlerchr
Copy link
Member

This PR is now ready. I refactored the Optional stuff again, and Carl implemented the JNI access.
Thanks for pointing out the overhead with initializing the awt/swing stuff @tobiasdiez

@calixtus
Copy link
Member

This is odd, because swing is now back in the package

@@ -2201,7 +2188,9 @@ public FilePreferences getFilePreferences() {

filePreferences = new FilePreferences(
getInternalPreferences().getUser(),
determineMainFileDirectory(get(MAIN_FILE_DIRECTORY)),
StringUtil.isNotBlank(get(MAIN_FILE_DIRECTORY))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refactor to

Suggested change
StringUtil.isNotBlank(get(MAIN_FILE_DIRECTORY))
getPath(MAIN_FILE_DIRECTORY).orElse(JabRefDesktop.getNativeDesktop().getDefaultFileChooserDirectory())

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's so such nethod. And I don't see the benefit of wrapping it an optional here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

StringUtil.isNotBlank(...) is - I believe - the equivalent to `... != null && !....isEmpty()", so should simplify determineMainFileDirectory

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the other hand, method get is called twice. Maybe we can extract the var from the constructor call

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we store quite a few paths in the preferences, it makes sense to introduce a helper for it in my opinion. You can also introduce a second default arg:

getPath(string name, Path defaultVal) {
   val = get(name)
   return StringUtil.isNotBlank(val) ? Path.of(val) : defaultVal
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've reintroduced a method

@calixtus
Copy link
Member

tests are failing since a51570d (#9222) , but they were working with eab433c (#9222)

@Siedlerchr Siedlerchr merged commit 25a8cd3 into main Oct 17, 2022
@Siedlerchr Siedlerchr deleted the default_file_dir branch October 17, 2022 20:39
Siedlerchr added a commit that referenced this pull request Oct 18, 2022
* upstream/main:
  Removed swing from default file dir detection (#9222)

# Conflicts:
#	src/main/java/org/jabref/gui/desktop/os/Linux.java
Siedlerchr added a commit that referenced this pull request Oct 18, 2022
* upstream/main:
  Removed swing from default file dir detection (#9222)
  Make autosave tick in shared database opening dialog active (#9258)
  Bump controlsfx from 11.1.1 to 11.1.2 (#9261)
  Bump actions/configure-pages from 1 to 2 (#9262)
  Bump hmarr/auto-approve-action from 2.4.0 to 3.0.0 (#9259)
  Bump gittools/actions from 0.9.13 to 0.9.14 (#9260)
shafinkamal pushed a commit to shafinkamal/jabref that referenced this pull request Oct 19, 2022
* Save files again relative to bib file

* Reworded

* Reintroduced default file chooser directory without swing

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update NativeDesktop.java

* Reworked ADR

* Added mac directory

* Removed comments

* Added linux support

* Revert "Save files again relative to bib file"

This reverts commit 3e640f5.

# Conflicts:
#	CHANGELOG.md
#	src/main/java/org/jabref/preferences/FilePreferences.java
#	src/main/java/org/jabref/preferences/JabRefPreferences.java
#	src/test/java/org/jabref/model/database/BibDatabaseContextTest.java

* Update src/main/java/org/jabref/gui/desktop/os/Windows.java

* fix merge errors

* fix wrong method call

* remove defautl
fix checkstyle

* reintroduce method to avoid calling get two times

* Introduced getPath method

* Update src/main/java/org/jabref/gui/desktop/os/Linux.java

fix env var

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>
Co-authored-by: Siedlerchr <siedlerkiller@gmail.com>
Siedlerchr added a commit that referenced this pull request Oct 21, 2022
* upstream/main: (28 commits)
  Minor code improvements in library properties dialog (#9265)
  Adjust and make tests for BibTex/Biblatex/CSL mapping more accurate by adding Apa 7th edition (#9255)
  Removed swing from default file dir detection (#9222)
  Make autosave tick in shared database opening dialog active (#9258)
  Bump controlsfx from 11.1.1 to 11.1.2 (#9261)
  Bump actions/configure-pages from 1 to 2 (#9262)
  Bump hmarr/auto-approve-action from 2.4.0 to 3.0.0 (#9259)
  Bump gittools/actions from 0.9.13 to 0.9.14 (#9260)
  Fix for resizing cleanup entries dialog (#9240)
  Refresh example styles
  Squashed 'buildres/csl/csl-locales/' changes from cb98d36691..e243665390
  Squashed 'buildres/csl/csl-styles/' changes from 7bde3e4..4eee79a
  Fix casing
  Update contributing.md
  Remove obsolete Jekyll howto
  Updates Just-the-Docs from 0.3.3 to 0.4.0.rc3 (#9249)
  Place subgroups w.r.t. alphabetical ordering (#9228)
  DOAB Fetcher now fetches ISBN and imprint fields where possible (#9229)
  ISSUE-9145: implement isbn fetcher (#9205)
  Remove explicit javafx jmod stuff (#9245)
  ...
Siedlerchr added a commit to TheGor1lla/jabref that referenced this pull request Oct 21, 2022
* upstream/main:
  [WIP] Add GitHub action: Greetings.yml - Automates advice to JabRefs first time code contributors (JabRef#9272)
  Minor code improvements in library properties dialog (JabRef#9265)
  Adjust and make tests for BibTex/Biblatex/CSL mapping more accurate by adding Apa 7th edition (JabRef#9255)
  Removed swing from default file dir detection (JabRef#9222)
  Make autosave tick in shared database opening dialog active (JabRef#9258)
  Bump controlsfx from 11.1.1 to 11.1.2 (JabRef#9261)
  Bump actions/configure-pages from 1 to 2 (JabRef#9262)
  Bump hmarr/auto-approve-action from 2.4.0 to 3.0.0 (JabRef#9259)
  Bump gittools/actions from 0.9.13 to 0.9.14 (JabRef#9260)
  Fix for resizing cleanup entries dialog (JabRef#9240)
  Refresh example styles
  Squashed 'buildres/csl/csl-locales/' changes from cb98d36691..e243665390
  Squashed 'buildres/csl/csl-styles/' changes from 7bde3e4..4eee79a
  Fix casing
  Update contributing.md
  Remove obsolete Jekyll howto
  Updates Just-the-Docs from 0.3.3 to 0.4.0.rc3 (JabRef#9249)
  Place subgroups w.r.t. alphabetical ordering (JabRef#9228)
  DOAB Fetcher now fetches ISBN and imprint fields where possible (JabRef#9229)
@koppor koppor mentioned this pull request Nov 6, 2022
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
external files hacktoberfest-accepted status: ready-for-review Pull Requests that are ready to be reviewed by the maintainers type: code-quality Issues related to code or architecture decisions
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants