Compare commits

..

No commits in common. "main" and "release-2.1.0.0" have entirely different histories.

9 changed files with 16 additions and 152 deletions

View File

@ -26,5 +26,5 @@ ___
Read the docs ([Electron - Tutorial](https://www.electronjs.org/docs/latest/tutorial/tutorial-prerequisites), [Neutralinojs - Your First App](https://neutralino.js.org/docs/getting-started/your-first-neutralinojs-app), [NW.js - Getting Started (For Users)](https://nwjs.readthedocs.io/en/latest/For%20Users/Getting%20Started/#write-nwjs-app))
## Mirrors
Self-hosted mirror available [here](https://new-git.anirudhsevugan.me/anirudh/simpliplay-desktop/src/branch/main/).
**The server may not always be up. If it isn't, you can contact me at: (personal at anirudhsevugan dot me)**.
Self-hosted mirror available [here](https://git.anirudhsevugan.me/simpliplay/simpliplay-desktop-mirror).
**The server may not always be up. You'll see a screen saying "Git is down" if the server is down, with a link to contact me (the webmaster)**.

View File

@ -1,11 +1 @@
Source code for SimpliPlay.
--BUILD STUFF--
SimpliPlay uses Electron Builder for desktop builds, but includes an example Electron Forge config that will work as expected but does not support native actions such as file picking from the explorer; the package.json uses electron-builder specific actions for that.
--CI/CD--
We now use CI/CD (specifically GitHub Actions, at one point CircleCI) for builds, but Linux ARM64 snaps in particular were annoying to get started with. After multiple attempts, it finally worked as expected (with a few really stupid workarounds required that shouldn't even be needed).
--DEPENDENCIES--
Other than Electron and Electron Builder, there is one more dependency called "Nothing".
Its name is very self explanatory, isn't it?

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -6,7 +6,7 @@ const { pathToFileURL } = require("url");
const { checkForUpdate } = require('./updateChecker');
let gpuAccel = "";
let didRegisterShortcuts = false;
let version = "2.1.3.0"
let version = "2.1.0.0"
if (process.platform === 'darwin') {
if (process.argv.includes('--use-gl')) {

View File

@ -6,7 +6,7 @@ const { pathToFileURL } = require("url");
const { checkForUpdate } = require('./updateChecker');
let gpuAccel = "";
let didRegisterShortcuts = false;
let version = "2.1.4.0"
let version = "2.1.0.0"
if (process.platform === 'darwin') {
if (process.argv.includes('--use-gl')) {
@ -321,14 +321,6 @@ addonsMenu.append(new MenuItem({
}
}));
// "Store" menu item (info dialog version)
addonsMenu.append(new MenuItem({
label: 'Store',
click: () => {
shell.openExternal("https://simpliplay.netlify.app/addons/")
}
}));
// Add the Add-ons menu only once here:
newMenuItems.push(new MenuItem({ label: 'Add-ons', submenu: addonsMenu }));

View File

@ -1,6 +1,6 @@
{
"name": "SimpliPlay",
"version": "2.1.4",
"version": "2.1.0",
"description": "SimpliPlay - The mission to make media playback accessible on every device, anywhere, anytime.",
"main": "./main.js",
"scripts": {
@ -92,11 +92,6 @@
"name": "FLAC Audio",
"role": "Viewer"
},
{
"ext": "opus",
"name": "Opus Audio",
"role": "Viewer"
},
{
"ext": "mkv",
"name": "MKV Video",
@ -118,7 +113,7 @@
"allowToChangeInstallationDirectory": true
},
"devDependencies": {
"electron": "^38.1.0",
"electron": "^37.3.1",
"electron-builder": "^26.0.12"
}
}

View File

@ -1,6 +1,6 @@
{
"name": "SimpliPlay",
"version": "2.1.4",
"version": "2.1.0",
"description": "The mission to make media playback accessible on every platform, anywhere, anytime.",
"main": "./main.js",
"scripts": {
@ -23,13 +23,6 @@
"summary": "A cross-platform, simple media player.",
"description": "The mission to make media playback accessible on every platform, anywhere, anytime."
},
"nsis": {
"oneClick": false,
"installerIcon": "icon.ico",
"uninstallerIcon": "icon.ico",
"uninstallDisplayName": "simpliplay-uninstaller",
"allowToChangeInstallationDirectory": true
},
"mac": {
"target": [
"dmg"
@ -105,11 +98,6 @@
"name": "FLAC Audio",
"role": "Viewer"
},
{
"ext": "opus",
"name": "Opus Audio",
"role": "Viewer"
},
{
"ext": "mkv",
"name": "MKV Video",
@ -122,8 +110,16 @@
}
]
},
"nsis": {
"oneClick": false,
"installerIcon": "icon.ico",
"uninstallerIcon": "icon.ico",
"uninstallDisplayName": "simpliplay-uninstaller",
"license": "LICENSE.md",
"allowToChangeInstallationDirectory": true
},
"devDependencies": {
"electron": "^38.1.0",
"electron": "^37.3.1",
"electron-builder": "^26.0.12"
}
}

View File

@ -272,7 +272,6 @@ const { isHLS, isDASH } = await detectStreamType(url);
let previousObjectURL = null; // Store the last Object URL
window.objectURL = previousObjectURL
fileInput.addEventListener('change', (event) => {
if (hls !== null) {
@ -293,13 +292,7 @@ const { isHLS, isDASH } = await detectStreamType(url);
// Revoke the previous Object URL if it exists
if (previousObjectURL) {
URL.revokeObjectURL(previousObjectURL);
window.objectURL = previousObjectURL
}
// Revoke previous file picker Object URL
if (window.previousDropURL) {
URL.revokeObjectURL(window.previousDropURL);
}
// Create a new Object URL for the selected file
const fileURL = URL.createObjectURL(file);
@ -311,7 +304,6 @@ const { isHLS, isDASH } = await detectStreamType(url);
// Store the new Object URL for future cleanup
previousObjectURL = fileURL;
fileInput.value = "";
// Hide dialog after selecting a file
dialogOverlay.style.display = 'none';

View File

@ -16,103 +16,6 @@ function loadMedia(fileURL) {
}
}
window.addEventListener('DOMContentLoaded', () => {
const dropArea = document.createElement('div');
dropArea.style.position = 'fixed';
dropArea.style.top = '0';
dropArea.style.left = '0';
dropArea.style.width = '100vw';
dropArea.style.height = '100vh';
dropArea.style.display = 'none'; // hidden by default
dropArea.style.zIndex = '0'; // behind everything
dropArea.style.opacity = '0'; // invisible
document.body.appendChild(dropArea);
let dragCounter = 0; // track nested dragenter/dragleave events
window.addEventListener('dragenter', (e) => {
if (e.dataTransfer.types.includes('Files')) {
dragCounter++;
e.preventDefault();
e.stopPropagation();
}
});
window.addEventListener('dragleave', (e) => {
if (e.dataTransfer.types.includes('Files')) {
dragCounter--;
if (dragCounter <= 0) dragCounter = 0;
e.preventDefault();
e.stopPropagation();
}
});
window.addEventListener('dragover', (e) => {
if (e.dataTransfer.types.includes('Files')) {
e.preventDefault(); // allow drop
e.stopPropagation();
}
});
let previousDropURL = null; // Store last Object URL
window.previousDropURL = previousDropURL
window.addEventListener('drop', e => {
e.preventDefault();
e.stopPropagation();
const file = e.dataTransfer.files[0];
if (!file) return;
// Destroy existing HLS/DASH instances if they exist
if (window.hls) {
window.hls.destroy();
window.hls = null;
}
if (window.dash) {
window.dash.reset();
window.dash = null;
}
// Clear previously loaded subtitles
const tracks = mediaElement.getElementsByTagName('track');
for (let i = tracks.length - 1; i >= 0; i--) {
tracks[i].remove();
}
// Revoke previous Object URL
if (previousDropURL) {
URL.revokeObjectURL(previousDropURL);
window.previousDropURL = previousDropURL;
}
// Revoke previous file picker Object URL
if (window.objectURL) {
URL.revokeObjectURL(window.objectURL);
}
// Create a new Object URL
const fileURL = URL.createObjectURL(file);
mediaElement.src = fileURL;
mediaElement.load();
// Autoplay if checkbox is checked
if (autoplayCheckbox.checked) {
mediaElement.play().catch(err => console.warn(err));
}
// Store for future cleanup
previousDropURL = fileURL;
// Hide file dialog if applicable
if (dialogOverlay) dialogOverlay.style.display = 'none';
});
});
// Handle submit subtitle URL
function clearSubtitles() {
const tracks = mediaElement.getElementsByTagName('track');
@ -194,7 +97,3 @@ window.electron.receive("unload-addon", (fileURL) => {
unloadAddon(fileURL);
});