Hi @vinit
You can include source code of Lepton in your project via following steps below: https://support.abp.io/QA/Questions/632/How-can-I-download-the-source-code-of-the-framework-Angular-packages-theme-and-pro-modules
Then you can make changes however you want in scss files.
Lepton has 2 dark themes already. You can choose to use them. Even it can be changed in Theme Management UI on runtime.
Choosing custom colors and layouts depends on you. Create a choosing logic according to your requirements and you can call different layouts or styles in Layout, Layout is included in source code of lepton
Also we're currently working a new theme, named as LeptonX. All those problems are addressed in the LeptonX and it offers rich customization options. Currently it's not available on Blazor, but we're close to releasing a beta version. https://volosoft.com/blog/introducing-the-lepton-theme-next-generation
Seems there is no error in your log file. Do you use separated IdentityServer ? If yes, please share IdentityServer logs too
Did you paste file from your clipboard?
Physical files always have a name. Can you try with a physical file?
Also you can generate token in serverside instead of sending a authenticated request:
public class MyService : ApplicationService
{
private IFileDescriptorAppService fileDescriptorAppService;
public MyService(IFileDescriptorAppService fileDescriptorAppService)
{
this.fileDescriptorAppService = fileDescriptorAppService;
}
public async Task MyMethodAsync()
{
var token = await fileDescriptorAppService.GetDownloadTokenAsync(Guid.Parse("..."));
}
}
In file management you'll see 2 endpoints to perform a download operation:

One of them creates & returns token but requires authenticated request. After, getting that token, you can download the file from second endpoint with that token without authentication. But token's life is 60secons by default.
For example; let say your media id is 1 to make it more understandable.
Firstly you need to create a download token for media with a authenticated request:
GET | /api/file-management/file-descriptor/download/1/token
You'll get a response something like below. Let say the token is a to make it simple:
{
"token": "a"
}
Now, you can make a request from anywhere without authentication with that token.
GET | /api/file-management/file-descriptor/download/1?token=a
I don't suggest to replace entire entity because of maintainability issues. Upgrading newer versions of ABP & LanguageManagement will be tough. Also when you create a new entity, you'll lost Replace DbContext Feature, ILanguageManagementDbContextwon't be able to be replaced and you can't join any of data from ILanguageManagementDbContext.
Also you might get a problem on AppService and mappings.
In that case, I suggest you to create a new entity with one to one relation with LanguageText entity and store extra datas in that table. You can even join with two table via using Replace DbContext Feature. Then provide new data over a new endpoint with new dto.
Hi @Radoslav
You're right, we can't support custom source while adding module right now.
We're working some amazing feature that solves that problem but it'll take a little bit more time and won't be shipped with v5.0
Can you share more information about error?
Please find & share your application logs. It default is placed under Logs folder under your application.
Hi @MILLENNIUM,
Customize the users that displayed for each user.
I couldn't get it what you mean. Do you want to make custom profiles for users to be shown for each user?
Show only sub set of users that in a specific role or applied a custom condition
You can replace IContactAppService and impement your own logic to return contact list to UI.
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IContactAppService))]
public class MyCustomContactAppService : ChatAppService, IContactAppService
{
private IConversationRepository conversationRepository;
public Task<List<ChatContactDto>> GetContactsAsync(GetContactsInput input)
{
// TODO: Your own implementation
}
public Task<int> GetTotalUnreadMessageCountAsync()
{
return conversationRepository.GetTotalUnreadMessageCountAsync(CurrentUser.GetId());
}
}
Add voice messages to the chat
Chat Module doesn't provide a full-featured messaging app. So, currenctly voice message feature isn't supported.
Customize the front end template and their styles
You can replace /Pages/Chat/Index.cshtml to change entire UI. You can see https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface#overriding-a-razor-page-cshtml for more.
Just place following Index.cshtml page to your web application under /Pages/Chat/
@page "/Chat"
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.SignalR
@using Volo.Chat.Localization
@using Volo.Chat.Web.Pages.Chat
@model IndexModel
@inject IHtmlLocalizer<ChatResource> L
@{
ViewBag.PageTitle = L["Chat"];
}
@section styles {
<abp-style-bundle name="@typeof(IndexModel).FullName">
<abp-style src="/Pages/Chat/index.css"/>
</abp-style-bundle>
}
@section scripts {
<abp-script-bundle name="@typeof(IndexModel).FullName">
<abp-script src="/client-proxies/chat-proxy.js" />
<abp-script src="/Pages/Chat/index.js" />
</abp-script-bundle>
}
<div id="chat_wrapper">
<div class="container-fluid">
<div class="row rounded-lg overflow-hidden shadow bor der">
<!-- Users box-->
<div class="col-3 col-md-5 col-lg-4 px-0">
<div class="border-end">
<div class="p-3 bg-light border-bottom">
<div class="row">
@*<div class="col-auto">
<div class="btn-group">
<img src="https://avatars.dicebear.com/v2/human/volos.svg" alt="user" width="32" class="rounded-circle border-primary" style="border: 2px solid">
</div>
</div>*@
<div class="col">
<input id="Contacts_Filter" type="search" class="form-control form-control-sm" id="search-input" placeholder="@L["SearchInContacts"].Value" aria-label="@L["SearchInContacts"].Value" autocomplete="off" spellcheck="false" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-owns="algolia-autocomplete-listbox-0" dir="auto">
</div>
</div>
</div>
<div class="messages-box m-0 p-0" style=" height: calc(100vh - 390px); overflow-y: auto;">
<div class="list-group rounded-0" id="contact_list">
</div>
</div>
</div>
</div>
<!-- Chat Box-->
<div class="col-9 col-md-7 col-lg-8 px-0">
<div class="p-3 bg-light border-bottom">
<div class="row">
<div class="col">
<div class="row">
<div class="col-auto">
@*<img src="https://avatars.dicebear.com/v2/human/volo.svg" alt="user" width="32" class="rounded-circle border-secondary" style="border: 2px solid">*@
<canvas id="Conversation_Avatar" class="rounded-circle" width="27" height="27"></canvas>
</div>
<div class="col pt-1" style="line-height: 1.2;">
<strong id="Conversation_Title" class="font-weight-bold"></strong><br>
<small id="Conversation_Info"></small>
</div>
</div>
</div>
</div>
</div>
<div id="chat_conversation_wrapper" class="chat-box m-0 p-0" style=" height: calc(100vh - 390px); overflow-y: auto;">
<div class="chat-box-container p-4" id="chat_conversation">
</div>
</div>
<!-- Typing area -->
<form id="Send_Message_Form" action="#" class="bg-light border-top m-0">
<div class="p-3">
<input id="userId" name="userId" hidden value="" />
<textarea id="Chat_Message_Box" name="message" type="text" placeholder="@L["TypeMessage"].Value" class="form-control rounded py-2 bg-white"></textarea>
<div class="form-checkfloat-start mt-3">
<input type="checkbox" class="form-check-input" id="Send_On_Enter">
<label class="form-check-label" for="Send_On_Enter">@L["SendOnEnter"].Value</label>
</div>
<div class="mt-2 text-end">
<button id="Send_Message_Button" disabled type="submit" class="btn btn-primary px-3">@L["Send"] <i class="fa fa-paper-plane ms-2"></i></button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Why do you need to extend LanguageText? Can you share a use-case so I can suggest to you an alternative way.
LanguageText is a simple type and mostly you don't need to customize or extend it. Extending that entity is useless. Because there is no data stored in the database until you override from UI. All data is stored in localization .json files. Even if you could extend, you'll not be able to store data until override a LanguageText.
Still, I can suggest to you something else when you shared a use-case.