mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-11-22 04:11:12 +00:00
Add torrent help (#2650)
* Updating translations. * Adding a link to view all a user's moderation history from an item. - Also making moderation history strings more detailed. * Fix. * Adding admin view moderation history to profile page. * Adding a torrent help message. * Updating translations. * Updating translations.
This commit is contained in:
parent
999b083545
commit
8d5e7de18e
4 changed files with 58 additions and 16 deletions
|
@ -1 +1 @@
|
|||
Subproject commit 1f4e378f2e18d843aec1e421b99a69a76ce633b7
|
||||
Subproject commit aa39a764aec120d781325dc8b55732aafffe0ac7
|
|
@ -7,6 +7,7 @@ import { canAdmin, canMod } from "@utils/roles";
|
|||
import classNames from "classnames";
|
||||
import { Component, linkEvent } from "inferno";
|
||||
import { Link } from "inferno-router";
|
||||
import { T } from "inferno-i18next-dess";
|
||||
import {
|
||||
AddAdmin,
|
||||
AddModToCommunity,
|
||||
|
@ -33,7 +34,7 @@ import {
|
|||
SavePost,
|
||||
TransferCommunity,
|
||||
} from "lemmy-js-client";
|
||||
import { relTags } from "../../config";
|
||||
import { relTags, torrentHelpUrl } from "../../config";
|
||||
import { IsoDataOptionalSite, VoteContentType } from "../../interfaces";
|
||||
import { mdToHtml, mdToHtmlInline } from "../../markdown";
|
||||
import { I18NextService, UserService } from "../../services";
|
||||
|
@ -52,6 +53,9 @@ import PostActionDropdown from "../common/content-actions/post-action-dropdown";
|
|||
import { CrossPostParams } from "@utils/types";
|
||||
import { RequestState } from "../../services/HttpService";
|
||||
import { toast } from "../../toast";
|
||||
import isMagnetLink, {
|
||||
extractMagnetLinkDownloadName,
|
||||
} from "@utils/media/is-magnet-link";
|
||||
|
||||
type PostListingState = {
|
||||
showEdit: boolean;
|
||||
|
@ -176,6 +180,10 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
<>
|
||||
{this.listing()}
|
||||
{this.state.imageExpanded && !this.props.hideImage && this.img}
|
||||
{this.showBody &&
|
||||
post.url &&
|
||||
isMagnetLink(post.url) &&
|
||||
this.torrentHelp()}
|
||||
{this.showBody && post.url && post.embed_title && (
|
||||
<MetadataCard post={post} />
|
||||
)}
|
||||
|
@ -217,6 +225,19 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
);
|
||||
}
|
||||
|
||||
torrentHelp() {
|
||||
return (
|
||||
<div className="alert alert-info small my-2" role="alert">
|
||||
<Icon icon="info" classes="icon-inline me-2" />
|
||||
<T parent="span" i18nKey="torrent_help">
|
||||
#
|
||||
<a className="alert-link" rel={relTags} href={torrentHelpUrl}>
|
||||
#
|
||||
</a>
|
||||
</T>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
get img() {
|
||||
const { post } = this.postView;
|
||||
const { url } = post;
|
||||
|
@ -542,6 +563,15 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
const post = this.postView.post;
|
||||
const url = post.url;
|
||||
|
||||
if (url) {
|
||||
// If its a torrent link, extract the download name
|
||||
const linkName = isMagnetLink(url)
|
||||
? extractMagnetLinkDownloadName(url)
|
||||
: !(hostname(url) === getExternalHost())
|
||||
? hostname(url)
|
||||
: null;
|
||||
|
||||
if (linkName) {
|
||||
return (
|
||||
<p className="small m-0">
|
||||
{url && !(hostname(url) === getExternalHost()) && (
|
||||
|
@ -551,12 +581,14 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
title={url}
|
||||
rel={relTags}
|
||||
>
|
||||
{hostname(url)}
|
||||
{linkName}
|
||||
</a>
|
||||
)}
|
||||
</p>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
duplicatesLine() {
|
||||
const dupes = this.props.crossPosts;
|
||||
|
|
|
@ -9,6 +9,7 @@ export const donateLemmyUrl = `${joinLemmyUrl}/donate`;
|
|||
export const docsUrl = `${joinLemmyUrl}/docs/en/index.html`;
|
||||
export const helpGuideUrl = `${joinLemmyUrl}/docs/en/users/01-getting-started.html`; // TODO find a way to redirect to the non-en folder
|
||||
export const markdownHelpUrl = `${joinLemmyUrl}/docs/en/users/02-media.html`;
|
||||
export const torrentHelpUrl = `${markdownHelpUrl}#torrents`;
|
||||
export const sortingHelpUrl = `${joinLemmyUrl}/docs/en/users/03-votes-and-ranking.html`;
|
||||
export const archiveTodayUrl = "https://archive.today";
|
||||
export const ghostArchiveUrl = "https://ghostarchive.org";
|
||||
|
|
9
src/shared/utils/media/is-magnet-link.ts
Normal file
9
src/shared/utils/media/is-magnet-link.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
const magnetLinkRegex = /^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$/;
|
||||
|
||||
export default function isMagnetLink(url: string) {
|
||||
return magnetLinkRegex.test(url);
|
||||
}
|
||||
|
||||
export function extractMagnetLinkDownloadName(url: string) {
|
||||
return new URLSearchParams(url).get("dn");
|
||||
}
|
Loading…
Reference in a new issue