Forráskód Böngészése

feat(app): update app logo and icons

AkiraBit 2 hónapja
szülő
commit
3804726efa
35 módosított fájl, 48 hozzáadás és 87 törlés
  1. 16 16
      .github/workflows/release.yml
  2. 1 1
      apps/picsharp-app/index.html
  3. BIN
      apps/picsharp-app/src-tauri/icons/128x128.png
  4. BIN
      apps/picsharp-app/src-tauri/icons/128x128@2x.png
  5. BIN
      apps/picsharp-app/src-tauri/icons/32x32_.png
  6. BIN
      apps/picsharp-app/src-tauri/icons/32x32__.png
  7. BIN
      apps/picsharp-app/src-tauri/icons/Square107x107Logo.png
  8. BIN
      apps/picsharp-app/src-tauri/icons/Square142x142Logo.png
  9. BIN
      apps/picsharp-app/src-tauri/icons/Square150x150Logo.png
  10. BIN
      apps/picsharp-app/src-tauri/icons/Square284x284Logo.png
  11. BIN
      apps/picsharp-app/src-tauri/icons/Square30x30Logo.png
  12. BIN
      apps/picsharp-app/src-tauri/icons/Square310x310Logo.png
  13. BIN
      apps/picsharp-app/src-tauri/icons/Square44x44Logo.png
  14. BIN
      apps/picsharp-app/src-tauri/icons/Square71x71Logo.png
  15. BIN
      apps/picsharp-app/src-tauri/icons/Square89x89Logo.png
  16. BIN
      apps/picsharp-app/src-tauri/icons/StoreLogo.png
  17. BIN
      apps/picsharp-app/src-tauri/icons/_128x128.png
  18. BIN
      apps/picsharp-app/src-tauri/icons/_128x128@2x.png
  19. BIN
      apps/picsharp-app/src-tauri/icons/_icon.ico
  20. BIN
      apps/picsharp-app/src-tauri/icons/_icon.png
  21. BIN
      apps/picsharp-app/src-tauri/icons/icon.ico
  22. BIN
      apps/picsharp-app/src-tauri/icons/icon.png
  23. BIN
      apps/picsharp-app/src-tauri/icons/icon1.icns
  24. BIN
      apps/picsharp-app/src-tauri/icons/icon2.icns
  25. BIN
      apps/picsharp-app/src-tauri/icons/icon3.icns
  26. BIN
      apps/picsharp-app/src/assets/logo-96x96.png
  27. BIN
      apps/picsharp-app/src/assets/logo.png
  28. 2 2
      apps/picsharp-app/src/components/layouts/app-layout.tsx
  29. 3 3
      apps/picsharp-app/src/components/layouts/sidebar-nav.tsx
  30. 2 1
      apps/picsharp-app/src/pages/compression/toolbar-compress.tsx
  31. 2 1
      apps/picsharp-app/src/pages/compression/watch.tsx
  32. 8 42
      apps/picsharp-app/src/pages/update/index.tsx
  33. 2 2
      apps/picsharp-app/src/utils/fs.ts
  34. 12 5
      apps/picsharp-app/src/utils/tray.ts
  35. 0 14
      apps/picsharp-app/src/utils/updater.ts

+ 16 - 16
.github/workflows/release.yml

@@ -31,7 +31,7 @@ jobs:
             const releaseNotesFileContent = fs.readFileSync('./apps/picsharp-app/release-notes.json', 'utf8');
             const releaseNotesFileContent = fs.readFileSync('./apps/picsharp-app/release-notes.json', 'utf8');
             const releaseNotes = JSON.parse(releaseNotesFileContent).releases[version] || {};
             const releaseNotes = JSON.parse(releaseNotesFileContent).releases[version] || {};
             const notes = releaseNotes.notes || [];
             const notes = releaseNotes.notes || [];
-            const releaseNote = notes.map((note, index) => `${index + 1}. ${note}`).join(' ');
+            const releaseNote = notes.map((note, index) => `${index + 1}. ${note}`).join('\n');
             console.log('Formatted release note:', releaseNote);
             console.log('Formatted release note:', releaseNote);
             core.setOutput('release_version', version);
             core.setOutput('release_version', version);
             core.setOutput('release_note', releaseNote);
             core.setOutput('release_note', releaseNote);
@@ -43,23 +43,23 @@ jobs:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
         include:
         include:
-          # - platform: 'macos-latest'
-          #   config: { args: '--target aarch64-apple-darwin', arch: 'aarch64-apple-darwin' }
-          # - platform: 'macos-latest'
-          #   config: { args: '--target x86_64-apple-darwin', arch: 'x86_64-apple-darwin' }
-          # - platform: 'ubuntu-22.04'
-          #   config: { args: '--target x86_64-unknown-linux-gnu', arch: 'x86_64-unknown-linux-gnu' }
-          # - platform: 'ubuntu-22.04-arm'
-          #   config:
-          #     { args: '--target aarch64-unknown-linux-gnu', arch: 'aarch64-unknown-linux-gnu' }
+          - platform: 'macos-latest'
+            config: { args: '--target aarch64-apple-darwin', arch: 'aarch64-apple-darwin' }
+          - platform: 'macos-latest'
+            config: { args: '--target x86_64-apple-darwin', arch: 'x86_64-apple-darwin' }
+          - platform: 'ubuntu-22.04'
+            config: { args: '--target x86_64-unknown-linux-gnu', arch: 'x86_64-unknown-linux-gnu' }
+          - platform: 'ubuntu-22.04-arm'
+            config:
+              { args: '--target aarch64-unknown-linux-gnu', arch: 'aarch64-unknown-linux-gnu' }
           - platform: 'windows-latest'
           - platform: 'windows-latest'
             config: { args: '--target x86_64-pc-windows-msvc', arch: 'x86_64-pc-windows-msvc' }
             config: { args: '--target x86_64-pc-windows-msvc', arch: 'x86_64-pc-windows-msvc' }
-          - platform: 'windows-latest'
-            config:
-              {
-                args: '--target aarch64-pc-windows-msvc --bundles nsis',
-                arch: 'aarch64-pc-windows-msvc',
-              }
+          # - platform: 'windows-latest'
+          #   config:
+          #     {
+          #       args: '--target aarch64-pc-windows-msvc --bundles nsis',
+          #       arch: 'aarch64-pc-windows-msvc',
+          #     }
     runs-on: ${{ matrix.platform }}
     runs-on: ${{ matrix.platform }}
     steps:
     steps:
       - uses: actions/checkout@v4
       - uses: actions/checkout@v4

+ 1 - 1
apps/picsharp-app/index.html

@@ -3,7 +3,7 @@
 
 
 <head>
 <head>
   <meta charset="UTF-8" />
   <meta charset="UTF-8" />
-  <link rel="icon" type="image/png" href="public/logo.png" />
+  <link rel="icon" type="image/x-icon" href="public/favicon.ico" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>PicSharp</title>
   <title>PicSharp</title>
   <style>
   <style>

BIN
apps/picsharp-app/src-tauri/icons/128x128.png


BIN
apps/picsharp-app/src-tauri/icons/128x128@2x.png


BIN
apps/picsharp-app/src-tauri/icons/32x32_.png


BIN
apps/picsharp-app/src-tauri/icons/32x32__.png


BIN
apps/picsharp-app/src-tauri/icons/Square107x107Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square142x142Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square150x150Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square284x284Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square30x30Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square310x310Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square44x44Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square71x71Logo.png


BIN
apps/picsharp-app/src-tauri/icons/Square89x89Logo.png


BIN
apps/picsharp-app/src-tauri/icons/StoreLogo.png


BIN
apps/picsharp-app/src-tauri/icons/_128x128.png


BIN
apps/picsharp-app/src-tauri/icons/_128x128@2x.png


BIN
apps/picsharp-app/src-tauri/icons/_icon.ico


BIN
apps/picsharp-app/src-tauri/icons/_icon.png


BIN
apps/picsharp-app/src-tauri/icons/icon.ico


BIN
apps/picsharp-app/src-tauri/icons/icon.png


BIN
apps/picsharp-app/src-tauri/icons/icon1.icns


BIN
apps/picsharp-app/src-tauri/icons/icon2.icns


BIN
apps/picsharp-app/src-tauri/icons/icon3.icns


BIN
apps/picsharp-app/src/assets/logo-96x96.png


BIN
apps/picsharp-app/src/assets/logo.png


+ 2 - 2
apps/picsharp-app/src/components/layouts/app-layout.tsx

@@ -9,7 +9,7 @@ import { parseOpenWithFiles } from '@/utils/launch';
 import useAppStore from '@/store/app';
 import useAppStore from '@/store/app';
 import useCompressionStore from '@/store/compression';
 import useCompressionStore from '@/store/compression';
 import useSettingsStore from '@/store/settings';
 import useSettingsStore from '@/store/settings';
-import { isValidArray, isProd, isLinux } from '@/utils';
+import { isValidArray, isProd, isLinux, isMac } from '@/utils';
 import { parsePaths } from '@/utils/fs';
 import { parsePaths } from '@/utils/fs';
 import { VALID_IMAGE_EXTS, SettingsKey } from '@/constants';
 import { VALID_IMAGE_EXTS, SettingsKey } from '@/constants';
 import { useNavigate } from '@/hooks/useNavigate';
 import { useNavigate } from '@/hooks/useNavigate';
@@ -183,7 +183,7 @@ export default function AppLayout() {
       <div className='bg-background dark:bg-background h-screen flex-1 bg-gradient-to-b from-blue-50 to-white dark:bg-none'>
       <div className='bg-background dark:bg-background h-screen flex-1 bg-gradient-to-b from-blue-50 to-white dark:bg-none'>
         <ErrorBoundary>
         <ErrorBoundary>
           <main className='relative h-full overflow-hidden'>
           <main className='relative h-full overflow-hidden'>
-            {!isLinux && (
+            {isMac && (
               <div
               <div
                 data-tauri-drag-region='true'
                 data-tauri-drag-region='true'
                 className='draggable absolute left-0 top-0 z-50 h-6 w-full select-none'
                 className='draggable absolute left-0 top-0 z-50 h-6 w-full select-none'

+ 3 - 3
apps/picsharp-app/src/components/layouts/sidebar-nav.tsx

@@ -16,7 +16,7 @@ import { useTheme, Theme } from '@/components/theme-provider';
 import useAppStore from '@/store/app';
 import useAppStore from '@/store/app';
 import useSelector from '@/hooks/useSelector';
 import useSelector from '@/hooks/useSelector';
 import clsx from 'clsx';
 import clsx from 'clsx';
-import { isProd, isDev, isLinux } from '@/utils';
+import { isProd, isDev, isLinux, isMac } from '@/utils';
 export interface NavLink {
 export interface NavLink {
   title: string;
   title: string;
   href: string;
   href: string;
@@ -82,9 +82,9 @@ export default function SidebarNav() {
       <div
       <div
         className={cn(
         className={cn(
           'light:border-gray-200 flex h-screen w-[67px] flex-shrink-0 flex-col justify-between border-r bg-neutral-50 pb-4 dark:bg-neutral-800',
           'light:border-gray-200 flex h-screen w-[67px] flex-shrink-0 flex-col justify-between border-r bg-neutral-50 pb-4 dark:bg-neutral-800',
-          !isLinux ? 'pt-12' : 'pt-4',
+          isMac ? 'pt-12' : 'pt-4',
         )}
         )}
-        data-tauri-drag-region={!isLinux}
+        data-tauri-drag-region={isMac}
       >
       >
         <div className='flex flex-col items-center justify-center gap-2'>
         <div className='flex flex-col items-center justify-center gap-2'>
           <img
           <img

+ 2 - 1
apps/picsharp-app/src/pages/compression/toolbar-compress.tsx

@@ -18,6 +18,7 @@ import { useNavigate } from '@/hooks/useNavigate';
 import { ICompressor } from '@/utils/compressor';
 import { ICompressor } from '@/utils/compressor';
 import { appCacheDir, join } from '@tauri-apps/api/path';
 import { appCacheDir, join } from '@tauri-apps/api/path';
 import { cn } from '@/lib/utils';
 import { cn } from '@/lib/utils';
+import { convertFileSrc } from '@tauri-apps/api/core';
 
 
 function ToolbarCompress() {
 function ToolbarCompress() {
   const { sidecar } = useAppStore();
   const { sidecar } = useAppStore();
@@ -149,7 +150,7 @@ function ToolbarCompress() {
               targetFile.formattedCompressedBytesSize = humanSize(targetFile.bytesSize);
               targetFile.formattedCompressedBytesSize = humanSize(targetFile.bytesSize);
               targetFile.compressRate = '0%';
               targetFile.compressRate = '0%';
             }
             }
-            targetFile.assetPath = res.output_converted_path;
+            targetFile.assetPath = convertFileSrc(res.output_path);
             targetFile.outputPath = res.output_path;
             targetFile.outputPath = res.output_path;
             targetFile.originalTempPath = res.original_temp_converted_path;
             targetFile.originalTempPath = res.original_temp_converted_path;
           } else {
           } else {

+ 2 - 1
apps/picsharp-app/src/pages/compression/watch.tsx

@@ -18,6 +18,7 @@ import { message } from '@tauri-apps/plugin-dialog';
 import { sendTextNotification } from '@/utils/notification';
 import { sendTextNotification } from '@/utils/notification';
 import { appCacheDir, join } from '@tauri-apps/api/path';
 import { appCacheDir, join } from '@tauri-apps/api/path';
 import useAppStore from '@/store/app';
 import useAppStore from '@/store/app';
+import { convertFileSrc } from '@tauri-apps/api/core';
 function CompressionWatch() {
 function CompressionWatch() {
   const navigate = useNavigate();
   const navigate = useNavigate();
   const queueRef = useRef<string[]>([]);
   const queueRef = useRef<string[]>([]);
@@ -76,7 +77,7 @@ function CompressionWatch() {
               targetFile.formattedCompressedBytesSize = humanSize(targetFile.bytesSize);
               targetFile.formattedCompressedBytesSize = humanSize(targetFile.bytesSize);
               targetFile.compressRate = '0%';
               targetFile.compressRate = '0%';
             }
             }
-            targetFile.assetPath = res.output_converted_path;
+            targetFile.assetPath = convertFileSrc(res.output_path);
             targetFile.outputPath = res.output_path;
             targetFile.outputPath = res.output_path;
             targetFile.originalTempPath = res.original_temp_converted_path;
             targetFile.originalTempPath = res.original_temp_converted_path;
           } else {
           } else {

+ 8 - 42
apps/picsharp-app/src/pages/update/index.tsx

@@ -21,43 +21,6 @@ enum UpdateStatus {
   Downloading = 'downloading',
   Downloading = 'downloading',
   Finished = 'finished',
   Finished = 'finished',
 }
 }
-const a = `Marked - Markdown Parser
-========================
-
-[Marked] lets you convert [Markdown] into HTML.  Markdown is a simple text format whose goal is to be very easy to read and write, even when not converted to HTML.  This demo page will let you type anything you like and see how it gets converted.  Live.  No more waiting around.
-
-How To Use The Demo
--------------------
-
-1. Type in stuff on the left.
-2. See the live updates on the right.
-
-That's it.  Pretty simple.  There's also a drop-down option above to switch between various views:
-
-- **Preview:**  A live display of the generated HTML as it would render in a browser.
-- **HTML Source:**  The generated HTML before your browser makes it pretty.
-- **Lexer Data:**  What [marked] uses internally, in case you like gory stuff like this.
-- **Quick Reference:**  A brief run-down of how to format things using markdown.
-
-Why Markdown?
--------------
-
-It's easy.  It's not overly bloated, unlike HTML.  Also, as the creator of [markdown] says,
-
-> The overriding design goal for Markdown's
-> formatting syntax is to make it as readable
-> as possible. The idea is that a
-> Markdown-formatted document should be
-> publishable as-is, as plain text, without
-> looking like it's been marked up with tags
-> or formatting instructions.
-
-Ready to start writing?  Either start changing stuff on the left or
-[clear everything](/demo/?text=) with a simple click.
-
-[Marked]: https://github.com/markedjs/marked/
-[Markdown]: http://daringfireball.net/projects/markdown/
-`;
 
 
 const ReleaseNotes = memo(function ReleaseNotes({ data }: { data: string }) {
 const ReleaseNotes = memo(function ReleaseNotes({ data }: { data: string }) {
   const [html, setHtml] = useState<string>('');
   const [html, setHtml] = useState<string>('');
@@ -71,7 +34,7 @@ const ReleaseNotes = memo(function ReleaseNotes({ data }: { data: string }) {
 export default function Update() {
 export default function Update() {
   const [query] = useSearchParams();
   const [query] = useSearchParams();
   const version = query.get('version');
   const version = query.get('version');
-  const releaseContent = query.get('releaseContent');
+  const releaseContent = query.get('releaseContent') || '';
   const [status, setStatus] = useState<UpdateStatus>(UpdateStatus.Ready);
   const [status, setStatus] = useState<UpdateStatus>(UpdateStatus.Ready);
   const [progress, setProgress] = useState<number>(0);
   const [progress, setProgress] = useState<number>(0);
   const t = useI18n();
   const t = useI18n();
@@ -141,7 +104,7 @@ export default function Update() {
   };
   };
 
 
   return (
   return (
-    <div className='bg-background flex min-h-screen flex-col items-center justify-center px-4 pb-5 pt-7'>
+    <div className='bg-background flex min-h-screen w-screen flex-col items-center justify-center px-4 pb-5 pt-7'>
       <div className='flex w-full flex-1 flex-col rounded-lg bg-white p-5 shadow-xl dark:bg-neutral-800'>
       <div className='flex w-full flex-1 flex-col rounded-lg bg-white p-5 shadow-xl dark:bg-neutral-800'>
         <h1 className='text-foreground mb-3 text-center text-3xl font-bold'>{t('update.title')}</h1>
         <h1 className='text-foreground mb-3 text-center text-3xl font-bold'>{t('update.title')}</h1>
 
 
@@ -153,9 +116,12 @@ export default function Update() {
 
 
         <div className='mb-3 flex flex-1 flex-col'>
         <div className='mb-3 flex flex-1 flex-col'>
           <h2 className='text-foreground mb-3 text-lg font-semibold'>{t('update.changelog')}</h2>
           <h2 className='text-foreground mb-3 text-lg font-semibold'>{t('update.changelog')}</h2>
-          <div className='text-foreground h-[220px] flex-grow-0 list-inside list-disc space-y-2 overflow-y-auto rounded-md p-4 py-3 dark:bg-neutral-700'>
-            {/* {releaseContent} */}
-            <ReleaseNotes data={a} />
+          <div className='text-foreground h-[220px] w-full flex-grow-0 list-inside list-disc space-y-2 overflow-y-auto rounded-md p-4 py-3 dark:bg-neutral-700'>
+            {releaseContent.split('\n').map((line, index) => (
+              <div key={index} className='w-full break-all'>
+                {line}
+              </div>
+            ))}
           </div>
           </div>
         </div>
         </div>
         <div className='relative w-full'>
         <div className='relative w-full'>

+ 2 - 2
apps/picsharp-app/src/utils/fs.ts

@@ -1,4 +1,4 @@
-import { invoke } from '@tauri-apps/api/core';
+import { convertFileSrc, invoke } from '@tauri-apps/api/core';
 import { ICompressor } from './compressor';
 import { ICompressor } from './compressor';
 import { isValidArray } from '.';
 import { isValidArray } from '.';
 
 
@@ -33,7 +33,7 @@ export async function parsePaths(paths: string[], validExts: string[]) {
     return candidates.map<FileInfo>((item) => ({
     return candidates.map<FileInfo>((item) => ({
       id: item.id,
       id: item.id,
       path: item.path,
       path: item.path,
-      assetPath: item.asset_path,
+      assetPath: convertFileSrc(item.path),
       name: item.name,
       name: item.name,
       parentDir: item.base_dir,
       parentDir: item.base_dir,
       bytesSize: item.bytes_size,
       bytesSize: item.bytes_size,

+ 12 - 5
apps/picsharp-app/src/utils/tray.ts

@@ -7,6 +7,7 @@ import { getCurrentWindow } from '@tauri-apps/api/window';
 import { isProd } from '.';
 import { isProd } from '.';
 import { createWebviewWindow } from './window';
 import { createWebviewWindow } from './window';
 import checkForUpdate from './updater';
 import checkForUpdate from './updater';
+import { message } from '@tauri-apps/plugin-dialog';
 
 
 declare global {
 declare global {
   interface Window {
   interface Window {
@@ -15,6 +16,7 @@ declare global {
 }
 }
 
 
 export async function createTrayMenu() {
 export async function createTrayMenu() {
+  if (getCurrentWebviewWindow().label !== 'main') return;
   const menu = await Menu.new({
   const menu = await Menu.new({
     items: [
     items: [
       {
       {
@@ -49,8 +51,13 @@ export async function createTrayMenu() {
       {
       {
         id: 'check_update',
         id: 'check_update',
         text: t('tray.check_update'),
         text: t('tray.check_update'),
-        action: () => {
-          checkForUpdate();
+        action: async () => {
+          const updater = await checkForUpdate();
+          if (!updater) {
+            message(t('settings.about.version.no_update_available'), {
+              title: t('tray.check_update'),
+            });
+          }
         },
         },
         accelerator: 'CmdOrCtrl+U',
         accelerator: 'CmdOrCtrl+U',
       },
       },
@@ -71,9 +78,9 @@ export async function initTray() {
   if (getCurrentWebviewWindow().label !== 'main' || window.__TRAY_INSTANCE) return;
   if (getCurrentWebviewWindow().label !== 'main' || window.__TRAY_INSTANCE) return;
 
 
   const menu = await createTrayMenu();
   const menu = await createTrayMenu();
-
+  const icon = await defaultWindowIcon();
   const options: TrayIconOptions = {
   const options: TrayIconOptions = {
-    icon: await defaultWindowIcon(),
+    icon,
     iconAsTemplate: true,
     iconAsTemplate: true,
     menu,
     menu,
     menuOnLeftClick: false,
     menuOnLeftClick: false,
@@ -92,6 +99,6 @@ export async function initTray() {
   window.__TRAY_INSTANCE = tray;
   window.__TRAY_INSTANCE = tray;
 }
 }
 
 
-if (!isProd) {
+if (isProd) {
   initTray();
   initTray();
 }
 }

+ 0 - 14
apps/picsharp-app/src/utils/updater.ts

@@ -5,20 +5,6 @@ import { t } from '../i18n';
 export const UPDATE_WINDOW_LABEL = 'update-detail';
 export const UPDATE_WINDOW_LABEL = 'update-detail';
 
 
 export default async function checkForUpdate() {
 export default async function checkForUpdate() {
-  createWebviewWindow(UPDATE_WINDOW_LABEL, {
-    url: `/update?version=1.0.0&releaseContent=test`,
-    title: t('nav.update'),
-    width: 500,
-    height: 490,
-    center: true,
-    resizable: false,
-    titleBarStyle: 'overlay',
-    hiddenTitle: true,
-    dragDropEnabled: true,
-    minimizable: false,
-    maximizable: false,
-  });
-  return;
   const updater = await check();
   const updater = await check();
   if (updater) {
   if (updater) {
     console.log(`found update ${updater.version} from ${updater.date} with notes ${updater.body}`);
     console.log(`found update ${updater.version} from ${updater.date} with notes ${updater.body}`);