-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.js
304 lines (286 loc) · 9.45 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
import React from "react";
import {
StyleSheet,
View,
Animated,
Text,
Button,
TextInput,
TouchableOpacity,
Linking
} from "react-native";
import FontAwesome, {
RegularIcons,
BrandIcons
} from "react-native-fontawesome";
import AsyncStorage from "@react-native-community/async-storage";
class App extends React.Component {
state = {
einleitung: [
"Sorry Jungs",
"Tut mir leid Mädels",
"Oops",
"Oh...",
"Ach je",
"Sorry, hab die Nachricht jetzt erst gelesen",
"Sorry Jungs, kann heute nicht"
],
entschuldigung: [
"Ich hab völlig verpennt",
"Ich hab verschwitzt",
"Mir ist entfallen",
"Ich hab nicht bedacht",
"Ich hab völlig vergessen",
"Mir war nicht klar",
"Mir ist dazwischen gekommen",
"Ich hab verpeilt",
"Ich hab grad festgestellt"
],
ausrede: [
"Desi's Hamster gestorben ist",
"Desi's Kaninchen gestorben ist",
"Desi's Meerschweinchen gestorben ist",
"Ich morgen Fotoshooting mit der Family hab",
"eine meiner 5.000 Nichten morgen getauft wird",
"meine Oma zum fünften mal in diesem Jahr gestorben ist",
"Morgen Heilige drei Könige ist und wir das immer feiern",
"mein Auto keinen Sprit mehr hat",
"mein Auto nicht angesprungen ist",
"mein Vater mir mein Auto nicht gegeben hat",
"morgen der Jahrestag von Desi's totem Hamster ist",
"morgen der Jahrestag von Desi's totem Kaninchen ist",
"morgen der Jahrestag von Desi's totem Meerschweinchen ist",
"Desi's Katze zum Tierarzt muss, weil sie einen Zahn gezogen bekommt",
"Ich meine Tage habe",
"ich mit den Jungs in Schottland Röcke anprobieren bin",
"ich mir beim Anstehen vor der Disco die Bänder gerissen hab",
"Ich dein Handy meinem Neffen geschenkt habe",
"Ich morgen früh den ganzen Tag Heartstone spielen wollte. Dafür muss ich fit sein",
"mein neugekauftes und von meinem Schwager generalüberholtes Auto zum dritten Mal in dieser Woche in der Werkstatt ist",
"mein Auspuff schon wieder abgefallen ist. Dabei steht Peugeot doch für echte französische Wertarbeit",
"Ich übrigens doch nicht zu meinem eigenen Geburtstag kommen kann. Kann mir das feiern doch nicht leisten. Die Geschenke könnt ihr mir ja bei Gelegenheit geben",
"ich doch nicht zum Fußball kommen kann. Mir ist aufgefallen dass ich mich dafür bewegen müsste. Das ist mir nach einem anstrengenden Tag World of Warcraft zu viel",
"Fußball doch heute nichts wird. Hab grade gemerkt dass Ich zu fett dafür bin",
"ich 9 Millionen für Gbamin geboten habe. Ich wollte nur 990.000 bieten! Aber ihr könnt mir ja sicher mein Geld zurück geben. Ansonsten kann ich leider nicht kommen, weil ich jetzt pleite bin",
"Ich heute doch nicht The Walking Dead gucken kommen kann. Desi will lieber was lebensbejahendes schauen. Aber sie sagt dass sie die Serie sehr interessant findet",
"heut gar keine Postkutsche mehr fährt. Das ist jetzt blöd",
"Ich mir den Urlaub ja doch gar nicht leisten kann. Gut, dass mir das einen Tag vor Abreise noch eingefallen ist"
],
vertroestung: [
"Aber das nächste mal bin ich auf jeden Fall am Start",
"Aber wir sehen uns ja nächste Woche",
"Aber das passiert sicher nicht nochmal",
"Sorry, das konnte ich aber echt vorher nicht wissen",
"Sorry, aber dafür kann ich wirklich nichts",
"Nächstes mal bin ich auf jeden Fall dabei",
"Jetzt ist es leider zu spät"
],
excuse: null,
submitting: false,
fadeAnim: new Animated.Value(0),
scaleAnim: new Animated.Value(1),
ownExcuses: [],
newExcuse: ""
};
async componentDidMount() {
try {
const ownExcuses = await AsyncStorage.getItem("excuses");
if (ownExcuses) {
this.setState({ ownExcuses: JSON.parse(ownExcuses) });
}
} catch (err) {
console.warn("Sorry, konnte eigene Ausreden nicht laden :-(");
}
}
generateExcuse = ownExcuse => {
const {
einleitung,
entschuldigung,
ausrede,
vertroestung,
ownExcuses
} = this.state;
const percentage = Math.random() * 100;
if (ownExcuse) {
this.setState({ excuse: ownExcuse });
} else if (ownExcuses && percentage > 80) {
this.setState({
excuse: ownExcuses[Math.floor(Math.random() * ownExcuses.length)]
});
} else {
let eins = einleitung[Math.floor(Math.random() * einleitung.length)];
let zwei =
entschuldigung[Math.floor(Math.random() * entschuldigung.length)];
let drei = ausrede[Math.floor(Math.random() * ausrede.length)];
let vier = vertroestung[Math.floor(Math.random() * vertroestung.length)];
this.setState({ excuse: `${eins}, ${zwei}, dass ${drei}. ${vier}!` });
}
if (!this.state.excuse || this.state.fadeAnim != 1) {
Animated.timing(
// Animate over time
this.state.fadeAnim, // The animated value to drive
{
toValue: 1, // Animate to opacity: 1 (opaque)
duration: 1000 // Make it take a while
}
).start();
} else {
Animated.sequence([
Animated.spring(this.state.scaleAnim, {
toValue: 1.5,
bounciness: 2,
speed: 40,
useNativeDriver: true
}),
Animated.spring(this.state.scaleAnim, {
toValue: 1,
bounciness: 10,
speed: 40,
useNativeDriver: true
})
]).start();
}
};
saveOwnExcuse = async () => {
try {
const { newExcuse } = this.state;
if (newExcuse) {
await this.setState({ submitting: true });
const ownExcuses = await AsyncStorage.getItem("excuses");
let newExcuses = [];
if (ownExcuses) {
newExcuses = [...JSON.parse(ownExcuses), newExcuse];
}
await AsyncStorage.setItem("excuses", JSON.stringify(newExcuses));
await this.setState({
ownExcuses: JSON.stringify(newExcuses),
newExcuse: "",
submitting: false
});
this.generateExcuse(newExcuse);
}
} catch (err) {
console.warn("Sorry, konnte die Ausrede nicht speichern :-(");
}
};
render() {
return (
<View style={styles.container}>
<Text style={styles.header}>Doppelkinn-Domme Ausredengenerator</Text>
<Text>Drück den Knopf um Domme labern zu lassen</Text>
{this.state.excuse && (
<React.Fragment>
<Animated.View
style={{
...styles.dommeTalk,
transform: [{ scale: this.state.scaleAnim }]
}}>
<Text style={styles.domme}>Domme:</Text>
<Animated.View style={{ opacity: this.state.fadeAnim }}>
<Text style={styles.excuse}>{this.state.excuse}</Text>
</Animated.View>
<TouchableOpacity
onPress={async () => {
try {
await Linking.openURL(
`whatsapp://send?text=${`${this.state.excuse}\n_generated by the Doppelkinn-Domme Ausredengenerator_`}`
);
} catch (err) {
console.warn(
"Sorry, konnte nicht auf WhatsApp zugreifen :-("
);
}
}}
style={styles.whatsappContainer}>
<FontAwesome
style={styles.whatsappIcon}
icon={BrandIcons.whatsapp}
/>
<Text style={styles.whatsapp}>
Teile die Ausrede via WhatsApp
</Text>
</TouchableOpacity>
</Animated.View>
</React.Fragment>
)}
<View>
<Text>Füg deine eigene Ausrede hinzu</Text>
<TextInput
underlineColorAndroid="lightpink"
disabled={this.state.submitting}
placeholder="Sorry Mädels,..."
onChangeText={newExcuse => this.setState({ newExcuse })}
value={this.state.newExcuse}></TextInput>
<Button
color="#fa8072"
title="Save"
onPress={() => this.saveOwnExcuse()}
disabled={this.state.submitting}
/>
</View>
<View style={styles.button}>
<Button
color="#ff1493"
onPress={() => this.generateExcuse(null)}
title="Make Domme speak"
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "space-between",
alignItems: "center",
backgroundColor: "#F5FCFF",
fontFamily: "Roboto"
},
header: {
fontSize: 20,
fontWeight: "bold",
fontStyle: "italic",
padding: 10,
textAlign: "center",
backgroundColor: "pink"
},
dommeTalk: {
backgroundColor: "#ffdab9",
paddingTop: 10,
paddingBottom: 5,
alignSelf: "stretch"
},
domme: {
paddingLeft: 5,
color: "#ff4500",
fontStyle: "italic"
},
excuse: {
paddingLeft: 10,
paddingRight: 10,
textAlign: "center",
fontStyle: "italic",
lineHeight: 20
},
whatsappContainer: {
paddingLeft: 5,
paddingTop: 10,
flexDirection: "row",
alignItems: "center"
},
whatsapp: {
fontSize: 10,
fontStyle: "italic",
alignSelf: "flex-start",
color: "#25D366"
},
whatsappIcon: {
color: "#25D366",
paddingRight: 3
},
button: {
marginBottom: 40
}
});
export default App;