├── .github
└── workflows
│ ├── auto-author-assign.yml
│ ├── csvlint.yml
│ ├── epic.yml
│ ├── main.yml
│ ├── release.yml
│ └── reviewdog.yml
├── .shelldio
└── all_stations.txt
├── AUTHORS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── shelldio.sh
└── template
└── PKGBUILD
/.github/workflows/auto-author-assign.yml:
--------------------------------------------------------------------------------
1 | name: 'Auto Author Assign'
2 | on:
3 | pull_request_target:
4 | types: [opened, reopened]
5 | jobs:
6 | add-assignees:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v2
10 | with:
11 | ref: refs/pull/${{ github.event.pull_request.number }}/head
12 | - uses: toshimaru/auto-author-assign@v1.2.0
13 | with:
14 | repo-token: "${{ secrets.GITHUB_TOKEN }}"
15 |
--------------------------------------------------------------------------------
/.github/workflows/csvlint.yml:
--------------------------------------------------------------------------------
1 | on: [push]
2 |
3 | jobs:
4 | test:
5 | runs-on: ubuntu-latest
6 | name: csv lint
7 | steps:
8 | - uses: actions/checkout@v1
9 | - name: Run csv-lint
10 | uses: blackstar257/docker-csvlint@master
11 | env:
12 | ACTION_STATE_NAME: ".shelldio/all_stations.txt"
13 |
--------------------------------------------------------------------------------
/.github/workflows/epic.yml:
--------------------------------------------------------------------------------
1 | name: Update epics
2 | on:
3 | issues:
4 | types: [opened, created, closed, reopened, deleted]
5 | jobs:
6 | epics:
7 | runs-on: ubuntu-latest
8 | name: Update epic issues
9 | steps:
10 | - name: Run epics action
11 | uses: cloudaper/epics-action@v1
12 | with:
13 | github-token: ${{secrets.GITHUB_TOKEN}}
14 | epic-label-name: epic
15 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | # Controls when the action will run. Triggers the workflow on push or pull request
4 | # events but only for the master branch
5 | # https://github.com/azohra/shell-linter and https://github.com/marketplace/actions/shell-linter
6 | on:
7 | push:
8 | pull_request:
9 |
10 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
11 | jobs:
12 | lint:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout code
16 | uses: actions/checkout@v2
17 | - name: Run Shellcheck
18 | uses: azohra/shell-linter@latest
19 | with:
20 | args: --external-sources
21 | path: "shelldio"
22 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Deploy
2 | on:
3 | push:
4 | tags:
5 | - "v*"
6 |
7 | jobs:
8 | aur-publish:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 |
13 | - name: Publish AUR package
14 | uses: KSXGitHub/github-actions-deploy-aur@master
15 | with:
16 | pkgname: shelldio
17 | pkgbuild: ./template/PKGBUILD
18 | commit_username: ${{ secrets.AUR_USERNAME }}
19 | commit_email: ${{ secrets.AUR_EMAIL }}
20 | ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
21 | commit_message: Update AUR package
22 | ssh_keyscan_types: rsa,dsa,ecdsa,ed25519
23 | #commit_message: ${{ needs.create_release.outputs.release_tag }}
24 | force_push: 'true'
25 |
--------------------------------------------------------------------------------
/.github/workflows/reviewdog.yml:
--------------------------------------------------------------------------------
1 | # Workflow https://github.com/marketplace/actions/run-shellcheck-with-reviewdog
2 |
3 | name: Review Dog
4 |
5 | on:
6 | push:
7 | pull_request:
8 |
9 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
10 | jobs:
11 | # This workflow contains a single job called "build"
12 | shellcheck:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout code
16 | uses: actions/checkout@v2
17 | - name: shellcheck github-check
18 | uses: reviewdog/action-shellcheck@v1
19 | with:
20 | github_token: ${{ secrets.github_token }}
21 | reporter: github-check # Change reporter.
22 | #path: "shelldio"
23 | #pattern: "*.sh" # Optional.
24 | exclude: "./.git/*" # Optional.
25 | shellcheck_flags: --external-sources
26 | #level: info
27 | #shellcheck_flags: --severity=style
28 | shellcheck_pr:
29 | #if: github.event_name == 'pull_request'
30 | name: shellcheck pull request
31 | runs-on: ubuntu-latest
32 | steps:
33 | - name: Checkout code
34 | uses: actions/checkout@v2
35 | - name: shellcheck github-pr-review
36 | uses: reviewdog/action-shellcheck@v1
37 | with:
38 | github_token: ${{ secrets.github_token }}
39 | reporter: github-pr-review
40 | #path: "shelldio"
41 | #pattern: "*.sh" # Optional.
42 | exclude: "./.git/*" # Optional.
43 | shellcheck_flags: --external-sources
44 |
--------------------------------------------------------------------------------
/.shelldio/all_stations.txt:
--------------------------------------------------------------------------------
1 | 1055 Rock 105.5,http://radio.1055rock.gr:30000/1055
2 | 88μισό 88.5,http://solid33.streamupsolutions.com:30000/stream
3 | 89 Rainbow,http://62.212.82.197:8000/stream
4 | 9.58 ΕΡΤ3 95.8,http://radiostreaming.ert.gr:80/ert-958fm
5 | 99FM/ράδιο1,http://62.212.82.208:8000/stream
6 | A 100 FM 107.4,http://bestgreek.info:8104
7 | Alpha 96.5,http://46.4.121.138:7700/alpha
8 | Alpha 98.9,http://ample.radiojar.com/xcdg6yggzfeuv
9 | Amagi Radio,http://amagiradio.com:8000/stream
10 | Art FM 90.6,http://167.114.246.249:8023/stream
11 | Athens 106.5,http://148.251.162.206:9400/stream
12 | Athens DJ 95.2,https://netradio.live24.gr/athensdeejay
13 | Athens Voice 102.5,https://nitro.live24.gr/nitro4555
14 | Atlantis FM 105.2,http://85.10.206.222:8012
15 | Bar Legend Radio,https://solid24.streamupsolutions.com:2199/tunein/nilxzqeg.pls
16 | BBC World Service,http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk
17 | Best Radio 92.6,https://best.live24.gr/best1222
18 | Black Man 103.1,http://alpha-stream.eu:9326/;.mp3
19 | Ble.FM 93.1,http://radio.lancom.gr:8006/stream1
20 | Blue Space Athens 107.2,http://91.121.222.81:8104/stream
21 | Church of Greece 89.5,http://85.10.206.222:8002/;listen.pls
22 | Church of Piraeus 91.2,http://136.243.61.157:8310/stream
23 | City International 106.1,http://50.7.99.155:7519/stream/1/
24 | Cosmoradio 95.1,http://cosmoradio.gr:80/stream1
25 | D-Code 962.gr,http://s15.myradiostream.com:13980/;listen.pls
26 | Derti Radio,http://derti.live24.gr:80/derty1000
27 | Dromos FM 89.8,http://dromos898.live24.gr:80/dromos898
28 | Easy 97.2,https://easy972.live24.gr/easy972
29 | Ellada FM 94.3,https://netradio.live24.gr/ellada943
30 | En Lefko Athens,http://stream.radiojar.com:80/enlefko877
31 | Ertopen 106.7,https://netradio.live24.gr/erasport
32 | Flash 99.4,http://207.154.248.204:8009/stream
33 | Fly 104,https://eu9.fastcast4u.com/proxy/nicper00?mp=/1
34 | FM 100.6 Δημοτικό Ραδιόφωνο Θεσσαλονίκης,https://live.fm100.gr/shoutcast/fm1006
35 | FM 100 Δημοτικό Ραδιόφωνο Θεσσαλονίκης,https://live.fm100.gr/shoutcast/fm100
36 | Focus FM 103.6,http://focus.greekstream.net:80/
37 | Fresh Salad 96.1,http://178.33.135.246:5262/stream
38 | Galaxy 92,https://galaxy.live24.gr/galaxy9292
39 | Groove Radio,http://213.239.206.179:8090/stream
40 | Hot FM ,https://hotfm.live24.gr/hotfm
41 | Imagine 89.7,https://eu9.fastcast4u.com/proxy/nicperet?mp=/1
42 | Join Radio,http://stream.radiojar.com:80/2uh8e4akb
43 | Karamela 92.4,http://sc.greekstream.net:4014
44 | Kiss Extra FM Patra,http://stream.kiisextra.gr:48500/kiis.mp3
45 | Kiss FM 92.9,https://kissfm.live24.gr/kissfmathens
46 | Kiss FM Athens,https://kissfm.live24.gr/kiss2111
47 | KLIK FM Rodos,http://www.111.gr:8042
48 | Kriti FM,https://mediacp.32bit.gr:8018/stream
49 | Legend 88.6,http://netradio.live24.gr:80/886athens
50 | Libero 107.4,http://eco.onestreaming.com:8081/
51 | Liquid FM,http://ice.streamcloud.mediacdn.com:80/freeradio-1000
52 | Live FM 98.6,http://167.114.246.249:8001/stream
53 | Love 106.5,http://server.insms.gr:45104/;stream
54 | Love Radio 97.5,https://loveradio.live24.gr/loveradio-1000
55 | MAD Radio 106.2,http://mediaserver.mad.tv:80/stream
56 | Magico Radio,https://i4.streams.ovh:2199/tunein/trellas-stream.pls
57 | Melody Patra,http://stream.melody888.gr:48500/melody.mp3
58 | Metro 89.2 Heraklion,https://stream.crete.ovh:8443/metro
59 | Metropolis 95.5,https://metropolis.live24.gr/metropolis955thess
60 | More 103,http://eco.onestreaming.com:8041
61 | Music 89.2,http://ample-02.radiojar.com:80/k0hua7u1yk5tv?
62 | Mythos Athens,http://bestgreek.info:8104
63 | North 98,https://netradio.live24.gr/north98thess
64 | Nostos 100.6,https://neos.win:37878/stream
65 | Off Radio,http://46.28.53.118:7062/stream
66 | Party FM 104,https://radio.streamings.gr:9006/stream
67 | Patra youfm 100.1,http://www.youfmradio.gr:8880/stream
68 | Pepper 96.6,https://pepper966.live24.gr/pepperorigin
69 | Piqeras DeeJay 105.6,http://rosetta.shoutca.st:8270/stream
70 | Plus Radio 102.6,http://plusradio.gr/stream1
71 | Point Radio Pop,http://78.46.149.5:8029/stream2
72 | Point Radio Λαικό,http://78.46.149.5:8029/stream
73 | Radio Galaxy 99,http://solid1.streamupsolutions.com:11074/stream
74 | Radio Gold @net,http://radiogold.live24.gr:80/radiogold
75 | Radio Hot Lips Athens,https://netradio.live24.gr/radiohotlips
76 | RAT FM Μεσογειακού Πανεπιστημίου Κρήτης (Χανιά),http://78.129.185.84:31467/
77 | Real FM 107.1,https://realfmthess.live24.gr/realthess
78 | Real FM 97.8,https://realfm.live24.gr/realfm
79 | Republic Radio ,https://netradio.live24.gr/republicthess
80 | Rock FM 96.9,hls://rockfmlive.mdc.akamaized.net/strmRCFm/userRCFm/playlist.m3u8
81 | Rock Radio 104.7,http://188.165.248.218:8013/stream
82 | RSO 91.7,http://tachyon.shoutca.st:8594
83 | Rythmos στούς 94.9,http://rythmos.live24.gr:80/rythmos
84 | Sfera 102.2,https://sfera.live24.gr/sfera4132
85 | Smooth ,http://iphone.live24.gr:80/radio998
86 | Sohos FM 88.7,http://eu7.fastcast4u.com:2046/stream
87 | Sport 24 Radio 103.3,https://sport24radio.live24.gr/sport24radio
88 | Sport FM 94.6,https://sportfm.live24.gr/sportfm7712
89 | Star Athens 107.8,http://95.154.254.129:17498/stream
90 | Status FM 107.7,http://148.251.179.119:8000/stream
91 | Studio 3 103.5,http://s1.onweb.gr:8408
92 | Styl FM 104.9,http://s3.onweb.gr:8530/;
93 | ThessRadio,http://noc.ezhellas.com:30570/zbutsam
94 | The Press Project,https://n13.radiojar.com/qgra821mrtwtv
95 | Velvet 96.8,https://netradio.live24.gr/velvet968thess
96 | Venus Amaliada Alt.,http://s3.onweb.gr:8808
97 | Venus Amaliada,http://eco.onestreaming.com:8171
98 | V FM 91.1,http://176.9.184.196:8177/stream
99 | We Radio 89.4,https://radioservers.xyz/we-894-live
100 | Yellow Radio 92.8,http://radio.streamings.gr:8009/stream
101 | Yes Patra 91.2,http://5.9.17.142:8024
102 | Zoo Radio 90.8,https://netradio.live24.gr/zoo908thess
103 | Αθήνα 98.4,https://athina984.live24.gr/athina984
104 | Δίεση 101.3,https://diesi.live24.gr/diesi1013
105 | Ελληνικός FM 93.2,https://orange.live24.gr/orange9320
106 | Επικοινωνία FM 94.0,http://172.93.237.106:8274/;stream.mp3
107 | ΕΡΑ σπορ 101.8,http://radiostreaming.ert.gr:80/ert-erasport
108 | ΕΡΤ3,http://radiostreaming.ert.gr:80/ert-102fm
109 | ΕΡΤ Δεύτερο πρόγραμμα 103.7,http://radiostreaming.ert.gr:80/ert-deftero
110 | ΕΡΤ Κόσμος 93.6,http://radiostreaming.ert.gr:80/ert-kosmos
111 | ΕΡΤ Πρώτο πρόγραμμα 91.6,http://radiostreaming.ert.gr:80/ert-proto
112 | ΕΡΤ Τρίτο πρόγραμμα 90.9,http://radiostreaming.ert.gr:80/ert-trito
113 | Ερωτικός FM 94.8,http://eu9.fastcast4u.com:5282/;
114 | Θέμα Radio 104.6,http://stream.radiojar.com:80/cdk030dsvv5tv
115 | Καλαμαριά FM 101.7,http://sc.greekstream.net:80/;.mp3
116 | Κανάλι 1 – Δημοτική Ραδιοφωνία Πειραιά 90.4,https://netradio.live24.gr/kanali1peiraia
117 | Κοινωνικό Ραδιόφωνο Χανίων KPaX Radio,https://c32.radioboss.fm:18563/stream
118 | Κρήτη FM 87.5,http://s3.onweb.gr:8878
119 | Λαϊκός FM 87.6,https://netradio.live24.gr/laikos876
120 | Λάμψη FM 92.3,hls://lampsifmlive.mdc.akamaized.net/strmLampsi/userLampsi/playlist.m3u8
121 | Λυδία η Φιλιππησία 94.2,http://82.192.84.30:1086/stream
122 | Λύρα FM 91.4,http://172.93.237.106:8271/stream
123 | Ματζόρε Πανεπιστημίου Κρήτης (Ρέθυμνο) 89.1 FM,https://rs.radio.uoc.gr:8001/matzore_64.ogg
124 | Μελωδία 99.2,http://netradio
125 | Μέντα FM 88.0,http://ample-02.radiojar.com:80/menta
126 | Μεταδεύτερο FM,https://live.metadeftero.gr/stream
127 | Μινόρε FM .,https://minorefm.live24.gr/minorefm
128 | Μουσικός 98.6,https://netradio.live24.gr/mousikos986
129 | Μύθος FM 93.4,http://s2.free-shoutcast.com:18560/stream
130 | Ορθόδοξη Παρουσία 106.8,http://www.gwebstream.net:8008/stream
131 | Πανεπιστημίου Κρήτης (Ηράκλειο) RastaPank 96.7 FM,https://rs.radio.uoc.gr:8001/uoc_128.ogg
132 | Πανόραμα 98.4,https://netradio.live24.gr/panorama984
133 | Παραπολιτικά FM 90.1,https://netradio.live24.gr/athinaradio
134 | Πειρατικός FM 99.5,http://148.251.162.206:9800/stream
135 | Πρακτορείο 104.9,http://s3.onweb.gr:8436
136 | Ράδιο Ακρίτες 102.3,http://akritespontou.live24.gr:80/akritespontou
137 | Ράδιο Άποψη ,http://eco.onestreaming.com:8398/;
138 | Ράδιο Βερόνικα,http://radioveronica.live24.gr:80/veronicaweb
139 | Ράδιο Έκρηξη 99.8,http://sc.greekstream.net:4006/
140 | Ραδιοζώνες 93.8,http://live.stream.radio98fm.org:8000/high
141 | Ράδιο Θεσσαλονίκη 94.5,http://eu7.fastcast4u.com:6156/stream?type=http&nocache=136596
142 | Ραδιοκύματα 104.4,http://s1.onweb.gr:8812/
143 | Ραδιόφωνο 904 90.4,http://icecast.902.gr:8000/904
144 | ΣΚΑΪ 100.3,https://skai.live24.gr/skai1003-2
145 | Σοκ FM 104.8 - Χαλκίδα,http://sokfm.lalala.gr:8000
146 | Στο κόκκινο 105.5,http://stream.radiojar.com:80/kokkino-ath.mp3
147 | Στο κόκκινο 91.4,http://ample-01.radiojar.com/275p8ssmb?
148 | Στο Μωβ ,http://stream.radiojar.com:80/kk01hepkb.mp3
149 | Τρανζίστορ 100.3,https://netradio.live24.gr/tranzistor1003thess
150 | Χριστιανισμός 104.3,http://eu1.fastcast4u.com:9326/stream
151 | Χρώμα FM 105.8,https://hroma1058thess.live24.gr/hroma1058thess
152 |
--------------------------------------------------------------------------------
/AUTHORS:
--------------------------------------------------------------------------------
1 |
2 | Shelldio - Ακούστε Ραδιοφωνικούς σταθμούς στο τερματικό σας.
3 |
4 | (c)2018-2020 bash_radio_gr.sh | Vasilis Niakas and Contributors.
5 | (c)2020 Shelldio | Salih Emin, JohnGavr and Contributors.
6 |
7 | Shelldio is free software and published under the
8 | terms of the GNU General Public License v3.0
9 |
10 | -- AUTHORS and CONTRIBUTORS --
11 |
12 |
13 | Σημείωση:
14 | ~~~~~~~~~~~~~~
15 | Εάν έχετε σχόλια, διορθώσεις ή κάτι άλλο, παρακαλώ διαβάστε τις οδηγίες του αρχείου CONTRIBUTING.
16 | Μην επικοινωνείτε άμεσα με τα άτομα που αναφέρονται εδώ.
17 |
18 | Authors:
19 | ~~~~~~~~~~~~~~
20 | Giannis Gavranis : https://github.com/JohnGavr
21 | Salih Emin : https://github.com/cerebrux
22 |
23 | Contributors:
24 | ~~~~~~~~~~~~~~
25 | Panagiotis Georgiadis [General & macOS] : https://github.com/drpaneas
26 | Zois Pagoulatos [General & macOS] : https://github.com/zoispag
27 | Tassos Liontos [General] : https://github.com/tasakos-dev
28 | Vasilis Niakas [General] : https://github.com/billniakas
29 | Nikos Drosis [General] : https://github.com/ndrosis
30 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Κώδικας δεοντολογίας «Contributor Covenant»
2 |
3 | ## Η υπόσχεσή μας
4 |
5 | Θέλοντας να καλλιεργήσουμε κλίμα ανοιχτό και φιλόξενο προς
6 | όλους τους συμμετέχοντες—ανεξαρτήτως ηλικίας, μεγέθους σώματος, ανικανότητας,
7 | εθνικότητας, ταυτότητας φύλου και έκφρασης, ιθαγένειας, πείρας, φυλής,
8 | θρησκείας ή σεξουαλικής ταυτότητας και προσανατολισμού—δεσμευόμαστε πως
9 | κανείς δεν θα υφίσταται παρενόχλησης.
10 |
11 | ## Τα πρότυπά μας
12 |
13 | Παραδείγματα συμπεριφοράς που συμβάλλουν στην δημιουργία θετικού περιβάλλοντος
14 | αποτελούν τα ακόλουθα:
15 |
16 | * Η χρήση φιλόξενου και προσβάσιμου λόγου
17 | * Ο σεβασμός προς τις διαφορετικές απόψεις και εμπειρίες
18 | * Η καλότροπη αποδοχή της εποικοδομητικής κριτικής
19 | * Η επικέντρωση στο κοινό—αντί το προσωπικό—όφελος
20 | * Η επίδειξη κατανόησης και συμπάθειας
21 |
22 | Παραδείγματα ανεπίτρεπτης συμπεριφοράς συμπεριλαμβάνουν:
23 |
24 | * Η έκφραση και απεικόνιση σεξουαλικού περιεχομένου και οι ανεπιθύμητες
25 | σεξουαλικές προτάσεις
26 | * Το τρολάρισμα, σχόλια προσβλητικά και απαξιωτικά, και προσωπικές ή
27 | πολιτικές επιθέσεις
28 | * Η δημόσια και ιδιωτική παρενόχληση
29 | * Η άνευ συγκατάθεσης δημοσίευση προσωπικών δεδομένων (π.χ. ηλεκτρονικών
30 | διευθύνσεων ή διευθύνσεων οικίας)
31 | * Λοιπές πράξεις που ευλόγως θα θεωρούνταν απρεπείς σε επαγγελματικό χώρο
32 |
33 | ## Οι υποχρεώσεις μας
34 |
35 | Οι διαχειριστές κομίζονται της ευθύνης να διευκρινίζουν τα πρότυπα επιτρεπτής
36 | συμπεριφοράς και καλούνται να δρουν δεόντως όταν παραβιάζονται.
37 |
38 | Οι διαχειριστές έχουν την αρμοδιότητα να αφαιρούν, να τροποποιούν, ή να
39 | απορρίπτουν σχόλια, _commits_, κώδικα, αλλαγές σε βίκις, αναφορές προβλημάτων
40 | και άλλες συνεισφορές που δεν συμπίπτουν με τον κώδικα δεοντολογίας· και να
41 | αποβάλλουν προσωρινά, ή και μόνιμα, συμμετέχοντες για συμπεριφορά που κρίνουν ως
42 | ανάρμοστη, απειλητική, προσβλητική ή κοινώς επιβλαβή.
43 |
44 | ## Εύρος
45 |
46 | Ο κώδικας δεοντολογίας έχει ισχύ εντός χώρων του _Shelldio_, όπως και σε
47 | δημόσιους χώρους όπου ο καθένας εκπροσωπεί το _Shelldio_ ή την κοινότητά του.
48 | Παραδείγματα εκπροσώπησης αποτελούν: η χρήση ηλεκτρονικής διεύθυνσης
49 | συνδεδεμένης με το _Shelldio_· η ανάρτηση δημοσιεύσεων σε μέσα μαζικής δικτύωσης
50 | από επίσημο λογαριασμό· ή όταν διορίζεστε να εκπροσωπήσετε το _Shelldio_ σε
51 | κάποια εκδήλωση, μέσω του διαδικτύου ή αυτοπροσώπως. Οι κανόνες περί
52 | εκπροσώπησης μπορούν να επεκταθούν ή να αποσαφηνιστούν από τους διαχειριστές του
53 | κάθε _Shelldio_.
54 |
55 | ## Επιβολή
56 |
57 | Περιστατικά παρενόχλησης και καταχρηστικής ή ευρέως ανεπίτρεπτης συμπεριφοράς
58 | μπορούν να αναφερθούν στην ομάδα του _Shelldio_ στην ακόλουθη διεύθυνση:
59 | mail@cerebrux.net. Όλα τα παράπονα θα εξετάζονται και θα αντιμετωπίζονται
60 | κατάλληλα και ανάλογα με τις περιστάσεις. Η ομάδα του _Shelldio_ έχει υποχρέωση
61 | να διαφυλάξει την εμπιστευτικότητα στοιχείων που αφορούν τον καταγγέλλοντα.
62 | Περαιτέρω λεπτομέρειες σχετικά με τους κανόνες επιβολής δύναται να δημοσιευτούν
63 | ξεχωριστά.
64 |
65 | Διαχειριστές του _Shelldio_ που δεν ακολουθούν ή εφαρμόζουν τον κώδικα
66 | δεοντολογίας ενδέχεται να τιμωρούνται με απόφαση των υπολοίπων διαχειριστών.
67 |
68 | ## Απόδοση
69 |
70 | Αυτός ο κώδικας δεοντολογίας έχει προσαρμοστεί από το
71 | «[Contributor Covenant][οικοσελίδα]», με αριθμό έκδοσης 1.4, διαθέσιμο από
72 | <[http://contributor-covenant.org/version/1/4][έκδοση]>.
73 |
74 | [οικοσελίδα]: http://contributor-covenant.org
75 | [έκδοση]: http://contributor-covenant.org/version/1/4/
76 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Οδηγίες ορθής υποβολής συνεισφοράς
2 |
3 | ## Εισαγωγή
4 |
5 | Καλώς ήρθατε στο έργο **Shelldio** και ευχαριστούμε για το ενδιαφέρον σας να συνεισφέρετε κώδικα, αλλαγές κ.α.
6 |
7 | **Σημείωση**: _Οι παρακάτω οδηγίες μπορεί να αλλάξουν οποιαδήποτε στιγμή, να προστεθούν ή και να αφαιρεθούν στοιχεία, χωρίς κάποια προειδοποίηση. Οφείλουμε όλοι μας να παρακολουθούμε τις οποιεσδήποτε αλλαγές που θα γίνονται commit στο παρόν αρχείο_
8 |
9 | Όταν θελήσετε να συνεισφέρετε στο Shelldio, συζητήστε αρχικά την αλλαγή που θέλετε να κάνετε ανοίγοντας ένα [issue](https://github.com/CerebruxCode/shelldio/issues) πριν υποβάλετε μια αλλαγή.
10 |
11 | Σημειώστε ότι έχουμε έναν [κώδικα δεοντολογίας](https://github.com/CerebruxCode/shelldio/blob/master/CODE_OF_CONDUCT.md), τον οποίο υποχρεούστε όλοι, μηδενός εξαιρουμένου να ακολουθούμε σε όλες τις αλληλεπιδράσεις μας με το έργο.
12 |
13 | ## Διαδικασία υποβολής
14 |
15 | Για να υποβάλετε ένα αίτημα τροποποίησης του κώδικα, παρακαλούμε ακολουθείστε τα παρακάτω βήματα:
16 |
17 | 1. **Issue**: Ανοίγετε ένα [issue](https://github.com/CerebruxCode/shelldio/issues) στο οποίο περιγράφετε τι θέλετε να κάνετε και γιατί θα πρέπει να ενσωματωθεί η αλλαγή που σκοπεύετε να στείλετε
18 | 2. **Fork**: Κάνετε fork το αποθετήριο στον λογαριασμό σας και έπειτα clone στον υπολογιστή σας.
19 | 3. **Code**: Κάνετε _git checkout -b onoma-branch_ όπου και τροποποιείτε τα σημεία του κώδικα που σας ενδιαφέρουν για υποβολή. Το βήμα αυτό είναι κρίσιμο διότι ακολουθούμε το μοντέλο [GitHub flow](https://guides.github.com/introduction/flow/) το οποίο θεωρούμε οτι διαβάσατε και κατανοήσατε.
20 | 4. **Push**: Μόλις θεωρείτε ότι έχετε ολοκληρώσει τις αλλαγές, κάνετε commit χρησιμοποιώντας τον οδηγό στον παρακάτω πίνακα (π.χ. git commit -m "[FIX] Διόρθωση του issue #Αριθμός_issue") όπου ο _αριθμός issue_ (σημειώστε το μαζί με το σύμβολο #) είναι ο αριθμός που αντιστοιχεί σε αυτό που ανοίξατε στο **βήμα 1**.
21 |
22 | |Σχόλιο | Περιγραφή | Παράδειγμα git commit|
23 | | --- | --- | --- |
24 | |[REFACTOR]| αλλαγές στην δομή, θέση στοιχείων και δεδομένων| `git commit -m “[REFACTOR] χρήση while αντί for loop”` |
25 | |[FIX] | διόρθωση ανακοινωμένου issue για bugfix | `git commit -m “[FIX] Διόρθωση του issue #Αριθμός_issue”` |
26 | |[FEATURE] | Προσθήκη νέου χαρακτηριστικού | `git commit -m “[FEATURE] Προσθήκη που ζητήθηκε στο #Αριθμός_issue”` |
27 | |[DOC] | αλλαγή στα σχόλια, μηνύματα, κείμενο | `git commit -m “[DOC] διόρθωση επεξήγησης”` |
28 |
29 | **Συμβουλή**: _Να κάνετε συχνά commits που ξεχωρίζουν κάθε αλλαγή ώστε να είναι ευδιάκριτος ο σκοπός της αλλαγή (τι αλλάζω και γιατί το αλλάζω)_
30 |
31 | 5. **Pull request**: Τέλος αφού κάνετε _git push origin onoma-branch_, λογικά θα σας εμφανίσει αυτόματα ένα λινκ με το οποίο μπορείτε να μας στείλετε το _pull request_ υποβάλλοντας μας έτσι τις όποιες αλλαγές. Στην σελίδα που θα ανοίξει γράψτε μια σύνοψη με την οποία περιγράφετε τις αλλαγές που μας στέλνετε.
32 |
33 | Εάν συναντήσετε κάποιο πρόβλημα η χρειάζεστε κάποια βοήθεια, μπορείτε να αφήσετε σχόλιο στο issue που ανοίξατε για να το διευθετήσουμε.
34 |
35 | ## Επίλογος
36 |
37 | Όλα τα παραπάνω είναι απαραίτητο να τα ακολουθούμε κατά γράμμα, για να μπορέσετε και εσείς αλλά και οι υπόλοιποι συμμετέχοντες να παρακολουθούν την πορεία των αιτημάτων σας.
38 |
39 | Παρόλα αυτά, οι υπολογιστές, το cloud και ο κώδικας, καμιά φορά μπορεί να μας δυσκολέψει την προσπάθεια μας να συνεισφέρουμε, οπότε σε κάθε περίπτωση πάντα προτιμάμε την επικοινωνία με την οποία όλα τα εμπόδια διευθετούνται.
40 |
41 | **Ευχαριστούμε !**
42 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Shelldio
2 |
3 | Ένα απλό shell script για να παίζετε τους αγαπημένους σας ραδιοφωνικούς σταθμούς στο τερματικό.
4 |
5 | ## Οδηγίες εγκατάστασης
6 |
7 | Το Shelldio είναι συμβατό με Linux, BSD και macOS.
8 |
9 | ### Arch Linux
10 |
11 | Για να το κάνετε εγκατάσταση σε Arch Linux αρκεί να έχετε ενεργό το **AUR** οπότε, με έναν AUR helper κάντε εγκατάσταση το **shelldio**
12 |
13 | ``` bash
14 | yay -S shelldio
15 | ```
16 |
17 | το οποίο θα κάνει αυτόματα εγκατάσταση το `mpv` και το `curl` που χρειάζεστε. Τώρα μπορείτε να πάτε παρακάτω στις οδηγίες χρήσης.
18 |
19 | ### Στα υπόλοιπα λειτουργικά συστήματα
20 |
21 | Για να το εγκαταστήσετε στα υπόλοιπα λειτουργικά συστήματα πρώτα κάνετε εγκατάσταση το **MPV**, το **git** (για να κάνετε λήψη του shelldio) και το **curl** (για την λήψη νέων σταθμών).
22 |
23 | #### Σε Debian based διανομές
24 |
25 | ``` bash
26 | sudo apt install -y mpv git curl
27 | ```
28 |
29 | #### Σε Fedora based διανομές
30 |
31 | ``` bash
32 | sudo dnf -y install mpv git curl
33 | ```
34 |
35 | #### Σε OpenSuse Linux
36 |
37 | ``` bash
38 | sudo zypper in mpv git curl
39 | ```
40 |
41 | #### Σε CentOS Linux (από το nux-desktop repository)
42 |
43 | ``` bash
44 | sudo yum -y install mpv git curl
45 | ```
46 |
47 | #### Σε FreeBSD Unix
48 |
49 | ``` bash
50 | sudo pkg install mpv git curl
51 | ```
52 |
53 | #### Σε macOS (μέσω [Brew](https://docs.brew.sh/Installation))
54 |
55 | ``` bash
56 | brew install mpv git curl
57 | ```
58 |
59 | Τέλος αφού έχετε κάνει εγκατάσταση το **MPV** το **git** και το **curl**, τρέχετε μια μια τις παρακάτω εντολές για να εγκαταστήσετε το Shelldio:
60 |
61 | ``` bash
62 | git clone https://github.com/CerebruxCode/shelldio ~/shelldio
63 | sudo ln -s ~/shelldio/shelldio.sh /usr/local/bin/shelldio
64 | ```
65 |
66 | Η πρώτη εντολή θα δημιουργήσει έναν φάκελο `shelldio` στον home φάκελο του χρήστη σας και θα κατεβάσει την τελευταία σταθερή έκδοση, ενώ η δεύτερη εντολή θα δημιουργήσει μια συντόμευση του `shelldio` στο σύστημά σας για να μπορείτε απο την μια να κάνετε αναβάθμιση (όπως περιγράφουμε παρακάτω) αλλά και απο την άλλη να το εκτελείτε με μια απλή εντολή στο τερματικό.
67 |
68 | ## Οδηγίες Αναβάθμισης
69 |
70 | Για να κατεβάσετε νέες εκδόσεις του **shelldio** που περιλαμβάνουν διορθώσεις και νέα χαρακτηριστικά τότε διαβάστε παρακάτω (ανάλογα με την διανομή σας).
71 |
72 | ### Arch Linux
73 |
74 | Οι ενημερώσεις θα σας έρθουν αυτόματα την επόμενη φορά που θα κάνετε αναβάθμιση το Arch Linux σας και συγκεκριμένα στα πακέτα που προέρχονται απο το AUR.
75 |
76 | ### Υπόλοιπα λειτουργικά συστήματα
77 |
78 | Ξεκινώντας από την έκδοση v3.0.0 και έπειτα, δίδεται η δυνατότητα να κάνετε αναβάθμιση εκτελώντας την εντολη
79 |
80 | ```bash
81 | shelldio -u
82 | ```
83 |
84 | Για τις παλιότερες εκδόσεις, μπείτε στον φάκελο shelldio που κάνατε clone και τρέξετε pull. π.χ.
85 |
86 | ``` bash
87 | cd ~/shelldio
88 | git pull
89 | ```
90 |
91 | ### Λήψη νέων σταθμών
92 |
93 | Για να κατεβάσετε νέους σταθμούς που μπορεί κατά καιρούς να προσθέτουμε, τρέξτε στο τερματικό :
94 |
95 | ``` bash
96 | shelldio --fresh
97 | ```
98 |
99 | ## Οδηγίες Απεγκατάστασης
100 |
101 | Ανάλογα του τρόπου εγκατάστασης μπορείτε να απεγκαταστήσετε το Shelldio με τους παρακάτω τρόπους
102 |
103 | ### Arch Linux
104 |
105 | Μπορείτε να το απεγκαταστήσετε με τον AUR helper σας π.χ.:
106 |
107 | ``` bash
108 | yay -Rcsu shelldio
109 | ```
110 |
111 | ### Υπόλοιπα λειτουργικά συστήματα
112 |
113 | Τρέξτε τις παρακάτω εντολές :
114 |
115 | ``` bash
116 | sudo unlink /usr/local/bin/shelldio
117 | ```
118 |
119 | Τέλος μπορείτε να διαγράψετε και τον φάκελο που κατέβηκε με `git clone`
120 |
121 | ``` bash
122 | rm -rf ~/shelldio
123 | ```
124 |
125 | ### macOS
126 |
127 | ``` bash
128 | sudo unlink /usr/local/bin/shelldio
129 | ```
130 |
131 | Τέλος μπορείτε να διαγράψετε και τον φάκελο που κατέβηκε με `git clone`
132 |
133 | ``` bash
134 | rm -rf ~/shelldio
135 | ```
136 |
137 | ## Οδηγίες χρήσης
138 |
139 | Εξορισμού το script αν δε δοθεί όρισμα στο τερματικό ανοίγει τη λίστα με τους αγαπημένους σας σταθμούς (εφόσον υπάρχουν στο `~/.shelldio/my_stations.txt` ).
140 |
141 | Η κλασσική χρήση του γίνεται στο τερματικό με την εντολή:
142 |
143 | ``` bash
144 | shelldio
145 | ```
146 |
147 | Αν θέλουμε να ξεκινήσουμε το shelldio με όρισμα τότε αυτό μπορεί να είναι ένα απο τα παρακάτω:
148 |
149 | Χρήση: `shelldio [όρισμα]`
150 | Όπου `[όρισμα]` :
151 |
152 | ```
153 | <1-9>: Γρήγορη εκκίνηση. Ξεκινάει την αναπαραγωγή του σταθμού απευθείας
154 | από τη θέση που δόθηκε ως όρισμα χωρίς να εμφανίζει την λίστα αγαπημένων μας.
155 | (π.χ. shelldio 4, ξεκινάει τον σταθμό που βρίσκεται στην θέση 4 από την λίστα των αγαπημένων μας)
156 |
157 | -a, --add: Εμφανίζει την γενική λίστα με όλους τους διαθέσιμους ραδιοφωνικούς σταθμούς
158 | και σας δίνει την δυνατότητα να προσθέσετε, όποια επιθυμείτε, στην λίστα με τα αγαπημένους σας
159 | σταθμούς (στο αρχείο ~/.shelldio/my_stations.txt)
160 |
161 | -n, --new: Σας δίνει την δυνατότητα να προσθέσετε έναν νέο σταθμό στην λίστα με τους αγαπημένους σας
162 | ραδιοφωνικούς σταθμούς (στο αρχείο ~/.shelldio/my_stations.txt)
163 |
164 | -f, --fresh: Κατεβάζει εκ νέου την γενική λίστα των ραδιοφωνικών σταθμών με επικαιροποιημένους
165 | ραδιοφωνικούς σταθμούς, διορθωμένα links αλλά και νέους ραδιοφωνικούς σταθμούς
166 |
167 | -h, --help: Εμφανίζει αυτές τις πληροφορίες για την χρήση της εφαρμογής
168 |
169 | -j, --joker: Ξεκινάει την αναπαραγωγή τυχαίου σταθμού
170 |
171 | -l, --list: Εμφανίζει την γενική λίστα με τους ραδιοφωνικούς σταθμούς. Μπορείτε να χρησιμοποιήσετε
172 | την επιλογή αυτή σε συνδυασμό με άλλη εντολή. πχ. για να κάνετε αναζήτηση :
173 |
174 | shelldio -l | grep -i "onoma stathmou"
175 |
176 | -r, --remove: Εμφανίζει την λίστα με τους σταθμούς που έχετε προσθέσει στα αγαπημένα σας και σας
177 | δίνει την δυνατότητα να αφαιρέσετε όποια θέλετε
178 | (από το ~/.shelldio/my_stations.txt)
179 |
180 | -u, --update: Σας δίνει την δυνατότητα να κάνετε αναβάθμιση του Shelldio στην νεότερη διαθέσιμη έκδοση.
181 | Προσοχή, η αναβάθμιση με αυτόν τον τρόπο ισχύει μόνο για αυτούς που έκαναν εγκατάσταση το shelldio
182 | με git clone και όχι απο πακέτο εγκατάστασης (π.χ. απο AUR σε Arch based Linux)
183 |
184 | --reset: Προσοχή - Καθαρίζει τη λίστα με τους σταθμούς που έχετε προσθέσει στα αγαπημένα σας
185 | διαγράφοντας το αρχείο ~/.shelldio/my_stations.txt. Είναι χρήσιμο αν
186 | θέλετε να ξεκινήσετε απο την αρχή την δημιουργία της λίστας των αγαπημένων σας.
187 | ```
188 |
189 | Παράδειγμα:
190 |
191 | ``` bash
192 | shelldio
193 | ```
194 |
195 | Θα φορτώσει τους αγαπημένους σας σταθμούς. Αλλιώς μπορείτε να φορτώσετε το μεγάλο αρχείο με πάνω απο 100+ σταθμούς με την παρακάτω εντολή:
196 |
197 | ``` bash
198 | shelldio --list
199 | ```
200 |
201 | Στην ερώτηση που θα σας κάνει επιλέγετε `f` για να σας εμφανίσει όλη την λίστα.
202 |
203 | ### Αναζήτηση με όνομα
204 |
205 | Μπορείτε επίσης να κάνετε αναζήτηση για κάποιον σταθμό χρησιμοποιώντας την παρακάτω εντολή:
206 |
207 | ``` bash
208 | shelldio --list | grep -i "onoma_stathmou"
209 | ```
210 |
211 | θα σας εμφανίσει τον αριθμό. Πατάτε `Q` για να σταματήσετε την αναζήτηση και έπειτα τρέχετε `shelldio --add` και βάζετε τον αριθμό του σταθμού που αναζητήσατε. Με αυτόν τον τρόπο μπορείτε να μαζέψετε π.χ. τους αγαπημένους σας σταθμούς και την επόμενη φορά που θα ξεκινήσετε το **shelldio** θα τα δείτε στην λίστα των αγαπημένων σας σταθμών.
212 |
213 | ## Πως βάζω νέους σταθμούς
214 |
215 | Αν γνωρίζετε το λινκ του σταθμού που θέλετε να βάλετε, παρακαλούμε ενημερώστε μας να το προσθέσουμε στο **shelldio** ανοίγοντας ένα [issue](https://github.com/CerebruxCode/shelldio/issues/new)
216 |
217 | Αφού το προσθέσουμε μπορείτε να κατεβάσετε τους νέους σταθμούς, με την εντολή:
218 |
219 | ``` bash
220 | shelldio --fresh
221 | ```
222 |
223 | Συνήθως, οι νέες προσθήκες θα μπαίνουν στο τέλος για να τις βρίσκετε άμεσα. Αν δεν εμφανίζονται μπορείτε να κάνετε αναζήτηση με όνομα όπως περιγράψαμε πιο πάνω.
224 |
225 | Αν έχετε δικούς σας σταθμούς ή φίλων σας και είναι internetικά ραδιόφωνα, θα χαρούμε πολύ να τα προσθέσουμε στο **shelldio** ανοίγοντας μας ένα [issue](https://github.com/CerebruxCode/shelldio/issues/new)
226 |
--------------------------------------------------------------------------------
/shelldio.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | #
4 | # Shelldio - ακούστε online ραδιόφωνο από το τερματικό
5 | # Shelldio was based on bash_radio.sh (c)2018-2020 Vasilis Niakas and Contributors.
6 | #
7 | # (c)2020 Shelldio | Salih Emin, JohnGavr and Contributors.
8 | #
9 | # This program is free software; you can redistribute it and/or modify
10 | # it under the terms of the GNU General Public License as published by
11 | # the Free Software Foundation version 3 of the License.
12 | #
13 | # Please read the file LICENSE and README for more information.
14 | #
15 |
16 | ### Colors
17 | if [ -t 1 ]; then
18 | RED=$(printf '\033[31m')
19 | BLUE=$(printf '\033[34m')
20 | RESET=$(printf '\033[m')
21 | else
22 | RED=""
23 | BLUE=""
24 | RESET=""
25 | fi
26 |
27 | ### Variable List
28 | version="v4.2.0 " # this space after the version num is intentional to fix UI
29 |
30 | all_stations="$HOME/.shelldio/all_stations.txt"
31 | my_stations="$HOME/.shelldio/my_stations.txt"
32 |
33 | ### Functions List
34 |
35 | validate_csv() {
36 | awk 'BEGIN{FS=","}!n{n=NF}n!=NF{failed=1;exit}END{print !failed}' "$1"
37 | }
38 |
39 | validate_station_lists() {
40 | if [ -f "$all_stations" ]; then
41 | if [[ $(validate_csv "$all_stations") -eq 0 ]]; then
42 | echo "Πρόβλημα: Η λίστα σταθμών: $all_stations δεν είναι έγκυρη"
43 | echo "Εκτέλεσε shelldio --fresh για να κατεβάσεις τη λίστα εκ νέου"
44 | exit 1
45 | fi
46 | fi
47 |
48 | if [ -f "$my_stations" ]; then
49 | if [[ $(validate_csv "$my_stations") -eq 0 ]]; then
50 | echo "Πρόβλημα: Η λίστα σταθμών: $my_stations δεν είναι έγκυρη"
51 | echo "Εκτέλεσε shelldio --reset για να διαγράψεις τη λίστα αγαπημένων"
52 | echo "Στη συνέχεια πρόσθεσε ξανά τους αγαπημένους σου σταθμούς"
53 | exit 1
54 | fi
55 | fi
56 | }
57 |
58 | # Μήνυμα καλωσορίσματος
59 |
60 | welcome_screen() {
61 | echo ' .-_ _-.'
62 | echo ' / / _ _ \ \ '
63 | echo ' ( ( (-o-) ) )'
64 | echo ' \.\_-!-_/./'
65 | echo ' --+--'
66 | echo " |"
67 | echo ' |'
68 | echo '._;======================================;_|'
69 | echo '| [______________________________________] |'
70 | echo '| |############################| |'
71 | echo '| |############################| (_) (_) |'
72 | echo "|_______________ Shelldio _________________|"
73 | echo "| $version |"
74 | echo "| |"
75 | echo "| Ακούστε τους αγαπημένους σας |"
76 | echo "| σταθμούς από το τερματικό |"
77 | echo "| |"
78 | echo "| https://cerebrux.net/shelldio |"
79 | echo "|__________________________________________|"
80 | }
81 |
82 | option_detail() {
83 | cat <: Γρήγορη εκκίνηση. Ξεκινάει την αναπαραγωγή του σταθμού απευθείας
95 | από τη θέση που δόθηκε ως όρισμα χωρίς να εμφανίζει την λίστα αγαπημένων μας.
96 | (π.χ. shelldio 4, ξεκινάει τον σταθμό που βρίσκεται στην θέση 4 από την λίστα των αγαπημένων μας)
97 |
98 | -a, --add: Εμφανίζει την γενική λίστα με όλους τους διαθέσιμους ραδιοφωνικούς σταθμούς
99 | και σας δίνει την δυνατότητα να προσθέσετε, όποια επιθυμείτε, στην λίστα με τoυς αγαπημένους σας
100 | σταθμούς (στο αρχείο $my_stations)
101 |
102 | -n, --new: Σας δίνει την δυνατότητα να προσθέσετε έναν νέο σταθμό στην λίστα με τους αγαπημένους σας
103 | ραδιοφωνικούς σταθμούς (στο αρχείο $my_stations)
104 |
105 | -f, --fresh: Κατεβάζει εκ νέου την γενική λίστα των ραδιοφωνικών σταθμών με επικαιροποιημένους
106 | ραδιοφωνικούς σταθμούς, διορθωμένα links αλλά και νέους ραδιοφωνικούς σταθμούς
107 |
108 | -h, --help: Εμφανίζει αυτές τις πληροφορίες για την χρήση της εφαρμογής
109 |
110 | -j, --joker: Ξεκινάει την αναπαραγωγή τυχαίου σταθμού
111 |
112 | -l, --list: Εμφανίζει την γενική λίστα με τους ραδιοφωνικούς σταθμούς. Μπορείτε να χρησιμοποιήσετε
113 | την επιλογή αυτή σε συνδυασμό με άλλη εντολή. πχ. για να κάνετε αναζήτηση :
114 |
115 | shelldio -l | grep -i "onoma stathmou"
116 |
117 | -r, --remove: Εμφανίζει την λίστα με τους σταθμούς που έχετε προσθέσει στα αγαπημένα σας και σας
118 | δίνει την δυνατότητα να αφαιρέσετε όποια θέλετε
119 | (από το $my_stations)
120 |
121 | -u, --update: Σας δίνει την δυνατότητα να κάνετε αναβάθμιση του Shelldio στην νεότερη διαθέσιμη έκδοση.
122 | Προσοχή, η αναβάθμιση με αυτόν τον τρόπο ισχύει μόνο για αυτούς που έκαναν εγκατάσταση το shelldio
123 | με git clone και όχι απο πακέτο εγκατάστασης (π.χ. στο Arch Linux)
124 |
125 | --reset: Προσοχή - Καθαρίζει τη λίστα με τους σταθμούς που έχετε προσθέσει στα αγαπημένα σας
126 | διαγράφοντας το αρχείο $my_stations. Είναι χρήσιμο αν
127 | θέλετε να ξεκινήσετε απο την αρχή την δημιουργία της λίστας των αγαπημένων σας.
128 | EOF
129 | }
130 |
131 | # Δημιουργεί και εμφανίζει σε λίστα τους σταθμούς στο txt file που δέχεται σαν flag
132 | list_stations() {
133 | while IFS='' read -r line || [[ -n "$line" ]]; do
134 | num=$((num + 1))
135 | echo ["$num"] "$line" | cut -d "," -f1
136 | done <"$1"
137 | }
138 |
139 | # Πληροφορίες που εμφανίζονται μετά την επιλογή του σταθμού
140 | info() {
141 | welcome_screen
142 |
143 | tput civis # Εξαφάνιση cursor
144 | echo -ne " Σταθμός: [$selected_play] Η ώρα είναι $(date +"%T")\n"
145 | echo -ne " \n"
146 | echo -ne " Ακούτε: $stathmos_name\n"
147 | echo -ne "\n"
148 | echo -ne " ____________ ___________\n"
149 | echo -ne " [Έξοδος (Q/q)].___________.[Πίσω (R/r)]\n"
150 | echo -ne " "
151 | }
152 |
153 | add_stations() {
154 | echo "Εμφάνιση λίστας σταθμών"
155 | sleep 1
156 | list_stations "$all_stations"
157 | while true; do
158 | read -rp "Επέλεξε αριθμού σταθμού (Q/q για έξοδο): " input_station
159 | if [[ $input_station = "q" ]] || [[ $input_station = "Q" ]]; then
160 | echo "Έξοδος..."
161 | exit 0
162 | elif [ "$input_station" -gt 0 ] && [ "$input_station" -le $num ]; then #έλεγχος αν το input είναι μέσα στο εύρος της λίστας των σταθμών
163 | station=$(sed "${input_station}q;d" "$all_stations")
164 | stathmos_name=$(echo "$station" | cut -d "," -f1)
165 | stathmos_url=$(echo "$station" | cut -d "," -f2)
166 | echo "$stathmos_name,$stathmos_url" >>"$my_stations"
167 | echo " Προστέθηκε ο σταθμός $stathmos_name."
168 | else
169 | echo "Αριθμός εκτός λίστας"
170 | fi
171 | done
172 | exit 0
173 |
174 | }
175 |
176 | remove_station() {
177 | if [ ! -f "$HOME/.shelldio/my_stations.txt" ]; then
178 | echo "Δεν έχει δημιουργηθεί το αρχείο my_stations."
179 | echo "Για πληροφορίες τρέξε την παράμετρο --help."
180 | else
181 | echo "Εμφάνιση λίστας προσωπικών σταθμών"
182 | sleep 1
183 | list_stations "$my_stations"
184 | while true; do
185 | read -rp "Επέλεξε αριθμού σταθμού (Q/q για έξοδο): " remove_station
186 | if [[ $remove_station = "q" ]] || [[ $remove_station = "Q" ]]; then
187 | echo "Έξοδος..."
188 | exit 0
189 | elif [ "$remove_station" -gt 0 ] && [ "$remove_station" -le $num ]; then #έλεγχος αν το input είναι μέσα στο εύρος της λίστας των σταθμών
190 | station=$(sed "${remove_station}q;d" "$my_stations")
191 | stathmos_name=$(echo "$station" | cut -d "," -f1)
192 | grep -v "$stathmos_name" "$HOME/.shelldio/my_stations.txt" >"$HOME/.shelldio/my_stations.tmp" && mv "$HOME/.shelldio/my_stations.tmp" "$HOME/.shelldio/my_stations.txt"
193 | echo "Διαγράφηκε ο σταθμός $stathmos_name."
194 | else
195 | echo "Αριθμός εκτός λίστας"
196 | fi
197 | done
198 | fi
199 | }
200 |
201 | mpv_msg() {
202 | if grep debian /etc/os-release &>/dev/null; then
203 | echo "Τρέξτε 'sudo apt install mpv' για να εγκαταστήσετε τον player"
204 | elif grep fedora /etc/os-release &>/dev/null; then
205 | echo "Τρέξτε 'sudo dnf -y install mpv' για να εγκαταστήσετε τον player"
206 | elif grep suse /etc/os-release &>/dev/null; then
207 | echo "Τρέξτε 'sudo zypper in mpv' για να εγκαταστήσετε τον player"
208 | elif grep centos /etc/os-release &>/dev/null; then
209 | echo "Τρέξτε 'sudo yum -y install mpv' για να εγκαταστήσετε τον player"
210 | elif uname -a | grep Darwin &>/dev/null; then
211 | echo "Τρέξτε 'sudo brew install mpv' για να εγκαταστήσετε τον player"
212 | elif uname -a | grep BSD &>/dev/null; then
213 | echo "Τρέξτε 'sudo pkg install mpv' για να εγκαταστήσετε τον player"
214 | else
215 | echo "Δεν μπορέσαμε να εντοπίσουμε το λειτουργικό σας σύστημα."
216 | echo "Παρακαλούμε επισκεφτείτε τον παρακάτω σύνδεσμο για οδηγίες εγκατάστασης του MPV"
217 | echo "https://mpv.io/installation/"
218 | fi
219 | }
220 | new_station() {
221 | if [ ! -f "$HOME/.shelldio/my_stations.txt" ]; then
222 | echo "Δεν έχει δημιουργηθεί το αρχείο my_stations."
223 | echo "Για πληροφορίες τρέξε την παράμετρο --help."
224 | else
225 | echo "Εμφάνιση λίστας προσωπικών σταθμών"
226 | sleep 1
227 | list_stations "$my_stations"
228 | while true; do
229 | read -rp "Δώσε όνομα νέου σταθμού (ή δώσε Q/q για έξοδο): " station_name
230 | if [[ $station_name = "q" ]] || [[ $station_name = "Q" ]]; then
231 | echo "Έξοδος..."
232 | exit 0
233 | fi
234 | read -rp "Δώσε url νέου σταθμού: " station_url
235 | echo "$station_name,$station_url" >>"$my_stations"
236 | echo " Προστέθηκε ο σταθμός $station_name."
237 | done
238 | exit 0
239 | fi
240 | }
241 |
242 | joker_info() {
243 | welcome_screen
244 | tput civis # Απόκρυψη cursor
245 | echo -ne " Σταθμός: [$selected_play] Η ώρα είναι $(date +"%T")\n"
246 | echo -ne " \n"
247 | echo -ne " Ακούτε: $stathmos_name\n"
248 | echo -ne "\n"
249 | echo -ne " ____________ ___________\n"
250 | echo -ne " [Έξοδος (Q/q)].___________.[Νέα τυχαία επιλογή (R/r)]\n"
251 | echo -ne " "
252 | }
253 |
254 | joker() {
255 |
256 | local lines=0
257 | local stations="$all_stations"
258 | while IFS='' read -r line || [[ -n "$line" ]]; do
259 | lines=$((lines + 1))
260 | done <"$stations"
261 | station_number=$((RANDOM % lines)) #Διάλεξε τυχαίο σταθμό
262 | validate_station_lists
263 |
264 | while true; do
265 | terms=0
266 | trap ' [ $terms = 1 ] || { terms=1; kill -TERM -$$; }; exit' EXIT INT HUP TERM QUIT
267 |
268 | if [ -d "$HOME/.shelldio/" ]; then
269 | if [ ! -f "$all_stations" ]; then
270 | echo "Δεν ήταν δυνατή η εύρεση του αρχείου σταθμών. Γίνεται η λήψη του..."
271 | sleep 2
272 | curl -sL https://raw.githubusercontent.com/CerebruxCode/shelldio/stable/.shelldio/all_stations.txt --output "$HOME/.shelldio/all_stations.txt"
273 | fi
274 | else
275 | echo "Δημιουργείται ο κρυφός φάκελος .shelldio ο οποίος θα περιέχει τα αρχεία των σταθμών."
276 | sleep 2
277 | mkdir -p "$HOME/.shelldio"
278 | echo "Γίνεται η λήψη του αρχείου με όλους τους σταθμούς."
279 | sleep 2
280 | curl -sL https://raw.githubusercontent.com/CerebruxCode/shelldio/stable/.shelldio/all_stations.txt --output "$HOME/.shelldio/all_stations.txt"
281 | fi
282 |
283 | while true; do
284 | if [[ $input_play = "q" ]] || [[ $input_play = "Q" ]]; then
285 | echo "Έξοδος..."
286 | tput cnorm # Εμφάνιση cursor
287 | exit 0
288 | else
289 | station=$(sed "${station_number}q;d" "$stations")
290 | selected_play=$station_number # για να εμφανίζει το αριθμό που επέλεξε ο χρήστης στον Player UI
291 | stathmos_name=$(echo "$station" | cut -d "," -f1)
292 | stathmos_url=$(echo "$station" | cut -d "," -f2)
293 | break
294 | fi
295 | done
296 |
297 | mpv "$stathmos_url" &>/dev/null &
298 |
299 | while true; do
300 | trap '{ clear; echo "Έξοδος..."; tput cnorm; exit 1; }' SIGINT
301 | clear
302 | joker_info
303 | sleep 0
304 | read -r -n1 -t1 input_play # Για μικρότερη αναμονή της read
305 | if [[ $input_play = "q" ]] || [[ $input_play = "Q" ]]; then
306 | clear
307 | echo "Έξοδος..."
308 | tput cnorm # Εμφάνιση cursor
309 | exit 0
310 | elif [[ $input_play = "r" ]] || [[ $input_play = "R" ]]; then
311 | for pid in $(pgrep '^mpv$'); do
312 | url="$(ps -o command= -p "$pid" | awk '{print $2}')"
313 | if [[ "$url" == "$stathmos_url" ]]; then
314 | echo "Έξοδος..."
315 | tput cnorm # Εμφάνιση cursor
316 | kill "$pid"
317 | else
318 | printf "Απέτυχε ο αυτόματος τερματισμός. \nΠάτα τον συνδυασμό Ctrl+C ή κλείσε το τερματικό \nή τερμάτισε το Shelldio απο τις διεργασίες του συστήματος"
319 | fi
320 | done
321 | station_number=$((RANDOM % lines))
322 | break
323 | fi
324 | done
325 | done
326 | }
327 |
328 | reset_favorites() {
329 | if [ ! -f "$my_stations" ]; then
330 | echo "Μη έγκυρη επιλογή. Το αρχείο αγαπημένων δεν υπάρχει."
331 | exit 1
332 | fi
333 |
334 | while true; do
335 | read -rp "Θες σίγουρα να διαγράψεις το αρχείο αγαπημένων; (y/n)" yn
336 | case $yn in
337 | [Yy]*)
338 | rm -f "$my_stations"
339 | break
340 | ;;
341 | [Nn]*) exit ;;
342 | *) echo "Παρακαλώ απαντήστε με y (ναι) ή n (όχι)" ;;
343 | esac
344 | done
345 |
346 | if [ -f "$my_stations" ]; then
347 | echo "Απέτυχε η διαγραφή του αρχείου αγαπημένων"
348 | exit 1
349 | fi
350 |
351 | echo "Το αρχείο αγαπημένων διαγράφτηκε επιτυχώς"
352 | exit 0
353 | }
354 |
355 | git_updater() {
356 | if [[ -L "/usr/local/bin/shelldio" ]]; then
357 | printf "Το Shelldio έχει εγκατασταθεί σωστά μέσω git\n"
358 | RETURN_TO_PWD=$(pwd)
359 | basedir="$(dirname "$(readlink /usr/local/bin/shelldio)")"
360 | cd "$basedir" || return
361 | self_update
362 | cd "$RETURN_TO_PWD" || exit 0
363 | else
364 | echo "To Shelldio δεν έχει εγκατασταθεί μέσω git clone οπότε δεν είναι διαθέσιμη η ενημέρωση μέσω shelldio -u"
365 | fi
366 | }
367 |
368 | self_update() {
369 | if ! command -v git &>/dev/null; then
370 | return
371 | fi
372 |
373 | read -rp "Θέλεις να γίνει αναβάθμιση του shelldio; (y/n) : " update_confirm
374 | case $update_confirm in
375 | [Yy]*)
376 | printf "${BLUE}%s${RESET}\n" "Γίνεται αναβάθμιση του shelldio"
377 | if git pull --rebase --stat origin stable; then
378 | printf "${BLUE}%s${RESET}\n" "Ολοκληρώθηκε η αναβάθμιση του shelldio."
379 | return
380 | else
381 | printf "${RED}%s${RESET}\n" 'Κάποιο πρόβλημα παρουσιάστηκε κατά την αναβάθμιση. Δοκίμασε ξανά αργότερα'
382 | fi
383 | exit
384 | ;;
385 | [Nn]*) exit ;;
386 | *) echo "Παρακαλώ απαντήστε με y (ναι) ή n (όχι)" ;;
387 | esac
388 | }
389 |
390 | ### Λίστα με τις επιλογές σαν 1ο όρισμα shelldio
391 |
392 | while [ "$1" != "" ]; do
393 | case $1 in
394 | [1-9])
395 | clear
396 | break # Συνέχεια στο script για αναπαραγωγή
397 | ;;
398 | -h | --help)
399 | option_detail
400 | exit 0
401 | ;;
402 | -l | --list)
403 | welcome_screen
404 | while true; do
405 | if [ -f "$my_stations" ]; then
406 | read -rp "Θέλετε να εμφανισθούν όλοι οι σταθμοί ή οι αγαπημένοι σας σταθμοί; (a=Όλοι οι σταθμοί | f=Αγαπημένοι):" list_choice
407 | if [ "$list_choice" == "a" ]; then
408 | echo "Εμφάνιση όλων των σταθμών:"
409 | sleep 1
410 | list_stations "$all_stations"
411 | exit 0
412 | elif [ "$list_choice" == "f" ]; then
413 | echo "Εμφάνιση αγαπημένων σταθμών:"
414 | sleep 1
415 | list_stations "$my_stations"
416 | exit 0
417 | else
418 | echo "Λάθος επιλογή, θα πρέπει να γράψετε a ή f και να πατήσετε enter"
419 | fi
420 | else
421 | list_stations "$all_stations"
422 | exit 0
423 | fi
424 | done
425 | ;;
426 | -a | --add)
427 | welcome_screen
428 | validate_station_lists
429 | add_stations
430 | validate_station_lists
431 | exit 0
432 | ;;
433 | -n | --new-station)
434 | welcome_screen
435 | validate_station_lists
436 | new_station
437 | validate_station_lists
438 | exit 0
439 | ;;
440 | -j | --joker)
441 | joker
442 | exit 0
443 | ;;
444 | -r | --remove)
445 | welcome_screen
446 | remove_station
447 | exit 0
448 | ;;
449 | --reset)
450 | reset_favorites
451 | exit 0
452 | ;;
453 | -f | --fresh)
454 | welcome_screen
455 | if [ ! -d "$HOME/.shelldio" ]; then
456 | mkdir "$HOME/.shelldio"
457 | fi
458 | echo "Γίνεται λήψη του αρχείου των σταθμών από το αποθετήριο."
459 | sleep 1
460 | curl -sL https://raw.githubusercontent.com/CerebruxCode/shelldio/stable/.shelldio/all_stations.txt --output "$HOME/.shelldio/all_stations.txt"
461 | exit 0
462 | ;;
463 | -u | --update)
464 | git_updater
465 | ;;
466 | *)
467 | echo "Λάθος επιλογή."
468 | echo "Εκτέλεσε shelldio --help για να δεις τις δυνατές επιλογές!"
469 | exit 0
470 | ;;
471 | esac
472 | done
473 |
474 | ### Base script
475 | # Έλεγχος προαπαιτούμενων binaries
476 | player=$(command -v mpv 2>/dev/null || echo "1")
477 |
478 | if [[ $player = 1 ]]; then
479 | echo "Έλεγχος προαπαιτούμενων για το Shelldio"
480 | sleep 1
481 | echo -e "Το Shelldio χρειάζεται το MPV player αλλά δεν βρέθηκε στο σύστημά σας.\nΠαρακαλούμε εγκαταστήστε το MPV πριν τρέξετε το Shelldio"
482 | mpv_msg
483 | exit 1
484 | fi
485 | for binary in grep curl info sleep clear killall; do
486 | if ! command -v $binary &>/dev/null; then
487 | echo -e "Το Shelldio χρειάζεται το '$binary'\nΠαρακαλούμε εγκαταστήστε το πριν τρέξετε το Shelldio"
488 | exit 1
489 | fi
490 | done
491 |
492 | # Έλεγχος εγκυρότητας λίστας σταθμών
493 | validate_station_lists
494 |
495 | while true; do
496 | terms=0
497 | trap ' [ $terms = 1 ] || { terms=1; kill -TERM -$$; }; exit' EXIT INT HUP TERM QUIT
498 |
499 | if [ -d "$HOME/.shelldio/" ]; then
500 | if [ -f "$my_stations" ]; then
501 | if [ -s "$my_stations" ]; then
502 | stations="$my_stations"
503 | else
504 | stations="$all_stations"
505 | fi
506 | else
507 | if [ ! -f "$all_stations" ]; then
508 | echo "Δεν ήταν δυνατή η εύρεση του αρχείου σταθμών. Γίνεται η λήψη του..."
509 | sleep 2
510 | curl -sL https://raw.githubusercontent.com/CerebruxCode/shelldio/stable/.shelldio/all_stations.txt --output "$HOME/.shelldio/all_stations.txt"
511 | fi
512 | stations="$all_stations"
513 | fi
514 | else
515 | echo "Δημιουργείται ο κρυφός φάκελος .shelldio ο οποίος θα περιέχει τα αρχεία των σταθμών."
516 | sleep 2
517 | mkdir -p "$HOME/.shelldio"
518 | echo "Γίνεται η λήψη του αρχείου με όλους τους σταθμούς."
519 | sleep 2
520 | curl -sL https://raw.githubusercontent.com/CerebruxCode/shelldio/stable/.shelldio/all_stations.txt --output "$HOME/.shelldio/all_stations.txt"
521 | stations="$all_stations"
522 | fi
523 |
524 | while true; do
525 | welcome_screen
526 |
527 | num=0
528 | list_stations "$stations"
529 |
530 | if [ "$#" -eq "0" ]; then # στην περίπτωση που δε δοθεί όρισμα εμφάνισε τη λίστα σταθμών
531 | if [ ! -f "$my_stations" ]; then
532 | echo "Από προεπιλογή η λίστα σταθμών περιέχει όλους τους σταθμούς."
533 | echo "Μπορείς να δημιουργήσεις ένα αρχείο με τους αγαπημένους σου σταθμούς."
534 | echo "shelldio --help για να δεις πως μπορείς να το κάνεις!"
535 | elif [ ! -s "$my_stations" ]; then
536 | echo "Το αρχείο my_stations.txt υπάρχει αλλά είναι κενό."
537 | echo "Θα φορτώσει η λίστα με όλους τους σταθμούς."
538 | echo "Αν θέλεις να προσθέσεις αγαπημένους σταθμούς δοκίμασε την επιλογή add"
539 | echo "shelldio --add"
540 | fi
541 | echo "--------------------------------------------"
542 | read -rp "Διαλέξτε Σταθμό (ή Q/q για έξοδο): " input_play
543 | else
544 | input_play="$1"
545 | shift # αφαιρούμε το cli argument ώστε να μπορεί ζητήσει από STDIN αν δωθεί 'r' στη συνέχεια (reload)
546 | fi
547 |
548 | if [[ $input_play = "q" ]] || [[ $input_play = "Q" ]]; then
549 | echo "Έξοδος..."
550 | tput cnorm # Εμφάνιση cursor
551 | exit 0
552 | elif [ "$input_play" -gt 0 ] && [ "$input_play" -le $num ]; then #έλεγχος αν το input είναι μέσα στο εύρος της λίστας των σταθμών
553 | station=$(sed "${input_play}q;d" "$stations")
554 | selected_play=$input_play # για να εμφανίζει το αριθμό που επέλεξε ο χρήστης στον Player UI
555 | stathmos_name=$(echo "$station" | cut -d "," -f1)
556 | stathmos_url=$(echo "$station" | cut -d "," -f2)
557 | break
558 | else
559 | echo "Αριθμός εκτός λίστας"
560 | sleep 1
561 | clear
562 | fi
563 | done
564 |
565 | mpv "$stathmos_url" &>/dev/null &
566 |
567 | while true; do
568 | trap '{ clear; echo "Έξοδος..."; tput cnorm; exit 1; }' SIGINT
569 | clear
570 | info
571 | sleep 0
572 | read -r -n1 -t1 input_play # Για μικρότερη αναμονή της read
573 | if [[ $input_play = "q" ]] || [[ $input_play = "Q" ]]; then
574 | clear
575 | echo "Έξοδος..."
576 | tput cnorm # Εμφάνιση cursor
577 | exit 0
578 | elif [[ $input_play = "r" ]] || [[ $input_play = "R" ]]; then
579 | for pid in $(pgrep '^mpv$'); do
580 | url="$(ps -o command= -p "$pid" | awk '{print $2}')"
581 | if [[ "$url" == "$stathmos_url" ]]; then
582 | echo "Έξοδος..."
583 | tput cnorm # Εμφάνιση cursor
584 | kill "$pid"
585 | else
586 | printf "Απέτυχε ο αυτόματος τερματισμός. \nΠάτα τον συνδυασμό Ctrl+C ή κλείσε το τερματικό \nή τερμάτισε το Shelldio απο τις διεργασίες του συστήματος"
587 | fi
588 | done
589 | clear
590 | echo "Επιστροφή στη λίστα σταθμών"
591 | tput cnorm # Εμφάνιση cursor
592 | sleep 1
593 | clear
594 | break
595 | fi
596 |
597 | done
598 |
599 | done
600 |
--------------------------------------------------------------------------------
/template/PKGBUILD:
--------------------------------------------------------------------------------
1 | # Maintainer: Cerebrux
2 | pkgname=shelldio
3 | pkgver=4.2.0
4 | pkgrel=1
5 | pkgdesc="KISS Shell Radio (Greek) for your terminal"
6 | arch=('any')
7 | url="https://github.com/CerebruxCode/Shelldio"
8 | license=('GPL3')
9 | depends=('mpv' 'curl')
10 | install=shelldio.install
11 | source=("${pkgname}-${pkgver}.tar.gz::https://github.com/CerebruxCode/shelldio/archive/v${pkgver}.tar.gz")
12 |
13 | package() {
14 | cd "$pkgname-$pkgver"
15 | install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
16 | install -Dm755 shelldio.sh "$pkgdir/usr/bin/shelldio"
17 | }
18 |
19 | md5sums=('SKIP')
20 |
--------------------------------------------------------------------------------