🚚 Move kotlin files to correct source path
[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         }
21
22         private fun loadInsertionDelay(configuration: Configuration) {
23                 preferences.newInsertionDelay = configuration.getIntValue("Option/InsertionDelay").getValue(null)
24         }
25
26         private fun loadPostsPerPage(configuration: Configuration) {
27                 preferences.newPostsPerPage = configuration.getIntValue("Option/PostsPerPage").getValue(null)
28         }
29
30         private fun loadImagesPerPage(configuration: Configuration) {
31                 preferences.newImagesPerPage = configuration.getIntValue("Option/ImagesPerPage").getValue(null)
32         }
33
34         private fun loadCharactersPerPost(configuration: Configuration) {
35                 preferences.newCharactersPerPost = configuration.getIntValue("Option/CharactersPerPost").getValue(null)
36         }
37
38         private fun loadPostCutOffLength(configuration: Configuration) {
39                 try {
40                         preferences.newPostCutOffLength = configuration.getIntValue("Option/PostCutOffLength").getValue(null)
41                 } catch (iae1: IllegalArgumentException) { /* previous versions allowed -1, ignore and use default. */
42                 }
43         }
44
45         private fun loadRequireFullAccess(configuration: Configuration) {
46                 preferences.newRequireFullAccess = configuration.getBooleanValue("Option/RequireFullAccess").getValue(null)
47         }
48
49         private fun loadFcpInterfaceActive(configuration: Configuration) {
50                 preferences.newFcpInterfaceActive = configuration.getBooleanValue("Option/ActivateFcpInterface").getValue(null)
51         }
52
53         private fun loadFcpFullAccessRequired(configuration: Configuration) {
54                 val fullAccessRequiredInteger = configuration.getIntValue("Option/FcpFullAccessRequired").getValue(null)
55                 preferences.newFcpFullAccessRequired = fullAccessRequiredInteger?.let { FullAccessRequired.values()[it] }
56         }
57
58 }