Add channel topic to output

Closes #22
This commit is contained in:
Oleksii Holub 2017-11-09 17:55:04 +02:00
parent 4a986fe5df
commit ab46361489
6 changed files with 62 additions and 30 deletions

View file

@ -6,12 +6,15 @@
public string Name { get; } public string Name { get; }
public string Topic { get; }
public ChannelType Type { get; } public ChannelType Type { get; }
public Channel(string id, string name, ChannelType type) public Channel(string id, string name, string topic, ChannelType type)
{ {
Id = id; Id = id;
Name = name; Name = name;
Topic = topic;
Type = type; Type = type;
} }

View file

@ -10,6 +10,8 @@ namespace DiscordChatExporter.Models
public string Name { get; } public string Name { get; }
public string FullyQualifiedName => $"{Name}#{Discriminator:0000}";
public string AvatarHash { get; } public string AvatarHash { get; }
public string AvatarUrl => AvatarHash.IsNotBlank() public string AvatarUrl => AvatarHash.IsNotBlank()
@ -26,7 +28,7 @@ namespace DiscordChatExporter.Models
public override string ToString() public override string ToString()
{ {
return $"{Name}#{Discriminator}"; return FullyQualifiedName;
} }
} }
} }

View file

@ -10,7 +10,9 @@ a {
text-decoration: none; text-decoration: none;
} }
a:hover { text-decoration: underline; } a:hover {
text-decoration: underline;
}
div.pre { div.pre {
background-color: #2F3136; background-color: #2F3136;
@ -37,7 +39,9 @@ div#info {
max-width: 100%; max-width: 100%;
} }
div#log { max-width: 100%; } div#log {
max-width: 100%;
}
img.guild-icon { img.guild-icon {
max-height: 64px; max-height: 64px;
@ -51,15 +55,22 @@ div.info-right {
div.guild-name { div.guild-name {
color: #FFFFFF; color: #FFFFFF;
font-size: 1.4rem; font-size: 1.4em;
} }
div.channel-name { div.channel-name {
color: #FFFFFF; color: #FFFFFF;
font-size: 1.2rem; font-size: 1.2em;
} }
div.misc { margin-top: 2px; } div.channel-topic {
margin-top: 2px;
color: #FFFFFF;
}
div.channel-messagecount {
margin-top: 2px;
}
div.msg { div.msg {
border-top: 1px solid rgba(255, 255, 255, 0.04); border-top: 1px solid rgba(255, 255, 255, 0.04);
@ -88,23 +99,23 @@ div.msg-right {
span.msg-user { span.msg-user {
color: #FFFFFF; color: #FFFFFF;
font-size: 1rem; font-size: 1em;
} }
span.msg-date { span.msg-date {
color: rgba(255, 255, 255, 0.2); color: rgba(255, 255, 255, 0.2);
font-size: .75rem; font-size: .75em;
margin-left: 5px; margin-left: 5px;
} }
span.msg-edited { span.msg-edited {
color: rgba(255, 255, 255, 0.2); color: rgba(255, 255, 255, 0.2);
font-size: .8rem; font-size: .8em;
margin-left: 5px; margin-left: 5px;
} }
div.msg-content { div.msg-content {
font-size: .9375rem; font-size: .9375em;
padding-top: 5px; padding-top: 5px;
word-break: break-all; word-break: break-all;
} }

View file

@ -10,7 +10,9 @@ a {
text-decoration: none; text-decoration: none;
} }
a:hover { text-decoration: underline; } a:hover {
text-decoration: underline;
}
div.pre { div.pre {
background-color: #F9F9F9; background-color: #F9F9F9;
@ -37,7 +39,9 @@ div#info {
max-width: 100%; max-width: 100%;
} }
div#log { max-width: 100%; } div#log {
max-width: 100%;
}
img.guild-icon { img.guild-icon {
max-height: 64px; max-height: 64px;
@ -51,15 +55,22 @@ div.info-right {
div.guild-name { div.guild-name {
color: #2F3136; color: #2F3136;
font-size: 1.4rem; font-size: 1.4em;
} }
div.channel-name { div.channel-name {
color: #2F3136; color: #2F3136;
font-size: 1.2rem; font-size: 1.2em;
} }
div.misc { margin-top: 2px; } div.channel-topic {
margin-top: 2px;
color: #2F3136;
}
div.channel-messagecount {
margin-top: 2px;
}
div.msg { div.msg {
border-top: 1px solid #ECEEEF; border-top: 1px solid #ECEEEF;
@ -88,23 +99,23 @@ div.msg-right {
span.msg-user { span.msg-user {
color: #2F3136; color: #2F3136;
font-size: 1rem; font-size: 1em;
} }
span.msg-date { span.msg-date {
color: #99AAB5; color: #99AAB5;
font-size: .75rem; font-size: .75em;
margin-left: 5px; margin-left: 5px;
} }
span.msg-edited { span.msg-edited {
color: #99AAB5; color: #99AAB5;
font-size: .8rem; font-size: .8em;
margin-left: 5px; margin-left: 5px;
} }
div.msg-content { div.msg-content {
font-size: .9375rem; font-size: .9375em;
padding-top: 5px; padding-top: 5px;
word-break: break-all; word-break: break-all;
} }

View file

@ -52,6 +52,7 @@ namespace DiscordChatExporter.Services
// Get basic data // Get basic data
var id = token.Value<string>("id"); var id = token.Value<string>("id");
var type = (ChannelType) token.Value<int>("type"); var type = (ChannelType) token.Value<int>("type");
var topic = token.Value<string>("topic");
// Extract name based on type // Extract name based on type
string name; string name;
@ -65,7 +66,7 @@ namespace DiscordChatExporter.Services
name = token.Value<string>("name"); name = token.Value<string>("name");
} }
return new Channel(id, name, type); return new Channel(id, name, topic, type);
} }
private Message ParseMessage(JToken token) private Message ParseMessage(JToken token)
@ -129,7 +130,7 @@ namespace DiscordChatExporter.Services
.Select(m => m.Groups[1].Value) .Select(m => m.Groups[1].Value)
.ExceptBlank() .ExceptBlank()
.Select(i => _channelCache.GetOrDefault(i) ?? .Select(i => _channelCache.GetOrDefault(i) ??
new Channel(i, "deleted-channel", ChannelType.GuildTextChat)) new Channel(i, "deleted-channel", null, ChannelType.GuildTextChat))
.ToArray(); .ToArray();
return new Message(id, type, author, timeStamp, editedTimeStamp, content, attachments, return new Message(id, type, author, timeStamp, editedTimeStamp, content, attachments,

View file

@ -28,8 +28,9 @@ namespace DiscordChatExporter.Services
// Guild and channel info // Guild and channel info
await writer.WriteLineAsync('='.Repeat(48)); await writer.WriteLineAsync('='.Repeat(48));
await writer.WriteLineAsync($"Guild: {log.Guild}"); await writer.WriteLineAsync($"Guild: {log.Guild.Name}");
await writer.WriteLineAsync($"Channel: {log.Channel}"); await writer.WriteLineAsync($"Channel: {log.Channel.Name}");
await writer.WriteLineAsync($"Topic: {log.Channel.Topic}");
await writer.WriteLineAsync($"Messages: {log.TotalMessageCount:N0}"); await writer.WriteLineAsync($"Messages: {log.TotalMessageCount:N0}");
await writer.WriteLineAsync('='.Repeat(48)); await writer.WriteLineAsync('='.Repeat(48));
await writer.WriteLineAsync(); await writer.WriteLineAsync();
@ -38,7 +39,7 @@ namespace DiscordChatExporter.Services
foreach (var group in log.MessageGroups) foreach (var group in log.MessageGroups)
{ {
var timeStampFormatted = group.TimeStamp.ToString(_settingsService.DateFormat); var timeStampFormatted = group.TimeStamp.ToString(_settingsService.DateFormat);
await writer.WriteLineAsync($"{group.Author} [{timeStampFormatted}]"); await writer.WriteLineAsync($"{group.Author.FullyQualifiedName} [{timeStampFormatted}]");
// Messages // Messages
foreach (var message in group.Messages) foreach (var message in group.Messages)
@ -75,7 +76,7 @@ namespace DiscordChatExporter.Services
// HEAD // HEAD
await writer.WriteLineAsync("<head>"); await writer.WriteLineAsync("<head>");
await writer.WriteLineAsync($"<title>{log.Guild} - {log.Channel}</title>"); await writer.WriteLineAsync($"<title>{log.Guild.Name} - {log.Channel.Name}</title>");
await writer.WriteLineAsync("<meta charset=\"utf-8\" />"); await writer.WriteLineAsync("<meta charset=\"utf-8\" />");
await writer.WriteLineAsync("<meta name=\"viewport\" content=\"width=device-width\" />"); await writer.WriteLineAsync("<meta name=\"viewport\" content=\"width=device-width\" />");
await writer.WriteLineAsync($"<style>{css}</style>"); await writer.WriteLineAsync($"<style>{css}</style>");
@ -90,9 +91,11 @@ namespace DiscordChatExporter.Services
await writer.WriteLineAsync($"<img class=\"guild-icon\" src=\"{log.Guild.IconUrl}\" />"); await writer.WriteLineAsync($"<img class=\"guild-icon\" src=\"{log.Guild.IconUrl}\" />");
await writer.WriteLineAsync("</div>"); // info-left await writer.WriteLineAsync("</div>"); // info-left
await writer.WriteLineAsync("<div class=\"info-right\">"); await writer.WriteLineAsync("<div class=\"info-right\">");
await writer.WriteLineAsync($"<div class=\"guild-name\">{log.Guild}</div>"); await writer.WriteLineAsync($"<div class=\"guild-name\">{log.Guild.Name}</div>");
await writer.WriteLineAsync($"<div class=\"channel-name\">{log.Channel}</div>"); await writer.WriteLineAsync($"<div class=\"channel-name\">{log.Channel.Name}</div>");
await writer.WriteLineAsync($"<div class=\"misc\">{log.TotalMessageCount:N0} messages</div>"); await writer.WriteLineAsync($"<div class=\"channel-topic\">{log.Channel.Topic}</div>");
await writer.WriteLineAsync(
$"<div class=\"channel-messagecount\">{log.TotalMessageCount:N0} messages</div>");
await writer.WriteLineAsync("</div>"); // info-right await writer.WriteLineAsync("</div>"); // info-right
await writer.WriteLineAsync("</div>"); // info await writer.WriteLineAsync("</div>"); // info
@ -106,7 +109,8 @@ namespace DiscordChatExporter.Services
await writer.WriteLineAsync("</div>"); await writer.WriteLineAsync("</div>");
await writer.WriteLineAsync("<div class=\"msg-right\">"); await writer.WriteLineAsync("<div class=\"msg-right\">");
await writer.WriteAsync($"<span class=\"msg-user\" title=\"{HtmlEncode(group.Author)}\">"); await writer.WriteAsync(
$"<span class=\"msg-user\" title=\"{HtmlEncode(group.Author.FullyQualifiedName)}\">");
await writer.WriteAsync(HtmlEncode(group.Author.Name)); await writer.WriteAsync(HtmlEncode(group.Author.Name));
await writer.WriteLineAsync("</span>"); await writer.WriteLineAsync("</span>");
var timeStampFormatted = HtmlEncode(group.TimeStamp.ToString(_settingsService.DateFormat)); var timeStampFormatted = HtmlEncode(group.TimeStamp.ToString(_settingsService.DateFormat));