Skip to content

Commit e7627b9

Browse files
author
Oleg Smirnov
committed
add missed files
1 parent 3a35cf3 commit e7627b9

File tree

3 files changed

+152
-0
lines changed

3 files changed

+152
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*******************************************************************************
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019 vk.com
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
******************************************************************************/
24+
25+
package com.vk.api.sdk
26+
27+
import java.util.concurrent.ConcurrentHashMap
28+
29+
interface VKKeyValueStorage {
30+
fun put(key: String, value: String)
31+
fun get(key: String): String?
32+
fun remove(key: String)
33+
34+
fun putOrRemove(key: String, value: String?) {
35+
value?.let { put(key, value) } ?: remove(key)
36+
}
37+
}
38+
39+
class VKCachedKeyValueStorage(private val storage: VKKeyValueStorage): VKKeyValueStorage {
40+
private val cache: MutableMap<String, String> = ConcurrentHashMap()
41+
42+
override fun put(key: String, value: String) {
43+
if (cache[key] != value) {
44+
cache[key] = value
45+
storage.put(key, value)
46+
}
47+
}
48+
49+
override fun get(key: String): String? {
50+
val value = cache[key]
51+
return if (value !== NULL_STRING) {
52+
return value ?: getFromStorage(key)
53+
} else null
54+
}
55+
56+
override fun remove(key: String) {
57+
if (cache[key] !== NULL_STRING) {
58+
cache[key] = NULL_STRING
59+
storage.remove(key)
60+
}
61+
}
62+
63+
private fun getFromStorage(key: String): String? {
64+
val value = storage.get(key)
65+
cache[key] = value ?: NULL_STRING
66+
return value
67+
}
68+
69+
companion object {
70+
private val NULL_STRING = String()
71+
}
72+
}
73+
74+
fun VKKeyValueStorage.cached(): VKKeyValueStorage = VKCachedKeyValueStorage(this)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*******************************************************************************
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019 vk.com
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
******************************************************************************/
24+
25+
package com.vk.api.sdk
26+
27+
import android.content.Context
28+
import android.content.Context.MODE_PRIVATE
29+
30+
class VKPreferencesKeyValueStorage(context: Context, prefsName: String = PREFERENCE_NAME) : VKKeyValueStorage {
31+
private val prefs = context.getSharedPreferences(prefsName, MODE_PRIVATE)
32+
33+
override fun put(key: String, value: String) {
34+
prefs.edit().putString(key, value).apply()
35+
}
36+
37+
override fun get(key: String): String? {
38+
return prefs.getString(key, null)
39+
}
40+
41+
override fun remove(key: String) {
42+
prefs.edit().remove(key).apply()
43+
}
44+
45+
companion object {
46+
private const val PREFERENCE_NAME = "com.vkontakte.android_pref_name"
47+
}
48+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*******************************************************************************
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019 vk.com
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
******************************************************************************/
24+
25+
package com.vk.api.sdk.exceptions
26+
27+
open class VKInternalServerErrorException(
28+
httpStatus: Int,
29+
detailMessage: String
30+
) : Exception("Server returned httpStatusCode=$httpStatus with body: $detailMessage")

0 commit comments

Comments
 (0)