mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-25 23:09:22 +00:00
Create first custom emoji
This commit is contained in:
parent
2465b0c1ac
commit
131735a5f0
@ -117,6 +117,8 @@ export const Routes : Route[] = [
|
|||||||
|
|
||||||
{path: "/settings/set_account_image_visibility", cb: (h) => SettingsController.SetAccountImageVisibility(h)},
|
{path: "/settings/set_account_image_visibility", cb: (h) => SettingsController.SetAccountImageVisibility(h)},
|
||||||
|
|
||||||
|
{path: "/settings/upload_custom_emoji", cb: (h) => SettingsController.UploadCustomEmoji(h)},
|
||||||
|
|
||||||
|
|
||||||
// Friends controller
|
// Friends controller
|
||||||
{path: "/friends/getList", cb: (h) => FriendsController.GetList(h)},
|
{path: "/friends/getList", cb: (h) => FriendsController.GetList(h)},
|
||||||
|
@ -13,6 +13,8 @@ import { AccountHelper } from "../helpers/AccountHelper";
|
|||||||
import { AccountImageVisibilityLevel } from "../entities/AccountImage";
|
import { AccountImageVisibilityLevel } from "../entities/AccountImage";
|
||||||
import { AccountImageHelper } from "../helpers/AccountImageHelper";
|
import { AccountImageHelper } from "../helpers/AccountImageHelper";
|
||||||
import { findKey } from "../utils/ArrayUtils";
|
import { findKey } from "../utils/ArrayUtils";
|
||||||
|
import { CustomEmojisHelper } from "../helpers/CustomEmojisHelper";
|
||||||
|
import { CustomEmoji } from "../entities/CustomEmoji";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API account image visibility levels
|
* API account image visibility levels
|
||||||
@ -260,4 +262,27 @@ export class SettingsController {
|
|||||||
|
|
||||||
h.success();
|
h.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Upload a custom emoji to the server
|
||||||
|
*
|
||||||
|
* @param h Request handler
|
||||||
|
*/
|
||||||
|
public static async UploadCustomEmoji(h: RequestHandler) {
|
||||||
|
const shorcut = h.postEmojiShorcut("shorcut");
|
||||||
|
const path = await h.savePostImage("image", "custom_emojies", 72, 72);
|
||||||
|
|
||||||
|
// Create the emoji
|
||||||
|
const emojiID = await CustomEmojisHelper.Insert(new CustomEmoji({
|
||||||
|
id: -1,
|
||||||
|
userID: h.getUserId(),
|
||||||
|
shorcut: shorcut,
|
||||||
|
path: path
|
||||||
|
}))
|
||||||
|
|
||||||
|
h.send({
|
||||||
|
emojiID: emojiID
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { UserHelper } from "../helpers/UserHelper";
|
import { UserHelper } from "../helpers/UserHelper";
|
||||||
import { removeHTMLNodes, checkMail, checkURL } from "../utils/StringUtils";
|
import { removeHTMLNodes, checkMail, checkURL, checkEmojiCode } from "../utils/StringUtils";
|
||||||
import { FriendsHelper } from "../helpers/FriendsHelper";
|
import { FriendsHelper } from "../helpers/FriendsHelper";
|
||||||
import { AccountHelper } from "../helpers/AccountHelper";
|
import { AccountHelper } from "../helpers/AccountHelper";
|
||||||
import { GroupsHelper } from "../helpers/GroupsHelper";
|
import { GroupsHelper } from "../helpers/GroupsHelper";
|
||||||
@ -405,4 +405,18 @@ export abstract class BaseRequestsHandler implements AbstractUserConnectionConta
|
|||||||
|
|
||||||
return convID;
|
return convID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the shorcut of an emoji included in a POST request
|
||||||
|
*
|
||||||
|
* @param name The name of the POST field containing the id of the emoji
|
||||||
|
*/
|
||||||
|
public postEmojiShorcut(name: string) : string {
|
||||||
|
const emojiID = this.postString(name);
|
||||||
|
|
||||||
|
if(!checkEmojiCode(emojiID))
|
||||||
|
this.error(401, "Invalid emoji specified at " + name + "!")
|
||||||
|
|
||||||
|
return emojiID;
|
||||||
|
}
|
||||||
}
|
}
|
26
src/entities/CustomEmoji.ts
Normal file
26
src/entities/CustomEmoji.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Custom smiley
|
||||||
|
*
|
||||||
|
* @author Pierre Hubert
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface CustomEmojiBuilder {
|
||||||
|
id: number,
|
||||||
|
userID: number,
|
||||||
|
shorcut: string,
|
||||||
|
path: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CustomEmoji implements CustomEmojiBuilder {
|
||||||
|
id: number;
|
||||||
|
userID: number;
|
||||||
|
shorcut: string;
|
||||||
|
path: string;
|
||||||
|
|
||||||
|
public constructor(info: CustomEmojiBuilder) {
|
||||||
|
for (const key in info) {
|
||||||
|
if (info.hasOwnProperty(key))
|
||||||
|
this[key] = info[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
src/helpers/CustomEmojisHelper.ts
Normal file
31
src/helpers/CustomEmojisHelper.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Custom emojies helper
|
||||||
|
*
|
||||||
|
* @author Pierre Hubert
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { CustomEmoji } from "../entities/CustomEmoji";
|
||||||
|
import { DatabaseHelper } from "./DatabaseHelper";
|
||||||
|
|
||||||
|
const EMOJIS_TABLE = "comunic_custom_emojis";
|
||||||
|
|
||||||
|
export class CustomEmojisHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert a new custom emoji into the database
|
||||||
|
*
|
||||||
|
* @param e The emoji to insert
|
||||||
|
* @return The ID of the created emoji
|
||||||
|
*/
|
||||||
|
public static async Insert(e: CustomEmoji) : Promise<number> {
|
||||||
|
return await DatabaseHelper.InsertRow(
|
||||||
|
EMOJIS_TABLE,
|
||||||
|
{
|
||||||
|
user_id: e.userID,
|
||||||
|
shorcut: e.shorcut,
|
||||||
|
path: e.path
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -76,3 +76,12 @@ export function check_youtube_id(s: string) : boolean {
|
|||||||
&& !s.includes("'")
|
&& !s.includes("'")
|
||||||
&& !s.includes("\"")
|
&& !s.includes("\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check an emoji code
|
||||||
|
*
|
||||||
|
* @param s The emoji code to check
|
||||||
|
*/
|
||||||
|
export function checkEmojiCode(s: string) : boolean {
|
||||||
|
return s.match(/^:[a-zA-Z0-9]*:$/) != null
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user