Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
6d267e2
feat: implement preload scripts for IPC bridge and sanitize User-Agen…
CilginSinek Jul 20, 2026
681c851
feat: implement native audio capture integration via preload script a…
CilginSinek Jul 20, 2026
8256f7b
chore: update package-lock.json dependencies
CilginSinek Aug 6, 2026
ecdc567
chore: disable useTemplateApp for snap package configuration
CilginSinek Aug 8, 2026
c99360a
chore: update electron-builder configuration to use snapcraft and add…
CilginSinek Aug 8, 2026
1a1d7da
chore: update electron-builder configuration by moving desktopName an…
CilginSinek Aug 8, 2026
2d5e15d
refactor: move desktopName configuration from electron-builder.config…
CilginSinek Aug 8, 2026
e7efa00
chore: update snap base to core22 in builder configuration and packag…
CilginSinek Aug 8, 2026
a8e6cab
chore: update electron-native-screenshare to version 1.1.3
CilginSinek Aug 9, 2026
158c44b
feat: upgrade electron-native-screenshare to 1.2.0 and implement nati…
CilginSinek Aug 9, 2026
90cebbd
feat: add GitHub Actions workflows for automated development and rele…
CilginSinek Aug 9, 2026
73b3e05
feat: add GitHub Actions workflows for automated cross-platform Elect…
CilginSinek Aug 9, 2026
c90731c
feat: add automated CI/CD workflows for development and production El…
CilginSinek Aug 9, 2026
cf44fc5
feat: add GitHub Actions workflows for development and release builds
CilginSinek Aug 9, 2026
8f944e6
feat: implement GitHub Actions workflows for cross-platform developme…
CilginSinek Aug 9, 2026
c256e3d
feat: add GitHub Actions workflows for automated development and prod…
CilginSinek Aug 9, 2026
f45ba90
feat: add GitHub Actions workflows for automated production and devel…
CilginSinek Aug 9, 2026
a1e4c72
feat: implement new signing method
CilginSinek Aug 16, 2026
a7a67ce
chore: remove rfc3161TimeStampServer from windows configuration in el…
CilginSinek Aug 16, 2026
330b7de
feat: add GitHub Actions workflows for production and development rel…
CilginSinek Aug 16, 2026
8ed13a6
chore: bump application version to 2026.8.1616
CilginSinek Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 60 additions & 47 deletions .github/workflows/dev-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,31 @@ jobs:
python3 -m ensurepip --upgrade
python3 -m pip install --upgrade pip setuptools

- name: Setup LXD for Snapcraft
if: matrix.os == 'ubuntu-latest'
uses: canonical/setup-lxd@v0.1.2
with:
channel: latest/stable

- name: Install Linux build deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libx11-dev libxext-dev libxtst-dev libxkbcommon-x11-dev libxkbfile-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxt-dev
sudo apt-get install -y libx11-dev libxext-dev libxtst-dev libxkbcommon-x11-dev libxkbfile-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxt-dev libpipewire-0.3-dev libpulse-dev
sudo snap install core22
sudo snap install snapcraft --classic --channel=7.x/stable

- name: Install dependencies
run: npm install

- name: Build Electron App
shell: bash
run: |
if [ "${{ matrix.name }}" = "nsis" ]; then
export WIN_CSC_LINK="${{ secrets.WIN_CERTS_BASE64 }}"
export WIN_CSC_KEY_PASSWORD="${{ secrets.WIN_CERTS_PASSWORD }}"
fi

if [ "${{ matrix.name }}" = "linux" ]; then
npm run build:linux
elif [ "${{ matrix.name }}" = "nsis" ]; then
Expand Down Expand Up @@ -89,52 +102,52 @@ jobs:
}
shell: powershell

# ✅ Windows için eSigner ile imzala - NSIS Installer
- name: Sign NSIS Installer
if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
uses: sslcom/esigner-codesign@develop
with:
command: sign
username: ${{ secrets.ESIGNER_USERNAME }}
password: ${{ secrets.ESIGNER_PASSWORD }}
credential_id: ${{ secrets.ESIGNER_CREDENTIAL_ID }}
totp_secret: ${{ secrets.ESIGNER_TOTP }}
file_path: dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe
malware_block: false
override: true
clean_logs: false

- name: Update latest.yml after signing (NSIS)
if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
run: |
$exeFile = "dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe"
$version = "${{ steps.package-version.outputs.version }}"

# İmzalanmış dosyanın yeni SHA512 değerini hesapla
$fileHash = Get-FileHash -Path $exeFile -Algorithm SHA512
# Hex string'i byte array'e çevir ve sonra Base64'e çevir
$hexBytes = [byte[]] -split ($fileHash.Hash -replace '..', '0x$& ')
$sha512 = [System.Convert]::ToBase64String($hexBytes)

# Dosya boyutunu al
$fileSize = (Get-Item $exeFile).Length

# Yeni latest.yml içeriğini oluştur
$currentDate = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
$latestYml = "version: $version`n" +
"files:`n" +
" - url: Topluyo-Setup-$version.exe`n" +
" sha512: $sha512`n" +
" size: $fileSize`n" +
"path: Topluyo-Setup-$version.exe`n" +
"sha512: $sha512`n" +
"releaseDate: '$currentDate'"

# latest.yml dosyasını güncelle (BOM olmadan UTF8)
[System.IO.File]::WriteAllText("dist/latest.yml", $latestYml, [System.Text.UTF8Encoding]::new($false))
Write-Host "latest.yml updated with new SHA512: $sha512"
Write-Host "File size: $fileSize bytes"
shell: powershell
# # ✅ Windows için eSigner ile imzala - NSIS Installer
# - name: Sign NSIS Installer
# if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
# uses: sslcom/esigner-codesign@develop
# with:
# command: sign
# username: ${{ secrets.ESIGNER_USERNAME }}
# password: ${{ secrets.ESIGNER_PASSWORD }}
# credential_id: ${{ secrets.ESIGNER_CREDENTIAL_ID }}
# totp_secret: ${{ secrets.ESIGNER_TOTP }}
# file_path: dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe
# malware_block: false
# override: true
# clean_logs: false

# - name: Update latest.yml after signing (NSIS)
# if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
# run: |
# $exeFile = "dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe"
# $version = "${{ steps.package-version.outputs.version }}"
#
# # İmzalanmış dosyanın yeni SHA512 değerini hesapla
# $fileHash = Get-FileHash -Path $exeFile -Algorithm SHA512
# # Hex string'i byte array'e çevir ve sonra Base64'e çevir
# $hexBytes = [byte[]] -split ($fileHash.Hash -replace '..', '0x$& ')
# $sha512 = [System.Convert]::ToBase64String($hexBytes)
#
# # Dosya boyutunu al
# $fileSize = (Get-Item $exeFile).Length
#
# # Yeni latest.yml içeriğini oluştur
# $currentDate = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
# $latestYml = "version: $version`n" +
# "files:`n" +
# " - url: Topluyo-Setup-$version.exe`n" +
# " sha512: $sha512`n" +
# " size: $fileSize`n" +
# "path: Topluyo-Setup-$version.exe`n" +
# "sha512: $sha512`n" +
# "releaseDate: '$currentDate'"
#
# # latest.yml dosyasını güncelle (BOM olmadan UTF8)
# [System.IO.File]::WriteAllText("dist/latest.yml", $latestYml, [System.Text.UTF8Encoding]::new($false))
# Write-Host "latest.yml updated with new SHA512: $sha512"
# Write-Host "File size: $fileSize bytes"
# shell: powershell

- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
Expand Down
107 changes: 60 additions & 47 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,31 @@ jobs:
python3 -m ensurepip --upgrade
python3 -m pip install --upgrade pip setuptools

- name: Setup LXD for Snapcraft
if: matrix.os == 'ubuntu-latest'
uses: canonical/setup-lxd@v0.1.2
with:
channel: latest/stable

- name: Install Linux build deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libx11-dev libxext-dev libxtst-dev libxkbcommon-x11-dev libxkbfile-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxt-dev
sudo apt-get install -y libx11-dev libxext-dev libxtst-dev libxkbcommon-x11-dev libxkbfile-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxt-dev libpipewire-0.3-dev libpulse-dev
sudo snap install core22
sudo snap install snapcraft --classic --channel=7.x/stable

- name: Install dependencies
run: npm install

- name: Build Electron App
shell: bash
run: |
if [ "${{ matrix.name }}" = "nsis" ]; then
export WIN_CSC_LINK="${{ secrets.WIN_CERTS_BASE64 }}"
export WIN_CSC_KEY_PASSWORD="${{ secrets.WIN_CERTS_PASSWORD }}"
fi

if [ "${{ matrix.name }}" = "linux" ]; then
npm run build:linux
elif [ "${{ matrix.name }}" = "nsis" ]; then
Expand Down Expand Up @@ -91,52 +104,52 @@ jobs:
}
shell: powershell

# ✅ Windows için eSigner ile imzala - NSIS Installer
- name: Sign NSIS Installer
if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
uses: sslcom/esigner-codesign@develop
with:
command: sign
username: ${{ secrets.ESIGNER_USERNAME }}
password: ${{ secrets.ESIGNER_PASSWORD }}
credential_id: ${{ secrets.ESIGNER_CREDENTIAL_ID }}
totp_secret: ${{ secrets.ESIGNER_TOTP }}
file_path: dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe
malware_block: false
override: true
clean_logs: false

- name: Update latest.yml after signing (NSIS)
if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
run: |
$exeFile = "dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe"
$version = "${{ steps.package-version.outputs.version }}"

# İmzalanmış dosyanın yeni SHA512 değerini hesapla
$fileHash = Get-FileHash -Path $exeFile -Algorithm SHA512
# Hex string'i byte array'e çevir ve sonra Base64'e çevir
$hexBytes = [byte[]] -split ($fileHash.Hash -replace '..', '0x$& ')
$sha512 = [System.Convert]::ToBase64String($hexBytes)

# Dosya boyutunu al
$fileSize = (Get-Item $exeFile).Length

# Yeni latest.yml içeriğini oluştur
$currentDate = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
$latestYml = "version: $version`n" +
"files:`n" +
" - url: Topluyo-Setup-$version.exe`n" +
" sha512: $sha512`n" +
" size: $fileSize`n" +
"path: Topluyo-Setup-$version.exe`n" +
"sha512: $sha512`n" +
"releaseDate: '$currentDate'"

# latest.yml dosyasını güncelle (BOM olmadan UTF8)
[System.IO.File]::WriteAllText("dist/latest.yml", $latestYml, [System.Text.UTF8Encoding]::new($false))
Write-Host "latest.yml updated with new SHA512: $sha512"
Write-Host "File size: $fileSize bytes"
shell: powershell
# # ✅ Windows için eSigner ile imzala - NSIS Installer
# - name: Sign NSIS Installer
# if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
# uses: sslcom/esigner-codesign@develop
# with:
# command: sign
# username: ${{ secrets.ESIGNER_USERNAME }}
# password: ${{ secrets.ESIGNER_PASSWORD }}
# credential_id: ${{ secrets.ESIGNER_CREDENTIAL_ID }}
# totp_secret: ${{ secrets.ESIGNER_TOTP }}
# file_path: dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe
# malware_block: false
# override: true
# clean_logs: false

# - name: Update latest.yml after signing (NSIS)
# if: matrix.os == 'windows-latest' && matrix.name == 'nsis'
# run: |
# $exeFile = "dist/Topluyo-Setup-${{ steps.package-version.outputs.version }}.exe"
# $version = "${{ steps.package-version.outputs.version }}"
#
# # İmzalanmış dosyanın yeni SHA512 değerini hesapla
# $fileHash = Get-FileHash -Path $exeFile -Algorithm SHA512
# # Hex string'i byte array'e çevir ve sonra Base64'e çevir
# $hexBytes = [byte[]] -split ($fileHash.Hash -replace '..', '0x$& ')
# $sha512 = [System.Convert]::ToBase64String($hexBytes)
#
# # Dosya boyutunu al
# $fileSize = (Get-Item $exeFile).Length
#
# # Yeni latest.yml içeriğini oluştur
# $currentDate = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
# $latestYml = "version: $version`n" +
# "files:`n" +
# " - url: Topluyo-Setup-$version.exe`n" +
# " sha512: $sha512`n" +
# " size: $fileSize`n" +
# "path: Topluyo-Setup-$version.exe`n" +
# "sha512: $sha512`n" +
# "releaseDate: '$currentDate'"
#
# # latest.yml dosyasını güncelle (BOM olmadan UTF8)
# [System.IO.File]::WriteAllText("dist/latest.yml", $latestYml, [System.Text.UTF8Encoding]::new($false))
# Write-Host "latest.yml updated with new SHA512: $sha512"
# Write-Host "File size: $fileSize bytes"
# shell: powershell

- name: Delete builder-debug.yml cross-platform
shell: pwsh
Expand Down
28 changes: 24 additions & 4 deletions ScreenShare.html
Original file line number Diff line number Diff line change
Expand Up @@ -299,10 +299,13 @@ <h1>Ekranını Paylaş</h1>
</div>

<div class="footer">
<label class="audio-toggle">
<span class="switch-icon">🔊</span> Sesi Paylaş
<input id="audio" type="checkbox" switch />
</label>
<div style="display: flex; flex-direction: column; align-items: flex-start; gap: 5px;">
<label class="audio-toggle">
<span class="switch-icon">🔊</span> Sesi Paylaş
<input id="audio" type="checkbox" switch />
</label>
<span id="audio-warning" style="display: none; color: #ff4d4f; font-size: 11px; max-width: 250px; line-height: 1.3;">⚠️ Sistem uyumlu değil, ses yankı yapabilir.</span>
</div>
<button id="start-sharing">Paylaşımı Başlat</button>
</div>

Expand All @@ -313,6 +316,23 @@ <h1>Ekranını Paylaş</h1>
async function initialize() {
allSources = await window.stream.getSources();
renderSources();

try {
const status = await window.stream.isNativeAudioAvailable();
const warningEl = document.getElementById("audio-warning");

if (!status.available) {
warningEl.style.display = "block";
warningEl.style.color = "#ff4d4f";
warningEl.innerText = "⚠️ Sistem uyumlu değil, ses yankı yapabilir.";
} else if (status.backend) {
warningEl.style.display = "block";
warningEl.style.color = "#52c41a";
warningEl.innerText = `✅ Ses İzolasyonu Aktif (${status.backend})`;
}
} catch (err) {
console.error("isNativeAudioAvailable failed:", err);
}
}

function renderSources() {
Expand Down
4 changes: 2 additions & 2 deletions Windows.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ function createMainWindow(windowstate, url) {
icon: path.join(__dirname, "topluyo.png"),
webPreferences: {
devTools: process.env.NODE_ENV === "development",
contextIsolation: false,
nodeIntegration: true,
contextIsolation: true,
nodeIntegration: false,
nodeIntegrationInSubFrames: true,
preload: path.join(__dirname, "preloads/main.js"),
},
Expand Down
2 changes: 2 additions & 0 deletions electron-builder.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ const config = {
"maintainer": "Hasan Delibaş <info@topluyo.com>"
},
"snap": {
"base": "core22",
"confinement": "classic",
"useTemplateApp": false,
"publish": false
},
"mac": {
Expand Down
11 changes: 11 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ if (!gotLock) {
}

app.whenReady().then(() => {
// Cloudflare vb. bot korumalarını aşmak için User-Agent'tan Electron ve uygulama adını temizliyoruz
const { session } = require("electron");
app.userAgentFallback = session.defaultSession.getUserAgent().replace(/Electron\/\S+\s?/, "").replace(/topluyo\/\S+\s?/, "");

//* Load the previous state with fallback to defaults
const mainWindowState = windowStateKeeper({
defaultWidth: 800,
Expand Down Expand Up @@ -656,6 +660,13 @@ ipcMain.on("close", () => {
if (win && !win.isDestroyed()) win.close();
});

ipcMain.handle("isNativeAudioAvailable", () => {
if (!captureModule) return { available: false, backend: null };
const available = captureModule.isAvailable ? captureModule.isAvailable() : false;
const backend = captureModule.getLinuxAudioBackend ? captureModule.getLinuxAudioBackend() : null;
return { available, backend };
});

ipcMain.handle("start-native-audio", (event) => {
const sourceId = global.lastSelectedSource || "";
console.log("start-native-audio invoked. Selected source:", sourceId);
Expand Down
Loading