Initial public release setup
Add QuickTransfer source, pluginmaster feed, MIT license, and GitHub Actions release workflow.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build-release:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: "10.0.x"
|
||||
|
||||
- name: Fetch Dalamud SDK libs (api14)
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ErrorActionPreference = "Stop"
|
||||
$url = "https://raw.githubusercontent.com/goatcorp/dalamud-distrib/main/api14/latest.zip"
|
||||
$tmp = Join-Path $env:RUNNER_TEMP "dalamud"
|
||||
$zip = Join-Path $tmp "dalamud.zip"
|
||||
$dst = Join-Path $tmp "extracted"
|
||||
New-Item -ItemType Directory -Force $dst | Out-Null
|
||||
Invoke-WebRequest -Uri $url -OutFile $zip
|
||||
Expand-Archive -Path $zip -DestinationPath $dst -Force
|
||||
|
||||
$dalamudDll = Get-ChildItem -Path $dst -Recurse -Filter "Dalamud.dll" | Select-Object -First 1
|
||||
if (-not $dalamudDll) { throw "Dalamud.dll not found after extracting $url" }
|
||||
|
||||
$env:DALAMUD_HOME = $dalamudDll.Directory.FullName
|
||||
"DALAMUD_HOME=$($env:DALAMUD_HOME)" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
|
||||
- name: Restore
|
||||
run: dotnet restore
|
||||
|
||||
- name: Build (Release)
|
||||
run: dotnet build -c Release --no-restore
|
||||
|
||||
- name: Prepare release zip
|
||||
shell: pwsh
|
||||
run: |
|
||||
$zip = "bin\\Release\\QuickTransfer\\latest.zip"
|
||||
if (!(Test-Path $zip)) { throw "Expected pack zip not found: $zip" }
|
||||
Copy-Item $zip "QuickTransfer.zip" -Force
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: |
|
||||
QuickTransfer.zip
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
x86/
|
||||
[Bb]uild/
|
||||
build/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
# Visual Studio 2015
|
||||
.vs/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
packages/
|
||||
**/packages/*
|
||||
!packages/repositories.config
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# ReSharper
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity
|
||||
_TeamCity*
|
||||
|
||||
# DotCover
|
||||
coverage/
|
||||
|
||||
# ncRush
|
||||
*.ncrush*
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Build files
|
||||
*.mak
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files
|
||||
*_Report.htm
|
||||
*_Report.html
|
||||
*.log
|
||||
Thumbs.db
|
||||
App.config
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# Game data
|
||||
sqpack/
|
||||
*.sqpack
|
||||
|
||||
# Dalamud specific
|
||||
addon/
|
||||
hooks/
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 flick
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
+1984
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/14.0.1">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0-windows</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<AssemblyName>QuickTransfer</AssemblyName>
|
||||
<RootNamespace>QuickTransfer</RootNamespace>
|
||||
<OutputType>Library</OutputType>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Local builds: some setups have DALAMUD_HOME pointing at the XIVLauncher root,
|
||||
not the actual dev hooks folder. If the resolved DalamudLibPath doesn't contain
|
||||
Dalamud.dll, fall back to the standard Roaming dev hooks path. -->
|
||||
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Windows'))">
|
||||
<_DalamudDevHooksPath>$(APPDATA)\XIVLauncher\addon\Hooks\dev\</_DalamudDevHooksPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Windows')) and Exists('$(_DalamudDevHooksPath)Dalamud.dll') and !Exists('$(DalamudLibPath)Dalamud.dll')">
|
||||
<DalamudLibPath>$(_DalamudDevHooksPath)</DalamudLibPath>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"Author": "flick",
|
||||
"Name": "QuickTransfer",
|
||||
"InternalName": "QuickTransfer",
|
||||
"AssemblyVersion": "1.0.0.0",
|
||||
"Description": "Automate inventory transfers with Shift/Ctrl + Right-Click.",
|
||||
"ApplicableVersion": "any",
|
||||
"RepoUrl": "https://github.com/Knack117/QuickTransfer",
|
||||
"Tags": [
|
||||
"inventory",
|
||||
"utility",
|
||||
"quality of life"
|
||||
],
|
||||
"DalamudApiLevel": 14,
|
||||
"LoadRequiredState": 0,
|
||||
"LoadSync": false,
|
||||
"CanUnloadAsync": false,
|
||||
"LoadPriority": 0,
|
||||
"Punchline": "Quick item transfer helpers.",
|
||||
"AcceptsFeedback": true
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
using System;
|
||||
using System.Numerics;
|
||||
using Dalamud.Bindings.ImGui;
|
||||
using Dalamud.Interface.Windowing;
|
||||
|
||||
namespace QuickTransfer;
|
||||
|
||||
public class QuickTransferWindow : Window, IDisposable
|
||||
{
|
||||
private readonly Configuration _config;
|
||||
|
||||
public QuickTransferWindow(Configuration config)
|
||||
: base("QuickTransfer Settings###QuickTransferConfig")
|
||||
{
|
||||
_config = config;
|
||||
|
||||
SizeCondition = ImGuiCond.FirstUseEver;
|
||||
Size = new Vector2(500, 400);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
|
||||
public override void Draw()
|
||||
{
|
||||
// Main settings
|
||||
ImGui.TextColored(new Vector4(0.4f, 0.8f, 1f, 1f), "QuickTransfer Configuration");
|
||||
ImGui.Separator();
|
||||
|
||||
// Enable/Disable
|
||||
var enabled = _config.Enabled;
|
||||
if (ImGui.Checkbox("Enabled###Enabled", ref enabled))
|
||||
{
|
||||
_config.Enabled = enabled;
|
||||
_config.Save();
|
||||
}
|
||||
ImGui.SameLine();
|
||||
ImGui.TextColored(new Vector4(0.7f, 0.7f, 0.7f, 1f), _config.Enabled ? "(Active)" : "(Disabled)");
|
||||
|
||||
ImGui.Spacing();
|
||||
|
||||
// Debug mode
|
||||
var debugMode = _config.DebugMode;
|
||||
if (ImGui.Checkbox("Debug Mode###DebugMode", ref debugMode))
|
||||
{
|
||||
_config.DebugMode = debugMode;
|
||||
_config.Save();
|
||||
}
|
||||
ImGui.SameLine();
|
||||
ImGui.TextColored(new Vector4(0.7f, 0.7f, 0.7f, 0.7f), "(Logs to chat - for troubleshooting)");
|
||||
|
||||
ImGui.Spacing();
|
||||
|
||||
// Company Chest
|
||||
var enableCompanyChest = _config.EnableCompanyChest;
|
||||
if (ImGui.Checkbox("Enable Company Chest (Free Company Chest)###EnableCompanyChest", ref enableCompanyChest))
|
||||
{
|
||||
_config.EnableCompanyChest = enableCompanyChest;
|
||||
_config.Save();
|
||||
}
|
||||
ImGui.SameLine();
|
||||
ImGui.TextColored(new Vector4(0.7f, 0.7f, 0.7f, 0.7f), "(Shift: deposit/withdraw while FC chest is open)");
|
||||
|
||||
var autoConfirmQty = _config.AutoConfirmCompanyChestQuantity;
|
||||
if (ImGui.Checkbox("Auto-confirm Company Chest quantity prompt###AutoConfirmCompanyChestQty", ref autoConfirmQty))
|
||||
{
|
||||
_config.AutoConfirmCompanyChestQuantity = autoConfirmQty;
|
||||
_config.Save();
|
||||
}
|
||||
ImGui.SameLine();
|
||||
ImGui.TextColored(new Vector4(0.85f, 0.75f, 0.45f, 0.9f), "(Best effort; disable if it misbehaves)");
|
||||
|
||||
// Transfer cooldown
|
||||
ImGui.Spacing();
|
||||
ImGui.Text("Transfer Cooldown (ms):");
|
||||
ImGui.SameLine();
|
||||
ImGui.SetNextItemWidth(100);
|
||||
var cooldown = _config.TransferCooldownMs;
|
||||
if (ImGui.InputInt("###Cooldown", ref cooldown))
|
||||
{
|
||||
_config.TransferCooldownMs = Math.Max(0, Math.Min(1000, cooldown));
|
||||
_config.Save();
|
||||
}
|
||||
|
||||
ImGui.Spacing();
|
||||
ImGui.Separator();
|
||||
|
||||
// Instructions
|
||||
ImGui.TextColored(new Vector4(0.4f, 0.8f, 1f, 1f), "How to Use:");
|
||||
ImGui.BulletText("Hold SHIFT and RIGHT-CLICK to use the open container's quick action");
|
||||
ImGui.BulletText("Hold CTRL and RIGHT-CLICK to use Armoury actions when a Saddlebag, Retainer, or Company Chest is open (Inventory ↔ Armoury)");
|
||||
ImGui.BulletText("Inventory + Saddlebags: Inventory → \"Add All to Saddlebag\", Saddlebags → \"Remove All from Saddlebag\"");
|
||||
ImGui.BulletText("Armoury + Saddlebags: Armoury → \"Add All to Saddlebag\"");
|
||||
ImGui.BulletText("Inventory + Retainer: Inventory → \"Entrust to Retainer\", Retainer → \"Retrieve from Retainer\"");
|
||||
ImGui.BulletText("Armoury + Retainer: Armoury → \"Entrust to Retainer\", Retainer → \"Retrieve from Retainer\"");
|
||||
ImGui.BulletText("Retainer + Saddlebags: Retainer → \"Add All to Saddlebag\", Saddlebags → \"Entrust to Retainer\"");
|
||||
ImGui.BulletText("Inventory + Armoury (no special container): (Gear) Inventory → \"Place in Armoury Chest\", Armoury → \"Return to Inventory\"");
|
||||
ImGui.BulletText("Company Chest (FreeCompanyChest) open: Shift+RClick Inventory/Armoury deposits, Shift+RClick Company Chest withdraws (\"Remove\")");
|
||||
ImGui.BulletText("Use /qt or click 'Open Config' in plugin list to reopen this window");
|
||||
|
||||
ImGui.Spacing();
|
||||
ImGui.Separator();
|
||||
ImGui.TextColored(new Vector4(0.8f, 0.8f, 0.4f, 1f), "Notes:");
|
||||
ImGui.BulletText("This uses the game's existing context menu options (no manual slot moving).");
|
||||
ImGui.BulletText("If an option isn't available for the clicked item, nothing happens.");
|
||||
ImGui.BulletText("If you tap Shift briefly, the action still triggers (it is captured when the menu opens).");
|
||||
ImGui.BulletText("For Company Chest deposits, this uses the same UI move function as drag+drop would.");
|
||||
ImGui.Spacing();
|
||||
|
||||
// Save button
|
||||
if (ImGui.Button("Save & Close###SaveClose"))
|
||||
{
|
||||
_config.Save();
|
||||
IsOpen = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
# QuickTransfer - FFXIV Quick Transfer Plugin
|
||||
|
||||
A Dalamud plugin for Final Fantasy XIV that enables quick item transfer between inventory containers using **Shift + Right-Click**, by automatically selecting an existing entry from the game's context menu.
|
||||
|
||||
## Features
|
||||
|
||||
- **Quick Transfer**: Hold Shift and right-click an item to automatically trigger the matching context menu action
|
||||
- **Cooldown Protection**: Built-in cooldown to prevent accidental double-moves
|
||||
- **Debug Mode**: For troubleshooting and development
|
||||
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. **XIVLauncher**: Download and install from [goatcorp.github.io](https://goatcorp.github.io/)
|
||||
2. **Dalamud**: Enable plugins in XIVLauncher settings
|
||||
3. **Dev Plugin Loading**: Enable "Dev Plugin Locations" in Dalamud settings for development builds
|
||||
4. **.NET SDK**: Install the .NET 10 SDK (this project targets `net10.0-windows`)
|
||||
|
||||
### Installing the Plugin
|
||||
|
||||
#### Method 1: Custom Dalamud repository (recommended)
|
||||
1. In-game, open **Dalamud Settings** → **Experimental**
|
||||
2. Under **Custom Plugin Repositories**, add this URL:
|
||||
- `https://raw.githubusercontent.com/Knack117/QuickTransfer/main/pluginmaster.json`
|
||||
3. Click **Save**
|
||||
4. Type `/xlplugins` in-game, search for **QuickTransfer**, and click **Install**
|
||||
|
||||
#### Method 2: Development build (local)
|
||||
1. Clone or download this repository
|
||||
2. Open the solution in Visual Studio 2022
|
||||
3. Build the solution (Release configuration)
|
||||
4. In-game, open Dalamud Settings → Experimental → Dev Plugin Locations
|
||||
5. Add the path to the compiled DLL (typically `bin/Release/QuickTransfer.dll` or `bin/Debug/QuickTransfer.dll`)
|
||||
6. Type `/xlplugins` in-game and enable QuickTransfer
|
||||
|
||||
## Usage
|
||||
|
||||
### Quick Transfer (Shift + Right Click)
|
||||
|
||||
The plugin only clicks **existing** context menu options when they are available:
|
||||
|
||||
- **Inventory + Chocobo Saddlebags**
|
||||
- Inventory → **Add All to Saddlebag**
|
||||
- Saddlebags → **Remove All from Saddlebag**
|
||||
- **Armoury Chest + Chocobo Saddlebags**
|
||||
- Armoury → **Add All to Saddlebag**
|
||||
- Saddlebags → **Remove All from Saddlebag**
|
||||
- **Inventory + Armoury Chest**
|
||||
- (Gear) Inventory → **Place in Armoury Chest**
|
||||
- Armoury → **Return to Inventory**
|
||||
|
||||
If an option is not present for the clicked item, **nothing happens**.
|
||||
|
||||
## Configuration Options
|
||||
|
||||
| Setting | Description | Default |
|
||||
|---------|-------------|---------|
|
||||
| Enabled | Enable/disable the plugin | True |
|
||||
| Debug Mode | Log transfer attempts to chat | False |
|
||||
| Transfer Cooldown | Milliseconds between transfers | 200 |
|
||||
|
||||
## Development
|
||||
|
||||
### Setting Up Development Environment
|
||||
|
||||
1. Install Visual Studio 2022 with the .NET 10 SDK
|
||||
2. Clone this repository
|
||||
3. Open `QuickTransfer.csproj`
|
||||
4. Build the project
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
# Build Debug
|
||||
dotnet build --configuration Debug
|
||||
|
||||
# Build Release
|
||||
dotnet build --configuration Release
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
1. Enable "Dev Plugin Locations" in Dalamud settings
|
||||
2. Add the path to your build output directory
|
||||
3. In-game, the plugin will automatically reload when you rebuild
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
QuickTransfer/
|
||||
├── QuickTransfer.cs # Main plugin class
|
||||
├── QuickTransfer.csproj # Project file
|
||||
├── QuickTransferWindow.cs # Configuration UI
|
||||
├── pluginmaster.json # Custom repository metadata (for Dalamud)
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
### Adding New Features
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Implement your changes
|
||||
4. Test thoroughly
|
||||
5. Submit a pull request
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Plugin Not Loading
|
||||
- Ensure Dalamud is properly installed
|
||||
- Check that you're using the correct .NET version
|
||||
- Verify the DLL path is correct in Dev Plugin Locations
|
||||
|
||||
### Transfers Not Working
|
||||
- Make sure the plugin is enabled
|
||||
- Check that you have both source and target inventories open
|
||||
- Ensure the target inventory has space
|
||||
- Try increasing the transfer cooldown
|
||||
|
||||
### Game Crashes
|
||||
- Disable debug mode for normal play
|
||||
- Reduce the transfer cooldown if set too low
|
||||
- Report bugs with detailed steps
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Enable Debug Mode to see transfer attempts in chat:
|
||||
```
|
||||
[QuickTransfer] (Shift+RClick) Selected context action 'Remove All from Saddlebag' (idx=0) via deferred OnMenuOpened.
|
||||
```
|
||||
|
||||
## Compatibility
|
||||
|
||||
- **Game Version**: Tested on FFXIV 7.0+ (Dawntrail)
|
||||
- **Dalamud Version**: Uses `Dalamud.NET.Sdk` (targets your installed Dalamud)
|
||||
- **.NET Version**: .NET 10.0 Windows (`net10.0-windows`)
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please read the contributing guidelines before submitting pull requests.
|
||||
|
||||
### Reporting Issues
|
||||
|
||||
1. Check existing issues to avoid duplicates
|
||||
2. Include steps to reproduce
|
||||
3. Include plugin version and game version
|
||||
4. Include any relevant logs
|
||||
|
||||
## License
|
||||
|
||||
This plugin is licensed under the MIT License - see the `LICENSE` file for details.
|
||||
|
||||
## Credits
|
||||
|
||||
- **goatcorp**: For creating XIVLauncher and Dalamud
|
||||
- **Dalamud Community**: For the extensive plugin ecosystem
|
||||
- **Contributors**: Thanks to everyone who has contributed to this project
|
||||
|
||||
## Changelog
|
||||
|
||||
### Version 1.0.0
|
||||
- Initial release
|
||||
- Shift+Right-Click context menu automation for Inventory / Armoury / Saddlebags
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"version": 1,
|
||||
"dependencies": {
|
||||
"net10.0-windows7.0": {
|
||||
"DalamudPackager": {
|
||||
"type": "Direct",
|
||||
"requested": "[14.0.1, )",
|
||||
"resolved": "14.0.1",
|
||||
"contentHash": "y0WWyUE6dhpGdolK3iKgwys05/nZaVf4ZPtIjpLhJBZvHxkkiE23zYRo7K7uqAgoK/QvK5cqF6l3VG5AbgC6KA=="
|
||||
},
|
||||
"DotNet.ReproducibleBuilds": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.2.39, )",
|
||||
"resolved": "1.2.39",
|
||||
"contentHash": "fcFN01tDTIQqDuTwr1jUQK/geofiwjG5DycJQOnC72i1SsLAk1ELe+apBOuZ11UMQG8YKFZG1FgvjZPbqHyatg=="
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"Author": "flick",
|
||||
"Name": "QuickTransfer",
|
||||
"InternalName": "QuickTransfer",
|
||||
"AssemblyVersion": "1.0.0.0",
|
||||
"Description": "Automate inventory transfers with Shift/Ctrl + Right-Click.",
|
||||
"ApplicableVersion": "any",
|
||||
"RepoUrl": "https://github.com/Knack117/QuickTransfer",
|
||||
"DalamudApiLevel": 14,
|
||||
"Punchline": "Quick item transfer helpers.",
|
||||
"Tags": [
|
||||
"inventory",
|
||||
"utility",
|
||||
"quality of life"
|
||||
],
|
||||
"AcceptsFeedback": true,
|
||||
"DownloadLinkInstall": "https://github.com/Knack117/QuickTransfer/releases/latest/download/QuickTransfer.zip",
|
||||
"DownloadLinkUpdate": "https://github.com/Knack117/QuickTransfer/releases/latest/download/QuickTransfer.zip"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user