Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
1613877771 | |||
aca18f18f4 |
1
.gitignore
vendored
@ -9,7 +9,6 @@ coverage
|
||||
# Production
|
||||
dist
|
||||
dist_electron
|
||||
build
|
||||
|
||||
# Environment files
|
||||
.env
|
||||
|
219
README.md
@ -1,100 +1,137 @@
|
||||
# 🎙️ Podcast Recorder
|
||||
# 🎙️ Podcast Upptökur
|
||||
|
||||
A modern, user-friendly desktop application for recording and managing podcast episodes. Built with Electron and React, this application provides a seamless experience for podcast creators.
|
||||
Nútímaleg, notendavæn skjáborðsforrit til að taka upp og halda utan um hlaðvarpsþætti. Byggt með Electron og React, þetta forrit veitir hlaðvarpshöfundum góða upplifun.
|
||||
|
||||

|
||||

|
||||
|
||||
## ✨ Features
|
||||
## ✨ Eiginleikar
|
||||
|
||||
### 🎯 Core Functionality
|
||||
- **High-Quality Audio Recording**
|
||||
- Professional-grade audio capture
|
||||
- Configurable bitrate, sample rate, and channels
|
||||
- Real-time audio monitoring
|
||||
- Automatic backup during recording
|
||||
### 🎯 Helstu eiginleikar
|
||||
- **Hágæða hljóðupptaka**
|
||||
- Hágæða hljóðupptaka
|
||||
- Stillanlegur bitahraði, sýnatíðni og rásir
|
||||
- Rauntímavöktun hljóðs
|
||||
- Sjálfvirk afritun við upptöku
|
||||
|
||||
### 🎛️ Audio Settings
|
||||
- **Customizable Recording Parameters**
|
||||
- Bitrate: Up to 256kbps
|
||||
- Sample Rate: Up to 48kHz
|
||||
- Channel Configuration: Mono/Stereo
|
||||
- Microphone Selection
|
||||
### 🎛️ Hljóðstillingar
|
||||
- **Sérsniðnar upptökubreytur**
|
||||
- Bitahraði: Allt að 256kbps
|
||||
- Sýnatíðni: Allt að 48kHz
|
||||
- Rásastillingar: Einóma/Stereo
|
||||
- Val á hljóðnema
|
||||
|
||||
### 💾 File Management
|
||||
- **Organized Storage**
|
||||
- User-specific directories
|
||||
- Automatic file naming
|
||||
- Backup system during recording
|
||||
- Easy file organization
|
||||
### 💾 Skráastjórnun
|
||||
- **Skipulagt geymsla**
|
||||
- Notendamiðaðar möppur
|
||||
- Sjálfvirk skráanöfn
|
||||
- Afritakerfi við upptöku
|
||||
- Auðveld skráaskipulagning
|
||||
|
||||
### 🔄 Upload Integration
|
||||
- **Seamless Publishing**
|
||||
- Direct upload to podcast hosting
|
||||
- Progress tracking
|
||||
- Automatic metadata handling
|
||||
- Support for multiple environments
|
||||
### 🔄 Upphleðsla
|
||||
- **Auðveld birtingarferli**
|
||||
- Bein upphleðsla á hlaðvarpsvistun
|
||||
- Framvindueftirfylgni
|
||||
- Sjálfvirk lýsigagnavinnsla
|
||||
- Stuðningur fyrir mismunandi umhverfi
|
||||
|
||||
### 🛠️ Technical Features
|
||||
- **Built with Modern Technologies**
|
||||
- Electron for cross-platform support
|
||||
- React for responsive UI
|
||||
- FFmpeg integration for audio processing
|
||||
- Secure file handling
|
||||
### 🛠️ Tæknilegir eiginleikar
|
||||
- **Byggt með nútímatækni**
|
||||
- Electron fyrir stuðning á mismunandi stýrikerfum
|
||||
- React fyrir hraðvirkt notendaviðmót
|
||||
- FFmpeg samþætting fyrir hljóðvinnslu
|
||||
- Örugg skráameðhöndlun
|
||||
|
||||
## 🚀 Getting Started
|
||||
## 🚀 Hafist handa
|
||||
|
||||
### Prerequisites
|
||||
- Node.js (v14 or higher)
|
||||
- npm or yarn
|
||||
- FFmpeg (automatically installed by the application)
|
||||
### Forsendur
|
||||
- Node.js (v14 eða nýrra)
|
||||
- npm eða yarn
|
||||
- FFmpeg (sjálfkrafa uppsett af forritinu)
|
||||
|
||||
### Installation
|
||||
### Uppsetning
|
||||
|
||||
1. Clone the repository:
|
||||
#### Windows
|
||||
|
||||
1. Sæktu nýjasta útgáfuna af forritinu:
|
||||
- Farðu á [útgáfusíðuna](https://github.com/yourusername/podcast-upptokur/releases)
|
||||
- Sæktu `PodcastUpptokur-Setup-x.x.x.exe` skrána
|
||||
|
||||
2. Keyrðu uppsetningarforritið:
|
||||
- Opnaðu niðurhalið skjalið
|
||||
- Fylgdu leiðbeiningum á skjánum til að ljúka uppsetningunni
|
||||
- Forritið mun sjálfkrafa setja upp allar nauðsynlegar einingar (þ.m.t. FFmpeg)
|
||||
|
||||
3. Opnaðu forritið:
|
||||
- Smelltu á `Podcast Upptökur` á skjáborðinu eða í upphafsvalmyndinni
|
||||
|
||||
#### Linux
|
||||
|
||||
1. Sæktu nýjasta AppImage skrána:
|
||||
- Farðu á [útgáfusíðuna](https://github.com/yourusername/podcast-upptokur/releases)
|
||||
- Sæktu `Podcast Upptökur-x.x.x.AppImage` skrána
|
||||
|
||||
2. Gerðu AppImage skrána keyranlega:
|
||||
```bash
|
||||
chmod +x "Podcast Upptökur-x.x.x.AppImage"
|
||||
```
|
||||
|
||||
3. Keyrðu forritið:
|
||||
```bash
|
||||
./"Podcast Upptökur-x.x.x.AppImage"
|
||||
```
|
||||
|
||||
4. (Valfrjálst) Settu upp forritið í kerfisvísi:
|
||||
```bash
|
||||
./"Podcast Upptökur-x.x.x.AppImage" --appimage-desktop-install
|
||||
```
|
||||
|
||||
#### Fyrir þróendur
|
||||
|
||||
1. Afritaðu geymsluna:
|
||||
```bash
|
||||
git clone https://github.com/yourusername/podcast-recorder.git
|
||||
cd podcast-recorder
|
||||
git clone https://github.com/yourusername/podcast-upptokur.git
|
||||
cd podcast-upptokur
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
2. Settu upp nauðsynlega pakka:
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
3. Start the development server:
|
||||
3. Ræstu þróunarþjóninn:
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
4. Build the application:
|
||||
4. Byggðu forritið:
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
## 🎨 Usage
|
||||
## 🎨 Notkun
|
||||
|
||||
1. **Launch the Application**
|
||||
- Start the application
|
||||
- Enter your email for user-specific storage
|
||||
1. **Ræstu forritið**
|
||||
- Opnaðu forritið
|
||||
- Sláðu inn netfangið þitt fyrir notendamiðað geymslurými
|
||||
|
||||
2. **Configure Settings**
|
||||
- Select your microphone
|
||||
- Adjust audio settings
|
||||
- Choose save directory
|
||||
2. **Stilltu stillingar**
|
||||
- Veldu hljóðnemann þinn
|
||||
- Aðlagaðu hljóðstillingar
|
||||
- Veldu vistunarmöppuna
|
||||
|
||||
3. **Start Recording**
|
||||
- Click the record button
|
||||
- Monitor audio levels
|
||||
- Use the pause feature when needed
|
||||
3. **Byrjaðu upptöku**
|
||||
- Smelltu á upptökuhnappinn
|
||||
- Fylgstu með hljóðstiginu
|
||||
- Notaðu hlé þegar þörf er á
|
||||
|
||||
4. **Save and Upload**
|
||||
- Stop recording when finished
|
||||
- Review the recording
|
||||
- Upload to your podcast hosting platform
|
||||
4. **Vistaðu og hladdu upp**
|
||||
- Stöðvaðu upptöku þegar henni er lokið
|
||||
- Farðu yfir upptökuna
|
||||
- Hladdu upp á hlaðvarpshýsinguna þína
|
||||
|
||||
## 🔧 Configuration
|
||||
## 🔧 Stillingar
|
||||
|
||||
### Audio Settings
|
||||
### Hljóðstillingar
|
||||
```json
|
||||
{
|
||||
"audioSettings": {
|
||||
@ -105,19 +142,19 @@ npm run build
|
||||
}
|
||||
```
|
||||
|
||||
### Directory Structure
|
||||
### Möppustrúktúr
|
||||
```
|
||||
PodcastUpptokur/
|
||||
└── [email]/
|
||||
├── recording_name.webm
|
||||
└── recording_name_saved.webm
|
||||
└── [netfang]/
|
||||
├── upptökuheiti.webm
|
||||
└── upptökuheiti_saved.webm
|
||||
```
|
||||
|
||||
## 🛠️ Development
|
||||
## 🛠️ Þróun
|
||||
|
||||
### Project Structure
|
||||
### Verkefnauppbygging
|
||||
```
|
||||
podcast-recorder/
|
||||
podcast-upptokur/
|
||||
├── src/
|
||||
│ ├── components/
|
||||
│ ├── services/
|
||||
@ -128,34 +165,34 @@ podcast-recorder/
|
||||
└── public/
|
||||
```
|
||||
|
||||
### Available Scripts
|
||||
- `npm run dev` - Start development server
|
||||
- `npm run build` - Build for production
|
||||
- `npm run package` - Package the application
|
||||
### Tiltækar skipanir
|
||||
- `npm run dev` - Ræsa þróunarþjón
|
||||
- `npm run build` - Byggja fyrir framleiðslu
|
||||
- `npm run package` - Pakka forritinu
|
||||
|
||||
## 🤝 Contributing
|
||||
## 🤝 Þátttaka
|
||||
|
||||
1. Fork the repository
|
||||
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
||||
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
||||
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
||||
5. Open a Pull Request
|
||||
1. Forkaðu geymsluna
|
||||
2. Búðu til eiginleikagrein þína (`git checkout -b feature/ÆðislegurEiginleiki`)
|
||||
3. Staðfestu breytingarnar þínar (`git commit -m 'Bæta við ÆðislegumEiginleika'`)
|
||||
4. Ýttu á greinina (`git push origin feature/ÆðislegurEiginleiki`)
|
||||
5. Opnaðu Pull Request
|
||||
|
||||
## 📝 License
|
||||
## 📝 Leyfi
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||
Þetta verkefni er háð MIT leyfinu - sjá [LICENSE](LICENSE) skrána fyrir nánari upplýsingar.
|
||||
|
||||
## 🙏 Acknowledgments
|
||||
## 🙏 Þakklæti
|
||||
|
||||
- FFmpeg for audio processing
|
||||
- Electron team for the framework
|
||||
- React team for the UI library
|
||||
- All contributors and users
|
||||
- FFmpeg fyrir hljóðvinnslu
|
||||
- Electron teymið fyrir umgjörðina
|
||||
- React teymið fyrir notendaviðmóts safnið
|
||||
- Allir þátttakendur og notendur
|
||||
|
||||
## 📞 Support
|
||||
## 📞 Stuðningur
|
||||
|
||||
For support, please open an issue in the GitHub repository or contact the maintainers.
|
||||
Fyrir stuðning, vinsamlegast opnaðu málefni í Gitea geymslunni eða hafðu samband við umsjónarmenn.
|
||||
|
||||
---
|
||||
|
||||
Made with ❤️ by [Your Name/Organization]
|
||||
Þróað með ❤️ af Gunnar Ásgeirsson og Ólafur Búi Ólafsson fyrir Háskólann á Akureyri
|
11
build-linux.sh
Normal file → Executable file
@ -2,9 +2,14 @@
|
||||
|
||||
echo "Building Linux target (AppImage)..."
|
||||
|
||||
# It's good practice to navigate to the script's directory
|
||||
# in case it's called from elsewhere, though for this simple case it might not be strictly necessary.
|
||||
# cd "$(dirname "$0")"
|
||||
# Generate icons
|
||||
echo "Generating icons..."
|
||||
./scripts/generate-icons.sh
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Icon generation failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Running npm install (ensures Linux dependencies)..."
|
||||
npm install
|
||||
|
BIN
build/icons/hicolor/128x128/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
build/icons/hicolor/16x16/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 767 B |
BIN
build/icons/hicolor/256x256/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
build/icons/hicolor/32x32/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
build/icons/hicolor/48x48/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
build/icons/hicolor/512x512/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
build/icons/hicolor/64x64/apps/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
build/icons/podcast-upptokur.png
Normal file
After Width: | Height: | Size: 40 KiB |
206
build/icons/podcast-upptokur.xpm
Normal file
@ -0,0 +1,206 @@
|
||||
/* XPM */
|
||||
static const char *podcast_upptokur[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 168 2 ",
|
||||
" c #9F1DD1",
|
||||
". c #A41DD3",
|
||||
"X c #862CC2",
|
||||
"o c #8D2EC6",
|
||||
"O c #9424CA",
|
||||
"+ c #9A26CE",
|
||||
"@ c #932DCA",
|
||||
"# c #9431CA",
|
||||
"$ c #9B33CE",
|
||||
"% c #9D27D0",
|
||||
"& c #9E2AD0",
|
||||
"* c #A421D4",
|
||||
"= c #A42CD3",
|
||||
"- c #AB2CD7",
|
||||
"; c #AF2CD9",
|
||||
": c #B226DB",
|
||||
"> c #B52EDC",
|
||||
", c #B92ADF",
|
||||
"< c #A336D2",
|
||||
"1 c #AC34D7",
|
||||
"2 c #A33AD2",
|
||||
"3 c #AB39D6",
|
||||
"4 c #AD30D8",
|
||||
"5 c #AE3AD8",
|
||||
"6 c #B434DC",
|
||||
"7 c #B934DF",
|
||||
"8 c #B43BDB",
|
||||
"9 c #B93DDE",
|
||||
"0 c #BE23E2",
|
||||
"q c #BD2EE1",
|
||||
"w c #BD35E1",
|
||||
"e c #BC3DE0",
|
||||
"r c #C12CE3",
|
||||
"t c #C82DE7",
|
||||
"y c #CC2DE9",
|
||||
"u c #C334E4",
|
||||
"i c #C03EE2",
|
||||
"p c #C93DE7",
|
||||
"a c #CC36E9",
|
||||
"s c #CC3AE9",
|
||||
"d c #D43BED",
|
||||
"f c #D93BF0",
|
||||
"g c #A742D4",
|
||||
"h c #B342DB",
|
||||
"j c #BA43DE",
|
||||
"k c #B64DDC",
|
||||
"l c #BC4DDF",
|
||||
"z c #AE5CD7",
|
||||
"x c #B653DC",
|
||||
"c c #B362DA",
|
||||
"v c #B964DD",
|
||||
"b c #B368DA",
|
||||
"n c #BC6BDE",
|
||||
"m c #BD41E0",
|
||||
"M c #BE53E0",
|
||||
"N c #BF6CE0",
|
||||
"B c #C542E5",
|
||||
"V c #C845E6",
|
||||
"C c #C64CE5",
|
||||
"Z c #CB4DE7",
|
||||
"A c #CC44E9",
|
||||
"S c #CE4FE9",
|
||||
"D c #D346ED",
|
||||
"F c #D44AED",
|
||||
"G c #D848EF",
|
||||
"H c #C354E3",
|
||||
"J c #C058E1",
|
||||
"K c #CE55E9",
|
||||
"L c #CD5DE8",
|
||||
"P c #D151EB",
|
||||
"I c #D15CEB",
|
||||
"U c #DB43F1",
|
||||
"Y c #DA49F1",
|
||||
"T c #DC58F1",
|
||||
"R c #E34CF5",
|
||||
"E c #EC4FFA",
|
||||
"W c #F150FD",
|
||||
"Q c #C565E3",
|
||||
"! c #C860E5",
|
||||
"~ c #C36CE2",
|
||||
"^ c #C86EE5",
|
||||
"/ c #D465EC",
|
||||
"( c #D26EEA",
|
||||
") c #DA68EF",
|
||||
"_ c #C57EE3",
|
||||
"` c #CE77E8",
|
||||
"' c #CF7AE8",
|
||||
"] c #D270EB",
|
||||
"[ c #D977EE",
|
||||
"{ c #D57DEC",
|
||||
"} c #DF7FF1",
|
||||
"| c #CB85E6",
|
||||
" . c #C588E3",
|
||||
".. c #CB8BE6",
|
||||
"X. c #D583EC",
|
||||
"o. c #DB80EF",
|
||||
"O. c #D389EA",
|
||||
"+. c #CB91E6",
|
||||
"@. c #D495EA",
|
||||
"#. c #D993ED",
|
||||
"$. c #DA9EED",
|
||||
"%. c #DD86F0",
|
||||
"&. c #DE92F0",
|
||||
"*. c #E385F3",
|
||||
"=. c #E58BF4",
|
||||
"-. c #E495F3",
|
||||
";. c #E892F6",
|
||||
":. c #E29BF2",
|
||||
">. c #EB9FF7",
|
||||
",. c #D5A4EB",
|
||||
"<. c #DEAEEF",
|
||||
"1. c #DEB9EF",
|
||||
"2. c #DFA2F0",
|
||||
"3. c #EAA4F7",
|
||||
"4. c #E3ADF2",
|
||||
"5. c #EAACF6",
|
||||
"6. c #E4B5F2",
|
||||
"7. c #E9B4F5",
|
||||
"8. c #E3BAF1",
|
||||
"9. c #ECBEF6",
|
||||
"0. c #E7C2F3",
|
||||
"q. c #E9C0F5",
|
||||
"w. c #EBCCF5",
|
||||
"e. c #EEC0F8",
|
||||
"r. c #F4C7FA",
|
||||
"t. c #F3CDFA",
|
||||
"y. c #EDD2F6",
|
||||
"u. c #F1D2F9",
|
||||
"i. c #F5DBFA",
|
||||
"p. c #F5D8FB",
|
||||
"a. c #F1DDF8",
|
||||
"s. c #F5DFFA",
|
||||
"d. c #F2D9F9",
|
||||
"f. c #F8DBFC",
|
||||
"g. c #F8DCFC",
|
||||
"h. c #F4E1FA",
|
||||
"j. c #F7E5FB",
|
||||
"k. c #F5E6FA",
|
||||
"l. c #F4E4FA",
|
||||
"z. c #F3E2F9",
|
||||
"x. c #F8E3FC",
|
||||
"c. c #F8E6FC",
|
||||
"v. c #F7EAFB",
|
||||
"b. c #F7ECFB",
|
||||
"n. c #F8EDFB",
|
||||
"m. c #F9E8FC",
|
||||
"M. c #FAEBFC",
|
||||
"N. c #F8EAFC",
|
||||
"B. c #F8ECFC",
|
||||
"V. c #F9EDFC",
|
||||
"C. c #F8EEFC",
|
||||
"Z. c #F9EEFC",
|
||||
"A. c #F9EFFC",
|
||||
"S. c #FAEEFD",
|
||||
"D. c #FAEFFD",
|
||||
"F. c #FAF1FD",
|
||||
"G. c #FBF1FD",
|
||||
"H. c #F9F2FC",
|
||||
"J. c #FAF2FC",
|
||||
"K. c #FCF3FE",
|
||||
"L. c #FCF4FD",
|
||||
"P. c #FCF7FE",
|
||||
"I. c #FBF6FD",
|
||||
"U. c #FDF9FE",
|
||||
"Y. c #FDFAFE",
|
||||
"T. c #FDFBFE",
|
||||
"R. c white",
|
||||
"E. c #FFFFFF",
|
||||
/* pixels */
|
||||
"W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W ",
|
||||
"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E ",
|
||||
"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E ",
|
||||
"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ",
|
||||
"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ",
|
||||
"R R R R R R R Y R R R R R R R R R R R R R R R R R R R R R R R Y ",
|
||||
"Y Y Y Y Y Y Y Y Y Y Y Y U f f U U f f Y Y Y Y Y Y Y Y Y Y Y Y Y ",
|
||||
"Y Y Y Y Y Y Y Y G Y Y d T >.t.g.f.r.;.Y d Y Y G Y Y Y Y Y Y Y Y ",
|
||||
"D D D D D D D D F D d 3.U.i.3.*.*.5.x.K.=.d F D D D D D D D D D ",
|
||||
"D D D D D D D D D D t.m.) y a F F y y } U.5.s D D D D D D D D D ",
|
||||
"A A A A A A A A s e.i.s s 5.m.D.D.c.-.t P H.:.a A A A A A A A A ",
|
||||
"A A A A A A A u o.D.A A c.i.[ S K %.D.t.u / P.I p A A A A A A A ",
|
||||
"B B B B B B B u d.&.r u.9.u r K Z r B s.5.0 9.7.u V B B B B B B ",
|
||||
"B B B B B B i L D.V ] m.B u :.R.P.{ q L H.C ( k.B B B B B B B B ",
|
||||
"i i i i i B w { s., 4.6., C D.R.R.w.e w d.X.B D.H e B i i i i i ",
|
||||
"e e e e e m 7 X.d.: q.2.> m d.R.R.6.7 7 w.#.7 v.! 7 m e e e e e ",
|
||||
"9 9 9 9 9 9 6 ` h.: 4.8.> 9 H 4.$.j 9 6 d.' j n.H 6 9 9 9 9 9 9 ",
|
||||
"8 8 8 8 8 8 6 M n.j Q D.j 6 J #.O.l ; Q D.8 ^ k.8 8 8 8 8 8 8 8 ",
|
||||
"8 8 8 8 8 8 8 4 y.@.. w.0.h D.R.R.w.8 k.$.. 0.<.- 8 8 8 8 8 8 8 ",
|
||||
"5 5 5 5 5 5 5 - ~ H.h 5 8.~ U.U.R.a.~ 6.* ~ H.k 1 5 5 5 5 5 5 5 ",
|
||||
"3 3 3 3 3 3 3 3 = <.z.3 . x P.R.R.a.3 x P.| = 3 3 3 3 3 3 3 3 ",
|
||||
"3 3 3 3 3 3 3 3 3 = 8.P.N 3 b.R.R.w.= ..R.@.= 3 3 3 3 3 3 3 3 3 ",
|
||||
"< < < < < < < < < < & ..P.v w.R.R.,._ H.n % 2 < < < < < < < < < ",
|
||||
"< < < < < < < < < < < + g 2 1.R.R.+.2 2 + < < < < < < < < < < < ",
|
||||
"$ $ $ $ $ $ $ $ $ $ $ $ $ O .R.R.c O $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
"$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b z @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
"# # # # # # # # # # # # # # # O O # # # # # # # # # # # # # # # ",
|
||||
"# # # # # # # # # # # # # @ # # # @ @ # # # # # # # # # # # # # ",
|
||||
"o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o ",
|
||||
"o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o ",
|
||||
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ",
|
||||
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X "
|
||||
};
|
BIN
build/icons/podcast-upptokur_128x128.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
build/icons/podcast-upptokur_16x16.png
Normal file
After Width: | Height: | Size: 767 B |
BIN
build/icons/podcast-upptokur_256x256.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
build/icons/podcast-upptokur_32x32.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
build/icons/podcast-upptokur_48x48.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
build/icons/podcast-upptokur_512x512.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
build/icons/podcast-upptokur_64x64.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
11
build/linux/podcast-upptokur.desktop
Normal file
@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Podcast Upptökur
|
||||
Comment=Record and manage podcast episodes
|
||||
Exec=AppRun --no-sandbox %F
|
||||
Icon=podcast-upptokur
|
||||
Categories=AudioVideo;Audio;Recorder;
|
||||
Terminal=false
|
||||
StartupWMClass=Podcast Upptökur
|
||||
StartupNotify=true
|
||||
MimeType=audio/x-wav;audio/mpeg;
|
@ -52,13 +52,19 @@ async function checkFFmpeg() {
|
||||
const basePath = app.isPackaged
|
||||
? process.resourcesPath
|
||||
: join(__dirname, '..');
|
||||
const ffmpegPath = join(basePath, 'ffmpeg', 'bin', process.platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg');
|
||||
console.log(`[Main] Checking for FFmpeg at: ${ffmpegPath}`); // Add log
|
||||
|
||||
// Determine the correct subdirectory based on platform
|
||||
const platformBinDir = process.platform === 'win32' ? 'bin' : 'linux_bin';
|
||||
const ffmpegBinaryName = process.platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg';
|
||||
|
||||
const ffmpegPath = join(basePath, 'ffmpeg', platformBinDir, ffmpegBinaryName);
|
||||
|
||||
console.log(`[Main] Checking for FFmpeg at: ${ffmpegPath}`);
|
||||
await fs.promises.access(ffmpegPath);
|
||||
console.log('[Main] FFmpeg found.'); // Add log
|
||||
console.log('[Main] FFmpeg found.');
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('[Main] FFmpeg check failed:', error); // Add log
|
||||
console.error('[Main] FFmpeg check failed:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -209,16 +215,23 @@ async function getFFmpegPath() {
|
||||
const basePath = app.isPackaged
|
||||
? process.resourcesPath
|
||||
: join(__dirname, '..');
|
||||
const ffmpegPath = join(basePath, 'ffmpeg', 'bin', process.platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg');
|
||||
|
||||
// Determine the correct subdirectory and binary name based on platform
|
||||
const platformBinDir = process.platform === 'win32' ? 'bin' : 'linux_bin';
|
||||
const ffmpegBinaryName = process.platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg';
|
||||
const ffprobeBinaryName = process.platform === 'win32' ? 'ffprobe.exe' : 'ffprobe'; // Also need ffprobe path
|
||||
|
||||
const ffmpegPath = join(basePath, 'ffmpeg', platformBinDir, ffmpegBinaryName);
|
||||
|
||||
// Check access again to be sure
|
||||
try {
|
||||
await fs.promises.access(ffmpegPath);
|
||||
console.log('[Main] Found FFmpeg path for execution:', ffmpegPath);
|
||||
return ffmpegPath;
|
||||
// Return object with both paths, or just ffmpeg path?
|
||||
// Let's return just ffmpeg path for now, processAudioFile needs update
|
||||
return ffmpegPath;
|
||||
} catch (accessError) {
|
||||
console.error('[Main] FFmpeg not accessible at expected path:', ffmpegPath, accessError);
|
||||
// Attempt fallback or throw error? For now, return null
|
||||
return null;
|
||||
}
|
||||
} catch (error) {
|
||||
@ -230,10 +243,24 @@ async function getFFmpegPath() {
|
||||
// Process audio file with ffmpeg to ensure proper metadata
|
||||
async function processAudioFile(inputPath, outputPath, email) {
|
||||
try {
|
||||
// Check if FFmpeg is installed
|
||||
// Check if FFmpeg is installed (this implicitly gets the path now)
|
||||
const ffmpegPath = await getFFmpegPath();
|
||||
if (!ffmpegPath) {
|
||||
throw new Error('FFmpeg is not installed');
|
||||
throw new Error('FFmpeg executable not found or not accessible.');
|
||||
}
|
||||
|
||||
// Determine platform-specific paths for ffprobe
|
||||
const platformBinDir = process.platform === 'win32' ? 'bin' : 'linux_bin';
|
||||
const ffprobeBinaryName = process.platform === 'win32' ? 'ffprobe.exe' : 'ffprobe';
|
||||
// Construct ffprobe path relative to ffmpeg path or base path
|
||||
const ffprobePath = join(path.dirname(ffmpegPath), ffprobeBinaryName);
|
||||
// Verify ffprobe exists too
|
||||
try {
|
||||
await fs.promises.access(ffprobePath);
|
||||
console.log('[Main] Found FFprobe path for execution:', ffprobePath);
|
||||
} catch (ffprobeAccessError) {
|
||||
console.error('[Main] FFprobe not accessible at expected path:', ffprobePath, ffprobeAccessError);
|
||||
throw new Error('FFprobe executable not found or not accessible.');
|
||||
}
|
||||
|
||||
// Get current date in ISO format
|
||||
@ -260,7 +287,7 @@ async function processAudioFile(inputPath, outputPath, email) {
|
||||
|
||||
console.log('Running FFmpeg command:', ffmpegCommand.join(' '));
|
||||
|
||||
// Run FFmpeg command
|
||||
// Run FFmpeg command using the found path
|
||||
await new Promise((resolve, reject) => {
|
||||
const ffmpeg = spawn(ffmpegPath, ffmpegCommand);
|
||||
|
||||
@ -293,8 +320,7 @@ async function processAudioFile(inputPath, outputPath, email) {
|
||||
throw new Error('FFmpeg produced an empty file');
|
||||
}
|
||||
|
||||
// Verify metadata using FFprobe
|
||||
const ffprobePath = path.join(path.dirname(ffmpegPath), process.platform === 'win32' ? 'ffprobe.exe' : 'ffprobe');
|
||||
// Verify metadata using FFprobe using the found path
|
||||
const ffprobeCommand = [
|
||||
'-v', 'error',
|
||||
'-show_entries', 'format_tags',
|
||||
|
BIN
ffmpeg/linux_bin/ffmpeg
Normal file
BIN
ffmpeg/linux_bin/ffplay
Normal file
BIN
ffmpeg/linux_bin/ffprobe
Normal file
16
package.json
@ -47,9 +47,19 @@
|
||||
"icon": "public/images/icon.png"
|
||||
},
|
||||
"linux": {
|
||||
"target": "AppImage",
|
||||
"icon": "public/images/icon.png",
|
||||
"category": "AudioVideo;Audio;Recorder;"
|
||||
"target": ["AppImage"],
|
||||
"icon": "build/icons",
|
||||
"category": "AudioVideo;Audio;Recorder;",
|
||||
"executableName": "podcast-upptokur",
|
||||
"artifactName": "Podcast Upptökur-${version}.AppImage",
|
||||
"desktop": {
|
||||
"Name": "Podcast Upptökur",
|
||||
"Comment": "Record and manage podcast episodes",
|
||||
"Categories": "AudioVideo;Audio;Recorder;",
|
||||
"Icon": "podcast-upptokur",
|
||||
"StartupWMClass": "Podcast Upptökur",
|
||||
"X-AppImage-Name": "Podcast Upptökur"
|
||||
}
|
||||
},
|
||||
"nsis": {
|
||||
"oneClick": false,
|
||||
|
51
scripts/generate-icons.sh
Executable file
@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Move to the project root directory
|
||||
cd "$(dirname "$0")/.." || exit 1
|
||||
|
||||
# Create icons directory if it doesn't exist
|
||||
mkdir -p build/icons
|
||||
mkdir -p build/icons/hicolor/16x16/apps
|
||||
mkdir -p build/icons/hicolor/32x32/apps
|
||||
mkdir -p build/icons/hicolor/48x48/apps
|
||||
mkdir -p build/icons/hicolor/64x64/apps
|
||||
mkdir -p build/icons/hicolor/128x128/apps
|
||||
mkdir -p build/icons/hicolor/256x256/apps
|
||||
mkdir -p build/icons/hicolor/512x512/apps
|
||||
|
||||
# The base name for the icon files
|
||||
ICON_NAME="podcast-upptokur"
|
||||
|
||||
# Set the convert command path
|
||||
CONVERT="/usr/bin/convert-im6.q16"
|
||||
|
||||
echo "Generating icons for Linux..."
|
||||
|
||||
# Generate different sizes from the original icon
|
||||
"$CONVERT" public/images/icon.png -resize 16x16 "build/icons/${ICON_NAME}_16x16.png"
|
||||
"$CONVERT" public/images/icon.png -resize 32x32 "build/icons/${ICON_NAME}_32x32.png"
|
||||
"$CONVERT" public/images/icon.png -resize 48x48 "build/icons/${ICON_NAME}_48x48.png"
|
||||
"$CONVERT" public/images/icon.png -resize 64x64 "build/icons/${ICON_NAME}_64x64.png"
|
||||
"$CONVERT" public/images/icon.png -resize 128x128 "build/icons/${ICON_NAME}_128x128.png"
|
||||
"$CONVERT" public/images/icon.png -resize 256x256 "build/icons/${ICON_NAME}_256x256.png"
|
||||
"$CONVERT" public/images/icon.png -resize 512x512 "build/icons/${ICON_NAME}_512x512.png"
|
||||
|
||||
# Create a copy of the 512x512 icon as the main icon
|
||||
cp "build/icons/${ICON_NAME}_512x512.png" "build/icons/${ICON_NAME}.png"
|
||||
|
||||
# Also create XPM version for legacy systems
|
||||
"$CONVERT" "build/icons/${ICON_NAME}_32x32.png" "build/icons/${ICON_NAME}.xpm"
|
||||
|
||||
# Copy icons to hicolor structure (for better Linux integration)
|
||||
cp "build/icons/${ICON_NAME}_16x16.png" "build/icons/hicolor/16x16/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_32x32.png" "build/icons/hicolor/32x32/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_48x48.png" "build/icons/hicolor/48x48/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_64x64.png" "build/icons/hicolor/64x64/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_128x128.png" "build/icons/hicolor/128x128/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_256x256.png" "build/icons/hicolor/256x256/apps/${ICON_NAME}.png"
|
||||
cp "build/icons/${ICON_NAME}_512x512.png" "build/icons/hicolor/512x512/apps/${ICON_NAME}.png"
|
||||
|
||||
# For macOS, we would typically create an .icns file, but that's not needed for Linux
|
||||
# and requires additional tools which may not be available on all systems.
|
||||
|
||||
echo "Icon generation complete!"
|