Starts in:
1 DAY
8 HRS
22 MIN
21 SEC
Starts in:
1 D
8 H
22 M
21 S

Activities of "enisn"

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.

Firstly, can I ask to you what you mean with saying "removing any table"? Do you mean removing table from template or removing an entity from existing project?

Showing 411 to 420 of 496 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06