Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7f881c1f1 | |||
| 6262b5786f |
@@ -129,6 +129,9 @@ jobs:
|
||||
DEB="$(ls -t release-assets/$DEBP 2>/dev/null | head -n1 || true)"
|
||||
[ -n "$DEB" ] || { echo "::error::Rootless .deb ($DEBP) not found in release $TAG."; exit 1; }
|
||||
echo "DEB=${DEB}" >> "$GITHUB_ENV"
|
||||
IG_VER="$(basename "$DEB" | sed -nE 's/.*_IG(.*)_rootless\.deb$/\1/p')"
|
||||
[ -n "$IG_VER" ] || IG_VER=unknown
|
||||
echo "IG_VER=${IG_VER}" >> "$GITHUB_ENV"
|
||||
|
||||
if [ "${{ inputs.build_sideload }}" = "true" ]; then
|
||||
gh release download "$TAG" --repo "$UPSTREAM_REPO" --dir release-assets \
|
||||
@@ -225,7 +228,7 @@ jobs:
|
||||
--inplace --noconfirm \
|
||||
--dylib packages/zxPluginsInject.dylib
|
||||
|
||||
mv packages/RyukGram-sideloaded.ipa "packages/RyukGram_sideloaded_v${VERSION}${SUF}.ipa"
|
||||
mv packages/RyukGram-sideloaded.ipa "packages/RyukGram_sideload_v${VERSION}_IG${IG_VER}.ipa"
|
||||
ls -la packages
|
||||
|
||||
- name: Build no-plugins IPA (cyan + NoPluginsPatch, appex stripped)
|
||||
@@ -257,8 +260,8 @@ jobs:
|
||||
fi
|
||||
rm -rf "$INJECT_TMP"
|
||||
|
||||
OUT="RyukGram_noplugins_v${VERSION}${SUF}.ipa"
|
||||
[ -n "$DUP_ID" ] && OUT="RyukGram_noplugins_dup_v${VERSION}${SUF}.ipa"
|
||||
OUT="RyukGram_noplugins_v${VERSION}_IG${IG_VER}.ipa"
|
||||
[ -n "$DUP_ID" ] && OUT="RyukGram_noplugins_v${VERSION}_IG${IG_VER}-dup.ipa"
|
||||
mv packages/RyukGram-noplugins.ipa "packages/${OUT}"
|
||||
ls -la packages
|
||||
|
||||
@@ -266,8 +269,8 @@ jobs:
|
||||
if: ${{ inputs.upload_artifact && inputs.build_sideload }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: RyukGram_sideloaded_v${{ steps.tag.outputs.version }}
|
||||
path: packages/RyukGram_sideloaded_v*.ipa
|
||||
name: RyukGram_sideload_v${{ steps.tag.outputs.version }}
|
||||
path: packages/RyukGram_sideload_v*.ipa
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload no-plugins IPA artifact
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extension_name": {
|
||||
"message": "Open in Instagram",
|
||||
"description": "The display name for the extension."
|
||||
},
|
||||
"extension_description": {
|
||||
"message": "Opens instagram.com links (profiles, posts, reels, stories, tags) in the Instagram app.",
|
||||
"description": "Description of what the extension does."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// Redirect instagram.com web links into the native app.
|
||||
// Shipped inside RyukGram as a Safari web extension.
|
||||
|
||||
(function () {
|
||||
if (window.top !== window.self) return;
|
||||
if (sessionStorage.getItem("__rygOpenedApp")) return;
|
||||
|
||||
function urlFromLocation() {
|
||||
const path = window.location.pathname.split("/").filter(Boolean);
|
||||
if (path.length === 0) return null;
|
||||
|
||||
if (path[0] === "p" || path[0] === "reel") {
|
||||
const meta = document.querySelector("meta[property='al:ios:url']");
|
||||
if (meta && meta.getAttribute("content")) return meta.getAttribute("content");
|
||||
return path[1] ? `instagram://media?id=${path[1]}` : null;
|
||||
}
|
||||
|
||||
if (path[0] === "stories" && path[1]) {
|
||||
return `instagram://story?username=${path[1]}`;
|
||||
}
|
||||
|
||||
if (path[0] === "explore" && path[1] === "tags" && path[2]) {
|
||||
return `instagram://tag?name=${path[2]}`;
|
||||
}
|
||||
|
||||
if (path.length === 1) {
|
||||
return `instagram://user?username=${path[0]}`;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function openInApp() {
|
||||
const target = urlFromLocation();
|
||||
if (!target) return;
|
||||
sessionStorage.setItem("__rygOpenedApp", "1");
|
||||
window.location.href = target;
|
||||
}
|
||||
|
||||
openInApp();
|
||||
})();
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"default_locale": "en",
|
||||
|
||||
"name": "__MSG_extension_name__",
|
||||
"description": "__MSG_extension_description__",
|
||||
"version": "1.0",
|
||||
|
||||
"icons": {
|
||||
"48": "images/icon-48.png",
|
||||
"96": "images/icon-96.png",
|
||||
"128": "images/icon-128.png",
|
||||
"256": "images/icon-256.png",
|
||||
"512": "images/icon-512.png"
|
||||
},
|
||||
|
||||
"background": {
|
||||
"service_worker": "background.js"
|
||||
},
|
||||
|
||||
"content_scripts": [{
|
||||
"js": [ "content.js" ],
|
||||
"matches": [ "*://*.instagram.com/*" ]
|
||||
}],
|
||||
|
||||
"action": {
|
||||
"default_popup": "popup.html",
|
||||
"default_icon": {
|
||||
"16": "images/toolbar-icon-16.png",
|
||||
"19": "images/toolbar-icon-19.png",
|
||||
"32": "images/toolbar-icon-32.png",
|
||||
"38": "images/toolbar-icon-38.png",
|
||||
"48": "images/toolbar-icon-48.png",
|
||||
"72": "images/toolbar-icon-72.png"
|
||||
}
|
||||
},
|
||||
|
||||
"permissions": [ ]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 220px;
|
||||
padding: 14px 16px;
|
||||
margin: 0;
|
||||
font-family: -apple-system, system-ui, sans-serif;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
margin-top: 4px;
|
||||
font-size: 12px;
|
||||
opacity: 0.7;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="popup.css">
|
||||
<script type="module" src="popup.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="title">Open in RyukGram</div>
|
||||
<div class="subtitle">instagram.com links open in the app.</div>
|
||||
</body>
|
||||
</html>
|
||||