Status & Latest Ad
@@ -116,6 +121,7 @@ export default class CharacterPreview extends Vue {
statusClasses?: StatusClasses;
latestAd?: AdCachedPosting;
statusMessage?: string;
+ memo?: string;
smartFilterIsFiltered?: boolean;
smartFilterDetails?: string[];
@@ -199,6 +205,7 @@ export default class CharacterPreview extends Vue {
this.match = undefined;
this.character = undefined;
this.customs = undefined;
+ this.memo = undefined;
this.ownCharacter = core.characters.ownProfile;
this.conversation = undefined;
@@ -218,6 +225,7 @@ export default class CharacterPreview extends Vue {
this.updateSmartFilterReport();
this.updateCustoms();
this.updateDetails();
+ this.updateMemo();
}, 0);
}
@@ -293,6 +301,9 @@ export default class CharacterPreview extends Vue {
this.latestAd = cache.posts[cache.posts.length - 1];
}
+ updateMemo(): void {
+ this.memo = this.character?.memo?.memo;
+ }
updateCustoms(): void {
this.customs = _.orderBy(
@@ -469,7 +480,8 @@ export default class CharacterPreview extends Vue {
.status-message,
.latest-ad-message,
- .conversation {
+ .conversation,
+ .memo {
display: block;
background-color: rgba(0,0,0,0.2);
padding: 10px;
diff --git a/chat/preview/assets/browser.pre.js b/chat/preview/assets/browser.pre.js
index 0976a86..d2be7c2 100644
--- a/chat/preview/assets/browser.pre.js
+++ b/chat/preview/assets/browser.pre.js
@@ -58,6 +58,10 @@ const previewInitiationTime = Date.now();
return;
}
+ if (window.location.href.match(/^https?:\/\/(www\.)?rule34video\.com/)) {
+ return;
+ }
+
if (window.location.href.match(/^https?:\/\/[a-zA-Z0-9-]+\.tumblr\.com/)) {
// Because Tumblr sucks with their iframes
const og = document.querySelectorAll('meta[property="og:image"]:not([content=""])');
diff --git a/chat/preview/event-bus.ts b/chat/preview/event-bus.ts
index c927bc9..3a003b8 100644
--- a/chat/preview/event-bus.ts
+++ b/chat/preview/event-bus.ts
@@ -19,7 +19,8 @@ import { NoteCheckerCount } from '../../site/note-checker';
* 'channel-ad': {message: Message, channel: Conversation, profile: ComplexCharacter | undefined}
* 'channel-message': {message: Message, channel: Conversation}
* 'select-conversation': { conversation: Conversation }
- * 'note-counts-update': {}
+ * 'note-counts-update': {},
+ * 'character-memo': { character: string, memo: CharacterMemo }
*/
diff --git a/chat/preview/image-dom-mutator.ts b/chat/preview/image-dom-mutator.ts
index 066da02..c4e0554 100644
--- a/chat/preview/image-dom-mutator.ts
+++ b/chat/preview/image-dom-mutator.ts
@@ -174,6 +174,7 @@ export class ImageDomMutator {
this.add('xhamster.com', this.getBaseJsMutatorScript(['#photo_slider video', '#photo_slider img', 'video', 'img']));
this.add('shadbase.com', this.getBaseJsMutatorScript(['#comic video', '#comic img', 'video', 'img']));
this.add('instagram.com', this.getBaseJsMutatorScript(['article video', 'article img', 'video', 'img']));
+ this.add('rule34video.com', this.getBaseJsMutatorScript(['video'], true, [], false, true));
this.add(
'pornhub.com',
@@ -237,7 +238,6 @@ export class ImageDomMutator {
'dom-ready'
);
-
this.add(
'hentai-foundry.com',
this.getBaseJsMutatorScript(['#picBox video', '#picBox img']),
diff --git a/chat/preview/image-url-mutator.ts b/chat/preview/image-url-mutator.ts
index 6726b8c..6b4c426 100644
--- a/chat/preview/image-url-mutator.ts
+++ b/chat/preview/image-url-mutator.ts
@@ -38,6 +38,15 @@ export class ImageUrlMutator {
// async(): Promise
=> 'https://i.imgur.com/ScNLbsp.png'
// );
+ this.add(
+ /^https?:\/\/rule34video.com\/videos\/([0-9a-zA-Z-_]+)/,
+ async(_url: string, match: RegExpMatchArray): Promise => {
+ const videoId = match[1];
+
+ return `https://rule34video.com/embed/${videoId}`;
+ }
+ );
+
this.add(
/^https?:\/\/(www.)?pornhub.com\/view_video.php\?viewkey=([a-z0-9A-Z]+)/,
async(_url: string, match: RegExpMatchArray): Promise => {
@@ -60,7 +69,7 @@ export class ImageUrlMutator {
);
this.add(
- /^https?:\/\/(www.)?redgifs.com\/watch\/([a-z0-9A-Z]+)/,
+ /^https?:\/\/(www.|v3.)?redgifs.com\/watch\/([a-z0-9A-Z]+)/,
async(_url: string, match: RegExpMatchArray): Promise => {
const redgifId = match[2];
diff --git a/chat/preview/test-urls.txt b/chat/preview/test-urls.txt
index bbd987f..5ac2f65 100644
--- a/chat/preview/test-urls.txt
+++ b/chat/preview/test-urls.txt
@@ -130,3 +130,10 @@
[url=https://www.redgifs.com/watch/blissfulhandywhoopingcrane]Redgifs.com[/url]
[url=https://media.giphy.com/media/P7hen0jkFBud3EZ6ez/giphy.gif]Giphy[/url]
+
+ [url=https://v3.redgifs.com/watch/bruisedinconsequentialseabird#rel=niche%3Afit-girls;order=trending]Redgifs V3[/url]
+
+ [url=https://rule34video.com/videos/3087711/bonding-ritual-4k-no-wm/]Rule34video[/url]
+
+
+
diff --git a/components/Modal.vue b/components/Modal.vue
index b0f7811..a9bfc67 100644
--- a/components/Modal.vue
+++ b/components/Modal.vue
@@ -85,7 +85,10 @@
show(keepOpen: boolean = false): void {
this.keepOpen = keepOpen;
- if(this.isShown) return;
+ if(this.isShown) {
+ this.$emit('reopen');
+ return;
+ }
this.isShown = true;
dialogStack.push(this);
this.$emit('open');
diff --git a/docs/_config.yml b/docs/_config.yml
index 5938d58..e6ef408 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -50,7 +50,7 @@ theme: jekyll-theme-slate
changelog: https://github.com/mrstallion/fchat-rising/blob/master/CHANGELOG.md
download:
- version: 1.20.0
+ version: 1.21.0
url: https://github.com/mrstallion/fchat-rising/releases/download/v%VERSION%/F-Chat-Rising-%VERSION%-%PLATFORM_TAIL%
diff --git a/electron/Index.vue b/electron/Index.vue
index b661ccd..a14708c 100644
--- a/electron/Index.vue
+++ b/electron/Index.vue
@@ -97,13 +97,15 @@
{{wordDefinitionLookup}}
-
D
T
UD
W
+
+
+
@@ -133,6 +135,7 @@
// import { Sqlite3Store } from '../learn/store/sqlite3';
import CharacterPage from '../site/character_page/character_page.vue';
import WordDefinition from '../learn/dictionary/WordDefinition.vue';
+ import ProfileAnalysis from '../learn/recommend/ProfileAnalysis.vue';
import {defaultHost, GeneralSettings, nativeRequire} from './common';
import { fixLogs /*SettingsStore, Logs as FSLogs*/ } from './filesystem';
import * as SlimcatImporter from './importer';
@@ -200,7 +203,8 @@
logs: Logs,
'word-definition': WordDefinition,
BBCodeTester: BBCodeTester,
- bbcode: BBCodeView(core.bbCodeParser)
+ bbcode: BBCodeView(core.bbCodeParser),
+ 'profile-analysis': ProfileAnalysis
}
})
export default class Index extends Vue {
@@ -601,6 +605,14 @@
}
+ async openWordDefinitionInBrowser(): Promise