@@ -29,6 +29,39 @@ export default function (view) {
29
29
"UserDataSaved" : "User Data Saved"
30
30
} ,
31
31
32
+ defaultMessages : {
33
+ "ItemAddedMovies" : "🎬 {item.Name} ({item.ProductionYear})\n added to library" ,
34
+ "ItemAddedSeries" : "📺 [Serie] {serie.Name} ({item.ProductionYear}) added to library" ,
35
+ "ItemAddedSeasons" : "📺 {season.Series.Name} ({item.ProductionYear})\n Season {seasonNumber} added to library" ,
36
+ "ItemAddedEpisodes" : "📺 {episode.Series.Name} ({item.ProductionYear})\n S{eSeasonNumber} - E{episodeNumber}\n '{item.Name}' added to library" ,
37
+ "ItemAddedAlbums" : "🎵 [Album] {album.Name} ({item.ProductionYear}) added to library" ,
38
+ "ItemAddedSongs" : "🎵 [Audio] {audio.Name} ({item.ProductionYear}) added to library" ,
39
+ "AuthenticationFailure" : "🔒 Authentication failure on {eventArgs.Argument.DeviceName} for user {eventArgs.Argument.Username}" ,
40
+ "AuthenticationSuccess" : "🔓 Authentication success for user {eventArgs.Argument.User.Name} on {eventArgs.Argument.SessionInfo.DeviceName}" ,
41
+ "PendingRestart" : "🔄 Jellyfin is pending a restart." ,
42
+ "PlaybackProgressMovies" : "👤 {eventArgs.Users[0].Username} is still watching on {eventArgs.DeviceName}:\n🎬 {eventArgs.Item.Name} ({eventArgs.Item.ProductionYear})" ,
43
+ "PlaybackProgressEpisodes" : "👤 {eventArgs.Users[0].Username} is still watching on {eventArgs.DeviceName}:\n🎬 {eventArgs.Item.Series.Name} ({eventArgs.Item.ProductionYear})\n S{playbackSeasonNumber} - E{playbackEpisodeNumber}\n '{eventArgs.Item.Name}'" ,
44
+ "PlaybackStartMovies" : "👤 {eventArgs.Users[0].Username} is watching on {eventArgs.DeviceName}:\n🎬 {eventArgs.Item.Name} ({eventArgs.Item.ProductionYear})\n📺 [{eventArgs.Item.MediaType}] {eventArgs.Item.Genres}\n🕒 {duration}\n📽 {eventArgs.Item.Overview}" ,
45
+ "PlaybackStartEpisodes" : "👤 {eventArgs.Users[0].Username} is watching on {eventArgs.DeviceName}:\n🎬 {eventArgs.Item.Series.Name} ({eventArgs.Item.ProductionYear})\n S{playbackSeasonNumber} - E{playbackEpisodeNumber}\n '{eventArgs.Item.Name}'\n📺 [{eventArgs.Item.MediaType}] {eventArgs.Item.Genres}\n🕒 {duration}\n📽 {eventArgs.Item.Overview}" ,
46
+ "PlaybackStopMovies" : "👤 {eventArgs.Users[0].Username} stopped watching:\n🎬 {eventArgs.Item.Name} ({eventArgs.Item.ProductionYear})" ,
47
+ "PlaybackStopEpisodes" : "👤 {eventArgs.Users[0].Username} stopped watching:\n🎬 {eventArgs.Item.Series.Name} ({eventArgs.Item.ProductionYear})\n S{playbackSeasonNumber} - E{playbackEpisodeNumber}\n '{eventArgs.Item.Name}'" ,
48
+ "PluginInstallationCancelled" : "🔴 {eventArgs.Argument.Name} plugin installation cancelled (version {eventArgs.Argument.Version}):" ,
49
+ "PluginInstallationFailed" : "🔴 {eventArgs.InstallationInfo} plugin installation failed (version {eventArgs.VersionInfo}):\n{eventArgs.Exception}" ,
50
+ "PluginInstalled" : "🚧 {eventArgs.Argument.Name} plugin installed (version {eventArgs.Argument.Version})" ,
51
+ "PluginInstalling" : "🚧 {eventArgs.Argument.Name} plugin is installing (version {eventArgs.Argument.Version})" ,
52
+ "PluginUninstalled" : "🚧 {eventArgs.Argument.Name} plugin uninstalled" ,
53
+ "PluginUpdated" : "🚧 {eventArgs.Argument.Name} plugin updated to version {eventArgs.Argument.Version}:🗒️ {eventArgs.Argument.Changelog}" ,
54
+ "SessionStart" : "👤 {eventArgs.Argument.UserName} has started a session on:\n💻 {eventArgs.Argument.Client} ({eventArgs.Argument.DeviceName})\n" ,
55
+ "SubtitleDownloadFailure" : "🚫 Subtitle download failed for {eventArgs.Item.Name}" ,
56
+ "TaskCompleted" : "🧰 Task {eventArgs.Task.Name} completed: {eventArgs.Task.CurrentProgress}%\n🗒️ ({eventArgs.Task.Category}) {eventArgs.Task.Description}" ,
57
+ "UserCreated" : "👤 User {eventArgs.Argument.Username} created." ,
58
+ "UserDeleted" : "🗑️ User {eventArgs.Argument.Username} deleted." ,
59
+ "UserLockedOut" : "👤🔒 User {eventArgs.Argument.Username} locked out" ,
60
+ "UserPasswordChanged" : "👤 User {eventArgs.Argument.Username} changed his password." ,
61
+ "UserUpdated" : "👤 User {eventArgs.Argument.Username} has been updated" ,
62
+ "UserDataSaved" : "👤 User {eventArgs.Argument.Username} data saved."
63
+ } ,
64
+
32
65
loadNotificationTypes : function ( userConfig ) {
33
66
const temp = document . querySelector ( "#template-notification-type" ) ;
34
67
const temp_without_textarea = document . querySelector ( "#template-notification-type-without-textarea" ) ;
@@ -49,6 +82,9 @@ export default function (view) {
49
82
name . innerText = TelegramNotifierConfig . notificationType . values [ key ] [ 0 ] ;
50
83
} else {
51
84
name . innerText = TelegramNotifierConfig . notificationType . values [ key ] ;
85
+ const textarea = template . querySelector ( '[data-name="txtTemplate"]' ) ;
86
+ textarea . value = userConfig === null ? this . defaultMessages [ key ] : userConfig [ key + 'StringMessage' ] ;
87
+ textarea . dataset . value = key ;
52
88
}
53
89
value . dataset . value = key ;
54
90
if ( userConfig === null ) {
@@ -64,14 +100,18 @@ export default function (view) {
64
100
template = subtemp . cloneNode ( true ) . content ;
65
101
const name = template . querySelector ( "[data-name=notificationSubtypeName]" ) ;
66
102
const value = template . querySelector ( "[data-name=notificationSubtypeValue]" ) ;
103
+ const textarea = template . querySelector ( '[data-name="txtTemplate"]' ) ;
67
104
68
105
name . innerText = subtype ;
69
106
const subkey = key + subtype . replace ( / \s / g, '' ) ;
70
107
value . dataset . value = subkey ;
108
+ textarea . dataset . value = subkey ;
71
109
if ( userConfig === null ) {
72
110
value . checked = false ;
111
+ textarea . value = this . defaultMessages [ subkey ] ;
73
112
} else {
74
113
value . checked = userConfig [ subkey ] === true ;
114
+ textarea . value = userConfig [ subkey + 'StringMessage' ] ;
75
115
}
76
116
container . appendChild ( template ) ;
77
117
}
@@ -83,12 +123,16 @@ export default function (view) {
83
123
const notificationTypeKeys = Object . keys ( TelegramNotifierConfig . notificationType . values ) . sort ( ) ;
84
124
for ( const key of notificationTypeKeys ) {
85
125
userConfig [ key ] = document . querySelector ( `[data-name=notificationTypeValue][data-value=${ key } ]` ) . checked ;
126
+ if ( typeof TelegramNotifierConfig . notificationType . values [ key ] === 'string' ) {
127
+ userConfig [ key + 'StringMessage' ] = document . querySelector ( `[data-name=txtTemplate][data-value=${ key } ]` ) . value ;
128
+ }
86
129
87
130
// Notification subtypes
88
131
if ( typeof TelegramNotifierConfig . notificationType . values [ key ] !== 'string' ) {
89
132
for ( const subtype of TelegramNotifierConfig . notificationType . values [ key ] . slice ( 1 ) ) {
90
133
const subkey = key + subtype . replace ( / \s / g, '' ) ;
91
134
userConfig [ subkey ] = document . querySelector ( `[data-name=notificationSubtypeValue][data-value=${ subkey } ]` ) . checked ;
135
+ userConfig [ subkey + 'StringMessage' ] = document . querySelector ( `[data-name=txtTemplate][data-value=${ subkey } ]` ) . value ;
92
136
}
93
137
}
94
138
}
@@ -136,6 +180,20 @@ export default function (view) {
136
180
}
137
181
} ) ;
138
182
183
+ document . body . addEventListener ( 'click' , function ( event ) {
184
+ const button = event . target . closest ( '.reset-template-button' ) ;
185
+
186
+ if ( button ) {
187
+ const container = button . closest ( 'div' ) ;
188
+ const textarea = container . querySelector ( 'textarea[data-name="txtTemplate"]' ) ;
189
+ const key = textarea . dataset . value ;
190
+
191
+ if ( textarea ) {
192
+ textarea . value = TelegramNotifierConfig . notificationType . defaultMessages [ key ] ;
193
+ }
194
+ }
195
+ } ) ;
196
+
139
197
} ,
140
198
141
199
loadConfig : function ( ) {
0 commit comments