🔀 Merge branch 'release/v82'
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / core / PreferencesLoader.kt
1 package net.pterodactylus.sone.core
2
3 import net.pterodactylus.sone.fcp.FcpInterface.*
4 import net.pterodactylus.util.config.*
5
6 /**
7  * Loads preferences stored in a [Configuration] into a [Preferences] object.
8  */
9 class PreferencesLoader(private val preferences: Preferences) {
10
11         fun loadFrom(configuration: Configuration) {
12                 loadInsertionDelay(configuration)
13                 loadPostsPerPage(configuration)
14                 loadImagesPerPage(configuration)
15                 loadCharactersPerPost(configuration)
16                 loadPostCutOffLength(configuration)
17                 loadRequireFullAccess(configuration)
18                 loadFcpInterfaceActive(configuration)
19                 loadFcpFullAccessRequired(configuration)
20                 loadStrictFiltering(configuration)
21         }
22
23         private fun loadInsertionDelay(configuration: Configuration) {
24                 preferences.newInsertionDelay = configuration.getIntValue("Option/InsertionDelay").getValue(null)
25         }
26
27         private fun loadPostsPerPage(configuration: Configuration) {
28                 preferences.newPostsPerPage = configuration.getIntValue("Option/PostsPerPage").getValue(null)
29         }
30
31         private fun loadImagesPerPage(configuration: Configuration) {
32                 preferences.newImagesPerPage = configuration.getIntValue("Option/ImagesPerPage").getValue(null)
33         }
34
35         private fun loadCharactersPerPost(configuration: Configuration) {
36                 preferences.newCharactersPerPost = configuration.getIntValue("Option/CharactersPerPost").getValue(null)
37         }
38
39         private fun loadPostCutOffLength(configuration: Configuration) {
40                 try {
41                         preferences.newPostCutOffLength = configuration.getIntValue("Option/PostCutOffLength").getValue(null)
42                 } catch (iae1: IllegalArgumentException) { /* previous versions allowed -1, ignore and use default. */
43                 }
44         }
45
46         private fun loadRequireFullAccess(configuration: Configuration) {
47                 preferences.newRequireFullAccess = configuration.getBooleanValue("Option/RequireFullAccess").getValue(null)
48         }
49
50         private fun loadFcpInterfaceActive(configuration: Configuration) {
51                 preferences.newFcpInterfaceActive = configuration.getBooleanValue("Option/ActivateFcpInterface").getValue(null)
52         }
53
54         private fun loadFcpFullAccessRequired(configuration: Configuration) {
55                 val fullAccessRequiredInteger = configuration.getIntValue("Option/FcpFullAccessRequired").getValue(null)
56                 preferences.newFcpFullAccessRequired = fullAccessRequiredInteger?.let { FullAccessRequired.values()[it] }
57         }
58
59         private fun loadStrictFiltering(configuration: Configuration) {
60                 preferences.newStrictFiltering = configuration.getBooleanValue("Option/StrictFiltering").getValue(null)
61         }
62
63 }