mirror of
https://github.com/KeksPirates/SoftwareManager.git
synced 2026-08-04 17:59:43 +02:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aba367247e |
@@ -46,21 +46,6 @@ jobs:
|
|||||||
version: "0.9.7"
|
version: "0.9.7"
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
|
|
||||||
- name: Install system dependencies (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libxcb-xinerama0 \
|
|
||||||
libxkbcommon-x11-0 \
|
|
||||||
libxcb-cursor0 \
|
|
||||||
libxcb-keysyms1 \
|
|
||||||
libxcb-render-util0 \
|
|
||||||
libxcb-icccm4 \
|
|
||||||
libxcb-image0 \
|
|
||||||
libxcb-shape0 \
|
|
||||||
libxcb-util1
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
run: |
|
run: |
|
||||||
uv pip install -r requirements.txt
|
uv pip install -r requirements.txt
|
||||||
|
|||||||
@@ -51,21 +51,6 @@ jobs:
|
|||||||
version: "0.9.7"
|
version: "0.9.7"
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
|
|
||||||
- name: Install system dependencies (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libxcb-xinerama0 \
|
|
||||||
libxkbcommon-x11-0 \
|
|
||||||
libxcb-cursor0 \
|
|
||||||
libxcb-keysyms1 \
|
|
||||||
libxcb-render-util0 \
|
|
||||||
libxcb-icccm4 \
|
|
||||||
libxcb-image0 \
|
|
||||||
libxcb-shape0 \
|
|
||||||
libxcb-util1
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
run: |
|
run: |
|
||||||
uv pip install -r requirements.txt
|
uv pip install -r requirements.txt
|
||||||
|
|||||||
@@ -18,15 +18,11 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
artifact_paths: |
|
artifact_name: SoftwareManager-test-${{ github.sha }}-linux
|
||||||
dist-final/SoftwareManager-test-${{ github.sha }}-linux*
|
|
||||||
dist-final/SoftwareManager-x86_64*
|
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
artifact_paths: |
|
artifact_name: SoftwareManager-test-${{ github.sha }}-windows
|
||||||
dist-final/SoftwareManager-test-${{ github.sha }}-windows*
|
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
artifact_paths: |
|
artifact_name: SoftwareManager-test-${{ github.sha }}-macos
|
||||||
dist-final/SoftwareManager-test-${{ github.sha }}-macos*
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
@@ -45,21 +41,6 @@ jobs:
|
|||||||
version: "0.9.7"
|
version: "0.9.7"
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
|
|
||||||
- name: Install system dependencies (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libxcb-xinerama0 \
|
|
||||||
libxkbcommon-x11-0 \
|
|
||||||
libxcb-cursor0 \
|
|
||||||
libxcb-keysyms1 \
|
|
||||||
libxcb-render-util0 \
|
|
||||||
libxcb-icccm4 \
|
|
||||||
libxcb-image0 \
|
|
||||||
libxcb-shape0 \
|
|
||||||
libxcb-util1
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
run: |
|
run: |
|
||||||
uv pip install -r requirements.txt
|
uv pip install -r requirements.txt
|
||||||
@@ -153,11 +134,6 @@ jobs:
|
|||||||
--name ${{ env.APP_NAME }} \
|
--name ${{ env.APP_NAME }} \
|
||||||
src/main.py
|
src/main.py
|
||||||
|
|
||||||
- name: Build AppImage (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: bash
|
|
||||||
run: scripts/build_appimage.sh
|
|
||||||
|
|
||||||
- name: Build with PyInstaller (macOS)
|
- name: Build with PyInstaller (macOS)
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -220,5 +196,5 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.os }}-build
|
name: ${{ matrix.os }}-build
|
||||||
path: ${{ matrix.artifact_paths }}
|
path: dist-final/${{ matrix.artifact_name }}*
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|||||||
+1
-4
@@ -218,7 +218,4 @@ __marimo__/
|
|||||||
|
|
||||||
# Local build files
|
# Local build files
|
||||||
build-local.ps1
|
build-local.ps1
|
||||||
build-local.bat
|
build-local.bat
|
||||||
|
|
||||||
# UV
|
|
||||||
uv.lock
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=SoftwareManager
|
|
||||||
Type=Application
|
|
||||||
Exec=python3 -m SoftwareManager
|
|
||||||
Icon=softwaremanager
|
|
||||||
Terminal=false
|
|
||||||
Categories=X-Software;X-Torrents;
|
|
||||||
+5
-51
@@ -39,10 +39,9 @@
|
|||||||
<h1>KeksPirates</h1>
|
<h1>KeksPirates</h1>
|
||||||
</div>
|
</div>
|
||||||
<nav class="tab">
|
<nav class="tab">
|
||||||
<a class="tablinks" onclick="openTab(event, 'start')" id="navHome">Home</a>
|
<a class="tablinks" onclick="openTab(event, 'start')" id="defaultOpen">Home</a>
|
||||||
<a class="tablinks" onclick="openTab(event, 'api')" id="navApi">API</a>
|
<a class="tablinks" onclick="openTab(event, 'api')">API</a>
|
||||||
<a class="tablinks" onclick="openTab(event, 'docs')" id="navDocs">Docs</a>
|
<a class="tablinks" onclick="openTab(event, 'docs')">Docs</a>
|
||||||
<a class="tablinks" id="navVst" href="https://vstsearch.softwaremanager.xyz">VST Search</a>
|
|
||||||
<!-- <a class="tablinks" onclick="openTab(event, 'notfound')">404</a> -->
|
<!-- <a class="tablinks" onclick="openTab(event, 'notfound')">404</a> -->
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
@@ -188,17 +187,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="vstsearch" class="tabcontent">
|
|
||||||
<div class="cse-search">
|
|
||||||
<h3 class="vst-logo"><span style="color: #db65d5">VST Search</span></h3>
|
|
||||||
<div class="gcse-searchbox"></div>
|
|
||||||
|
|
||||||
<div class="gcse-searchresults"></div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="notfound" class="tabcontent">
|
<div id="notfound" class="tabcontent">
|
||||||
<div class="notfound-frame">
|
<div class="notfound-frame">
|
||||||
<h1 class="notfound-title">404</h1>
|
<h1 class="notfound-title">404</h1>
|
||||||
@@ -215,20 +203,6 @@
|
|||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const MAIN_ORIGIN = 'https://softwaremanager.xyz';
|
|
||||||
const VST_ORIGIN = 'https://vstsearch.softwaremanager.xyz';
|
|
||||||
const onVstDomain = window.location.hostname.startsWith('vstsearch.');
|
|
||||||
|
|
||||||
let cseLoaded = false;
|
|
||||||
function loadCSE() {
|
|
||||||
if (cseLoaded) return;
|
|
||||||
cseLoaded = true;
|
|
||||||
var s = document.createElement('script');
|
|
||||||
s.async = true;
|
|
||||||
s.src = 'https://cse.google.com/cse.js?cx=e7334cef72a8b42e7';
|
|
||||||
document.head.appendChild(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
function openTab(evt, tabName, pushToHistory = true) {
|
function openTab(evt, tabName, pushToHistory = true) {
|
||||||
var i, tabcontent, tablinks;
|
var i, tabcontent, tablinks;
|
||||||
|
|
||||||
@@ -244,8 +218,6 @@
|
|||||||
|
|
||||||
var target = document.getElementById(tabName);
|
var target = document.getElementById(tabName);
|
||||||
target.style.display = "block";
|
target.style.display = "block";
|
||||||
|
|
||||||
if (tabName === 'vstsearch') loadCSE();
|
|
||||||
// restart animation
|
// restart animation
|
||||||
target.classList.remove('tab-animate');
|
target.classList.remove('tab-animate');
|
||||||
void target.offsetWidth;
|
void target.offsetWidth;
|
||||||
@@ -275,10 +247,6 @@
|
|||||||
|
|
||||||
// Determine the correct tab immediately (before full load) to prevent flash
|
// Determine the correct tab immediately (before full load) to prevent flash
|
||||||
(function() {
|
(function() {
|
||||||
if (onVstDomain) {
|
|
||||||
document.getElementById('vstsearch').style.display = 'block';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let currentPath = window.location.pathname;
|
let currentPath = window.location.pathname;
|
||||||
let tabName = 'start';
|
let tabName = 'start';
|
||||||
if (currentPath === '/api') tabName = 'api';
|
if (currentPath === '/api') tabName = 'api';
|
||||||
@@ -289,23 +257,9 @@
|
|||||||
})();
|
})();
|
||||||
|
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
if (onVstDomain) {
|
|
||||||
document.getElementById('navHome').href = MAIN_ORIGIN + '/';
|
|
||||||
document.getElementById('navApi').href = MAIN_ORIGIN + '/api';
|
|
||||||
document.getElementById('navDocs').href = MAIN_ORIGIN + '/docs';
|
|
||||||
['navHome', 'navApi', 'navDocs'].forEach(function(id) {
|
|
||||||
document.getElementById(id).removeAttribute('onclick');
|
|
||||||
});
|
|
||||||
openTab(null, 'vstsearch', false);
|
|
||||||
document.getElementById('navVst').className += " active";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let currentPath = window.location.pathname;
|
let currentPath = window.location.pathname;
|
||||||
|
|
||||||
if (currentPath === '/vstsearch') {
|
if (currentPath === '/api') {
|
||||||
window.location.replace(VST_ORIGIN);
|
|
||||||
} else if (currentPath === '/api') {
|
|
||||||
openTab(null, 'api', false);
|
openTab(null, 'api', false);
|
||||||
} else if (currentPath === '/docs') {
|
} else if (currentPath === '/docs') {
|
||||||
openTab(null, 'docs', false);
|
openTab(null, 'docs', false);
|
||||||
|
|||||||
@@ -378,84 +378,6 @@ pre.api-response {
|
|||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cse-search {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
min-height: 70vh;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .vst-logo {
|
|
||||||
font-family: var(--main-font);
|
|
||||||
font-size: 3.5rem;
|
|
||||||
font-weight: 700;
|
|
||||||
letter-spacing: -0.02em;
|
|
||||||
margin-bottom: 1.5rem;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsc-control-cse,
|
|
||||||
.cse-search .gsc-results-wrapper-overlay,
|
|
||||||
.cse-search .gsc-results-wrapper-visible {
|
|
||||||
background: transparent !important;
|
|
||||||
border: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsc-input-box,
|
|
||||||
.cse-search .gsc-input-box.gsc-input-box-hover,
|
|
||||||
.cse-search .gsc-input-box.gsc-input-box-focus {
|
|
||||||
background: #1a1b1d !important;
|
|
||||||
border-color: #1a1b1d !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsc-input,
|
|
||||||
.cse-search input.gsc-input,
|
|
||||||
.cse-search .gsib_a input.gsc-input {
|
|
||||||
background: transparent !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsib_a {
|
|
||||||
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'><path fill-rule='evenodd' clip-rule='evenodd' d='M14.76 13.27L20.49 19L19 20.49L13.27 14.76C12.2 15.53 10.91 16 9.5 16C5.91 16 3 13.09 3 9.5C3 5.91 5.91 3 9.5 3C13.09 3 16 5.91 16 9.5C16 10.91 15.53 12.2 14.76 13.27ZM9.5 5C7.01 5 5 7.01 5 9.5C5 11.99 7.01 14 9.5 14C11.99 14 14 11.99 14 9.5C14 7.01 11.99 5 9.5 5Z' fill='%23ffffff'/></svg>") !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsc-search-button-v2 {
|
|
||||||
background: #db65d5 !important;
|
|
||||||
border-color: #db65d5 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gsc-search-button-v2:hover {
|
|
||||||
background: #c94dc3 !important;
|
|
||||||
border-color: #c94dc3 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cse-search .gcsc-more-maybe-branding-root,
|
|
||||||
.gcsc-find-more-on-google {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gsc-completion-container,
|
|
||||||
.gssb_c, .gssb_e,
|
|
||||||
table.gssb_c, table.gssb_e {
|
|
||||||
background: #1a1b1d !important;
|
|
||||||
border-color: #333 !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gsc-completion-container td,
|
|
||||||
.gsc-completion-container .gsc-completion-suggestion,
|
|
||||||
.gssb_a, .gssb_a td, .gssb_i {
|
|
||||||
background: #1a1b1d !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gsc-completion-container .gsc-completion-selected,
|
|
||||||
.gsc-completion-container tr:hover td,
|
|
||||||
.gssb_a:hover td, .gssb_e-hover {
|
|
||||||
background: #2a2b2d !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media(max-width: 560px) {
|
@media(max-width: 560px) {
|
||||||
|
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
// Cloudflare Pages middleware.
|
|
||||||
//
|
|
||||||
// Both softwaremanager.xyz and vstsearch.softwaremanager.xyz serve the same
|
|
||||||
// index.html. Crawlers (Discord, Twitter, etc.) read the raw HTML and do NOT
|
|
||||||
// run JavaScript, so we rewrite the <title> and Open Graph / Twitter meta tags
|
|
||||||
// server-side when the request is for the VST Search subdomain. This gives the
|
|
||||||
// subdomain its own link embed without a separate deploy.
|
|
||||||
|
|
||||||
const VST = {
|
|
||||||
title: "VST Search - SoftwareManager",
|
|
||||||
description: "Search for plugins easily",
|
|
||||||
url: "https://vstsearch.softwaremanager.xyz/",
|
|
||||||
};
|
|
||||||
|
|
||||||
class AttributeSetter {
|
|
||||||
constructor(attribute, value) {
|
|
||||||
this.attribute = attribute;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
element(element) {
|
|
||||||
element.setAttribute(this.attribute, this.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ContentSetter {
|
|
||||||
constructor(value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
element(element) {
|
|
||||||
element.setInnerContent(this.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function onRequest(context) {
|
|
||||||
const { request, next } = context;
|
|
||||||
const response = await next();
|
|
||||||
|
|
||||||
const onVstDomain = new URL(request.url).hostname.startsWith("vstsearch.");
|
|
||||||
const contentType = response.headers.get("content-type") || "";
|
|
||||||
|
|
||||||
// Leave everything untouched on the main domain and for non-HTML responses.
|
|
||||||
if (!onVstDomain || !contentType.includes("text/html")) {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HTMLRewriter()
|
|
||||||
.on("title", new ContentSetter(VST.title))
|
|
||||||
.on("meta[name='description']", new AttributeSetter("content", VST.description))
|
|
||||||
.on("meta[property='og:title']", new AttributeSetter("content", VST.title))
|
|
||||||
.on("meta[property='og:description']", new AttributeSetter("content", VST.description))
|
|
||||||
.on("meta[property='og:url']", new AttributeSetter("content", VST.url))
|
|
||||||
.on("meta[name='twitter:title']", new AttributeSetter("content", VST.title))
|
|
||||||
.on("meta[name='twitter:description']", new AttributeSetter("content", VST.description))
|
|
||||||
.transform(response);
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
[build-system]
|
|
||||||
requires = ["setuptools", "wheel"]
|
|
||||||
build-backend = "setuptools.build_meta"
|
|
||||||
+1
-1
@@ -6,6 +6,6 @@ pyinstaller==6.20.0
|
|||||||
PyQtDarkTheme-fork==2.3.6
|
PyQtDarkTheme-fork==2.3.6
|
||||||
plyer==2.1.0
|
plyer==2.1.0
|
||||||
psutil==7.2.2
|
psutil==7.2.2
|
||||||
libtorrent==2.0.11
|
libtorrent==2.0.13
|
||||||
libtorrent-windows-dll==0.0.3
|
libtorrent-windows-dll==0.0.3
|
||||||
send2trash==2.1.0
|
send2trash==2.1.0
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
echo "Installing Dependencies"
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
|
|
||||||
curl -L -o appimagetool-x86_64.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
|
||||||
chmod +x appimagetool-x86_64.AppImage
|
|
||||||
|
|
||||||
curl -L -o python.AppImage https://github.com/niess/python-appimage/releases/download/python3.13/python3.13.9-cp313-cp313-manylinux2014_x86_64.AppImage
|
|
||||||
chmod +x python.AppImage
|
|
||||||
|
|
||||||
./python.AppImage --appimage-extract
|
|
||||||
mv squashfs-root SoftwareManager.AppDir
|
|
||||||
|
|
||||||
echo "Build SoftwareManager.whl"
|
|
||||||
cd ..
|
|
||||||
build/SoftwareManager.AppDir/AppRun -m build
|
|
||||||
|
|
||||||
echo "Prepare SoftwareManager AppImage"
|
|
||||||
cd build/SoftwareManager.AppDir
|
|
||||||
./AppRun -m pip install -r ../../requirements.txt
|
|
||||||
./AppRun -m pip install ../../dist/main-0.0.0-py3-none-any.whl
|
|
||||||
|
|
||||||
rm AppRun .DirIcon python.png python*.desktop usr/share/applications/python*.desktop
|
|
||||||
|
|
||||||
cp -t ./softwaremanager.png ../../src/interface/assets/logo.png
|
|
||||||
cp -t . ../../SoftwareManager.desktop
|
|
||||||
cp ../../SoftwareManager.desktop usr/share/applications/
|
|
||||||
|
|
||||||
echo '#! /bin/bash
|
|
||||||
HERE="$(dirname "$(readlink -f "${0}")")"
|
|
||||||
export PATH=$HERE/usr/bin:$PATH;
|
|
||||||
export APPIMAGE_COMMAND=$(command -v -- "$ARGV0")
|
|
||||||
"$HERE/opt/python3.13/bin/python3.13" "-m" "main" "$@"' > AppRun
|
|
||||||
|
|
||||||
chmod -R 0755 ../SoftwareManager.AppDir
|
|
||||||
chmod +x AppRun
|
|
||||||
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libxcb-cursor.so* ../SoftwareManager.AppDir/usr/lib/
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libxcb-xinerama.so* ../SoftwareManager.AppDir/usr/lib/
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libxcb.so* ../SoftwareManager.AppDir/usr/lib/
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so* ../SoftwareManager.AppDir/usr/lib
|
|
||||||
|
|
||||||
echo " => Build SoftwareManager AppImage"
|
|
||||||
cd ..
|
|
||||||
./appimagetool-x86_64.AppImage --appimage-extract
|
|
||||||
squashfs-root/AppRun SoftwareManager.AppDir
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo " => Done "
|
|
||||||
Reference in New Issue
Block a user