mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-03 10:19:14 +02:00
Merge remote-tracking branch 'origin/main' into 21-customizable-events
This commit is contained in:
@@ -1,16 +1,14 @@
|
|||||||
package functions
|
package functions
|
||||||
|
|
||||||
import "unicode"
|
import "strings"
|
||||||
|
|
||||||
// check if course is empty or contains only whitespaces
|
// check if string is empty or contains only whitespaces
|
||||||
func OnlyWhitespace(word string) bool {
|
func OnlyWhitespace(word string) bool {
|
||||||
for _, letter := range word {
|
if len(strings.TrimSpace(word)) == 0 {
|
||||||
if !unicode.IsSpace(letter) || !(letter == int32(160)) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func Contains(s []string, e string) bool {
|
func Contains(s []string, e string) bool {
|
||||||
for _, a := range s {
|
for _, a := range s {
|
||||||
|
33
backend/service/functions/string_test.go
Normal file
33
backend/service/functions/string_test.go
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package functions
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestOnlyWhitespace(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
word string
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{"empty string", args{""}, true},
|
||||||
|
{"whitespace", args{" "}, true},
|
||||||
|
{"whitespaces", args{" "}, true},
|
||||||
|
{"whitespaces and tabs", args{" \t"}, true},
|
||||||
|
{"whitespaces and tabs and newlines", args{" \t\n"}, true},
|
||||||
|
{"whitespaces and tabs and newlines and non-breaking spaces", args{" \t\n\u00A0"}, true},
|
||||||
|
{"non-whitespace", args{"a"}, false},
|
||||||
|
{"non-whitespaces", args{"abc"}, false},
|
||||||
|
{"non-whitespaces and tabs", args{"abc\t"}, false},
|
||||||
|
{"non-whitespaces and tabs and newlines", args{"abc\t\n"}, false},
|
||||||
|
{"non-whitespaces and tabs and newlines and non-breaking spaces", args{"abc\t\n\u00A0"}, false},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := OnlyWhitespace(tt.args.word); got != tt.want {
|
||||||
|
t.Errorf("OnlyWhitespace() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@@ -37,19 +37,20 @@ func (icalModel IcalModel) EmitICal() goics.Componenter {
|
|||||||
s.AddProperty(k, v)
|
s.AddProperty(k, v)
|
||||||
|
|
||||||
if mappingFound {
|
if mappingFound {
|
||||||
s.AddProperty("SUMMARY", replaceNameIfUserDefined(&event, mapEntry))
|
addPropertyIfNotEmpty(s, "SUMMARY", replaceNameIfUserDefined(&event, mapEntry))
|
||||||
addAlarmIfSpecified(s, event, mapEntry)
|
addAlarmIfSpecified(s, event, mapEntry)
|
||||||
} else {
|
} else {
|
||||||
s.AddProperty("SUMMARY", event.Name)
|
addPropertyIfNotEmpty(s, "SUMMARY", event.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.AddProperty("DESCRIPTION", generateDescription(event))
|
addPropertyIfNotEmpty(s, "DESCRIPTION", generateDescription(event))
|
||||||
s.AddProperty("LOCATION", event.Rooms)
|
addPropertyIfNotEmpty(s, "LOCATION", event.Rooms)
|
||||||
c.AddComponent(s)
|
c.AddComponent(s)
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if reminder is specified in the configuration for this event, an alarm will be added to the event
|
||||||
func addAlarmIfSpecified(s *goics.Component, event model.Event, mapping model.FeedCollection) {
|
func addAlarmIfSpecified(s *goics.Component, event model.Event, mapping model.FeedCollection) {
|
||||||
if mapping.Reminder {
|
if mapping.Reminder {
|
||||||
a := goics.NewComponent()
|
a := goics.NewComponent()
|
||||||
@@ -61,6 +62,8 @@ func addAlarmIfSpecified(s *goics.Component, event model.Event, mapping model.Fe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// replaceNameIfUserDefined replaces the name of the event with the user defined name if it is not empty
|
||||||
|
// all contained template strings will be replaced with the corresponding values from the event
|
||||||
func replaceNameIfUserDefined(event *model.Event, mapping model.FeedCollection) string {
|
func replaceNameIfUserDefined(event *model.Event, mapping model.FeedCollection) string {
|
||||||
if !functions.OnlyWhitespace(mapping.UserDefinedName) {
|
if !functions.OnlyWhitespace(mapping.UserDefinedName) {
|
||||||
return names.ReplaceTemplateSubStrings(mapping.UserDefinedName, *event)
|
return names.ReplaceTemplateSubStrings(mapping.UserDefinedName, *event)
|
||||||
@@ -69,6 +72,14 @@ func replaceNameIfUserDefined(event *model.Event, mapping model.FeedCollection)
|
|||||||
return event.Name
|
return event.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddPropertyIfNotEmpty adds a property to the component if the value is not empty
|
||||||
|
// or contains only whitespaces
|
||||||
|
func addPropertyIfNotEmpty(component *goics.Component, key string, value string) {
|
||||||
|
if !functions.OnlyWhitespace(value) {
|
||||||
|
component.AddProperty(key, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func generateDescription(event model.Event) string {
|
func generateDescription(event model.Event) string {
|
||||||
var description string
|
var description string
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user