2929
3030package cc .arduino .contributions .libraries ;
3131
32- import cc .arduino .contributions .DownloadableContributionBuiltInAtTheBottomComparator ;
3332import cc .arduino .contributions .VersionComparator ;
33+ import processing .app .packages .UserLibraryFolder .Location ;
3434
35- import java .util .Collections ;
3635import java .util .LinkedList ;
3736import java .util .List ;
3837import java .util .Optional ;
39- import java .util .stream .Collectors ;
4038
4139public class ContributedLibraryReleases {
4240
@@ -49,6 +47,10 @@ public ContributedLibraryReleases(ContributedLibrary library) {
4947 add (library );
5048 }
5149
50+ public ContributedLibraryReleases (List <ContributedLibrary > libraries ) {
51+ libraries .forEach (this ::add );
52+ }
53+
5254 public List <ContributedLibrary > getReleases () {
5355 return releases ;
5456 }
@@ -76,12 +78,16 @@ public void add(ContributedLibrary library) {
7678 }
7779
7880 public Optional <ContributedLibrary > getInstalled () {
79- List <ContributedLibrary > installedReleases = releases .stream ().filter (l -> l .isLibraryInstalled ()).collect (Collectors .toList ());
80- if (installedReleases .isEmpty ()) {
81- return Optional .empty ();
82- }
83- Collections .sort (installedReleases , new DownloadableContributionBuiltInAtTheBottomComparator ());
84- return Optional .of (installedReleases .get (0 ));
81+ return releases .stream () //
82+ .filter (ContributedLibrary ::isLibraryInstalled ) //
83+ .reduce ((x , y ) -> {
84+ Location lx = x .getInstalledLibrary ().get ().getLocation ();
85+ Location ly = y .getInstalledLibrary ().get ().getLocation ();
86+ if (lx == ly ) {
87+ return VersionComparator .max (x , y );
88+ }
89+ return lx == Location .SKETCHBOOK ? x : y ;
90+ });
8591 }
8692
8793 public ContributedLibrary getLatest () {
0 commit comments