basic code
This commit is contained in:
		
							parent
							
								
									f7c577fa9f
								
							
						
					
					
						commit
						3661cf237d
					
				
					 11 changed files with 300 additions and 0 deletions
				
			
		
							
								
								
									
										3
									
								
								ChangeLog.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								ChangeLog.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
# Changelog for wnpClient
 | 
			
		||||
 | 
			
		||||
## Unreleased changes
 | 
			
		||||
							
								
								
									
										30
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
Copyright Author name here (c) 2021
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 | 
			
		||||
    * Redistributions of source code must retain the above copyright
 | 
			
		||||
      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 | 
			
		||||
    * Redistributions in binary form must reproduce the above
 | 
			
		||||
      copyright notice, this list of conditions and the following
 | 
			
		||||
      disclaimer in the documentation and/or other materials provided
 | 
			
		||||
      with the distribution.
 | 
			
		||||
 | 
			
		||||
    * Neither the name of Author name here nor the names of other
 | 
			
		||||
      contributors may be used to endorse or promote products derived
 | 
			
		||||
      from this software without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
							
								
								
									
										1
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
# wnpClient
 | 
			
		||||
							
								
								
									
										2
									
								
								Setup.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Setup.hs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
import Distribution.Simple
 | 
			
		||||
main = defaultMain
 | 
			
		||||
							
								
								
									
										61
									
								
								app/Main.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								app/Main.hs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
module Main where
 | 
			
		||||
 | 
			
		||||
import Control.Monad
 | 
			
		||||
import Control.Exception
 | 
			
		||||
import System.IO
 | 
			
		||||
import System.Directory
 | 
			
		||||
import Network.HTTP.Client
 | 
			
		||||
import Network.HTTP.Simple
 | 
			
		||||
import Network.URI
 | 
			
		||||
import qualified Data.ByteString.Char8 as B8
 | 
			
		||||
import GHC.IO.Encoding (setLocaleEncoding)
 | 
			
		||||
import Lib
 | 
			
		||||
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = do
 | 
			
		||||
    setLocaleEncoding utf8
 | 
			
		||||
    forever $ do 
 | 
			
		||||
        line <-  getLine 
 | 
			
		||||
        dispatch line
 | 
			
		||||
 | 
			
		||||
dispatch :: String -> IO ()
 | 
			
		||||
dispatch ('T':'I':'T':'L':'E':':':title) = writeToFile title 0
 | 
			
		||||
dispatch ('A':'R':'T':'I':'S':'T':':':artist) = writeToFile artist 1
 | 
			
		||||
dispatch ('A':'L':'B':'U':'M':':':album) = writeToFile album 2
 | 
			
		||||
dispatch ('C':'O':'V':'E':'R':':':cover) = handleCover cover
 | 
			
		||||
dispatch _ =  return () 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
writeToFile:: String -> Int  -> IO()
 | 
			
		||||
writeToFile text position= do  
 | 
			
		||||
    contents <- lines <$> readFile filename
 | 
			
		||||
    let newContent = unlines $ take position contents ++ [text] ++ drop (position+1) contents
 | 
			
		||||
    bracketOnError (openTempFile "." "temp") 
 | 
			
		||||
        (\(tempName,tempHandle) -> do
 | 
			
		||||
            hClose tempHandle
 | 
			
		||||
            removeFile tempName)
 | 
			
		||||
        (\(tempName,tempHandle) -> do
 | 
			
		||||
            hPutStr tempHandle newContent
 | 
			
		||||
            hClose tempHandle
 | 
			
		||||
            renameFile tempName filename)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
handleCover :: String -> IO ()
 | 
			
		||||
handleCover url= do
 | 
			
		||||
        contents <- lines <$> readFile filename
 | 
			
		||||
        when ((contents !! 3 ) /= url && url /= "") $ do
 | 
			
		||||
            writeToFile (url) 3
 | 
			
		||||
            request <- parseRequest url
 | 
			
		||||
            let fileName = Prelude.last . pathSegments . getUri $ request
 | 
			
		||||
            resp <- httpBS request
 | 
			
		||||
            B8.writeFile coverName  $ getResponseBody resp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
filename :: FilePath 
 | 
			
		||||
filename= "wnpClient.txt"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
coverName :: FilePath 
 | 
			
		||||
coverName="cover.jpg"
 | 
			
		||||
							
								
								
									
										48
									
								
								package.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								package.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
name:                wnpClient
 | 
			
		||||
version:             0.1.0.0
 | 
			
		||||
github:              "githubuser/wnpClient"
 | 
			
		||||
license:             BSD3
 | 
			
		||||
author:              "Author name here"
 | 
			
		||||
maintainer:          "example@example.com"
 | 
			
		||||
copyright:           "2021 Author name here"
 | 
			
		||||
 | 
			
		||||
extra-source-files:
 | 
			
		||||
- README.md
 | 
			
		||||
- ChangeLog.md
 | 
			
		||||
 | 
			
		||||
# Metadata used when publishing your package
 | 
			
		||||
# synopsis:            Short description of your package
 | 
			
		||||
# category:            Web
 | 
			
		||||
 | 
			
		||||
# To avoid duplicated efforts in documentation and dealing with the
 | 
			
		||||
# complications of embedding Haddock markup inside cabal files, it is
 | 
			
		||||
# common to point users to the README.md file.
 | 
			
		||||
description:         Please see the README on GitHub at <https://github.com/githubuser/wnpClient#readme>
 | 
			
		||||
 | 
			
		||||
dependencies:
 | 
			
		||||
- base >= 4.7 && < 5
 | 
			
		||||
 | 
			
		||||
library:
 | 
			
		||||
  source-dirs: src
 | 
			
		||||
 | 
			
		||||
executables:
 | 
			
		||||
  wnpClient:
 | 
			
		||||
    main:                Main.hs
 | 
			
		||||
    source-dirs:         app
 | 
			
		||||
    ghc-options:
 | 
			
		||||
    - -threaded
 | 
			
		||||
    - -rtsopts
 | 
			
		||||
    - -with-rtsopts=-N
 | 
			
		||||
    dependencies:
 | 
			
		||||
    - wnpClient
 | 
			
		||||
 | 
			
		||||
tests:
 | 
			
		||||
  wnpClient-test:
 | 
			
		||||
    main:                Spec.hs
 | 
			
		||||
    source-dirs:         test
 | 
			
		||||
    ghc-options:
 | 
			
		||||
    - -threaded
 | 
			
		||||
    - -rtsopts
 | 
			
		||||
    - -with-rtsopts=-N
 | 
			
		||||
    dependencies:
 | 
			
		||||
    - wnpClient
 | 
			
		||||
							
								
								
									
										6
									
								
								src/Lib.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/Lib.hs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
module Lib
 | 
			
		||||
    ( someFunc
 | 
			
		||||
    ) where
 | 
			
		||||
 | 
			
		||||
someFunc :: IO ()
 | 
			
		||||
someFunc = putStrLn "someFunc"
 | 
			
		||||
							
								
								
									
										67
									
								
								stack.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								stack.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
# This file was automatically generated by 'stack init'
 | 
			
		||||
#
 | 
			
		||||
# Some commonly used options have been documented as comments in this file.
 | 
			
		||||
# For advanced use and comprehensive documentation of the format, please see:
 | 
			
		||||
# https://docs.haskellstack.org/en/stable/yaml_configuration/
 | 
			
		||||
 | 
			
		||||
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
 | 
			
		||||
# A snapshot resolver dictates the compiler version and the set of packages
 | 
			
		||||
# to be used for project dependencies. For example:
 | 
			
		||||
#
 | 
			
		||||
# resolver: lts-3.5
 | 
			
		||||
# resolver: nightly-2015-09-21
 | 
			
		||||
# resolver: ghc-7.10.2
 | 
			
		||||
#
 | 
			
		||||
# The location of a snapshot can be provided as a file or url. Stack assumes
 | 
			
		||||
# a snapshot provided as a file might change, whereas a url resource does not.
 | 
			
		||||
#
 | 
			
		||||
# resolver: ./custom-snapshot.yaml
 | 
			
		||||
# resolver: https://example.com/snapshots/2018-01-01.yaml
 | 
			
		||||
resolver:
 | 
			
		||||
  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/0.yaml
 | 
			
		||||
 | 
			
		||||
# User packages to be built.
 | 
			
		||||
# Various formats can be used as shown in the example below.
 | 
			
		||||
#
 | 
			
		||||
# packages:
 | 
			
		||||
# - some-directory
 | 
			
		||||
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
 | 
			
		||||
#   subdirs:
 | 
			
		||||
#   - auto-update
 | 
			
		||||
#   - wai
 | 
			
		||||
packages:
 | 
			
		||||
- .
 | 
			
		||||
# Dependency packages to be pulled from upstream that are not in the resolver.
 | 
			
		||||
# These entries can reference officially published versions as well as
 | 
			
		||||
# forks / in-progress versions pinned to a git hash. For example:
 | 
			
		||||
#
 | 
			
		||||
# extra-deps:
 | 
			
		||||
# - acme-missiles-0.3
 | 
			
		||||
# - git: https://github.com/commercialhaskell/stack.git
 | 
			
		||||
#   commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
 | 
			
		||||
#
 | 
			
		||||
# extra-deps: []
 | 
			
		||||
 | 
			
		||||
# Override default flag values for local packages and extra-deps
 | 
			
		||||
# flags: {}
 | 
			
		||||
 | 
			
		||||
# Extra package databases containing global packages
 | 
			
		||||
# extra-package-dbs: []
 | 
			
		||||
 | 
			
		||||
# Control whether we use the GHC we find on the path
 | 
			
		||||
# system-ghc: true
 | 
			
		||||
#
 | 
			
		||||
# Require a specific version of stack, using version ranges
 | 
			
		||||
# require-stack-version: -any # Default
 | 
			
		||||
# require-stack-version: ">=2.5"
 | 
			
		||||
#
 | 
			
		||||
# Override the architecture used by stack, especially useful on Windows
 | 
			
		||||
# arch: i386
 | 
			
		||||
# arch: x86_64
 | 
			
		||||
#
 | 
			
		||||
# Extra directories used by stack for building
 | 
			
		||||
# extra-include-dirs: [/path/to/dir]
 | 
			
		||||
# extra-lib-dirs: [/path/to/dir]
 | 
			
		||||
#
 | 
			
		||||
# Allow a newer minor version of GHC than the snapshot specifies
 | 
			
		||||
# compiler-check: newer-minor
 | 
			
		||||
							
								
								
									
										13
									
								
								stack.yaml.lock
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								stack.yaml.lock
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
# This file was autogenerated by Stack.
 | 
			
		||||
# You should not edit this file by hand.
 | 
			
		||||
# For more information, please see the documentation at:
 | 
			
		||||
#   https://docs.haskellstack.org/en/stable/lock_files
 | 
			
		||||
 | 
			
		||||
packages: []
 | 
			
		||||
snapshots:
 | 
			
		||||
- completed:
 | 
			
		||||
    size: 585393
 | 
			
		||||
    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/0.yaml
 | 
			
		||||
    sha256: c632012da648385b9fa3c29f4e0afd56ead299f1c5528ee789058be410e883c0
 | 
			
		||||
  original:
 | 
			
		||||
    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/0.yaml
 | 
			
		||||
							
								
								
									
										2
									
								
								test/Spec.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/Spec.hs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
main :: IO ()
 | 
			
		||||
main = putStrLn "Test suite not yet implemented"
 | 
			
		||||
							
								
								
									
										67
									
								
								wnpClient.cabal
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								wnpClient.cabal
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
cabal-version: 1.12
 | 
			
		||||
 | 
			
		||||
-- This file has been generated from package.yaml by hpack version 0.33.0.
 | 
			
		||||
--
 | 
			
		||||
-- see: https://github.com/sol/hpack
 | 
			
		||||
--
 | 
			
		||||
-- hash: c142288eb64afa7fc89ef6a62257e792bf121215dc61ec643f21fcae99ad5e5a
 | 
			
		||||
 | 
			
		||||
name:           wnpClient
 | 
			
		||||
version:        0.1.0.0
 | 
			
		||||
description:    Please see the README on GitHub at <https://github.com/githubuser/wnpClient#readme>
 | 
			
		||||
homepage:       https://github.com/githubuser/wnpClient#readme
 | 
			
		||||
bug-reports:    https://github.com/githubuser/wnpClient/issues
 | 
			
		||||
author:         Author name here
 | 
			
		||||
maintainer:     example@example.com
 | 
			
		||||
copyright:      2021 Author name here
 | 
			
		||||
license:        BSD3
 | 
			
		||||
license-file:   LICENSE
 | 
			
		||||
build-type:     Simple
 | 
			
		||||
extra-source-files:
 | 
			
		||||
    README.md
 | 
			
		||||
    ChangeLog.md
 | 
			
		||||
 | 
			
		||||
source-repository head
 | 
			
		||||
  type: git
 | 
			
		||||
  location: https://github.com/githubuser/wnpClient
 | 
			
		||||
 | 
			
		||||
library
 | 
			
		||||
  exposed-modules:
 | 
			
		||||
      Lib
 | 
			
		||||
  other-modules:
 | 
			
		||||
      Paths_wnpClient
 | 
			
		||||
  hs-source-dirs:
 | 
			
		||||
      src
 | 
			
		||||
  build-depends:
 | 
			
		||||
      base >=4.7 && <5
 | 
			
		||||
  default-language: Haskell2010
 | 
			
		||||
 | 
			
		||||
executable wnpClient
 | 
			
		||||
  main-is: Main.hs
 | 
			
		||||
  other-modules:
 | 
			
		||||
      Paths_wnpClient
 | 
			
		||||
  hs-source-dirs:
 | 
			
		||||
      app
 | 
			
		||||
  ghc-options: -threaded -rtsopts -with-rtsopts=-N
 | 
			
		||||
  build-depends:
 | 
			
		||||
      base >=4.7 && <5
 | 
			
		||||
    , wnpClient
 | 
			
		||||
    , directory
 | 
			
		||||
    , http-client
 | 
			
		||||
    , network-uri
 | 
			
		||||
    , http-conduit
 | 
			
		||||
    , bytestring
 | 
			
		||||
  default-language: Haskell2010
 | 
			
		||||
 | 
			
		||||
test-suite wnpClient-test
 | 
			
		||||
  type: exitcode-stdio-1.0
 | 
			
		||||
  main-is: Spec.hs
 | 
			
		||||
  other-modules:
 | 
			
		||||
      Paths_wnpClient
 | 
			
		||||
  hs-source-dirs:
 | 
			
		||||
      test
 | 
			
		||||
  ghc-options: -threaded -rtsopts -with-rtsopts=-N
 | 
			
		||||
  build-depends:
 | 
			
		||||
      base >=4.7 && <5
 | 
			
		||||
    , wnpClient
 | 
			
		||||
  default-language: Haskell2010
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue