mirror of https://github.com/halo-dev/halo
				
				
				
			Change theme property list to set
							parent
							
								
									01b57826f0
								
							
						
					
					
						commit
						ef9b6eb9f8
					
				| 
						 | 
				
			
			@ -2,6 +2,8 @@ package run.halo.app.handler.theme.config.support;
 | 
			
		|||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Theme property.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -84,4 +86,17 @@ public class ThemeProperty {
 | 
			
		|||
         */
 | 
			
		||||
        private String avatar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object o) {
 | 
			
		||||
        if (this == o) return true;
 | 
			
		||||
        if (o == null || getClass() != o.getClass()) return false;
 | 
			
		||||
        ThemeProperty that = (ThemeProperty) o;
 | 
			
		||||
        return id.equals(that.id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ import java.io.IOException;
 | 
			
		|||
import java.nio.file.Path;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : RYAN0UP
 | 
			
		||||
| 
						 | 
				
			
			@ -86,10 +87,10 @@ public interface ThemeService {
 | 
			
		|||
    /**
 | 
			
		||||
     * Gets all themes
 | 
			
		||||
     *
 | 
			
		||||
     * @return list of themes
 | 
			
		||||
     * @return set of themes
 | 
			
		||||
     */
 | 
			
		||||
    @NonNull
 | 
			
		||||
    List<ThemeProperty> getThemes();
 | 
			
		||||
    Set<ThemeProperty> getThemes();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Lists theme folder by absolute path.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ public class ThemeServiceImpl implements ThemeService {
 | 
			
		|||
    public Optional<ThemeProperty> getThemeBy(String themeId) {
 | 
			
		||||
        Assert.hasText(themeId, "Theme id must not be blank");
 | 
			
		||||
 | 
			
		||||
        List<ThemeProperty> themes = getThemes();
 | 
			
		||||
        Set<ThemeProperty> themes = getThemes();
 | 
			
		||||
 | 
			
		||||
        log.debug("Themes type: [{}]", themes.getClass());
 | 
			
		||||
        log.debug("Themes: [{}]", themes);
 | 
			
		||||
| 
						 | 
				
			
			@ -102,38 +102,33 @@ public class ThemeServiceImpl implements ThemeService {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<ThemeProperty> getThemes() {
 | 
			
		||||
        // Fetch themes from cache
 | 
			
		||||
        List<ThemeProperty> result = cacheStore.get(THEMES_CACHE_KEY).map(themesCache -> {
 | 
			
		||||
            try {
 | 
			
		||||
    public Set<ThemeProperty> getThemes() {
 | 
			
		||||
        Optional<String> themeCacheString = cacheStore.get(THEMES_CACHE_KEY);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            if (themeCacheString.isPresent()) {
 | 
			
		||||
                // Convert to theme properties
 | 
			
		||||
                ThemeProperty[] themeProperties = JsonUtils.jsonToObject(themesCache, ThemeProperty[].class);
 | 
			
		||||
                return Arrays.asList(themeProperties);
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                throw new ServiceException("Failed to parse json", e);
 | 
			
		||||
                ThemeProperty[] themeProperties = JsonUtils.jsonToObject(themeCacheString.get(), ThemeProperty[].class);
 | 
			
		||||
                return new HashSet<>(Arrays.asList(themeProperties));
 | 
			
		||||
            }
 | 
			
		||||
        }).orElseGet(() -> {
 | 
			
		||||
            try {
 | 
			
		||||
                // List and filter sub folders
 | 
			
		||||
                List<Path> themePaths = Files.list(getBasePath()).filter(path -> Files.isDirectory(path)).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
                if (CollectionUtils.isEmpty(themePaths)) {
 | 
			
		||||
                    return Collections.emptyList();
 | 
			
		||||
                }
 | 
			
		||||
            // List and filter sub folders
 | 
			
		||||
            List<Path> themePaths = Files.list(getBasePath()).filter(path -> Files.isDirectory(path)).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
                // Get theme properties
 | 
			
		||||
                List<ThemeProperty> themes = themePaths.stream().map(this::getProperty).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
                // Cache the themes
 | 
			
		||||
                cacheStore.put(THEMES_CACHE_KEY, JsonUtils.objectToJson(themes));
 | 
			
		||||
 | 
			
		||||
                return themes;
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                throw new ServiceException("Themes scan failed", e);
 | 
			
		||||
            if (CollectionUtils.isEmpty(themePaths)) {
 | 
			
		||||
                return Collections.emptySet();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return CollectionUtils.isEmpty(result) ? Collections.emptyList() : result;
 | 
			
		||||
            // Get theme properties
 | 
			
		||||
            Set<ThemeProperty> themes = themePaths.stream().map(this::getProperty).collect(Collectors.toSet());
 | 
			
		||||
 | 
			
		||||
            // Cache the themes
 | 
			
		||||
            cacheStore.put(THEMES_CACHE_KEY, JsonUtils.objectToJson(themes));
 | 
			
		||||
 | 
			
		||||
            return themes;
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            throw new ServiceException("Failed to get themes", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ import run.halo.app.service.ThemeSettingService;
 | 
			
		|||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Theme controller.
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +42,7 @@ public class ThemeController {
 | 
			
		|||
 | 
			
		||||
    @GetMapping
 | 
			
		||||
    @ApiOperation("List all themes")
 | 
			
		||||
    public List<ThemeProperty> listAll() {
 | 
			
		||||
    public Set<ThemeProperty> listAll() {
 | 
			
		||||
        return themeService.getThemes();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +119,7 @@ public class ThemeController {
 | 
			
		|||
 | 
			
		||||
    @PostMapping("upload")
 | 
			
		||||
    @ApiOperation("Upload theme")
 | 
			
		||||
    public ThemeProperty uploadTheme(@RequestPart("file") MultipartFile file){
 | 
			
		||||
    public ThemeProperty uploadTheme(@RequestPart("file") MultipartFile file) {
 | 
			
		||||
        return themeService.upload(file);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue