forked from Shinonome/dots-hyprland
ags: sync
This commit is contained in:
@@ -5,6 +5,13 @@ const { execAsync, exec } = Utils;
|
||||
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
|
||||
import { showMusicControls } from '../../variables.js';
|
||||
|
||||
function trimTrackTitle(title) {
|
||||
// Removes stuff like【C93】 at beginning
|
||||
var pattern = /【[^】]*】/;
|
||||
var cleanedTitle = title.replace(pattern, '');
|
||||
return cleanedTitle.trim();
|
||||
}
|
||||
|
||||
const TrackProgress = () => {
|
||||
const _updateProgress = (circprog) => {
|
||||
const mpris = Mpris.getPlayer('');
|
||||
@@ -69,7 +76,7 @@ export const ModuleMusic = () => Widget.EventBox({
|
||||
connections: [[Mpris, label => {
|
||||
const mpris = Mpris.getPlayer('');
|
||||
if (mpris)
|
||||
label.label = `${mpris.trackTitle} • ${mpris.trackArtists.join(', ')}`;
|
||||
label.label = `${trimTrackTitle(mpris.trackTitle)} • ${mpris.trackArtists.join(', ')}`;
|
||||
else
|
||||
label.label = 'No media';
|
||||
}]],
|
||||
|
||||
@@ -3,7 +3,7 @@ const { GLib, Gtk } = imports.gi;
|
||||
import { App, Service, Utils, Widget } from '../../imports.js';
|
||||
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
|
||||
const { Box, Label, ProgressBar, Revealer } = Widget;
|
||||
import { MarginRevealer } from '../../lib/advancedrevealers.js';
|
||||
import { MarginRevealer } from '../../lib/advancedwidgets.js';
|
||||
import Brightness from '../../services/brightness.js';
|
||||
import Indicator from '../../services/indicator.js';
|
||||
|
||||
@@ -63,8 +63,8 @@ export default () => MarginRevealer({
|
||||
hideClass: 'osd-hide',
|
||||
connections: [
|
||||
[Indicator, (revealer, value) => {
|
||||
if(value > -1) revealer._show(revealer);
|
||||
else revealer._hide(revealer);
|
||||
if(value > -1) revealer._show();
|
||||
else revealer._hide();
|
||||
}, 'popup'],
|
||||
],
|
||||
child: Box({
|
||||
|
||||
@@ -4,7 +4,7 @@ const { exec, execAsync } = Utils;
|
||||
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
|
||||
|
||||
const { Box, EventBox, Icon, Scrollable, Label, Button, Revealer } = Widget;
|
||||
import { MarginRevealer } from '../../lib/advancedrevealers.js';
|
||||
import { MarginRevealer } from '../../lib/advancedwidgets.js';
|
||||
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
|
||||
import { MaterialIcon } from '../../lib/materialicon.js';
|
||||
import { showMusicControls } from '../../variables.js';
|
||||
@@ -74,6 +74,12 @@ function getTrackfont(player) {
|
||||
if (title.includes('東方')) return 'Crimson Text, serif'; // Serif for Touhou stuff
|
||||
return DEFAULT_MUSIC_FONT;
|
||||
}
|
||||
function trimTrackTitle(title) {
|
||||
// Removes stuff like【C93】 at beginning
|
||||
var pattern = /【[^】]*】/;
|
||||
var cleanedTitle = title.replace(pattern, '');
|
||||
return cleanedTitle.trim();
|
||||
}
|
||||
|
||||
const TrackProgress = ({ player, ...rest }) => {
|
||||
const _updateProgress = (circprog) => {
|
||||
@@ -102,7 +108,7 @@ const TrackTitle = ({ player, ...rest }) => Label({
|
||||
className: 'osd-music-title',
|
||||
connections: [[player, (self) => {
|
||||
// Player name
|
||||
self.label = player.trackTitle.length > 0 ? player.trackTitle : 'No media';
|
||||
self.label = player.trackTitle.length > 0 ? trimTrackTitle(player.trackTitle) : 'No media';
|
||||
// Font based on track/artist
|
||||
const fontForThisTrack = getTrackfont(player);
|
||||
self.css = `font-family: ${fontForThisTrack}, ${DEFAULT_MUSIC_FONT};`;
|
||||
@@ -374,8 +380,8 @@ export default () => MarginRevealer({
|
||||
}),
|
||||
connections: [
|
||||
[showMusicControls, (revealer) => {
|
||||
if(showMusicControls.value) revealer._show(revealer);
|
||||
else revealer._hide(revealer);
|
||||
if(showMusicControls.value) revealer._show();
|
||||
else revealer._hide();
|
||||
}],
|
||||
],
|
||||
})
|
||||
|
||||
@@ -4,7 +4,7 @@ import Applications from 'resource:///com/github/Aylur/ags/service/applications.
|
||||
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
|
||||
const { execAsync, exec } = Utils;
|
||||
import { setupCursorHover, setupCursorHoverGrab } from "../../lib/cursorhover.js";
|
||||
import { DoubleRevealer } from "../../lib/advancedrevealers.js";
|
||||
import { DoubleRevealer } from "../../lib/advancedwidgets.js";
|
||||
import { execAndClose, expandTilde, hasUnterminatedBackslash, startsWithNumber, launchCustomCommand, ls } from './miscfunctions.js';
|
||||
import {
|
||||
CalculationResultButton, CustomCommandButton, DirectoryButton,
|
||||
|
||||
@@ -8,7 +8,7 @@ import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover
|
||||
import { SystemMessage, ChatMessage } from "./chatgpt_chatmessage.js";
|
||||
import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../../lib/configwidgets.js';
|
||||
import { markdownTest } from '../../../lib/md2pango.js';
|
||||
import { MarginRevealer } from '../../../lib/advancedrevealers.js';
|
||||
import { MarginRevealer } from '../../../lib/advancedwidgets.js';
|
||||
|
||||
export const chatGPTTabIcon = Box({
|
||||
hpack: 'center',
|
||||
@@ -66,10 +66,10 @@ export const chatGPTSettings = MarginRevealer({
|
||||
revealChild: true,
|
||||
connections: [
|
||||
[ChatGPT, (self) => Utils.timeout(200, () => {
|
||||
self._hide(self);
|
||||
self._hide();
|
||||
}), 'newMsg'],
|
||||
[ChatGPT, (self) => Utils.timeout(200, () => {
|
||||
self._show(self);
|
||||
self._show();
|
||||
}), 'clear'],
|
||||
],
|
||||
child: Box({
|
||||
|
||||
@@ -3,10 +3,12 @@ import { App, Utils, Widget } from '../../../imports.js';
|
||||
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
|
||||
const { execAsync, exec } = Utils;
|
||||
import { MaterialIcon } from "../../../lib/materialicon.js";
|
||||
import { MarginRevealer } from '../../../lib/advancedrevealers.js';
|
||||
import { MarginRevealer } from '../../../lib/advancedwidgets.js';
|
||||
import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
|
||||
import WaifuService from '../../../services/waifus.js';
|
||||
|
||||
const IMAGE_REVEAL_DELAY = 13; // Some wait for inits n other weird stuff
|
||||
|
||||
// Create cache folder and clear pics from previous session
|
||||
Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/media/waifus'`);
|
||||
Utils.exec(`bash -c 'rm ${GLib.get_user_cache_dir()}/ags/media/waifus/*'`);
|
||||
@@ -125,7 +127,7 @@ const WaifuImage = (taglist) => {
|
||||
const thisBlock = Box({
|
||||
className: 'sidebar-chat-message',
|
||||
properties: [
|
||||
['update', (imageData) => {
|
||||
['update', (imageData, force = false) => {
|
||||
blockImageData = imageData;
|
||||
const { status, signature, url, source, dominant_color, is_nsfw, width, height, tags } = blockImageData;
|
||||
if (status != 200) {
|
||||
@@ -141,13 +143,15 @@ const WaifuImage = (taglist) => {
|
||||
const showImage = () => {
|
||||
downloadState.shown = 'done';
|
||||
blockImage.css = `background-image:url('${imagePath}');`;
|
||||
blockImageRevealer.revealChild = true;
|
||||
Utils.timeout(blockImageRevealer.transitionDuration,
|
||||
Utils.timeout(IMAGE_REVEAL_DELAY, () => {
|
||||
blockImageRevealer.revealChild = true;
|
||||
})
|
||||
Utils.timeout(IMAGE_REVEAL_DELAY + blockImageRevealer.transitionDuration,
|
||||
() => blockImage.get_children()[0].revealChild = true
|
||||
);
|
||||
downloadIndicator._hide(downloadIndicator);
|
||||
downloadIndicator._hide();
|
||||
}
|
||||
if (Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
|
||||
if (!force && Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
|
||||
else Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
|
||||
.then(showImage)
|
||||
.catch(print);
|
||||
@@ -224,27 +228,50 @@ export const waifuView = Scrollable({
|
||||
}
|
||||
});
|
||||
|
||||
// const waifuTags = Box({
|
||||
// className: 'spacing-h-5',
|
||||
// children: [
|
||||
// Box({ hexpand: true }),
|
||||
// CommandButton('waifu'),
|
||||
// CommandButton('maid'),
|
||||
// CommandButton('uniform'),
|
||||
// CommandButton('oppai'),
|
||||
// CommandButton('selfies'),
|
||||
// CommandButton('marin-kitagawa'),
|
||||
// CommandButton('raiden-shogun'),
|
||||
// CommandButton('mori-calliope'),
|
||||
// ]
|
||||
// });
|
||||
const waifuTags = Revealer({
|
||||
revealChild: false,
|
||||
transition: 'crossfade',
|
||||
transitionDuration: 150,
|
||||
child: Box({
|
||||
className: 'spacing-h-5',
|
||||
children: [
|
||||
Scrollable({
|
||||
vscroll: 'never',
|
||||
hscroll: 'automatic',
|
||||
hexpand: true,
|
||||
child: Box({
|
||||
className: 'spacing-h-5',
|
||||
children: [
|
||||
CommandButton('waifu'),
|
||||
CommandButton('maid'),
|
||||
CommandButton('uniform'),
|
||||
CommandButton('oppai'),
|
||||
CommandButton('selfies'),
|
||||
CommandButton('marin-kitagawa'),
|
||||
CommandButton('raiden-shogun'),
|
||||
CommandButton('mori-calliope'),
|
||||
]
|
||||
})
|
||||
}),
|
||||
Box({ className: 'separator-line' }),
|
||||
]
|
||||
})
|
||||
});
|
||||
|
||||
export const waifuCommands = Box({
|
||||
className: 'spacing-h-5',
|
||||
children: [
|
||||
Box({ hexpand: true }),
|
||||
CommandButton('/clear'),
|
||||
]
|
||||
setup: (self) => {
|
||||
self.pack_end(CommandButton('/clear'), false, false, 0);
|
||||
self.pack_start(Button({
|
||||
className: 'sidebar-chat-chip-toggle',
|
||||
setup: setupCursorHover,
|
||||
label: 'Tags →',
|
||||
onClicked: () => {
|
||||
waifuTags.revealChild = !waifuTags.revealChild;
|
||||
}
|
||||
}), false, false, 0);
|
||||
self.pack_start(waifuTags, true, true, 0);
|
||||
}
|
||||
});
|
||||
|
||||
export const sendMessage = (text) => {
|
||||
@@ -253,7 +280,7 @@ export const sendMessage = (text) => {
|
||||
if (text.startsWith('/')) {
|
||||
if (text.startsWith('/clear')) {
|
||||
const kids = waifuContent.get_children();
|
||||
for (let i = 0; i < kids.length; i++) {
|
||||
for (let i = kids.length - 1; i >= 0; i--) {
|
||||
const child = kids[i];
|
||||
child.destroy();
|
||||
}
|
||||
@@ -261,7 +288,7 @@ export const sendMessage = (text) => {
|
||||
else if (text.startsWith('/test')) {
|
||||
const newImage = WaifuImage(['/test']);
|
||||
waifuContent.add(newImage);
|
||||
Utils.timeout(13, () => newImage._update({ // Needs timeout or inits won't make it
|
||||
Utils.timeout(IMAGE_REVEAL_DELAY, () => newImage._update({ // Needs timeout or inits won't make it
|
||||
// This is an image uploaded to my github repo
|
||||
status: 200,
|
||||
url: 'https://picsum.photos/400/600',
|
||||
@@ -272,7 +299,7 @@ export const sendMessage = (text) => {
|
||||
width: 300,
|
||||
height: 200,
|
||||
tags: ['/test'],
|
||||
}));
|
||||
}, true));
|
||||
}
|
||||
}
|
||||
else WaifuService.fetch(text);
|
||||
|
||||
Reference in New Issue
Block a user